序章
TLS (スレッド ローカル ストレージ) コールバックは、Windows オペレーティング システムによって提供され、スレッドごとのデータ構造の追加の初期化と終了をサポートします。
以前に報告されたように、悪意のある TLS コールバックは、分析対策のトリックとしてかなり前から観察されており、PE ファイルに悪意のある TLS コールバック関数が含まれ、AddressOfEntryPoint フィールド (意図した実行の通常の開始) の前に実行される可能性があります。 PEヘッダーに。本質的に、無防備なアナリストや自動化されたセキュリティ ツールは、分析の開始時にマルウェアへの実際のエントリ ポイントを考慮せず、AddressOfEntryPoint が指す通常のオフセットにブレークポイントを挿入しないと、マルウェアへの実際のエントリ ポイントを見逃す可能性があります。
最近、子プロセスへの注入中に TLS コールバックを操作する Ursnif/Gozi-ISFB のサンプルに遭遇しました。マルウェア バイナリ (またはそのパッカー) の多くは、GetThreadContext/SetThreadContext または CreateRemoteThread Windows API 関数のバリエーションを使用して、インジェクション中にリモート プロセスのエントリ ポイントを変更しますが、このサンプル (および関連するクラスター) は比較的あまり知られていない方法を使用しています。ステルス技術。この標準的な教科書のアプローチからのわずかな逸脱により、一部の一般的なアンパッカーまたはツールが実行フローに従って機能しなくなる可能性があります。
分布
2017 年の初め以来、侵害された SharePoint アカウントを悪用して悪意のあるペイロードをホストし、スパム メールを介して URI を配布することを定期的に観察してきました。私たちが観察した主要なキャンペーンには、英国内での Dridex の配布と、オーストラリアでの Ursnif/Gozi-ISFB の配布が含まれています。この投稿で説明した最近観測された Ursnif の亜種は、スパム メールを介して発見されました。ルアーのサンプルを図 1 に示します。
図 1: Ursnif を配布する悪意のある電子メールのおとり
[REVIEW DOCUMENT] ボタンをクリックすると、マルウェアは次の場所からYourMYOBSupply_Order.zipという名前の ZIP ファイルをダウンロードします。
- https://eacg1-my.sharepoint.com/personal/steve_robson_eaconsultinggroup_com/_layouts/15/download.aspx?docid=<編集済み>& authkey =<編集済み>
ZIP ファイルには悪意のある JavaScript ファイルが含まれており、実行すると Ursnif/Gozi-ISFB ペイロードをダウンロードして実行します。
このペイロードのコマンド アンド コントロール (C2) サーバーは HTTPS 経由で通信し、使用されている侵害された SharePoint アカウントも HTTPS 経由で通信するため、配布のアクティビティを組織の通常のネットワーク アクティビティ内で特定することは困難です。
バリアント分析
実行時に、観察されたサンプル (MD5: 13794d1d8e87c69119237256ef068043) は、中断モードで CreateProcessW API 関数を使用して、(System32 フォルダーのsvchost.exeファイルを使用して) svchost.exeという名前の子プロセスを作成しようとします。
次に、 svchost.exeのプロセス ハロウイングのために、マルウェアはセクション オブジェクトを作成し、ZwMapViewOfSection を使用してセクションをマッピングします。 memset 関数を使用してマップされたセクションをゼロで埋め、次に memcpy を利用してアンパックされた DLL をその領域にコピーします。次にマルウェアは、ntdll.dll モジュールをウォークすることで、3 つの下位レベルの API 関数を解決します。
次に、マルウェアはエントリ シェルコードをメモリ内の新しくマップされた領域に構築します。
子プロセスのマップされたセクションを操作および識別するために、ZwReadVirtualMemory への呼び出しを使用してプロセスの PEB 構造を読み取ります。
次にマルウェアは、子プロセスの PE ヘッダーの保護権限を変更して、そのページへの書き込みアクセスを有効にします。次に、ZwWriteVirtualMemory への呼び出しを使用して、ターゲットの子プロセスで実行可能なsvchost.exeプロセスの先頭からオフセット 0x40 に 18 バイトのバッファーを書き込みます。次にマルウェアは、疑惑を避けるために領域保護を「読み取り専用」に巧妙に変更します。
再び、 svchost.exeの PE イメージの保護を変更する手順を繰り返し、プロセス実行可能ファイルの先頭から 0x198 バイトのオフセットに 8 バイトを書き込みます。
ステルス微調整
オフセット 0x198 は PE 実行可能ファイル内の TLS ディレクトリの場所であり、次の DWORD はディレクトリのサイズを表すため、このバッファーをオフセットに正しく配置すると、プロセスの TLS ディレクトリ オフセットが表されます (図 2 を参照)。マルウェアが、ディレクトリのオフセット 0x40 とサイズ 0x18 バイトを書き込んで、オフセット 0x40 にサイズ 0x18 バイトで作成済みのバッファをポイントする方法に注目してください。
図 2: TLS ディレクトリの場所とサイズ
TLS ディレクトリ構造を使用して 0x18 バイトのバッファーを解析すると、AddressOfCallBacks を表すポインターのリストを含むオフセットがポイントされます (図 3 を参照)。
図 3: ポインタを含む TLS ディレクトリ構造
オフセット 0xe058 を見ると、AddressOfCallBacks のリストを指しています (図 4)。メモリ内のオフセット 0xe058 に移動すると、オフセット 0xe068 にある唯一のコールバック アドレスが指されます。これは実際には実際のエントリです。ポイントコード (図 5)。
図 4: オフセット 0xe058
図 5: メモリ内のオフセット 0xe068
最後に、マルウェアは ZwUnmapViewOfSection を使用してビューのマップを解除し、ResumeThread を呼び出して、注入されたプロセスの悪意のある実行を開始します (PE ヘッダーにリストされている通常の AddressOfEntryPoint ではなく、注入された TLS コールバック アドレスから)。したがって、実行は最初に挿入された TLS コールバックに到達します (図 6 を参照)。
図 6: 実際のエントリ ポイント
影響
漏洩した Ursnif/Gozi-ISFB のソース コードは、標準の DllMain 呼び出しエントリ ポイントを使用して、挿入された DLL イメージを初期化し、そのエントリを実行しました (図 7 を参照)。
図 7: 流出した Ursnif ソース コードで使用されている DllMain 呼び出し
この新しい亜種は、攻撃者がシグネチャを回避するためにマルウェアを変更しているだけでなく、よりステルスな技術を装備していることを示しています。認識されていないデバッグ環境または検出フレームワークは、実際の隠された TLS コールバック エントリ ポイントを見逃す可能性があり、マルウェアが内部で悪意のあるアクティビティを実行できるようになります。
侵害の痕跡
ファイル名 :YourMYOBSupply_Order.zip
MD5 : f6ee68d03f3958785fce45a1b4f590b4
SHA256: 772bc1ae314dcea525789bc7dc5b41f2d4358b755ec221d783ca79b5555f22ce
ファイル名: YourMYOBSupply_Order.js
MD5 : c9f18579a269b8c28684b827079be52b
SHA256: 9f7413a57595ffe33ca320df26231d30a521596ef47fb3e3ed54af1a95609132
ファイル名: ダウンロード[1].aspx
MD5 : 13794d1d8e87c69119237256ef068043
SHA256 : e498b56833da8c0170ffba4b8bcd04f85b99f9c892e20712d6c8e3ff711fa66c
Comments