AIを使用した悪意のあるC2トラフィックの検出

By and

Category: Unit 42, Unit 42

Tags: , , ,

Machine Learning Command and Control project detects C2 traffic types.

This post is also available in: English (英語)

概要

EmotetSalityなどの高度なマルウェアや、最近のSolarStorm攻撃のようなAPT(Advanced Persistent Threats、持続的標的型攻撃)は、未知の新たな悪性ネットワークトラフィックを識別するための高度な検出方法の必要性を強調しています。

現在主流の侵入防止システム(IPS)は、シグネチャの照合と、ネットワークトラフィック監視によりデータパケット内の既知パターンの有無を確認する方法をとるのが一般的です。こうした静的手法は未知の新たなマルウェアが生成するネットワークトラフィックの検知には不十分です。このため、特定の静的パターンではなく、パケット構造全体の検査を取り入れた、より高度な検知技術が必要とされています。

Unit 42のリサーチャーは以前、Androidアプリからのデータ漏えいに関するブログで、機微なユーザー情報を漏えいさせる未知のタイプのトラフィックを、機械学習技術を用いて検出できることを示しました。

本稿は、SalityやEmotetなどのマルウェアのコマンド&コントロール(C2)トラフィックをベースとして、どのように深層学習モデルを使えば、変更されたり不完全であったりするC2トラフィックのパケットをさらに識別していけるのかを分析します。この分析は、IPSに機械学習技術を使用することで、C2トラフィックの未知の亜種を発見し、高度な攻撃キャンペーンの検出に役立つことを示すものとなっています。

パロアルトネットワークスの次世代ファイアウォールをご利用のお客様は、脅威防御セキュリティサブスクリプションに含まれるIPSとApp-ID、さらにWildFireセキュリティサブスクリプションに含まれるマルウェア解析と防止機能により、これらの種類の攻撃から保護されています。

C2攻撃

悪意のあるネットワーク攻撃の最も有害な側面の1つはC2によって達成されています。マルウェアは、コンピュータへの感染後、攻撃者のサーバー(いわゆるC2サーバー)への接続を確立し、他の悪意のあるソフトウェアのダウンロード、データの窃取、遠隔操作の確立などの追加タスクを実行します。

以下のセクションでは、悪意のあるC2トラフィックの種類を複数紹介します。これらは、高度な機械学習システムがこうしたトラフィックをどのようにして検出できるかを示すサンプルとして使用されます。今回取り上げたマルウェアは、C2トラフィック検出における弊社の機械学習AIの有効性を示すためのサンプルとなります。このAIの検出機能はここに提示したマルウェアサンプルだけでなく一般的なC2検出にも応用可能です。

Sality

Salityマルウェアは2003年に初めて発見されました。その後も新たな機能が継続的に開発されて年々高度化しています。Salityは、実行ファイルへの感染や変更、リムーバブルドライブや共有フォルダへのコピーによって拡散します。

このマルウェアがコンピュータシステムに感染すると、リモートサイトへの接続を試み、さらに悪意のあるファイルをダウンロードし、ホストマシンからデータを漏えいします。Salityは以前から存在していましたが、継続的な開発と新機能の追加により、効果的で複雑なマルウェアとなっています。

次の2つのHTTPパケットヘッダ(図1および図2)は、Salityがリモートサイトpadrup[.]comに接続するために使用したC2トラフィックを示しています。

GET /sobaka1.gif?12db3cf=98861835 HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
Host: padrup[.]com
Cache-Control: no-cache
Cookie: jsessionid=85b50d8fab658ecb9f79aa4de6039c87

図1 SalityのC2トラフィック

GET /sobaka.aspx?24c1882=115624326 HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
Host: padrup[.]com
Cache-Control: no-cache
Cookie: jsessionid=a2b0f43b9876d289325c3f13a7f8f95b

図2 SalityのC2トラフィック

図1および図2に示すようなSalityからのC2トラフィックは、世界中のさまざまなC2サーバーと通信し、追加のマルウェアをダウンロードしてインストールしたり、機密データをリークしたりするなどのタスクを実行します。

Emotet

Emotetマルウェアは、バンキングマルウェアとして2014年から知られています。通常、Emotetは、脆弱なホストに感染させるためのマクロが埋め込まれたMicrosoft Word文書とともに配布されます。EmotetマルウェアからのC2トラフィックは、暗号化されたデータまたはその他の方法で暗号化されたデータをHTTPプロトコルで送信します。図3および図4では、Emotet C2トラフィックのHTTPパケットヘッダを示しています。

POST /r1s4dvgwanu1ov8qku/e6qj08nos8kh/o7rhpr2xi05tkkp/ HTTP/1.1
DNT: 0
Referer: 90.[]160[.]138[.]175/r1s4dvgwanu1ov8qku/e6qj08nos8kh/o7rhpr2xi05tkkp/
Content-Type: multipart/form-data; boundary=----------------------1BetPUScZnIzXogZ6qQcQ8
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3[.]0[.]30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3)
Host: 90[.]160[.]138[.]175
Content-Length: 5556
Connection: Keep-Alive
Cache-Control: no-cache

図3 EmotetのC2トラフィック

POST /kl4or/ok48hg/a5msy52s4i4uuac7dm/pzudacb2/a51azs1nbhzmu5m/p0f6wimb1tcqvn0/ HTTP/1.1
DNT: 0
Referer: 184[.]66[.]18[.]83/kl4or/ok48hg/a5msy52s4i4uuac7dm/pzudacb2/a51azs1nbhzmu5m/p0f6wimb1tcqvn0/
Content-Type: multipart/form-data; boundary=---------O8dHD39IM
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3)
Host: 184[.]66[.]18[.]83
Content-Length: 6916
Connection: Keep-Alive
Cache-Control: no-cache

図4 EmotetのC2トラフィック

EmotetのC2トラフィックとその分析方法の詳細はUnit 42ブログ『Wireshark によるパケット解析講座10: Emotet 感染トラフィックの調査』と『攻撃チェーンの概要: 2020年12月および2021年1月のEmotet』をご覧ください。

C2トラフィックの検出

IPSの目的は、C2サーバへの接続を正確に識別することです。インターネットの動的な性質、そしてIPアドレスやドメイン名の割り当てが目まぐるしく変わることなどが原因で、この正確な識別の実現は非常にむずかしく、防御側は攻撃側に遅れをとることが多くなっています。

こんにち、セキュリティ業界で一般に使用されているアプローチは、上図のEmotetからのネットワークパケットのようなC2トラフィックを、トラフィック内の特定のパターンと一致する静的なシグネチャで識別するというものです。この方法には精度が高いという利点がありますが、変化したり未知のタイプのトラフィックを検出するには柔軟性に欠けます。パケットの検出(図3)は、シグネチャとして使用できる確度の高いパターンがパケット内に存在しないことから特に問題となります。例えば、EmotetパケットのURI(Uniform Resource Identifier)パス(下のPOST文参照)にはランダムな文字列が含まれているように見えます。これはエンコードされた情報を送信しているのかもしれませんが、シグネチャとして使用するには信頼にたるパターンとはいえません。

POST /r1s4dvgwanu1ov8qku/e6qj08nos8kh/o7rhpr2xi05tkkp/ HTTP/1.1

同様のことは、ウェブブラウザからの汎用の値を示すuser-agentフィールドや、特定のIPアドレスで構成されるhostnameでも見られます。

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3)

Host: 90[.]160[.]138[.]175

どちらのフィールドもシグネチャを生成するうえで理想的な候補とはいえません。

その他のタイプのC2パケットのなかには、トラフィックパターンから確実に特定できるものもあります。このような信頼性の高いパターンは、通常は特定の種類のC2トラフィックを一意に識別する文字列で、他の(つまり良性の)トラフィックセッションでは見られないものです。しかしこのアプローチにも、IPやドメイン名をベースとする検知と同様のデメリットがあり、トラフィックパターンの最新かつ完全なセットを維持しなくてはならないという特有の課題があります。

このようなデメリットがあるために、C2トラフィックの柔軟で信頼性の高い検出を実現するには、機械学習の応用が必須となります。機械学習の応用は新手のネットワークベース攻撃の検出には欠かせません。

深層学習によるC2検出

こうした悪意のあるC2トラフィックセッションを速やかに検出することはきわめて重要です。前述したように、これは従来はペイロードやURLに対する静的なシグネチャにより行われてきました。しかしこれらのシグネチャは網羅的なものではなく、新たなC2セッションを検出することができません。こうした理由から、私たちは悪意のあるC2セッション検出のため、膨大なデータから重要な特徴を自動的に抽出できる深層学習モデルを研究しました。

私たちの深層学習モデルは、高度な機械学習アルゴリズムを活用してネットワークセッションからコンテンツとコンテキストを学習し、それが悪意のあるC2サーバに接続しているかどうかを判断します。検知モジュールは、セッションが悪意のあるものである確率を判断します。事前に設定した閾値に基づいて、あるセッションが悪意のあるものかどうかを分類することができます。本稿では、約6,000万件のHTTPセッションヘッダで学習したモデルを、約3,600万件の良性のセッションと約2,400万件の悪意のあるセッションでテストしました。データセットは2019年に収集したものです。

深層学習モデルに学習させるためのハイパーパラメータは、モデルの偽陽性率(過検知率)が0.025%以下になるように計算されています。このモデルを4ヶ月以上にわたってテストしたところ、平均過検知率は0.02%以下、精度は98%以上を維持していることが確認できました。

深層学習モデルで前述のトラフィックパケットを検出する方法

深層学習モデルは、学習データから暗黙的に特徴を抽出します。このためパケットヘッダのどの特徴、または一連の特徴が検出のきっかけとなったのかを正確に把握できないことがあります。

深層ニューラルネットワークは従来の統計モデルと比べ、表現力の高いデータ表現を得るために多くのパラメータを持ちます。何百万もの既知の悪意のあるデータパケットを深層学習モデルに提示することで、ニューラルネットワークにC2トラフィックパケットの一般的な構造を認識するよう学習させることができます。そのため、パケットの分類には、ホスト名などの単一のフィールドだけでなく、たとえば文字や単語の組み合わせやパケットの構造など、さまざまな特徴が関与してきます。良性パケットと悪意のあるパケットを区別する特徴は、数百万のラベル付きデータポイントの学習過程でニューラルネットワークによって自動的に認識されます。

検知の判断がどのように行われるかを理解するために、重要な情報(ホスト名、URIパスなど)をいくつか削除してパケットヘッダを再作成し、この再作成したヘッダを深層学習モデルに評価させます。こうして確認した悪意のあるC2トラフィックの種類別の結果を表1と表2にまとめました。

表1は、HTTPヘッダ全体を含む場合と、一部がない場合(uri-path、hostname、user-agent、refererを含まない)場合とを両方テストすることで、私たちのモデルがセッションを悪意のあるものとして検出できる確率を示しています。なお、これらのコンテキストフィールドは1度に1つずつ削除しています。このモデルは、すべてのヘッダフィールド情報が存在する場合、4つのC2セッションすべてを高い信頼性で検出できることが確認されました。また、このモデルは特定のコンテキストフィールドに依存せず、一部のフィールドが存在しなくても悪意のあるC2検出を行うことができることがわかります。

マルウェアのC2 ヘッダ全体 uri-pathなし hostnameなし user-agentなし refererなし
EmotetのC2トラフィック1 99.72 99.86 96.28 97.37 99.55
EmotetのC2トラフィック2 99.79 99.91 98.04 95.48 99.76
SalityのC2トラフィック1 99.99 99.99 99.98 99.99 NA
SalityのC2トラフィック2 99.99 99.99 99.98 99.99 NA

表1 さまざまなレベルの情報を含めたセッションヘッダに対する深層学習モデルのパフォーマンス(表中の値は、セッションが悪意のあるものであるという本モデルの確度を示す。NA はこのパケットにはこのフィールドが含まれないことを示す)

前述したように、静的シグネチャを使ってC2トラフィックを検出する場合に大きな問題となるのが、ネットワークトラフィックで信頼できるパターンを区別することです。ただしシグネチャがC2トラフィック検出で直面している陥穽はこれにはとどまりません。C2マルウェアのトラフィックは、わずかに変更されただけでシグネチャを無効にしてしまう可能性があります。図1に示すSality C2のパケットを考えてみましょう。「GET /sobaka1.gif」というパターンはIPSシグネチャの使用候補となります。高度なマルウェアは、IPSによるパケット検査を回避するために、トラフィックのペイロード内のコマンドパターンを頻繁に変更することがあります。

私たちは、パケットヘッダを変更することでこのような動作をシミュレートし、深層学習モデルの検出出力がどのように変化するかを分析しました。以下の例で考えてみましょう。図1に示すSality C2パケットのuri-pathを「sobaka1.gif?12db3cf=98861835」から「/nobata2.gif?52ad3pf=77952613」に変更しても、私たちのモデルは99.9%の確度でこのパケットヘッダを悪意のあるものとして検出することができました。図5に、修正されたパケットヘッダの全容を示します。

GET /nobata2.gif?52ad3pf=77952613 HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)
Host: padrup[.]com
Cache-Control: no-cache
Cookie: jsessionid=85b50d8fab658ecb9f79aa4de6039c87

図5 修正されたSalityのC2トラフィックのパケットヘッダ

表2はリクエストヘッダのさまざまなコンテキストフィールドの値を1つずつ変化させていった場合の同モデルの予測結果を示しています。このモデルはコンテキストフィールドの値が変更されたC2セッションも検出できることが確認されました。これは私たちの深層学習モデルが、ある特定のコンテキストフィールド値に依存するのではなく、リクエストヘッダの全体的な構造から学習していることを示しています。

マルウェアのC2 ヘッダ全体 変更されたuripath 変更されたhostname 変更されたuser-agent 変更されたreferer
EmotetのC2トラフィック1 99.72 99.72 98.60 98.86 99.63
EmotetのC2トラフィック2 99.79 99.92 99.94 99.99 99.94
SalityのC2トラフィック1 99.99 99.99 99.96 99.95 NA
SalityのC2トラフィック2 99.99 99.99 99.85 99.97 NA

表2 リクエストヘッダのさまざまなコンテキストフィールドに変更を加えたセッションヘッダに対する深層学習モデルのパフォーマンス(表中の値は、セッションが悪意のあるものであるという本モデルの確度を示す。NA はこのパケットにはこのフィールドが含まれないことを示す)

パケットヘッダ内の特定のペイロードパターンにくわえ、フィールドの順序も深層学習によるC2セッション検出に一役買っています。表3は、パケットがさまざまなコンテキストフィールド構造で着信した場合のこのモデルのパフォーマンスを示しています。評価のため、hostname(H)、Emotetのreferer(R)、Salityのcache-control(C)、user-agent(UA)といったコンテキストフィールドをさまざまな順序で配置しました。その結果、深層学習モデルは、パケット構造が変更されても、ペイロードを正しく識別できることがわかりました。

マルウェアのC2 ヘッダ全体 (UP|H|R/C|UA) (UP|H|UA|R/C) (UP|UA|H|R/C)
EmotetのC2トラフィック1 99.72 99.65 98.84 99.50
EmotetのC2トラフィック2 99.79 98.27 99.51 99.74
SalityのC2トラフィック1 99.99 99.90 99.99 99.99
SalityのC2トラフィック2 99.99 99.93 99.98 99.98

表3 コンテキストフィールドの順序を変更したセッションヘッダに対する深層学習モデルのパフォーマンス(ここでHはHost name、UAはUser-Agent、UPはUri-Path、RはReferer、CはCache-Controlを表す。表中の値は、セッションが悪意のあるものであるという本モデルの確度を示す)

全体として、上記の結果は、EmotetやSalityなどのマルウェアファミリの悪意のあるC2セッションを検出する上での同深層学習モデルの強さを示すものとなりました。これらマルウェアファミリは、異なるホスティングサーバーに接続し、追加情報を転送して攻撃を行う可能性があるため、静的シグネチャで捕捉することは困難です。

結論

C2トラフィックの検知に深層学習を使用するという私たちの研究は、侵入検知と防止のために高度な機械学習を用いることの可能性と必要性とを示しています。新規の攻撃やゼロデイの脆弱性に対応していくには、既知のトラフィックの特徴に基づいて攻撃を識別し、未知のタイプの悪意のあるネットワークトラフィックを識別し、高度な脅威キャンペーンを早期に検出・防止できるようなシステムに頼る必要があります。Unit 42が様々な研究プロジェクトで確認した結果は、脅威防御やWildFireのセキュリティサブスクリプションに直接貢献し、次世代ファイアウォールをご利用のお客様を確実に保護しています。