はじめに
- sysmonにdnsクエリログが出力されるようになって(2019.06)からようやっと検証することができました。
- (Win2012Serverの検証環境ではsysmonにDNSイベントが記録されなかったため。後回しにしていましたが、ようやくWin10とWin2019Serverの環境を準備できました)
- 検証きっかけは以下の良記事をみて、splunkで各種DNS関連のログを比較して見てみたくなり試してみました
- せっかくなのでちまたでよく使われるDNSログ収集先2種も合わせて比較
- Splunk Stream DNS:ネットワークLayer
- Active DirectoryサーバのDNSログ:サーバLayer
- Sysmon:エンドポイントLayer
構成イメージ

- 余談だが、Splunk Streamは収集ポイントによって①クライアント→DNSサーバ間、②DNSサーバ→上位DNSサーバ間のクエリログも取得できる。今回はActive Directoryサーバ上のNICにIN/OUTするトラフィックをモニターして収集したため、①②両方のDNSクエリログを収集。
検証データ
ケース①: エンドポイントにて、[blackhat.com]ページをGoogleChromeで表示

- SPLは3つのデータソースを一度に検索して必要なフィールドにtableコマンドで絞った結果を出力比較
SPL
(source=win*sysmon* OR sourcetype=stream:dns OR sourcetype="msad:nt6:dns") blackhat.com earliest=1588339080 latest=1588339110
|eval bytes_size = len(_raw)
|table _time bytes_size sourcetype Image query QueryName host_addr{} QueryResults questiontype record_type QueryStatus
- 各DNSログの見え方を整理

ケース②: エンドポイントにて、[blackhat.com]ページをcmd上でpingを実施

- SPLは3つのデータソースを一度に検索して必要なフィールドにtableコマンドで絞った結果を出力比較
SPL
(source=win*sysmon* OR sourcetype=stream:dns OR sourcetype="msad:nt6:dns") blackhat.com earliest=1588339864 latest=1588340164
|eval bytes_size = len(_raw)
|table _time bytes_size sourcetype EventID Image CommandLine query QueryName host_addr{} QueryResults questiontype record_type QueryStatus
- SPL結果(ケース①と差はない)

ケース③: エンドポイントにて、[blackhat.com]とnslookupコマンドで実行

- SPLは3つのデータソースを一度に検索して必要なフィールドにtableコマンドで絞った結果を出力比較
SPL
(source=win*sysmon* OR sourcetype=stream:dns OR sourcetype="msad:nt6:dns") blackhat.com earliest=1588340403 latest=1588340523
|eval bytes_size = len(_raw)
|table _time bytes_size sourcetype EventID Image CommandLine query QueryName host_addr{} QueryResults questiontype record_type QueryStatus
- SPL結果

- sysmonイベントはあるが、実はDNSクエリイベント(EventCode=22)ではなく、Process Creation(EventCode=1)のみ記録された。

- nslookupコマンドはDnsQuery_A等のAPIを利用していないためsysmonのdnsクエリイベントに記録されなかった模様。
ケース④: エンドポイントにて、Powershellスクリプトを実行

- ポイントはpoweshellスクリプトのencodeされた文字列の中にもC&Cサーバに対するCallBack URL(AWSのパブリックDNS名)が記載されています。

- SPLは3つのデータソースを一度に検索して必要なフィールドにtableコマンドで絞った結果を出力比較
SPL
(source=win*sysmon* OR sourcetype=stream:dns OR sourcetype="msad:nt6:dns") ec2-13-52-103-131.us-west-1.compute.amazonaws.com earliest=1588817760 latest=1588817784
|eval bytes_size = len(_raw)
|table _time bytes_size sourcetype EventID Image CommandLine query QueryName host_addr{} QueryResults questiontype record_type QueryStatus
|sort - _time
- SPL結果
- sysmonのみに拡大

- 一番上のイベントがsysmonデータです。powershell.exeがDNSクエリーをかけていることが分かります。つまり不審なドメインアクセス調査を行う際に、sysmonのログから影響のある端末のリストアップと、DNSクエリを行うプロセスを特定できる可能性があります。
おまけ
-
sysmon v10以降を使ってDNSクエリを収集する際に利用してもらいやすいように以下2つのアイテムを紹介
- sysmonダッシュボード(DNSクエリ対応)
- sysmonのconfig(splunkプロセスのロギングを除外)
-
sysmon(dnsクエリ)はいい仕事してくれそうです
