セキュリティ運用

Remote Desktop Protocol:4624_4625 ログインクエリの実行

誰がネットワークに侵入しようとしているのかに目を光らせておくことは、侵入の試みの成功・失敗にかかわらず、多くの場面で有益です。

** 本記事は、Remote Desktop Protocol: Executing the 4624_4625 Login Query の翻訳です。最新の情報は英語記事をご覧ください。**

4624_4625 ログインイベントクエリは、防御者、特にアナリストが成功した RDP ログイン (Windows セキュリティログイベント 4624) と失敗した RDP ログイン (Windows セキュリティログイベント 4625) を識別するための有用なツールとなります。これらのイベントは、システム、ドメインコントローラー、およびワークステーションによって生成されます。

これらの Windows イベントは、もちろんイベントビューアでも確認できますが、本記事 (および YouTube チャンネルに掲載した関連ビデオ) では Sophos Central を使用した分析を実演します。以下で使用する SQL クエリは、Github からどなたでも入手できます。

クエリの構築と実行

今回扱う SQL クエリは以下のようなものです。

SELECT
strftime('%Y-%m-%dT%H:%M:%SZ',datetime) AS date_time,
eventid AS EventID,
CASE
WHEN eventid = 4624 THEN eventid || ' - Successful Login'
WHEN eventid = 4625 THEN eventid || ' - Failed login'
END AS Description,
'Security' AS Source,
JSON_EXTRACT(data, '$.EventData.TargetUserName') AS Target_User,
JSON_EXTRACT(data, '$.EventData.WorkstationName') AS Source_Machine_Network,
JSON_EXTRACT(data, '$.EventData.IpAddress') AS Source_IP,
JSON_EXTRACT(data, '$.EventData.ProcessName') AS Process_Name,
JSON_EXTRACT(data, '$.EventData.LogonType') AS Logon_Type,
JSON_EXTRACT(data, '$.EventData.TargetUserSid') AS Target_User_SID,
JSON_EXTRACT(data, '$.EventData.Status') AS Logon_Status_Code,
JSON_EXTRACT(data, '$.EventData.TargetDomainName') AS Target_Domain_Name,
JSON_EXTRACT(data, '$.EventData.AuthenticationPackageName') AS Authentication_package,
NULL AS SessionID,
NULL AS Session_ID,
'Security EVTX' AS Data_Source,
'Logins.01.1' AS Query
FROM sophos_windows_events
WHERE source = 'Security'
AND (eventid = 4624 OR eventid = 4625)
AND JSON_EXTRACT(data, '$.EventData.TargetUserName') LIKE '$$username$$'
AND JSON_EXTRACT(data, '$.EventData.IpAddress') LIKE '$$source_ip$$'
AND JSON_EXTRACT(data, '$.EventData.WorkstationName') LIKE '$$workstation$$'
AND time > 0

Sophos Central でこの操作を実行するには、次の場所に移動してください。

[脅威解析センター] > [Live Discover] > [デザイナーモード]

さらに、図 1 に示すように [新しいクエリの作成] ボタンをクリックします。

A screen capture showing the creation of a new query in Live Discover

図 1: デザイナーモード画面でのクエリの作成。クエリの新規作成ボタンは画面中央付近の右側にあります。

ボタンをクリックすると、SQL ボックスが表示されるので、そこにクエリを貼り付けます。

このクエリには 2 つの変数がある点に注意してください。1 つは対象となるユーザー名 (username)、もう 1 つはアクセスを試みるエンティティの IP アドレス (source_ip) です。これらはいずれも文字列です。クエリが可能な限り多くの結果を返すように、これらの変数にはワイルドカードを含める必要があります。(ソフォスのインシデント対応調査員が業務でこのクエリを使用する際には、原則としてネットワーク上のすべての Windows デバイスに対して実行しています。初めての実行時、およびその後も随時実行することで、ネットワーク上で何が起きているかを幅広く把握できます。)

ネットワークのすべてのデバイスに対してクエリを実行するには、クエリが貼り付けられているボックスのすぐ上にある変数エディタで、これら 2 つの変数を編集します。[変数エディタを表示] をクリックし、さらに [+ 変数の追加] をクリックします。[変数名] 欄に、最初の変数名 (username) を入力してください。データ型 (String) と SQL 変数名 ($$username$$) は自動で入力されます。次の行に、2 番目の変数 ($$source_ip$$) も同じように入力してください。図 2 に示すように、右側にはワイルドカードを示すパーセント記号 (%) を追加します。

Editing the variable in the query

図 2: パーセンテージ記号を入力すれば編集はほぼ完了です。

次に、Filters エリアまでスクロールし、クエリを実行するマシンを選択します。(クエリは Windows のイベントであり、ネットワーク内の macOS や Linux マシンで実行しても意味がないため、フィルタリングする必要があります。)[オンラインステータス](列の一番上) の隣にあるチェックボックスをクリックすると、すべてが選択されます。[選択されたデバイスの更新] をクリックして確認してください。

変数とフィルターが設定されたら、[クエリの実行] をクリックし、システムから未テストのクエリ実行に対する確認画面が表示されたら再度クリックしてください。クエリが実行されます。完了するまでの時間はもちろん、環境の規模、接続速度、そして何よりもイベントログの大きさによって異なります。いずれにせよ、実行が完了すると、結果のテーブルが出力されます。もちろん、Sophos Central でもこれらの情報は確認できますが、CSV ファイルにエクスポートすることで、お好みのスプレッドシートエディタでも確認できます。

結果を理解する

どのように結果を確認するにしても、いくつかのフィールドが注目に値します。

クエリ結果の概要
epName エンドポイント名
date_time クエリされたログに記録されたイベントの UTC フォーマットでの時刻。date_time でソートすることで、予期しない時刻に発生した活動を特定できます
EventID 接続に成功した (4624) か失敗した (4625) か
Source これらのクエリ結果が発見されたログ
Username 接続が試行されたときに指定されたユーザー名。RDP を試みるべきではないユーザーや、組織の「命名方式」に合わないユーザー名を確認する価値があります。(たとえば、組織内ではシステム管理者アカウントを「Administrator」としている場合、「ADMINISTRATOR」や「admin」などの表記は注意を引くはずです。)
Source_Machine_Network 接続した (あるいはしようとした) ホストの実際の名前。見覚えがない名前、あるいは組織の命名方式に合わない名前は、おそらくさらなる調査が必要です
Source_IP 発信元 IP アドレス。組織内部からのものでない (つまり、RFC1819 以外の接続かつリモート IP アドレスである) 場合、精査が必要です
Logon_Type Microsoft は、さまざまなタイプのログインに 12 種類のコードを割り当てています。この場合、RDP の不正使用を調べる調査員は、タイプ 3 (NLA を経たものを含むネットワークログイン)、タイプ 7 (ワークステーションのロックが解除されたことを示します。このイベントに関連する IP フィールドがリモートアドレスであれば、疑わしいログオンです)、またはタイプ 10 (ターミナルサービスまたは RDP を使用したリモートログイン) に注意することが多いでしょう。

上の表では、このクエリで返された結果に基づいて、さらに調査すべき根拠をいくつか挙げています。さらに、その根拠はもう一つあります。このクエリは、RDP の公開に関する潜在的な問題を発見できますが、SMB など、早急な対応が必要な他の何かを発見する可能性もあります。

2024 年現在 (EternalBlue と WannaCry の登場から丸 7 年)、上述のように共有フォルダやドライブをインターネットに公開しておく正当な理由はありません。しかし、インシデント対応チームが 2022 年および 2023 年に扱った事例の 5 件に 1 件には、SMB の不正使用の痕跡がありました。この数字は、ソフォスの IR での調査結果における RDP の圧倒的な優位性 (事例の 90% 以上に RDP 関連の調査結果が含まれます) には及ばないものの、このようなクエリを定期的に実行して組織のログを監視することで、注目に値する結果が実際に得られることを示しています。

Remote Desktop Protocol:記事一覧

パート 1:イントロダクション ([本記事]、動画)
パート 2:公開されている RDP の危険性 (記事動画)
パート 3:調査でのクエリ活用 (記事動画)
パート 4:タイムゾーンバイアスの使い方 (記事動画)
パート 5:外部 RDP クエリの実行 (記事動画)
パート 6:4624_4625 ログインクエリの実行 (記事動画)
GitHub のクエリリポジトリ: SophosRapidResponse/OSQuery
スクリプトのリポジトリ: sophoslabs/video-transcripts
Youtube のプレイリスト: Remote Desktop Protocol: The Series

コメントを残す

Your email address will not be published. Required fields are marked *