** 本記事は、A new APT uses DLL side-loads to “KilllSomeOne” の翻訳です。最新の情報は英語記事をご覧ください。**
最近、悪意のあるコードを実行するために DLL のサイドローディングが使用されたケースが確認されました。サイドローディングとは正規の DLL ファイルを装った悪意のある DLL ファイルの使用を意味し、悪意のあるコードのロードおよび実行は Windows の正規の実行可能ファイルに依存します。
この手法は決して新しいものではありません。2013 年に一部の APT グループ (ほとんどが中国国内) によって最初に使用され、以後サイバー犯罪グループの間で通常の攻撃手段に加えられるようになりました。しかし、今回の攻撃で使用されるペイロードはこれまでに見られたものとは異なります。また、いくつかの検体のファイル名には拙い英語で政治的な内容のプレーンテキストが使われている点も特徴的です。
今回確認されたケースには、ある共通項があります。プログラムデータベース (PDB) パスです。今回の検体はすべて同様の PDB パスを使用しており、そのうちのいくつかは「KilllSomeOne」というフォルダ名を含んでいます。
ミャンマーの NGO やその他の組織を標的としていること、また使用されたマルウェアの特性から、今回の攻撃には中国の APT グループが関与している可能性が高いと思われます。
シェルゲーム
今回ソフォスでは、同一の攻撃者による 4 つの異なるサイドローディングの利用シナリオを確認しました。これらのうち 2 つはシンプルなシェルを含むペイロードを送信し、そのほかの 2 つはより複雑に構成されたマルウェアを送信しています。これらのペイロード構成の両方が、同一の攻撃の中で使用されました。
シナリオ 1コンポーネント |
|
---|---|
Aug.exe | 正規のローダー (もともとは Microsoft のアンチウイルスコンポーネントである MsMpEng.exe) |
mpsvc.dll | 悪意のあるローダー |
Groza_1.dat | 暗号化されたペイロード |
攻撃に使われたメインのコードは、mpsvc.dll からエクスポートされた関数の ServiceCrtMain に含まれています。この関数はファイル Groza_1.dat 内に保存されており、最終的なペイロードをロードおよび復号化します。
暗号化はシンプルな XOR 交換を使って行われており、次のようなテキストがキーとして使われています: Hapenexx is very bad
また今回の攻撃で使われているローダーのバイナリを分析する中で、次の PDB パスが見つかりました。
C:\Users\guss\Desktop\Recent Work\U\U_P\KilllSomeOne\0.1\msvcp\Release\mpsvc.pdb
シナリオ 2コンポーネント |
|
---|---|
AUG.exe | 正規のローダー (Microsoft の DISM.EXE の名前を変えたもの) |
dismcore.dll | 悪意のあるローダー |
Groza_1.dat | 暗号化されたペイロード |
ローダーのPDB パスは以下の通りです。
C:\Users\guss\Desktop\Recent Work\U\U_P\KilllSomeOne\0.1\msvcp\Release\DismCore.pdb
メインのコードは、エクスポートされた関数 DllGetClassObject 内にあります。
今回のシナリオでも最初のケースと同じペイロード名 (Groza_1.dat) とパスワード (Hapenexx is very bad) が使用されていますが、今回はファイル名と復号化キーの両方が 1 バイトの XOR 交換によって暗号化されています。
どちらのケースでも、ペイロードは Groza_1.dat という名前のファイルに保存されています。ファイルの内容は PE ローダーのシェルコードであり、最終的なペイロードを復号化し、メモリにロードして実行します。ローダーコードの最初のレイヤーには、未使用の文字列 AmericanUSA. が含まれています。
PE ローダーのシェルコードは最終的なペイロードを復号化し、メモリにロードして実行します。最終的なペイロードは DLL ファイルで、その中に以下のような PDB パスがあります。
C:\Users\guss\Desktop\Recent Work\UDP SHELL\0.7 DLL\UDPDLL\Release\UDPDLL.pdb
DLL は、シンプルなリモートコマンドシェルであり、ポート 9999、IP アドレス 160.20.147.254 のサーバーに接続します。コマンド & コントロールサーバーから受信したデータを復号化する際、コードに含まれる次の文字列を使って復号化キーが生成されます: Happiness is a way station between too much and too little.”
別の手口を使った KillSomeone
今回確認されたほかの 2 つのタイプの KillSomeOne DLL サイドローディングでは、シェルが簡易であったのに対して、インストーラは非常に洗練されていました。一方はマルウェアを隠しながらデータを収集するファイルスペースを確保するために必要な作業を行います。それらは異なるペイロードファイル (一方は adobe.dat、もう一方は x32bridge.dat)を含んでいますが、この 2 つのファイルから派生する実行可能ファイルは本質的に同じであり、いずれものPDB パスは以下のようになっています。
C:\Users\guss\Desktop\Recent Work\U\U_P\KilllSomeOne\0.1\Function_hex\hex\Release\hex.pdb
シナリオ 3コンポーネント |
|
---|---|
SafeGuard.exe | 正規のローダー (Adobe のコンポーネント) |
hex.dll | 悪意のあるローダー |
adobe.dat | 暗号化されたペイロード |
悪意のあるローダーは、adobe.dat という名前のファイルからペイロードをロードし、シナリオ 1 で使用したものと同様に XOR 交換によって復号化します。唯一の大きな違いは暗号化キーです。このケースでは HELLO_USA_PRISIDENT という文字列が使用されています。
シナリオ 4 コンポーネント | |
---|---|
Mediae.exe | 正規のローダー |
x32dbg.exe | 正規のローダー |
msvcp120.dll | 正規の DLL (x32dbg の依存ファイル) |
msvcr120.dll | 正規の DLL (x32dbg の依存ファイル) |
x32bridge.dll | 悪意のあるローダー |
x32bridge.dat | ペイロード |
シナリオ 4 では、ローダーの PDB パスは以下のものに変更されています。
C:\Users\B\Desktop\0.1\major\UP_1\Release\functionhex.pdb
メインのコードは、エクスポートされた関数 BridgeInit 内にあります。
ペイロードはファイル x32bridge.dat に格納され、XOR 交換によってエンコードされます。キーは、ケース 3 と同様に HELLO_USA_PRISIDENT です。
攻撃の展開について
これらのシナリオにおいて、2 つのペイロードファイルの初期段階に現れるのはインストーラです。このインストーラは、初めの悪意のある DLL によって .dat ファイルからメモリにロードされます。ロードされる際、インストーラにより DLL サイドローディングのもう一方のケースのすべてのコンポーネントが、複数のディレクトリに配置されます。
- C:\ProgramData\UsersData\Windows_NT\Windows\User\Desktop
- C:\Users\All Users\UsersData\Windows_NT\Windows\User\Desktop
- %PROFILE%\Users
- C:\Users\Public\Public Media
インストーラはまた、ファイルに hidden 属性と system 属性を割り当てることで、ユーザーからファイルを隠します。
次に、インストーラは攻撃の初期段階で使用される実行可能ファイルを閉じ、explorer.exe の新しいインスタンスを開始することで、インストールされた DLL コンポーネントをサイドローディングします。標的のシステムのプロセスリストには別の explorer.exe のプロセスのみが表示されるため (名前が変更されている正規の実行可能ファイルは表示されません)、攻撃の実行を隠蔽することが可能です。
また、インストーラは、「AAM」で始まる実行中のプロセスを探し、プロセスを強制終了することで、C:\ProgramData および C:\Users\All Users 内のプロセスに関連付けられているファイルを削除します。これは、以前の PlugX サイドローディングのケースで正規のファイル名「AAM Updates.exe」が使用されていたためと考えられ、これによって以前の感染によるファイルが削除されます。また、サイドローディングの実行可能ファイルの展開を開始する際にタスクを作成するなど、攻撃の土台を作るいくつかの作業を行います。サイドローディングの実行可能ファイルは以下の通りです。
schtasks /create /sc minute /mo 5 /tn LKUFORYOU_1 /tr
さらに、同様のことを行うレジストリの自動実行キーを作成します。
Software\Microsoft\Windows\CurrentVersion\Run\SafeGuard
サイドローディングされた DLL は、実行時にイベント名を使用して自身を識別します。C:\ProgramDat から実行される場合は LKU_Test_0.1 で、%USERHOME% から実行される場合は LKU_Test_0.2 です。
インストーラは、データ抽出用にシステムも構成します。リムーバブルドライブと非システムドライブでは、「ごみ箱」のようなフォルダの作成用設定を含む、desktop.ini ファイルが作成されます。
[.ShellClassInfo] CLSID={645FF040-5081-101B-9F08-00AA002F954E} IconResource=%systemroot%\system32\SHELL32.dll,7
次に、サブフォルダという「ファイル」内のドライブ上にあるごみ箱にファイルをコピーし、ボリューム名や空きディスク容量などのシステム情報も収集します。最後に、ドロップされたすべての .dat ファイル (ほかのサイドローディングシナリオで使用されるものを含む) をインストールディレクトリにコピーします。これにより、インストーラは次のペイロードであるローダーを含むファイル akm.dat をロードします。
ローダーはシンプルな DLL ファイルであり、ほかのペイロードとは異なり、暗号化されていません。これは、単一のエクスポート名である Start (DLLのメイン関数) を持つプレーン Windows PE ファイルであり、AUG.exe (Microsoft DISM.EXE の名前が変更されたもの) がある場所でコマンドラインを構築します。
c:\programdata\usersdate\windows_nt\windows\user\desktop\AUG.exe
次に、コマンドラインを実行することにより、サイドローディングのシナリオ 1 または 2 の実行が開始されます。
いくつかの兆候
T一般に、標的型攻撃の背後にいる攻撃者は均質ではありません。彼らはそれぞれ大きく異なるスキルや能力を持っています。高度なスキルを持っている攻撃者もいれば、平均以下の攻撃者もいます。
今回調査を行った攻撃に関与しているサイバー犯罪グループは、上記のどちらにも明確に当てはまりません。彼らはコーディング、特にペイロードの暗号化においてはシンプルな形式を好みます。また、検体に隠されたメッセージは子供のように稚拙です。一方、ターゲティングや攻撃の展開方法に関しては高度な技術を有し脅威となる APT グループとしての実力を持っています。
ソフォスラボの分析では、このグループが PlugX のような従来の手法に戻るのか、それとも独自のコードを使い続けるのかは明らかではありません。今後も彼らの活動を監視し、さらなる進化を追跡していきます。
「KillSomeOne」の攻撃に関するインジケーターは、こちらの SophosLabs Github で確認できます。