パケットからマルウェアを探る(Malware Traffic Analysis - ICEMAIDEN)
この記事は、 大阪工業大学 Advent Calendar 2020の22日目の記事です。
※悪用厳禁。何かしら問題が発生した場合は非公開にする可能性があります。
はじめに
20日目の記事でも挨拶をしましたが、初めましての方は初めまして。しあのすと申します。
今回は最近勉強したパケット解析についての備忘録を兼ねてまとめたいと思います。
マルウェア解析
マルウェア解析の流れとして「表層解析」、「動的解析」、「静的解析」の3段階が存在し、この順番に行われることが定石となっています。
表層解析
ハッシュ値やアンチウイルスソフトの検知などを元に調査を行う。動的解析
仮想環境で実際にマルウェアを動作させ、その動作や記録を元に調査を行う。今回話すパケット解析はこれ。
静的解析
マルウェアのリバースエンジニアリングを行い、そのコードを元に調査を行う。
セキュリティとパケット解析
ネットワーク障害の特定や設計段階の調査のために行われるイメージがありそうなパケット解析ですが、セキュリティ対応としてパケット解析が行われる場合も多いのが現状です。
俗に言うセキュリティアナリストやDFIR担当者が不正侵入防止の調査、またはマルウェアや攻撃者の不正侵入後の原因特定をするためにパケット解析が用いられます。
セキュリティのためのパケット解析はネットワーク設計などの調査とは異なり、攻撃者が制御している機器などのこちらから特定が困難な情報が関わってくるため、限られた情報から全貌を明らかにする必要があります。
Malware Traffic Analysis
実際にマルウェアとの通信をキャプチャした有害なpcapファイル検体の公開及びその解析演習を行うことが出来る Malware-Traffic-Analysis.netというサイトが存在します。
サイトには解析のための基本的なWiresharkのチュートリアルやセキュリティのためのパケット解析のトピックなども載っており、Exercisesには各問模範解答が付属しているため、興味を持った方は一度自力で考えてみても面白いかもしれません。
今回はこのサイトのICEMAIDENを例にパケットから調査を行っていきます。
解析
※解析の際は仮想環境上で外部通信やホストとの共有ファイルを切ったことを確認した上で行うことをおすすめします。解析の途中で出てきた有害なIPやURLは意図的にエスケープしています。この記事を見た後に実際にアクセスして何か被害が生じた場合、一切責任を負いません。
シナリオ LANセグメントデータ: LANセグメント範囲:10.18.20.0/24(10.18.20.0〜10.18.20.255) ドメイン:icemaiden.com ドメインコントローラー:10.18.20.8-Icemaiden-DC LANセグメントゲートウェイ:10.18.20.1 LANセグメントブロードキャストアドレス:10.18.20.255
あなたのタスク pcapとアラートを確認してから、次の質問に答えてください。 問1 : 感染したWindowsホストのIPアドレス、MACアドレス、およびホスト名は何ですか? 問2 : この感染したWindowsホストの被害者のWindowsユーザーアカウント名は何ですか? 問3 : 被害者はどのような種類のマルウェアに感染しましたか? 問4 : pcapからのトラフィックに基づいて、マルウェアはどこから来た可能性がありますか? 問5 : 最初の感染後、被害者はどのタイプのWebページ/ Webサイトにアクセスしたように見えましたか?
問1
pcapと共に与えられるアラートの画像に注目すると、「TROJAN Ursnif」の文字が見つかるのでこれに着目します。
送信先ポートが80番であることからHTTPリクエストと10.18.20.97でフィルターをかけて検索してみます。
10. 18. 20. 97
から8. 208. 24. 139
へのパケットが大量に見つかるため、これがアラートにひっかかったと推測出来ます。よってIPは「10.18.20.97」。
MACアドレスはパケット詳細欄のEthernet II
の欄から特定できます。
Source: Acer_56:9b:cf(00:01:24:56:9b:cf)
とあることから、MACアドレスは「00:01:24:56:9b:cf」。
ホスト名はkerberosの通信から特定します。kerberosのCNAMEレコードにはクライアントの主要な識別子の名前が含まれているので、kerberos.CNameString and ip.addr==10.18.20.97
と入力してフィルターをかけてみます。
CNameString
の値から、ホスト名は「JUANITA-WORK-PC」。
問2
先程の結果のCNameStringの欄で右クリックし、「列として適用(Apply as Column)」を押すと、CNameStringの結果が列として表示されます。
ここで、ユーザーアカウント名はホスト名と違い「$」で終わらないという特性を用いると、ユーザーアカウント名は「momia.juanita」と特定できます。
問3
問1でUrsnifのアラートが出ていることから、マルウェアの種類は「Ursnif」だと考えられます。
さらに、
Wiresharkによるパケット解析講座 6: Ursnif感染の調査を参照すると、http.request
のフィルターをかけた際に上で言及されている特殊なGETやPOSTリクエストが散見されることも分かります。このような根拠からもUrsnifと推測して良いと考えられます。
問4
Ursnifで一度Web検索をかけてみます。
上の記事を参照すると、Ursnifは不正なプログラムによって他のサイトからダウンロードされるか、不正なメールから侵入する場合が殆どだと分かります。
http.request
でフィルターをかけてみると、一番最初にhttp:// mail[.]aol[.]com/
というメールサイトにアクセスしているのが分かります。
また、このメールサイトにアクセスしているのが不審なGET/POSTリクエストが送られる前であることから、(上記URL)において、不正なメールから感染したと考えて良いと思われます。
問5
http・https通信に絞るため、(http.request or ssl.handshake) and !ssdp
というフィルターをかけます。
15228~16215,16315,16436~16493において不審なGET/POSTリクエストが確認された後のパケットを見てみると、~[.]bac[.]com
やbankofamerica
の文字が散見されます。
bac[.]com
でwhoisをかけるとAdminの情報辺りでやはりbankofamerica
の文字が見つかるため、bankofamerica[.]comにアクセスしたと推測出来ます。
Ursnifがバンキングマルウェアとして有名なことからの関連でしょうか。
おわりに
HTTP通信から不審なプログラムをエクスポートしてVirusTotalで検索をかけたり、送信されている暗号化データを復号出来たりするとさらに情報を抜き出すことが可能でしょうが、今の技術力や記事を書く時間的にこの辺りが限界でした。
解析の根拠にも間違いや誤魔化しが多い可能性があるので精進します。
この記事によって少しでもパケット解析やフォレンジックに興味を持って頂ければ幸いです。