DNS関連のログに迫ってみる。 Sysmon | MS:AD:DNS | Stream(DNS)


はじめに

  • 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)のみ記録された。

ケース④: エンドポイントにて、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クエリを行うプロセスを特定できる可能性があります。

おまけ