Operation RussianDoll: Adobe と Windows のゼロデイ エクスプロイトは、ロシアの APT28 による高度な標的型攻撃に利用される可能性が高い

FireEye Labs は最近、Adobe Flash のゼロデイ脆弱性と Microsoft Windows のまったく新しい脆弱性を悪用する限定的な APT キャンペーンを検出しました。 Dynamic Threat Intelligence Cloud (DTI)を使用して、FireEye の研究者は 2015 年 4 月 13に始まる攻撃のパターンを検出しました。アドビは独自に APSB15-06 の脆弱性 (CVE- 2015-3043 ) にパッチを適用しました。 FireEye は、技術指標とコマンド アンド コントロール インフラストラクチャの相関関係から、APT28 がこの活動に関与している可能性が高いと判断しています。

Microsoft は、Windows における未解決のローカル権限昇格の脆弱性 (CVE-2015-1701) を認識しています。 Windows の脆弱性に対するパッチはまだ提供されていませんが、Adobe Flash を最新バージョンに更新することで、この一般的なエクスプロイトは無害になります。 CVE-2015-3043 の Adobe Flash エクスプロイトと組み合わせて使用されている CVE-2015-1701 のみが確認されています。 Microsoft セキュリティ チームは、CVE-2015-1701 の修正に取り組んでいます。

エクスプロイトの概要

エクスプロイトの大まかな流れは次のとおりです。

1. ユーザーが攻撃者が管理する Web サイトへのリンクをクリックする
2. HTML/JS ランチャー ページが Flash エクスプロイトを提供
3. Flash エクスプロイトが CVE-2015-3043 をトリガーし、シェルコードを実行する
4. シェルコードが実行可能なペイロードをダウンロードして実行する
5. 実行可能なペイロードがローカル権限昇格 (CVE-2015-1701) を悪用してシステム トークンを盗む

Flash エクスプロイトは、難読化されていない HTML/JS から提供されます。ランチャー ページは、ターゲットのプラットフォーム (Windows 32 と 64 ビット) に応じて、配信する 2 つの Flash ファイルのいずれかを選択します。

Flash エクスプロイトは、一部の軽い変数名マングリングのみで、ほとんど難読化されていません。攻撃者は、十分に文書化されている CVE-2014-0515 Metasploit モジュールに大きく依存していました。これは ROP レスであり、代わりに、Windows API への呼び出しごとに変更される FileReference オブジェクトの偽の vtable を構築します。

ペイロードは、制限された権限で実行されていることを検出すると、Windows カーネルのローカル権限昇格の脆弱性を悪用します。この脆弱性を利用して、カーネルのコンテキストでユーザー空間からコードを実行し、攻撃者のプロセス トークンを変更して、システム プロセスと同じ権限を持つようにします。

CVE-2015-3043 エクスプロイト

CVE-2014-0515 metasploit モジュールとこのエクスプロイトの主な違いは、明らかに脆弱性です。 CVE-2014-0515 は Flash の Shader 処理の脆弱性を悪用し、CVE-2015-3043 は Flash の FLV 処理の脆弱性を悪用します。問題の FLV ファイルは AS3 内に 2 つのチャンクに埋め込まれており、実行時に再アセンブルされます。

脆弱性

不正な形式の FLV オブジェクトを解析する際に、Adobe Flash Player (<=17.0.0.134) にバッファ オーバーフローの脆弱性が存在します。この脆弱性を悪用する攻撃者は、メモリを破壊し、リモートでコードを実行する可能性があります。

エクスプロイトでは、攻撃者は FLV オブジェクトを ActionScript コードに直接埋め込み、NetStream クラスを使用してビデオを再生します。メモリでは、次のようになります。

0000000: 46 4c 56 01 05 00 00 00 09 00 00 00 00 12 00 00 FLV………….
0000010: f4 00 00 00 00 00 00 00 02 00 0a 6f 6e 4d 65 74 ………..オンメット
0000020: 61 44 61 74 61 08 00 00 00 0b 00 08 64 75 72 61 aData…….デュラ
0000030: 74 69 6f 6e 00 40 47 ca 3d 70 a3 d7 0a 00 05 77 tion.@G.=p…..w
0000040: 69 64 74 68 00 40 74 00 00 00 00 00 00 00 06 68 idth.@t……..h
0000050: 65 69 67 68 74 00 40 6e 00 00 00 00 00 00 00 0d 8.@n……..
0000060: 76 69 64 65 6f 64 61 74 61 72 61 74 65 00 00 00 ビデオデータレート…
…..
0003b20: 27 6e の 72 87 1b 47 f7 41 a0 00 00 00 3a 1b 08 ‘nr.GA…:..
0003b30: 00 04 41 00 00 0f 00 00 00 00 68 ええええええ..A…….h…..
0003b40: ええええええええええええええええ…………
0003b50: ええええええええええええええええ…………
0003b60: ええええええええええええええええ…………

FLV ファイル形式のファイルには、一連のタグ構造が含まれています。 Flash では、FLV タグの解析時に次のオブジェクトが作成されます。

.text:1018ACE9 sub_1018ACE9 proc 近く;コード XREF: sub_1018BBAC+2Bp
.text:1018ACE9; sub_10192797+1A1p …
.text:1018ACE9
.text:1018ACE9 arg_0 = dword ptr 4
.text:1018ACE9
.text:1018ACE9 mov eax, ecx
.text:1018ACEB mov ecx, [esp+arg_0]
.text:1018ACEF mov dword ptr [eax]、オフセット off_10BA771C
.text:1018ACF5 mov dword ptr [eax+24h], 1
.text:1018ACFC および dword ptr [eax+14h], 0
.text:1018AD00 mov [eax+28h], ecx
.text:1018AD03 mov バイト ptr [eax+20h], 0
.text:1018AD07 retn 4
.text:1018AD07 sub_1018ACE9 endp

このエクスプロイトの場合、タグ構造は FLV ストリームのオフセット 0x3b2f から始まり、解析されると、次のようにタグ構造に入力されます。

タグ 2:
UINT_8 タイプ: 8
UINT_24 データサイズ: 1089
UINT_24 タイムスタンプ: 15
UINT_8 タイムスタンプhi: 0
UINT_24 ストリーム ID: 0
UINT_4 fmt: 6
UINT_2 sr: 2
UINT_1 ビット: 0
UINT_1 チャンネル: 0
UBYTE データ [1088]: xeexeexeexee…
UINT_32 lastsize: 0xeeeeeeee

データ フィールド内で始まる、FLV ストリームのすべてのコンテンツが 0xEE になります。その結果、data フィールドと lastsize フィールドがマングルされ、技術的には 0xEE のみで構成される 1 つの最終タグが存在します。

3日目:
UINT_8 タイプ: 0xEE
UINT_24 データサイズ: 0xEEEEEE

以下に、攻撃者の FLV ストリームから入力された Tag2 のデータサイズ フィールドを示します。

.text:10192943 mov eax, [ebx+24h]
.text:10192946 mov [esi+14h], eax
.text:10192949 movzx eax, バイト ptr [ebx+19h] ; 00
.text:1019294D movzx ecx, バイト ptr [ebx+1Ah] ; 04
.text:10192951 shl eax, 8
.text:10192954 または eax、ecx
.text:10192956 movzx ecx, バイト ptr [ebx+1Bh] ; 41
.text:1019295A shl eax, 8
.text:1019295D または eax、ecx
.text:1019295F mov ecx, ebx
.text:10192961 mov [esi+0Ch], eax ; 0x441
.text:10192964 呼び出し sub_1002E2B3

バッファーは固定サイズ 0x2000 で割り当てられます。

.text:101A647E プッシュ 2000h
.text:101A6483 mov ecx、esi
.text:101A6485 コール sub_101A6257 ; 0x2000 バッファを割り当て、esi+0xDC に格納
……
.text:101A627F プッシュ 0
.text:101A6281 プッシュ編集; 0x2000
.text:101A6282 呼び出し sub_105EBEB0
.text:101A6287 pop ecx
.text:101A6288 pop ecx
.text:101A6289 mov [esi+0DCh], eax

サイズは攻撃者によって制御されるため、固定サイズのバッファーを特定のデータでオーバーフローさせることができます。

russian doll 1

データサイズが 0x441 の場合、0x1100 の値が sub_100F88F8 に渡され、0x200 の 0x11 チャンクに 0x2200 バイトがメモリコピーされます。最後の memcpy は、固定サイズの 0x2000 バッファを隣接するヒープ メモリにオーバーフローさせます。

攻撃者は、ヒープにベクターの配列 0x7fe * 4 + 8 == 0x2000 をスプレーし、そのサイズの穴を作成します。これは、前述のオブジェクトによって割り当てられます。

while (_local_2 < this._bp35) // _bp35 == 0x2000
{
this._ok47[_local_2] = new Vector.<uint>(this._lb60); // _lb60 == 0x07FE
_local_3 = 0x00;
while (_local_3 < this._lb60)
{
this._ok47[_local_2][_local_3] = 0x41414141;
_local_3++;
};
_local_2 = (_local_2 + 0x01);
};
_local_2 = 0x00;
while (_local_2 < this._bp35)
{
this._ok47[_local_2] = null;
_local_2 = (_local_2 + 0x02);
};

ロシア人形 2

前の図が示すように、次の Vector オブジェクトの長さフィールドが 0x80007fff としてオーバーフローしているため、攻撃者はユーザー空間内の任意のデータを読み書きできます。

シェルコード

シェルコードは、flashvars の HTML からエクスプロイトに渡されます。シェルコードは、プレーンテキストで渡された実行可能ファイルである次の段階のペイロードを、UrlDownloadToFileA を使用して一時ディレクトリにダウンロードし、WinExec で実行します。

ペイロード & C2

このエクスプロイトは、APT28 バックドア CHOPSTICK およびCORESHELLマルウェア ファミリと特徴を共有するマルウェア バリアントを配信します。このマルウェアは、以前 CHOPSTICK バックドアで使用されていた RC4 暗号化キーを使用します。また、C2 メッセージには、CHOPSTICK バックドア通信で使用されるアルゴリズムに似たチェックサム アルゴリズムが含まれています。さらに、新しいマルウェアのネットワーク ビーコン トラフィックは、CORESHELL バックドアで使用されるものと似ています。 CORESHELL と同様に、ビーコンの 1 つに被害ホストからのプロセス リストが含まれています。また、CORESHELL と同様に、この新しいマルウェアは第 2 段階の実行可能ファイルをダウンロードしようとします。

新しいペイロードの C2 ロケーションの 1 つである87.236.215[.]246も、疑わしい APT28 ドメインssl-icloud[.]comをホストしています。同じサブネット ( 87.236.215.0/24 ) は、表 1 に示すように、いくつかの既知または疑わしい APT28 ドメインもホストしています。

ロシア人形テーブル

標的となった企業は、既知の APT28 の標的と一致する業界の国際的な政府機関です。

CVE-2015-1701 エクスプロイト

ペイロードには、パッチが適用されていない Microsoft Windows のローカル権限昇格の脆弱性 CVE-2015-1701 に対するエクスプロイトが含まれています。このエクスプロイトは、CVE-2015-1701 を使用して、ユーザー空間でコールバックを実行します。コールバックは、現在のプロセスとシステム プロセスの EPROCESS 構造体を取得し、データをシステム トークンから現在のプロセスのトークンにコピーします。完了すると、ペイロードはシステム プロセスの権限でユーザーモードで実行を継続します。

CVE-2015-3043 には既にパッチが適用されているため、このリモート エクスプロイトは完全にパッチが適用されたシステムでは成功しません。攻撃者が CVE-2015-1701 を悪用したい場合、まず被害者のマシンでコードを実行する必要があります。被害者のマシンへの許可されたアクセスを禁止すると、攻撃者は CVE-2015-1701 ペイロードを配信するために、新しい Flash エクスプロイトを作成するなど、他の手段を見つける必要があります。

Microsoft は CVE-2015-1701 を認識しており、修正に取り組んでいます。 CVE-2015-1701 は、Windows 8 以降には影響しません。

謝辞

このブログに寄稿してくださったすべての方々に感謝いたします。

  • FireEye の次のメンバー: Dan Caselden、Yasir Khalid、James “Tom” Bennett、GenWei Jiang、Corbin Souffrant、Joshua Homan、Jonathan Wrolstad、Chris Phillips、Darien Kindlund
  • マイクロソフトとアドビのセキュリティ チーム

 

参考: https ://www.mandiant.com/resources/blog/probable-apt28-useo

コメント

タイトルとURLをコピーしました