皆さん、こんにちは。Colorkrew Securityのセキュリティエンジニア、ユンジェホです。

Claude、ComfyUI、AIコーディングアシスタント――今、開発者の間で最も検索され、最も信頼されているキーワードです。

しかし、その「信頼」こそが攻撃者の狙いだとしたら?

本ブログでは、Netskope Threat Labsが確認した実際の攻撃キャンペーンをもとに、有名GitHubリポジトリを複製し、AIツールを装って情報を窃取するインフォスティーラー攻撃について解説します。


脅威の概要:本物そっくりのGitHubリポジトリ

攻撃者は、Claude、ComfyUI、AIコーディングアシスタント、Pythonセキュリティガイド、Rustフレームワークなど、AI/開発関連の有名なGitHubリポジトリをそのまま複製し、正規のリポジトリと見分けがつかない偽物を作成します。これは「Troyden」と呼ばれるAI関連の餌作りキャンペーンの一部として確認されました。

ルートページのデザイン、README、スター数の表示までもが本物と酷似しており、視覚的に区別することはほぼ不可能

この攻撃の特徴は、ロダーチェインの二重化です。攻撃者は「SmartLoader」と呼ばれるローダーを1段階目・2段階目の両方で使用し、さらに両方の段階でPolygonブロックチェーンを利用した「EtherHiding」技術によってC2サーバーのアドレスをランタイムで解決します。

  • キーワード:ClickFix、EtherHiding、SmartLoader
  • 要約:偽装したAIツールのインストールを誘導し、情報を窃取する社会工学的攻撃

なぜGitHubの複製が有効なのか

攻撃者は開発者を騙すため、よく知られたGitHubリポジトリを複製し、正常に見える下位ディレクトリに悪性ペイロードを追加、あるいはインストール手順に含まれるダウンロードURLだけを差し替えます。

“How to download the software"として、正規のインストールガイドのように振る舞う手順が記載されている

ルートページが原本と同一に見え、オリジナルの作者情報もそのまま残っているため、被害者は正規のリポジトリだと誤認し、悪性ペイロードをダウンロード・実行してしまいます。


ペイロードの構造:テキストファイルに隠された悪性コード

偽装リポジトリから配布される圧縮ファイル(zip)には、バイナリ2つ(lua51.dll、compiler.exe)、バッチスクリプト(Application.bat)、テキストファイル(gc.txt)の合計4ファイルが含まれています。

Application.bat、compiler.exe、gc.txt、lua51.dllの4ファイルで構成される

  • lua51.dll:MSYS2/GCC 15.2.0でビルドされたLuaJITランタイム。148個のエクスポート関数を持ち、そのうちの一つ「luaopen_ffi」により、Lua コードがDLL内の関数リストなしに名前だけでWindows APIを呼び出せる
  • compiler.exe:LuaJIT 2.1インタープリタの名前を変更したもの
  • gc.txt:難読化された悪性Luaスクリプトが記述されたテキストファイル。compiler.exeがこのファイルを引数として実行することで、実際の悪性コードが動作する

悪性コードを実行ファイルとしてコンパイルせず、一般的なテキストファイルに配置することで、自動化されたセキュリティ制御や従来型のサンドボックス検査を回避しやすくなります。個々のファイルを単独で検査しても悪性の兆候が見られず、すべてのモジュールが同一環境で揃って実行されて初めて脅威が確認できる仕組みです。


Prometheusによる難読化:5つの構造的特徴

gc.txtには難読化された1行の悪性Luaスクリプトが含まれており、静的分析の結果、商用Lua難読化ツール「Prometheus」に特有の5つの構造的指標が確認されました。

1. 関数によるラッピング(Wrap in function)

ペイロード全体が自己実行関数で包まれている、Prometheus特有のパターン

2. ローカル変数のプロキシ化(ProxifyLocals)

getfenvsetmetatablegetmetatableと共にnewproxyが使用され、ローカル変数の参照を隠している

3. Vmifyディスパッチ(Vmify dispatch)

ペイロードのロジックがレジスタベースの仮想マシンにコンパイルされ、302個の分岐からなる二分探索木がVM opcodeを駆動する

4. 数値-式変換(NumberToExpressions):ファイル内のすべての定数が単純な整数ではなく算術式に置換される

5. シャッフル暗号(Shuffle cipher):25個のc()関数と20個のl()インデックス順列呼び出しによって、ランタイムに文字列を組み立てる。静的復号ではルックアップテーブルのキーや一部の可読文字列(pcallfindgsubなど)は復元できるものの、高エントロピーな暗号化文字列は依然として復号不可能


攻撃フロー全体像

4つの悪性ファイルで構成されたZIPは、GitHubリポジトリを通じて主に配布される悪性コードローダー「SmartLoader」です。

Stage 1: SmartLoader → Stage 2: dist.lua → Stage 3: LogicOptimizerという3段階で構成され、両ステージが同一のスマートコントラクトを通じてC2 IPを解決する

Stage 1:SmartLoaderの機能

① 地理的位置偵察(Geo-Location Recon)

SmartLoaderはまずip-api[.]com/jsonにGETリクエストを送信し、被害者のIPアドレス、国、都市、タイムゾーン、ISP情報を取得します。攻撃者はこの情報を用いて標的を選別します。

Wiresharkで確認されたip-api.comへのHTTPリクエストとレスポンス

② EtherHiding C2

SmartLoaderはステージャのIPアドレスやドメインをハードコードする代わりに、ランタイムでPolygonブロックチェーン上の情報を参照します。ハードコードされた3つの公開RPCプロバイダのいずれかを通じて、メソッドセレクタ0x3bc5de30を使用し、特定のスマートコントラクトに対する読み取り専用クエリ(eth_call)を実行します。

updateData(string)関数の呼び出し履歴。コントラクトの値を更新するだけで、マルウェア自体を修正することなくC2アドレスを変更できる

デコードされたABIはステージャのIPアドレスを返答し、攻撃者にとってのデッドドロップリゾルバとして機能します。

③ スクリーンショットキャプチャ

GDI APIを使用し、GetSystemMetricsで画面サイズを取得、CreateDIBSectionでビットマップバッファを確保、BitBltでスクリーンショットをキャプチャします。

④ 初期C2ビーコン

C2 IPアドレスを確認した後、複数パートで構成されるHTTP POSTリクエストを送信します。ここには先に取得したスクリーンショットと、XORで暗号化されたJSONビーコンが含まれます。

被害者のローダーID、GUID、公開IPアドレス、OS情報を含むmultipart/form-dataのPOSTリクエスト

⑤ C2応答の復号と実行

ステージャIPはloader(攻撃者が送る設定値)とtasks(命令キュー)という2つの暗号化フィールドを含むJSONオブジェクトで応答します。

⑥ 持続性の確保

攻撃者が設定したタスクの一つとして、SmartLoader自体のための持続性が構築されます。実行時刻とタスク名をランダムに指定し、Windowsのタスクスケジューラを通じて持続性を確保します。

“AdobeGCInvoker_7d7757"というランダムな名前のタスクが毎日実行されるよう設定されている

⑦ Stage 2のダウンロード

タスク命令を復号・実行し、GitHubリポジトリからLuaJITインタープリタとDLLランタイムに加え、2段階目のLuaスクリプトステージャをダウンロードするよう指示を受けます。同一のペイロードを配布する2つのGitHubアカウント(「yawalinte」「JuliusMAAR」)が確認されており、いずれも短期間で新規作成されたアカウントでした。

Stage 2:dist.lua

「dist.lua」は1段階目のSmartLoaderがダウンロードする2段階目のLuaスクリプトで、静的分析の結果MoonSec V3難読化ツールと一致する構造的指標が確認されました。1段階目のローダーはCreateProcessWを直接呼び出し、2段階目のスクリプトを実行するLuaJITインタープリタ「7d7752.exe」を生成します。

7d7752.exe、dist.lua、lua51.dllの3ファイルがAppData\Local配下に配置されている

2段階目のLuaスクリプトは1段階目のローダーと非常によく似た動作をします。同一のXORキーを再利用してアウトバウンド通信を暗号化し、地理的位置偵察を行い、EtherHidingでC2 IPアドレスを隠蔽します。ただしRPCプロバイダのリストが拡張され、代替サーバーとしてpolygon-mainnet[.]gateway.tatum.iopolygon-public[.]nodies.appが追加されています。

最終的に2段階目のLuaスクリプトは最終ペイロードを取得・実行します。複数のサンプルを分析した結果、Node.jsベースのマルウェア亜種を含む多様なインフォスティーラーが選択的に使用されていることが確認されました。


なぜ危険なのか:信頼できるはずの場所が攻撃経路になる

従来の前提

  • GitHubの有名リポジトリは信頼できる
  • スター数・ライセンス表記・README があれば正規のプロジェクトだと判断できる
  • 個別のファイルを検査すれば脅威を検出できる

この攻撃が突きつけた現実

  • 有名リポジトリはそのまま複製され、視覚的に区別がつかない偽物として配布される
  • ブロックチェーン上のスマートコントラクトを使えば、マルウェア自体を修正せずにC2アドレスを丸ごと変更できる
  • 悪性コードをテキストファイルに分散配置すれば、個々のファイル単体では悪性の兆候を示さない

つまり、
開発者やAI利用者が最も信頼している検索キーワード・配布経路そのものが、攻撃者にとって最も効率の良い攻撃面になっている
ということです。


対策

  1. GitHubリポジトリのURLとコミット履歴を必ず確認する:スター数やREADMEの見た目だけで信頼せず、リポジトリの作成日・コントリビューター・コミット履歴の一貫性を確認する
  2. 未知の実行ファイル・DLL・スクリプトファイルの組み合わせに注意する:単体では無害に見えるテキストファイルとインタープリタの組み合わせにも警戒する
  3. エンドポイントのアンチウイルスプログラムを最新版に維持する
  4. 使用しているアプリケーションやOSに最新のパッチを適用する
  5. IOCベースの脅威インテリジェンスを活用する:下記のIOCをセキュリティソリューションに登録し、業務影響度評価の上で検知・遮断設定を行う

侵害指標 (Indicators of Compromise)

種別
FileHash-SHA2564f4cefa348ed856f075b71449c39ed7734bb21e116186fc4a8f03bea1279e6eb
FileHash-SHA256b3a9d5283f982f19979689af2f4416b3e0e57cbf469c71b6275b12fcba358b65
FileHash-SHA2567ad4b911d05a12f91ab27ba3baa351a56653ca099dda7ad87ee2b94f8cd018c9
FileHash-SHA25604d3c82782927330d56827ff551697666dbab4b3abf5b86bde492efdd142bc58
FileHash-SHA2564e0d3da33f13e6440ecbdf4f0b838a164c73ad375c4788c4c205d87f5d2c1875
FileHash-SHA2562da227ce38dbf8881fe0f6c4f864fcbb7b55dc861d4daf040312cba7e612dac4
FileHash-SHA25657646c00b1fab68a1e7205a2b3963ce4a6dc85f1c559b63d02449a51db2c461b
FileHash-SHA256fc4494011c094e1046b22489004e5471b766baf51ed9c2c88a431bdecea84206
FileHash-SHA256ad9da27f72bb7abbfcba92f9302d3467f5487814bb34bbf4b1573abcb56e4efc
FileHash-SHA256f513e3e510970cfec0020d955df8d738a427d471bde49e483d55131826ba8706
URLhxxps[:]//raw[.]githubusercontent.com/halfbound-rim9820/awesome-ai-handbook/main/docs/interview/handbook_awesome_ai_v3.9.zip
URLhxxps[:]//raw[.]githubusercontent.com/TheSamMan123/Claude-Pro/main/Claude_Pro_v2.5.zip
URLhxxps[:]//raw[.]githubusercontent.com/arabicapp/everything-claude-code/main/code_everything_claude_3.3.zip
URLhxxps[:]//raw[.]githubusercontent.com/class1k/cracked-save-to-mondaycom-extension/main/cracked-save-to-mondaycom-extension.zip
URLhxxps[:]//raw[.]githubusercontent.com/bibabiboreal/cracked-save-to-airtable-base-extension/main/cracked-save-to-airtable-base-extension.zip
URLhxxps[:]//raw[.]githubusercontent.com/pavlovian-tilde769/Adobe-Photoshop-Version-2026/main/Version_Adobe_Photoshop_v3.5.zip
URLhxxps[:]//raw[.]githubusercontent.com/Ahmed4644/ComfyUI-zveroboy-photo/main/U_photo_Comfy_zveroboy_3.8.zip
URLhxxps[:]//raw[.]githubusercontent.com/robertilepot/imgur-scraper/main/scraper_imgur_v1.9.zip
URLhxxps[:]//raw[.]githubusercontent.com/marwanbelike/incremark/main/Software-v1.8.zip
URLhxxps[:]//raw[.]githubusercontent.com/geosaputra/aiverse/main/Software-v2.2.zip
URLhxxps[:]//raw[.]githubusercontent.com/anilreddyavula/FormPilot/main/Pilot_Form_v3.2.zip
URLhxxps[:]//raw[.]githubusercontent.com/wymyslepotem/axum-template/master/tendinal/axum-template-2.6.zip
URLhxxps[:]//raw[.]githubusercontent.com/khn0x-khn0x/emdca/main/Software-v1.0.zip
URLhxxps[:]//raw[.]githubusercontent.com/dsgmlg-png/avianinsight/main/Software-1.8.zip
URLhxxps[:]//raw[.]githubusercontent.com/felipedeso7za4444/scientific-thinking-general/main/thinking-scientific-general-1.7.zip
URLhxxps[:]//raw[.]githubusercontent.com/tildaknifelike3834/pypi-security-best-practices/main/practices_best_security_pypi_v2.7.zip
URLhxxps[:]//raw[.]githubusercontent.com/soloobr/z-loops/main/z-loops.zip
URLhxxps[:]//raw[.]githubusercontent.com/Hanan206/ShadowPack/main/Shadow_Pack_v3.8.zip
URLhxxps[:]//raw[.]githubusercontent.com/Leesan080425/mssqlbof/main/Software-3.5.zip
URLhxxps[:]//github[.]com/yawalinte/80/raw/refs/heads/main/ae.log
URLhxxps[:]//github[.]com/JuliusMAAR/gpt-re/raw/refs/heads/main/re1.log
URLhxxps[:]//github[.]com/JuliusMAAR/gpt-re/raw/refs/heads/main/re0.log
IP83.97.20.150
IP94.156.154.48
IP213.176.72.223
Domainreviewassignment[.]in
Domaintricodingrind[.]firebaseapp.com
Domainmts-assignment[.]vercel.app

結論:信頼は複製できる。だからこそ検証が要る

有名なリポジトリ、見慣れたUI、正規のライセンス表記。
これらはすべて、複製することができます。

AIは開発の速度を上げ、
検索は情報への距離を縮め、
ブロックチェーンは匿名性を高め、
そして――攻撃者は、この3つすべてを利用して信頼を偽装する。

今こそ問い直す時です。
「そのリポジトリは、本当にあなたが思っている場所からのものか」を。

見た目の信頼性ではなく、来歴と挙動を検証する習慣。このバランスを開発フローに組み込むことが、AI時代のセキュリティの根幹です。

本ブログが、皆さまの開発環境におけるサプライチェーンリスク見直しのきっかけになれば幸いです。

これまで、Colorkrew Securityのユンジェホがお届けしました。
ありがとうございました。


参考資料