🦈

Wireshark でマルウェアパケットを解析する準備

2022/01/25に公開

1.はじめに

マルウェアのパケット解析をする準備として、Palo Alto Networks - Unit42 のBrad Duncan 氏のWireshark チュートリアルを進めた際の備忘録です。

環境

  • Wireshark: v3.6.0-1

2.事前準備

言語変更

以下よりJapanese を選択して日本語化します。
"Edit" --> "Preferences" --> "Appearance" --> "Language"

カラム表示のカスタマイズ

Wireshark Tutorial: Changing Your Column Display を参考にカラム表示をカスタマイズし見やすくします。

  1. No./Protocol/Length カラムの削除
    ※私はポート番号とプロトコルの組み合わせ忘れるので、"Protocol"カラムは削除せずに都度表示/非表示を切り替えています。
  2. Source Port/Destination Port カラムの追加
  3. Time カラムの表示をUTC へ変更
  4. カスタムカラムとして、Host/Server Name の追加


変更後のカラム

3.使い方の確認

Statics(統計)

パケットの統計を表示する機能です。"統計"タブより複数の統計から種類を選択して確認、保存できます。

使い方

-->キャプチャファイルプロパティ

pcap ファイルの概要を表示します。



-->プロトコル階層

pcap ファイル内すべてのプロトコルのツリーを表示します。
全体に対してのパケット数やバイト数の割合を確認できます。



-->フローグラフ

パケットの流れを視覚的に表示します。



-->入出力グラフ

表示フィルタを適用したパケットI/O の時間変化をグラフ化します。

参考:
3.11. The “Statistics” Menu

Display Filter(表示フィルタ)

キャプチャしたパケットを絞り込んで表示する機能です。
例えば「tcp」と指定するとTCP プロトコルのパケットだけを表示してくれます。Wireshark Tutorial: Display Filter Expressions を参考に使い方を確認します。
displayfilter1
表示フィルタ

使い方

-->比較演算子

フィルタ値に対して比較演算子を使用できます。

English Alias C-like Description Example
eq any_eq == Equal(any if more than one) ip.src == 10.0.0.5
ne all_ne != Not equal (all if more than one) ip.src != 10.0.0.5
gt > Greater than frame.len > 10
lt < Less than frame.len < 128
ge >= Greater than or equal to frame.len ge 0x100
le <= Less than or equal to frame.len <= 0x20
contains Protocol, field or slice contains a value sip.To contains "a1762"
matches ~ Protocol or text field matches a Perl-compatible regular expression http.host matches "acme\.(org
bitwise_and & Bitwise AND is non-zero tcp.flags & 0x02




-->フィルタ値の組み合わせ

ブール式を使用して、フィルタ値を組み合わせることができます。
代表的なものを表に記載します。

English C-like Description Example
and $$ Logical AND http.request && ip.addr == 192.168.10.195
or || Logical OR dns.qry.name contains microsoft or dns.qry.name contains windows
not ! Logical NOT !(ip.addr eq 192.168.10.1)




-->フィルタリングの例

  • Web トラフィックをクイックに確認
http.request or ssl.handshake.type == 1


  • TCP SYN flag でフィルタ(マルウェア感染端末の接続試行を確認)
tcp.flags eq 0x0002


  • 暗号化されていないSMTP トラフィックの探索
smtp contains "From: "
smtp contains "Message-ID: "
smtp contains "Subject: "




-->フィルタの保存

使用したフィルタを保存することができます。


  1. 表示フィルタバー右側の「プラス」ボタンを押します。

  2. 表示されるフィールドを埋めて"OK"ボタンで保存します。

    • Label(ラベル)
    • Filter(フィルタ)
    • Comment(コメント)


ホストとユーザーの識別

Wireshark Tutorial: Identifying Hosts and Users を参考にパケットキャプチャよりマルウェア感染したホストや侵害されたユーザーを特定する方法を確認します。

使い方

-->DHCP トラフィックからのホスト情報探索

dhcp でフィルタし、"Info"カラムが「DHCP Request」のパケットからMAC アドレスとホスト名の情報をPacket Details ペインより確認します。


  • MAC アドレス:
    "Bootstrap Protocol (Request)" --> "Client Identifier" --> "Client MAC address"
  • ホスト名:
    "Bootstrap Protocol (Request)" --> "Host Name" --> "Host Name"




-->NetBIOS ネームサービス(NBNS)トラフィックからのホスト情報探索

NBNS は、Windows ネットワーク内の名前解決を行うプロトコルです。
nbns でフィルタしMAC アドレスとホスト名の情報を確認します。





-->HTTP トラフィックからのデバイスモデルとOS 情報探索

- Windows

HTTP のUser-Agent ヘッダーからOS を識別できる場合があります。

User-agent Windows モデル
Windows NT 5.1 Windows XP
Windows NT 6.0 Windows Vista
Windows NT 6.1 Windows 7
Windows NT 6.2 Windows 8
Windows NT 6.3 Windows 8.1
Windows NT 10.0 Windows 10



また、近頃はUser-Agent ではなくUser-Agent Client Hints によるデバイスの識別が推奨されています。Windows 10/11はこの情報を見て識別できます。

Header Windows 10 Windows 11
Sec-CH-UA-Platform Windows Windows
Sec-CH-UA-Platform-Version 1.0.0 ~ 10.0.0 13.0.0以上


- Android

Android デバイスであればUser-Agent からデバイス製造元とモデルを確認できます。
例えば以下の場合は、Android OS 7.1.2でモデルがLM-X210APM のLG 製スマホです。

User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.2; LM-X210APM Build/N2G47H)


- Apple

Apple 製のデバイスはUser-Agent からOS や、iPhone、iPad、iPod などデバイスの種類が判別できます。ただしデバイスのモデルはわかりません。


以下の場合は、デバイスがiPhone でiOS 12.1.3です。

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1






-->Kerberos トラフィックからのWindows ユーザーアカウント情報探索

AD 環境のWindows ホストの場合、Kerberos トラフィックからユーザーアカウント名を見つけることができます。ホスト名のCNameString には末尾に$が含まれるため、フィルタで除外することでユーザーアカウント名でフィルタリングできます。

kerberos.CNameString and !(kerberos.CNameString contains $)


探索する際はCNameString カラムを追加して確認します。

題名 種別 フィールド
CNameString Custom kerberos.CNameString

参考:
User-AgentClientヒントを使用してWindows11を検出する
Sec-CH-UA-Platform
Sec-CH-UA-Platform-Version

オブジェクトのエクスポート

Wireshark Tutorial: Exporting Objects from a Pcap を参考にpcap からさまざまなオブジェクトをエクスポートする方法を確認します。

使い方

"ファイル" --> "オブジェクトをエクスポート" --> エクスポート対象プロトコルを選択

HTTP オブジェクトのエクスポート




  • SMB オブジェクトは、「コンテントタイプ」カラムに表示される数字が[100.00%]なければいけません。100%を下回っている場合はファイルの破損や不完全なコピーです。

    SMB オブジェクトのエクスポート



  • IMF オブジェクトとしてEML file をエクスポートします。取得したファイルはテキストエディタやEmail クライアントにインポートし確認します。

    IMF オブジェクトのエクスポート




  • FTP オブジェクトは「オブジェクトをエクスポート」機能を使用することはできませんが、以下の手順で取得することができます。
        1. ftp-dataでフィルタし、FTP のデータ転送のパケットをフィルタリングする。
        2. 対象データが含まれるパケットを右クリック --> "追跡" --> "TCP ストリーム"
        3. 「...として保存」ボタンを押してファイルを保存する。


FTP オブジェクトのエクスポート

HTTPS トラフィックの復号

pcap ファイルから HTTPS トラフィックを復号する方法を確認します。

使い方

複合していない場合は平文を確認できません。

複合していない場合

複合するにはいずれかを用意する必要があります。

  • pre-master-secret log
  • RSA secret key



"編集" --> "設定" --> "Protocols" --> "TLS" で対応する鍵をインポートすることで複合して平文のデータを確認できます。

今回はpre-master-secret log セッションキーで複合してみます。

TLS セッションキーをインポート

複合した場合

参考:
TLS
Wireshark Tutorial: Decrypting HTTPS Traffic
【解析/Wireshark】https(SSL/TLS)を復号化する方法(SSLKEYLOGFILE),ブラウザで見る方法
TLS 通信のパケットキャプチャ

4.練習

マルウェア感染端末のパケット解析チュートリアルをこなしてIOC(Indecators of Copromise) を収集する練習を行い経験値を稼ぎます。

解析チュートリアル

チュートリアルが完了したら、MALWARE-TRAFFIC-ANALYSIS.NET でTRAFFIC ANALYSIS EXERCISES をこなしていきます。EXERCISES の内容も今後記事を書いていきたいと思います!

Discussion