AhnLab SEcurity intelligence Center(ASEC)では、最近、Github リポジトリを通じて SmartLoader マルウェアが多数配布されている状況を確認した。このリポジトリは、正常なプロジェクトを偽装して巧妙に製作されており、主にゲームハック、ソフトウェアクラック、自動化ツールなどのテーマを活用し、ユーザーの関心を引いている。リポジトリには README ファイルと圧縮ファイルが含まれており、圧縮ファイルの内部に SmartLoader マルウェアが存在する。
- SmartLoader 配布アドレス
hxxps://github[.]com/[攻撃者アカウント]/Maple-Story-Menu/releases/download/v3.2.0/Maple.Story.Menu.v3.2.0.zip
hxxps://github[.]com/[攻撃者アカウント]/Minecraft-Vape-Client/releases/download/v1.3.1/Minecraft.Vape.Client.v1.3.1.zip
hxxps://github[.]com/[攻撃者アカウント]/ms-rewards-automation/releases/download/v1.8.1/ms-rewards-automation.v1.8.1.zip
hxxp://github[.]com/[攻撃者アカウント]/ddos-protection/releases/download/uncork/ddos-protection-uncork.zip
hxxp://github[.]com/[攻撃者アカウント]/strongvpn/releases/download/pseudobrotherly/strongvpn_pseudobrotherly.zip
hxxp://github[.]com/[攻撃者アカウント]/VSDC-Video-Editor-Pro-Crack/releases/download/2.3.3/vsdc-video-editor-pro-crack-2.3.3.zip
hxxp://github[.]com/[攻撃者アカウント]/Instagram-Followers-Booster-v2.4.5/releases/download/v1.3.6/instagram-followers-booster-v2.4.5-v1.3.6.zip
hxxps://github[.]com/[攻撃者アカウント]/Call-of-Duty-Modern-Warfare-3-MW3-Hack-Cheat-Aimbot-Esp-Unban-Hwid-Unlocks-GunLVL/releases/download/desertless/Desertless.zip
hxxps://github[.]com/[攻撃者アカウント]/MCP-Manager-GUI/releases/download/v1.6.1/MCP.Manager.GUI.v1.6.1.zip
hxxp://github[.]com/[攻撃者アカウント]/Project-Zomboid-Hack/releases/download/scholae/project-zomboid-hack-scholae.zip
hxxps://github[.]com/[攻撃者アカウント]/portfolio/raw/refs/heads/main/Software.zip
ゲームハック、ソフトウェアクラック、自動化ツールなどの関連キーワードを検索すると、SmartLoader マルウェアが含まれた Github リポジトリが検索結果の上位に表示されており、ユーザーが簡単にアクセスできることを確認できる。

[図1] Google 検索結果 SmartLoader 配布地が上位に表示される様子
正常なプロジェクトを装った Github リポジトリには README ファイルおよびプロジェクト関連のファイルが含まれている。README ファイルにはプロジェクトの概要、目次、主な機能、インストールおよび使用方法などがそれらしく書かれており、一般のユーザーがマルウェアの配布地と認識するのが困難である。ユーザーは案内されたインストール方法に従い圧縮ファイルをダウンロードするが、このファイルにはマルウェアが含まれている。

[図2] 正常なプロジェクトを装った Github リポジトリ(1)

[図3] 正常なプロジェクトを装った Github リポジトリ(2)

[図4] 圧縮ファイルの中身
ダウンロードされた圧縮ファイルには合計4つのファイルが含まれており、各ファイルの機能は以下の通りである。
- ファイル 機能
java.exe : Lua ローダー実行ファイルである luajit.exe(正常)
Launcher.cmd : module.class を引数に java.exe を実行するバッチファイル(不正)
lua51.dll : Luajit ランタイムインタプリタ(正常)
module.class : 難読化された Lua スクリプト(不正)
ユーザーがインストールのために Launcher.cmd ファイルを実行すると、luajit.exe(Lua ローダー)を通じて難読化された不正な Lua スクリプトがロードされ、最終的に SmartLoader が動作する。SmartLoader は持続性を確保するために luajit.exe(ODE3.exe)、module.class、lua51.dll ファイルを「%AppData%\ODE3」パスにコピーした後、「SecurityHealthService_ODE3」という名前でタスクスケジューラに登録する。

[図5] スクリーンショット送信(BMP ファイル)

[図6] システム情報の送信(エンコードされた形式)
その後、感染した PC のスクリーンショットとシステム情報が C2 サーバーに送信され、サーバーから受信した応答値を基にさらなる不正な振る舞いを実行する。C2 サーバーとやり取りするデータは、Base64 エンコードおよびバイト演算を通じて暗号化された形式で伝達される。このとき使用される Key 値は Lua スクリプト内に難読化された形式で存在しており、動的メモリ上でその Key を確保することに成功した。
- C2
hxxp://89.169.13[.]215/api/YTAsODYsODIsOWQsYTEsODgsOTAsOTUsNjUsN2Qs

[図7] C2 レスポンス値
レスポンス値は JSON 形式で伝達され、loader とtasks の2種類のデータが含まれている。loader はマルウェアの動作を制御する設定値であり、tasks はさらなるペイロードをダウンロードして実行するための作業リストである。確保した Key を利用してこのデータをデコードした結果は以下の通りである。
| 項目 | デコードされたデータ |
|---|---|
| loader | {“bypass_defender”: 0, “autorun”: 0, “relaunch”: {“time”: 3600, “status”: false}, “tablet”: {“text”: “An error occurred”, “status”: false}, “hide”: 0, “persistence”: 1} |
| tasks | [{“id”: 814, “link”: “hxxps://github[.]com/kishoq123/Netrunner-Os-Abiy/releases/download/nasosubnasal/log.txt”, “file_path”: “AppData”, “file_name”: “Adobe\\adobe.lua“, “start”: 1, “autorun”: 0, “relaunch”: 0, “hide”: 0, “pump”: {“size”: 100, “status”: false}, “dll_loader”: {“func”: null, “type”: “LoadLibrary”}, “delivery”: “new”}, {“id”: 819, “link”: “hxxps://github[.]com/ngochoan1991/host/raw/ed0b087203fbe99717f2be9e93abc0cf9a4200c9/64.log”, “file_path”: “Temp”, “file_name”: “_x64.bin“, “start”: 1, “autorun”: 0, “relaunch”: 0, “hide”: 0, “pump”: {“size”: -1, “status”: false}, “dll_loader”: {“func”: null, “type”: “LoadLibrary”}, “delivery”: “new”}, {“id”: 820, “link”: “hxxps://github[.]com/ngochoan1991/host/raw/ed0b087203fbe99717f2be9e93abc0cf9a4200c9/86.log”, “file_path”: “Temp”, “file_name”: “_x86.bin“, “start”: 1, “autorun”: 0, “relaunch”: 0, “hide”: 0, “pump”: {“size”: -1, “status”: false}, “dll_loader”: {“func”: null, “type”: “LoadLibrary”}, “delivery”: “new”}] |
[表1] デコードされた loader、tasks データ
分析当時、レスポンスを受けた tasks 項目には合計3つのペイロードが含まれており、各ペイロードが実行された後には実行された作業 ID と感染した PC の国コードが C2 サーバーに送信される。ダウンロードされるファイルは、前述の説明と同じ方式でエンコードされた形式であり、メモリ上でデコードされて実行される。各ファイルに対する機能は以下の通りである。
- C2
hxxp://89.169.13[.]215/tasks/YTAsODYsODIsOWQsYTEsODgsOTAsOTUsNjUsN2Qs
1. adobe.lua

[図8] デコードされた adobe.lua
このファイルは難読化された不正な Lua スクリプトであり、module.class と同じ機能を実行する。持続性を確保するために「WindowsErrorRecovery_ODE4」という名前でタスクスケジューラに登録され、感染した PC のスクリーンショットとシステム情報を C2 サーバーに送信したあと、サーバーから受信した応答値を基にさらなる不正な振る舞いを実行する。解析当時は tasks 項目が空欄であり、さらなる不正な振る舞いは確認されなかった。
- C2
hxxp://95.164.53[.]26/api/YTAsODYsODIsOWQsYTEsODgsOTAsOTUsNjUsN2Qs

[図9] C2 応答値
2. _x64.bin

[図10] デコードされた _x64.bin
このファイルは64ビット環境で動作する ShellCode であり、情報窃取型(Infostealer) マルウェアである Rhadamanthys と確認された。Rhadamanthys は Windows システムの正常なプロセスにインジェクションを実行した後、最終的に電子メール、FTP、オンラインバンキングサービスなどに関連するセンシティブ情報を窃取し、攻撃者のサーバーに転送する。
- インジェクション対象プロセス
%Systemroot%\system32\openwith.exe
%Systemroot%\system32\dialer.exe
%Systemroot%\system32\dllhost.exe
%Systemroot%\system32\rundll32.exe
3. _x86.bin

[図11] デコードされた _x86.bin
SmartLoader は主に、情報窃取型(InfoStealer) マルウェアをダウンロードし、Rhadamanthys 以外にも Redline、Lumma Stealer などのマルウェアを実行する事例が多数確認されている。ゲームハック、クラック、自動化ツール等、違法または非公式なキーワードで検索されたパスはマルウェアの配布の可能性が高いため、必ず公式ソースからソフトウェアをダウンロードしなければならない。また、README ファイルが精巧に作成されていても不正なリポジトリである可能性があるため、リポジトリの出所、作成者の信頼度、コミットおよび活動記録等を確認する必要がある。
Categories: マルウェア