Ammyyハッキングツールにおいて確認されたShim Database(SDB)インジェクション攻撃

ASECは、FlawedAmmyyバックドアからClopランサムウェアまでのフローの確認中に珍しい方式の攻撃手法を確認したため、共有する。

Ammyyバックドアは過去のブログ(https://asec.ahnlab.com/1237)で言及したとおり、社会工学的な方法で開始され、ダウンローダーを経て最終的にバックドア型マルウェアがインストールされる方式で作動する。以降、一種の潜伏期間を経てCLOPランサムウェアがインストールされ、ユーザーのシステムを暗号化するが、Ammyyバックドアが生成したマルウェアのうちWindowsアプリケーションのShim Database、すなわちsdbファイルを悪用して、システムに別のバックドアをユーザーが認識しづらい方式でインストールされる種類のマルウェアが確認された。loader32.exe等の名前で生成されるInjectorマルウェアとsdb_msf_32_crypted.dll等の名前で生成される不正なsdbインストール機能を持つマルウェアである。

sdbファイルはWindows OS環境におけるソフトウェアに対する下位互換をサポートするための用途で作られたメカニズムとして、様々な形態のCompatibility Fixを使用できる。アプリケーションがDLLを呼び出して使用するとき、その中間でsdbファイルのコードを通して修正され、作動する方式である。マルウェアは、このような正常な目的により提供されたアプリケーションのパッチメカニズムを悪用して作動する。 

[図1] – sdbを利用したバックドアのインストール

このマルウェアのフローを簡単に整理すると、以下の通りとなる。

1.Ammyyバックドアがloader32.exesdb_msf_32_crypted.dllを生成する。
2.loader32.exesdb_msf_32_crypted.dllを直接ロード、または他のプロセスにインジェクションする。
3.loader32.exeはエンコードされたバックドアPEを特定レジストリに書き込む。
4.以降、不正なsdbファイルを生成してsdbinst.exeを利用し登録する。このsdbファイルの対象はservices.exe、具体的にはこのプログラムの関数であるScRegisterTCPEndpoint()である。
5.システムの再起動時、services.exeが実行され、このとき登録した不正なsdbが適用される。
6.関数ScRegisterTCPEndpoint()は、services.exeの初期ルーティンで実行される。すなわち、services.exe実行後にservices.exeのパッチされたシェルコードがすぐ実行される。
7.シェルコードはエンコードされたバックドアPEが含まれたレジストリを読み、復号した後にメモリ上で実行する。
8.最終的に、再起動するたびにservices.exe内部にはバックドア型マルウェアが作動するようになる。

上記のとおり、このマルウェアはまずエンコードされた実際のバックドア型マルウェアを以下のようなレジストリに書き込む。

エンコードされたバックドアが登録されるレジストリ:HKLM\SOFTWARE\Microsoft\[ランダム]

[図2] – レジストリに登録された、エンコードされたバックドアPE

以降、不正なsdbファイルを生成してsdbinst.exeユーティリティプログラムを利用し、このsdbファイルを登録する。このようにして登録されたsdbファイルは、C:\Windows\AppPatch\Customというパスに保存される。

不正なsdbファイルは対象となるプロセスがservices.exeであり、特定のオフセットを内部に含むシェルコードに置き換える機能を持っている。この方式は、Shimによって公式的にサポートされている機能ではなく、具体的に特定アドレスのメモリをパッチする目的でマルウェアの製作者が直接実装してsdbファイルを生成する。

[図3] – 生成された不正なsdbの構造

この特定オフセットは、services.exeの内部関数であるScRegisterTCPEndpoint()関数として、services.exeの実行中にこの関数を呼び出すと、この関数の代わりにシェルコードが実行される方式である。シェルコードは過去にレジストリに登録したエンコードされたPEをデコードして、メモリ上で実行させる。

[図4] – services.exeのメモリ上でパッチを行うオフセットアドレス
[図5] – このオフセットは、関数ScRegisterTCPEndpoint()である

参考として、ScRegisterTCPEndpoint()関数のオフセットは、OSバージョンごとに異なる可能性があるため、マルウェアではsdbファイルを作成するときに直接そのオフセットを取得した後で生成する。まず、Windowsのシステムパスでservices.exeをメモリに読み込む。

[図6] – services.exeを直接読み込むルーティン

以降、ScRegisterTCPEndpoint()関数の特徴とも言えるハードコーディングされた文字列「DisableRPCOverTCP」を探す。この文字列は、関数ScRegisterTCPEndpoint()関数の末尾に位置する。以降、この位置から上に探索しながら関数の開始ルーティンを求める。

[図7] – ScRegisterTCPEndpoint()関数の末尾に位置するハードコーディングされた文字列

Shimは、プロセスが生成されるときに適用される。現在の対象がServices.exeのため、以降再起動を行うと不正なsdbが適用され、不正な行為が実行される。また、不正な行為を実行する主体は、結果的に正常なシステムプロセスであるservices.exeとなる。

バックドア型マルウェアは、感染したシステムの基本情報を取得した後、C2サーバーに転送してC2との接続が確立されると、以降コマンドを実行することができる。コマンドには、ファイルの照会、生成および削除、PipeによるCMDコマンドの実行およびその結果を再びC2に転送するバックドアの基本的な機能が存在する。

[図8] – 感染したシステムの情報を直接求めるルーティン

これにより、Ammyyバックドアによってすでに不正なsdbファイルがシステムにインストールされている場合、Ammyy、Injector等のマルウェア以外にも、インストールされたsdbファイルも治療する必要があり、そうしないとバックドアは再起動後に正常なプロセスであるservices.exe内で作動するようになる。すなわち、コマンドを受けて不正な行為を実行するバックドアの主体がservices.exeになることによって、システムが感染している事実を認知しにくくなる。

これらのsdbを利用した攻撃方法は、攻撃グループFIN7、または他の名前でCarbanakが使用された手法と類似している。
https://www.fireeye.com/blog/threat-research/2017/05/fin7-shim-databases-persistence.html

当社の製品では、これらのsdbファイルに対するジェネリック(Generic)診断が反映され、「sdbinst.exe」プロセスによってそのsdbファイルが作動する前に事前ブロックが可能である。

これに関連する当社の診断名は以下の通りである。

診断名

– FlawedAmmyy RAT:Backdoor/Win32.Flawedammyy
– sdbインストールマルウェア:Trojan/Win32.Loader, Trojan/Win32.Injector
– 不正なsdbファイル:BinImage/Sdb.Gen, BinImage/Malsdb.S1, BimImage/Malsdb.S2
– バックドア型マルウェア:Backdoor/Win32.Agent

行為検出時の診断名

– Malware/MDP.SystemManipulation.M2265

0 0 vote
Article Rating!
guest
0 Comments
Inline Feedbacks
View all comments