APT&標的型攻撃
ギャンブルサイトを狙う新たな標的型攻撃グループ「Earth Berberoka」の多段階攻撃手法を解説
トレンドマイクロは、標的型サイバー攻撃を仕掛けるグループを新たに発見し、「Earth Berberoka」と名付けました。「GamblingPuppet」などの別名を持つこのグループは、トレンドマイクロの分析では、主にギャンブルサイトを標的としていることが判明しました。
トレンドマイクロは、標的型サイバー攻撃を仕掛けるグループを新たに発見し、「Earth Berberoka」と名付けました。「GamblingPuppet」などの別名を持つこのグループは、トレンドマイクロの分析では、主にギャンブルサイトを標的としていることが判明しました。またトレンドマイクロの調査では、Earth BerberokaがWindows、Linux、macOSプラットフォームを攻撃対象としているほか、これまで中国語話者に起因するとされてきたマルウェアファミリを用いていることが明らかとなりました。本ブログ記事では、Earth Berberokaが攻撃キャンペーンに用いたWindows端末を標的とするマルウェアファミリの概要についてお伝えします。このマルウェア群には、「PlugX」や「Gh0st RAT」などの現在もアップグレードされ続けている古くから存在するマルウェアファミリや、トレンドマイクロが「PuppetLoader」と名付けた多段階の攻撃を実行する新種のマルウェアファミリが含まれています。
技術的分析
ローダ型マルウェア「PuppetLoader」による多段階攻撃
トレンドマイクロは、新種のマルウェアファミリを発見し、PuppetLoaderと名付けました。PuppetLoaderは、五段階の攻撃活動を行う複雑なマルウェアファミリであり、読み込まれたモジュールを乗っ取って悪意のあるコードを実行したり、改ざんされたビットマップ画像(BMP)ファイル内に不正なペイロードやモジュールを隠匿したりするなど、興味深い手法が採用されています。
第一段階:難読化ツールとローダ型マルウェア
不適切に実装されたRC4暗号方式
第一段階では、ハードコードされた鍵およびRC4(Rivest Cipher 4)とみられるアルゴリズムを使ってペイロードデータのBLOB(Binary Large OBject)が復号されます。しかしながら、暗号化に用いられるコードの疑似乱数生成において、暗号化の「スワップ」操作が不適切に実装されていました。その結果、ヘッダとペイロードの最初の数セクションは適切に暗号化されている一方で、残りのセクションはほとんど平文で残されていました。
このハードコードされた鍵と欠陥のあるRC4の実装は、マルウェアファミリ「TigerPlug」にも採用されたとみられており、おそらくはPlugXマルウェアを拡散するためだと考えられます。トレンドマイクロは、Tigerplugの動作や特徴に関する公開レポートを見つけることはできませんでした。
PuppetLoaderが読み込まれたモジュールを乗っ取る手口
ペイロードは復号された後、感染端末のメモリ内に読み込まれ、ステルスモードで実行されます。PuppetLoaderは、Windows\System32ディレクトリより正規のDLLを読み込むことから始めます。次に読み込みプロセスを乗っ取り、正規ライブラリを悪意のあるライブラリに置き換えます。これは、NtQueryAttributesFile、NtOpenFile、NtCreateSection、NtMapViewOfSection、NtQuerySection、ZwCloseなどのNTDLL APIを割り込ませる(フックする)ことで実行されます。
PuppetLoaderは、RtlPushFrame、RtlPopFrame、RtlGetFrameなどのドキュメント化されていないNTDLL APIを使って、割り込ませた関数が自身を間接的に呼び出す際に発生させる二重再帰を回避します。
悪意のあるペイロードを適切に読み込むために「LDFM」とタグ付けされたフレーム(図1)が割り当てられた後、「ファイル名のメモリアドレス」や「割り当てられたバッファのハンドル」、「悪意のあるペイロードを含んだIPアドレス」などの必要なパラメータが入力されます。それらの値が識別された後、一部のパラメータはすぐに設定される一方で、残りのパラメータは後で設定されます。
次にLdrLoadDllが呼び出され、正規ライブラリ「asyclfilt.dll」が読み込まれます。その後、先ほど割り込ませたAPI関数を呼び出させることで、読み込まれたDLLの名前が正規DLLの「lz32.dll」に置き換えられます。そしてこの正規DLLのコンテンツは、割り込ませたNtMapViewOfSection関数に内在する悪意のあるペイロードに置き換えられます。
その後LdrLoadDll関数は、新たに読み込まれた不正画像をリベースし、必要な依存関係をすべて読み込みます。PuppetLoaderは、LdrLoadDLL関数からハンドルを返されるとフレームが不要となるため、RtlPopFrameを呼び出してフレームを解放(ポップ)し、先ほど割り込ませた関数を解除します。その後GetModuleHandleW(asycfilt.dll)を呼び出して読み込みが成功したかどうかを確認します。
次にPuppetLoaderは、エクスポート関数「Install」の動的名前解決を行い、パラメータ値を「11BF29E1371C0D83C530BD1BF346」に設定することで、OneTimeという関数に復号します。PuppetLoaderは、コマンドラインのパラメータにパスワード「whk0q9ogev6ofg8d」を用いて、同じく欠陥のあるRC4実装を使用します。
これらの乗っ取り手順により、以下のような結果となります。
- 読み込まれたasycfilt.dllモジュールは、カレントプロセス内に読み込まれたすべてのモジュールを含むPEB_LDR_DATA構造体を解析処理(パース)を行うと確認できます(図2)
- プロセス監視ツールに基づき、lz32.dllが開封されます(図3)
- PuppetLoaderのペイロード(ドロッパ)のみが読み込まれ、上記のライブラリは実際には読み込まれません。
第二段階:読み込まれたPuppetLoaderのドロッパ
第一段階で読み込まれたドロッパは、感染端末内に複数のファイルを作成・投下(ドロップ)します。
ファイル |
機能 |
CpuppetProcessFileSharer |
さまざまな感染段階を踏む過程でデータを共有するために用いられる |
Config.ini |
ComputerNameに基づき、実行理由およびグローバル一意識別子(GUID)の値を保存する |
MSVCPX00.dll |
BasicLoaderが読み込むDLLファイル |
verisign.bmp |
暗号化されたコアモジュールを含むBMPファイル |
bitmap.bmp |
暗号化されたClient.MainConsoleを含むBMPファイル |
ハードコードされたGUIDがCPuppetProcessFileSharerに注入されます。
GUID({78106D5F-CD1A-A8C4-A625-6863092B4BBA})
CPuppetProcessFileSharer(C:\\Users\\Public\\Pictures\\Desktop.inf)
これは、第二段階が完了したことを示す目印であると考えられます。
Config.ini(C:\Users\Public\Videos\Config.ini)
Config.iniには、上記のGUIDおよび実行理由⦅鍵(whk0q9ogev6ofg8d)を用いて暗号化されるハードコードされた値「StartupBasicLoader」⦆が含まれています。
以下のコマンドラインパラメータを用いてsvchost.exeをサスペンドモードで起動します。
-cmd -NoModuleLoadDLL -DisplayName=KeepAuthority.Client.MainConsole.x64.Release -InvokeMethodName=Run -InokeMethodParam=NULL”
これも上記の鍵を使って暗号化された後、svchost.exe内に新たなスレッドが作成され、BasicLoaderのペイロード「MSVCPX00.dll」が読み込まれます。興味深い点は「-InokeMethodParam」に誤植があることです。
第三段階:ローダ型マルウェア「BasicLoader」
第三段階は、まずBasicLoaderがCpuppetProcessFileSharer内にハードコードされた以下のGUIDを追加することから始まります。これは第二段階と同様に、第三段階が実行されたことを示す目印であると考えられます。
GUID({78106D5F-CD1A-A8C4-A625-6863092B4BBA})
BasicLoaderは、Users\\Publicディレクトリ(デスクトップ、ドキュメント、ダウンロード、ミュージック、ピクチャ、ビデオ)内に存在するBMPファイルを検索し、必要な構造情報を渡すためのBMPファイルを見つけ出します。このBMPファイルに付加されたペイロードは復号された後、メモリ内に読み込まれて実行されます。このBMPファイルは、わずか33x11ピクセル(338バイト)で構成されており、これに付加されるデータは、同じ欠陥のあるRC4実装で暗号化されたペイロードです(図4)。
第四段階:コアモジュール
第四段階は、ハードコードされた以下のGUIDがCPuppetProcessFileSharerに追加されるところから始まります。他の攻撃段階と同様に、これは第四段階が実行されたことを示す目印であると考えられます。
GUID({7D8DA9DC-1F3B-2E5C-AA59-9418E652E4AA})
その後PuppetLoaderは、システムログを記録するためにスレッドを起動します。このスレッドはログ情報をパイプ経由で受信し、ハードコードされた名前を用いてファイルに保存します。ログ情報は、別のモジュールやプロセスからもたらされる場合があります。トレンドマイクロの分析では、各ログファイルのエントリが区切り文字(0xAABBCCDD)で区切られ、カスタムRC4パスワードとメッセージ長がその後に続いていることが明らかとなりました。
復号されたログは、以下の情報を含むことができます。
- 実行されたモジュール
- コアモジュールが実行されたパラメータ
- どの攻撃段階(CpuppetProcessFileSharerに追加されたGUID)でアクションが実行されたか
第四段階では、以下のコマンドライン引数も実装されます。
- -DisplayName
- -InokeMethodParam (sic)
- -InvokeMethodName
- -NoModuleLoadDLL
- -LoadShellcode
これらの引数の多くはほとんど自明ですが、注目に値する2つの引数について概説します。
- 「-NoModuleLoadDLL」は第一段階のローダと同じ手法を用います
- 「-LoadShellcode」はメモリブロックを割り当てた後、シェルコードをコピーして実行します
第五段階:Client.MainConsole
Client.MainConsoleはC++で書かれた当該攻撃活動の目的となるクライアントバイナリであり、PuppetLoaderの感染チェーンにおける最後の攻撃段階でもあります。
Client.MainConsoleのコードは、異なるタスクを処理するいくつかのクラスで構成されており、対話型シェルの管理や、ファイルのアップロード / ダウンロード、新たなモジュールのインストール、感染端末上でのユーザ操作の監視、コールバック関数の実行(条件が満たされた場合)などがあります。
- CPipeCmdManager - 対話型シェルマネージャ
- 引数:
- -flushusersession
- -createcmd
- -destorycmd (sic)
- -excutecmd
- -cmdkeepalive
- 引数:
- CommonLib::CcmdMulArgDecoder - コマンドライン引数のデコーダ(コマンドライン引数に関連する追加モジュール)
- 引数:
- -ModuleLog
- -Logext
- -ModuleID
- -ModuleVersion
- -MountStatus
- -Path
- -IsDelete
- -ModuleKeepAlive
- -UploadFile
- 引数:
次にクライアントは、UDP(User Datagram Protocol)を介して遠隔操作サーバ(C&Cサーバ)との通信を確立し、さまざまな種類のカスタムUDPパケットを認識します。
UDPパケット |
説明 |
RemoteModuleCommandPacket |
対話型シェルで実行されるコマンド |
RemoteModuleCommandResultPacket |
シェルコマンドの実行結果 |
FileTransferContent_Packet |
ファイルをアップロードするかダウンロードするかを決定する |
UploadFilePacket |
アップロードされたファイルのコンテンツ |
FileManage_FolderContent_Packet |
フォルダのコンテンツ |
VecProcessPacket |
実行中のプロセスを持つベクトルオブジェクト |
InstallModulePacket |
インストールされる暗号化されたモジュールを持つBMP |
RemoteClientSystemInfoPacket |
新たなユーザがログインするたびにログインコールバックによって送信される |
ModuleKeepAlivePacket |
接続がまだ有効であることをC&Cサーバに通知する |
当該攻撃活動の目的となるクライアントに実装されているバックドア機能を以下に示します。
- 対話型シェル
- ファイルのアップロード
- ファイルのダウンロード
- ファイルの一覧表示
- プロセスの終了
- プロセスの一覧表示
- モジュールのインストール
- ログインコールバック
- リモートデスクトップ接続(RDP)セッションの列挙
UDPによる通信では、同じRC4暗号が用いられます。送信 / 受信したパケットには、16バイトのRC4鍵とRC4を用いて暗号化されたペイロードの長さが含まれており、その後に暗号化されたペイロード本体を含む別のパケットが続きます。
遠隔操作ツール「oRAT」による不正活動
トレンドマイクロが今回の調査中に入手したWindows / macOSを標的とするもう一つのマルウェアファミリの検体は「oRAT」でした。興味深いことに、Go言語で書かれたoRATの検体を分析したのは今回が初めてでした。
分析時に発見されたoRATのドロッパは、Electron JSフレームワークとDMG(ディスクイメージ)ファイルを用いて不正に作成されたチャットアプリ「MiMi」でした。oRATおよびドロッパに関する詳細は、近日公開予定のリサーチペーパーをご参照ください。
Windows / macOSを標的とする検体のバージョンはどちらも0.5.1であり、同じ機能、同じ構成となっています。
構成ファイルとAES復号鍵は、PE(Portable Executable)ファイルのオーバーレイに暗号化された形で付加されています。
この構成ファイルは、AES-GCM(AES ガロア/カウンタモード)アルゴリズムを使って復号されます。次にoRATは復号された構成ファイルを解析処理した後、構成設定でゲートウェイ / トラフィックにおけるフォワーダのモードが指定されている場合は、それを有効にします。
oRATは背後にいるオペレータが感染端末に直接接続し、GET / POST要求を介してコマンドを実行できるようにするために、感染端末上でローカルサーバを起動し、制御コマンドの構成設定において指定されたポート上で待機します。
ネットワーク通信は、ファイルの設定により平文または暗号化が可能です。
- 「tcp」 - 平文
- 「stcp」 - golang-tlsライブラリを用いた暗号化されたTCP通信
- 「sudp」 - Quic-goライブラリを用いた暗号化されたUDP通信
制御サーバは、経路情報を登録することで実装されます。このシンプルな仕組みにより、GET / POST要求はGo言語による内部コマンドとしてそのまま変換されます。このためURLを要求すると、感染端末上で対応するコードが実行されます。
トレンドマイクロは、以下の経路情報が登録されたoRAT検体を入手しました。
- GET /agent/info
- GET /agent/ping
- POST /agent/upload
- GET /agent/download
- GET /agent/screenshot
- GET /agent/zip
- GET /agent/unzip
- GET /agent/kill-self
- GET /agent/portscan
- GET /agent/proxy
- GET /agent/ssh
- GET /agent/net
PuppetDownloader(C++ダウンローダ)による不正活動
トレンドマイクロは調査を進める中で、AdobeFlashPlayerのアップデートと偽り、C++で書かれたPuppetDownloaderを配信する不正サイトを発見しました。
この感染活動は、C++で書かれた実行ファイルから始まり、Winsock APIを通じて特定のポート内のドメインまたはIPアドレスに接続します。ダウンロードされたコンテンツはSMTemp.datとして保存されます。その後、実行ファイルの名前とハードコードされたXOR(排他的論理和)鍵を使ってLoader.dllが復号され、ディスクにコピーされます。何らかの理由で実行ファイルの名前が変更された場合、DLLの復号は失敗し、PuppetLoaderの第二段階は実行されません。
SMTemp.datが存在する場合、Loader.dllはSMTemp.datを実行します。その後、PuppetDownloaderは、実行ファイルが正規インストーラであると被害者に思わせるために、Adobe Flash Playerの正規インストーラを復号し、実行します。
トレンドマイクロは調査中に、PuppetDownloaderの第二段階で実行されるペイロードを設置していたC&Cサーバがオフラインであることに気付きました。また、PuppetDownloaderの文字列を復号する活動が、文字列「2020-05-24 13:00:29」を鍵とする単純なXORであることも興味深い点です(図7)。文字列のデコードに用いられたパスワードの最初の13バイトは、最後の13バイトと同じものです。
調査の結果、マルウェアファミリ「PuppetLoader」との関連性が確認されたことから、トレンドマイクロは、これらのダウンローダを「PuppetDownloaders」と名付けました。
- PuppetDownloaderとPuppetLoaderは、どちらも同じ鍵を用いて同じ文字列を復号します
- PuppetDownloaderとPuppetLoaderは、どちらも埋め込まれたLoader.dllを復号するために用いられた同じXOR鍵を使用します
- PuppetDownloaderとPuppetLoaderが復号したLoader.dllは以下のような文字列を共有します。これは、双方のDLLをコンパイルする際に共通のフレームワークが用いられたことを示唆しています
[-] UnExist pwszModuleFunName:
MFC socket downloaderによる不正活動
さらにトレンドマイクロは、WinRARを用いて作成された自己解凍(SFX)書庫が、MFC(Microsoft Foundation Class)ライブラリフレームワークを使って作成されたダウンローダを投下することを確認しました。これらのMFC socket downloaderは、同じ構造をしており、1つの関数がソケットを作成し、ドメインまたはIPアドレスに接続します。その後、短い文字列を送信し、「recv」を2回呼び出します。その後は、EnumDesktopsAまたはEnumWindowsへの呼び出しを通じてダウンロードされたコンテンツが実行され活動が継続されます。
MFC socket downloaderは、ポート番号「8080」、「29527」、「8885」へのアクセスを試みます。また、文字列「feiji」、「@5436」、「fhfgj@jfggdsg」を作成されたソケットに送信します。トレンドマイクロは、同じマルウェアファミリに属する複数の検体を追加で発見しました。これらの検体は同じ構造を持ち、同一文字列を送信します。ただし、複数の攻撃者グループがMFC socket downloaderのソースコードを密かに共有している可能性があります。
遠隔操作ツール「PlugX」による不正活動
PlugXは、10年以上にわたり諜報活動用不正ツールとして用いられてきた遠隔操作ツール(RAT)です。トレンドマイクロは入手・分析した検体情報に基づき、Earth Berberokaが32ビット / 64ビットアーキテクチャを狙ってPlugXを用いていることを突き止めました。
マルウェアファミリ「PlugX」は、Helloパケット内に32ビットの符号なし整数「DWORD」を埋め込み、送信します。次に感染端末は、「yyyymmdd」形式の日付のように見えるHELLOパケットをC&Cサーバに送信します。
トレンドマイクロは分析した複数の検体からDWORD「20190520」、「20201106」、「20210804」を発見しました。これは、検体のバージョンが過去3年以内に開発されたことを示しています。
トレンドマイクロが発見した検体はすべて同じ方法で読み込まれており、DLLサイドローディングに対して脆弱な署名付き正規ファイルが、最終的なペイロードを含む三番目のファイルを復号して読み込む悪意のあるDLLと一緒に配置されます。
これらの悪意のあるDLLファイルの1つには、以下のようなPDB(program database)パスが存在します。
C:\Users\Administrator\Desktop\Plug7.0(Logger)\logexts\x64\Release\logexts.pdb
遠隔操作ツール「Gh0st RAT」
さらにトレンドマイクロは、少なくともGh0st RATの亜種3種がEarth Berberokaの攻撃キャンペーンに用いられていたことを確認しました。Gh0st RATは、PlugXと同様に、10年以上にわたって攻撃者に用いられてきた遠隔操作ツールの一つです。Gh0st RATのソースコードは一般公開されているため、多くの亜種が存在します。
トレンドマイクロが分析した亜種の1つには興味深い破壊的機能が備わっていました。それはマスターブートレコード(MBR)を置き換えて、露骨なメッセージ(「I am virus ! F*ck you :-)」)を表示するというものでした。この特定のメッセージは、Gh0st RAT亜種の被害を受けたユーザの公開レポート内でも見られました。2017年に公開された産業制御システム・サイバー緊急事態対応チーム(ICS-CERT)のレポートにおいても、Gh0st RATの亜種がMBRを消去し、検体ごとに異なるメッセージに置き換える手口が解説されています。
その他に発見された既知のマルウェアファミリ
加えてトレンドマイクロは、Earth Berberokaによって悪用された別の正規ツールや、同グループが攻撃キャンペーンで用いたマルウェアファミリも発見しました。
Quasar RAT - 標的型サイバー攻撃者グループがネットワークを侵害するために用いるWindowsベースのオープンソース型遠隔操作ツール
AsyncRAT -暗号化された接続を介して攻撃者が感染端末を遠隔から監視・制御するために用いるオープンソース型遠隔操作ツール
Trochilus - サンドボックスによる自動解析を回避するためにサイバー諜報活動キャンペーンに用いられるステルス性の高い遠隔操作ツール
セキュリティに関する推奨事項
トレンドマイクロの分析では、Earth Berberokaが東南アジアのギャンブル市場に狙いを定めて複数のツールや大規模なインフラを配置していることが明らかとなりました。
ギャンブルサイトの利用者や運営者は、以下のセキュリティに関する推奨事項に従うことで、Earth Berberokaの攻撃回避につながります。
- セキュリティ対策製品を用いて電子メール、Webサイト、アプリを適切に検証すること。また、日頃からリンクをクリックする前に対象のURLにカーソルを合わせて、想定されるWebサイト以外のアドレスが表示されないかどうかを確認するようにしましょう。URLリンクをクリックする前にWebサイトの安全性を確認したい場合は、弊社の「Site Safety Center」をご利用いただくことも有効な手段です。
- アプリをダウンロードする際は、信頼できる提供元のみ利用すること。
- 文法的な間違いやスペルミスに注意を払いましょう。正当な企業は校正者や編集者を雇用し、送信する内容の誤りを最小限にする努力を払っています。
- ホスト型セキュリティ対策や迷惑メール(スパム)対策を用いて、不正リンクや悪意のある添付ファイルなどのメール経由で届く脅威をブロックすること。
- 不正なURLの検出、スキャン、ブロックに役立つ多層的なセキュリティソリューションを採用すること。
当該調査に関する技術的な詳細については、トレンドマイクロのリサーチペーパー「Earth Berberoka の攻撃活動:オンラインギャンブルサイトを標的とするAPTキャンペーンの分析」を参照ください。Linux、macOS、Windowsを標的とするEarth Berberokaが用いるマルウェアファミリの技術的な詳細や、感染経路、標的組織、および別の標的型サイバー攻撃者グループとの連携の可能性について解説しています。
参考記事:
• 「New APT Group Earth Berberoka Targets Gambling Websites With Old and New Malware」
By: Daniel Lunghi, Jaromir Horejsi
翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research)