blog

Torネットワークを標的とした悪質コードのFBI分析

Torは、ユーザーが追跡されることなくウェブを閲覧したり、他のウェブサービスにアクセスしたりすることを可能にする匿名通信ネットワークプラットフォームを提供します。このネットワークの一部として、いわゆる...

Apr 2, 2016 · 7 min. read
シェア

I. 背景

Tor(The Oninon Router)は、ユーザーが追跡されることなくウェブ閲覧やその他のインターネットサービスにアクセスできる匿名通信ネットワークプラットフォームを提供します。このネットワークの一部であるいわゆる「ダークウェブ」とは、Torネットワークを通じてのみアクセス可能なサーバー群を指し、コミュニティ・フォーラムや電子メールなど、様々なサービスを提供しています。これらのサービスは悪意なく提供されており、本来は人権侵害に焦点を当てたものですが、匿名性が高いため、児童ポルノの配布など犯罪目的の人々が集まっています。法執行当局も、その後、犯人の発信元IPアドレスを追跡することはできませんでした。

2013年、特定のウェブブラウザのセキュリティ脆弱性を悪用し、ユーザーのコンピュータ上でコードを実行するマルウェアが「ダークウェブ」サーバーで発見されました。このコードはユーザー情報を収集し、バージニア州のサーバーに送信した後、自己破壊しました。マルウェアの特徴としては、明らかに悪意はありませんでした。当初は、バージニア州に事務所を構え、悪意のあるプログラムの開発に専念してきたFBIによって埋め込まれ、彼らが作成したのではないかと推測されていましたが、現在ではそれが事実であるようです。

シェルコードの逆解析

1.脆弱性の悪用

この悪用コードはjavascriptで記述されており、firefoxブラウザの悪名高いバージョン固有の脆弱性を悪用しています。エクスプロイトコードは難読化されていますが、素早くスキャンすると、シェルコードの最初の数シグネチャバイト、コールオプコードである16進数の長い文字列が見つかります。

ここでは脆弱性を分析するつもりはありませんが、シェルコードを見てください。

まず、基本的なシェルコードの原則について説明します。

2.場所に依存しないコード

そのため、この情報を取得するには一連のトリックを使用する必要があります。FBI マルウェア プログラムは、メモリ アドレスを調べるために一般的なトリックを使用します:

call start
start 
pop ebp

呼び出し関数は、実行中のプログラムを開始タグに移動し、プログラムの現在の実行位置をスタックに押します。

ここでは、この値を使用してスタックから場所を盗み、スタック・ポップの値を ebp レジスタに保存します。次の命令のアドレスがわかったので、それを使ってシェルコードに関連するデータにアクセスできます。

Windows APIを探す

Windowsローダーは通常、Windows APIの場所をプログラムにロードするので、プログラムの場所に関する情報を持つシェルコードを実行する贅沢はありません。API関数の場所を見つける通常の方法は、FSセグメント・レジスタによって参照されるスレッド情報ブロックを見ることです。この構造体を使用して、シェルコード・ホストによってロードされた DLL の場所を特定し、ターゲット関数が見つかるまでそれらの DLL の出力を使用することができます。もちろんこのプロセスは面倒なので、FBIのシェルコードではStephen Fewerが書いた関数パーサーであるMetasploitFramworkに含まれるライブラリを使用しています。これは次のように動作します:

push arguments
. . .
push FUNCTIONHASH
call<Stephenリゾルバー>

この関数のハッシュ値は、呼び出し関数にちなんだ単純なハッシュアルゴリズムによって生成されます。これはコードの難読化を意図しているわけではありませんが、関数を長い文字列ではなく32ビットDWORDで呼び出すことを可能にしているだけです。

ありがたいことに、ハッシュ値は自分で計算することもできますし、誰かが生成したルックアップテーブルを使うこともできます。

IV.入学式

シェルコードの先頭を逆アセンブルすると、次のようになります:

このコードは、HTTPリクエストヘッダをGETで開始することで、deが安全に実行されることを保証する整合性チェックを実行します。次に、ws API関数LoadLibrary()が呼び出され、2つのダイナミックリンクライブラリがロードされます。ws2_32.dll(インターネット通信用のWindowsソケットライブラリ)とiphlpapi.dll(Windows IPヘルパーライブラリ)です。

V. HTTPサーバーへの接続

必要なライブラリ・ファイルがすべてロードされた後、シェルコードは下図に示すアクションを実行します:

もう一度同じ手順で、ハッシュ値を持つWindows API関数を調べます。ご覧のように、[ebp +0x2e1]の位置のデータはパラメータとしてconnect()関数に渡されます。ebpレジスタが指すメモリ上のアドレスを知り、そのアドレスとオフセットを使用すれば、メモリ上の0x2E8にあるデータを見つけることができます。

IPアドレスのクイックWhoisクエリを実行しても、得られる情報はごくわずかです。下図

VI.利用者情報の収集

次に、マルウェアはウィンドウズのホスト名を取得しようとします。通常、これはウィンドウズ・マシンの名前です。これは容疑者を特定し、間違った人物を逮捕していないか確認するのに役立つかもしれません。

次に、アクティブなホストのホスト名とIPアドレスを列挙します。

SendARP()関数を使用して、ネットワーク上のすべてのコンピュータの MAC アドレスを検出します。MACアドレスはユーザを特定のNICにバインドし、ユーザはそれらのNICのサプライチェーンを通して追跡することができます。

最後に、ieフィールドにACアドレス、stフィールドにユーザのホスト名を入れてHTTPヘッダー情報を構築し、tp://...//----bbにETリクエストとして送信しなければなりません。//----これらの16進数の意味は不明で、任意の選択かもしれないし、ユーザーから特定のアクセスサーバーへのリンクかもしれません。

最終段階

このシェルコードの最終段階の唯一の目的は、そのシェルコードの最後にさらにシェルコードを実行することです。これは少し回りくどい方法で行われますが、なぜそうなのかはよくわかりません。おそらく粗雑な試みだったのでしょう。

では、最後のステップは何でしょう。まず、文字列の長さを操作して、他のすべてのデータ領域に埋め込まれているコードを見つけます。そのコードは、HTTPリクエスト文字列がどこで終わるかを把握し、deの最後にある無効なnull命令をすべてスキップして、そこにジャンプします。どこ?誰も知りません!私はもっとdeがあると聞いています(それは重要ではありません)が、私はこの悪用をデバッグし、それを取得する時間が不足しています。

ヘッダーを作り、ヘッダーの最後にジャンプします。

http ヘッダの最後にある無効なディレクティブを見つけてスキップします。

コードの実行

これまでは、主に完全性を期すために、完全に静的な方法でコードを解析してきました。これらのコードを実行することで、より迅速に解析することができ、同時に解析が正しいことを検証することができます。この悪意のあるコードはシステムを破壊するようなことはしないので、実際のマシンで実行しても安全です。実行し、FBI に送信される正確なデータを観察してください。シェルコードはexeの実行ファイルではないので、実行するにはシェルコードローダーが必要です。これはロードされたシェルコードに必要なことで、本物のシェルコードが呼び出されると自動的に切断されます。

結論

このマルウェアはユーザーのブラウザから攻撃者に確認メッセージを送信し、ユーザーのfirefoxブラウザをクラッシュさせます。複雑さという点では、それほど明らかに特別なものではなく、人々が知らないような新しいテクニックを使っているわけでもありません。

このマルウェアの作者がFBIであるならば、彼らはいくつかの非常に深刻な質問に答える必要があります。これらのマルウェアプログラムは米国外のサーバーに仕込まれ、世界中のユーザーを悪用するブラウザーを攻撃しました。私はそうは思いません。FBIは、誰かがFBIを出頭させたときに、彼らが法的に許可されていたという証拠を示す必要があるのでしょうか?必ずしもそうではありません。私は、彼らがユーザーのコンピューターから発見された証拠と、起訴状を受け取った時点で得られた証拠に依拠することを期待します。いずれにせよ、私は弁護士ではありません。

Read next

車載イーサネットが次世代のコネクテッドカーを牽引する

イーサネット技術は、クラウドデータセンター、通信事業者、企業ネットワークで長い間使用されてきましたが、現在では自動車業界にも浸透しつつあり、車載イーサネットは、よりスケーラブルでオープンなアーキテクチャを提供し、一般の人々が超高級車のエンターテイメントや情報機能、安全機能を享受できるようにする技術です。

Apr 2, 2016 · 3 min read