AIエンジニアを狙う、GitHubリポジトリを悪用したトロイの木馬型攻撃

Netskope Threat Labsによると、サイバー犯罪者はAIツールや開発者向けリソースとして人気の高いGitHubリポジトリを複製し、情報窃取型マルウェア(インフォスティーラー)を配布しているとのことです。

Image

(出典: Netskope)

Netskopeは、2026年4月に初めて報告されたWindows向けMaaS型インフォスティーラーの動向を追跡している過程で、この攻撃キャンペーンを発見しました。このマルウェアはClickFixのソーシャルエンジニアリング手法を通じて拡散していました。

研究者たちが引き続き攻撃活動を追跡した結果、攻撃グループが配布方法を切り替え、人気のAIリソースを装った偽のGitHubリポジトリを通じてペイロードを配布するようになっていたことが判明しました。Netskopeはこれらのリポジトリ群を「TroysDen’s」という名称で追跡しています。

Netskopeは次のように説明しています。「攻撃者は開発者を欺くため、有名なリポジトリを複製し、悪意のあるペイロードを巧妙に組み込みます。多くの場合、一見無害に見えるサブディレクトリにペイロードを追加するか、インストール手順に記載されたURLを改ざんします。ルートページが本物らしく見え、オリジナルの貢献者名も表示されているため、被害者はこのGitHubページを信用してしまい、MaaS型マルウェアのインフォスティーラーをダウンロード・実行するよう誘導されてしまいます」

確認された「おとり」の中には、Claude、ComfyUI、AIコーディングアシスタント、Pythonセキュリティガイド、Rustフレームワークを装った偽ツールが含まれていました。

コンパイラではなく、隠されたインタープリタ

悪意のあるペイロードは、4つのファイルを含むZIPアーカイブとして届きます。内訳は2つのバイナリファイル(lua51.dllcompiler.exe)、バッチスクリプト(Application.bat)、そしてテキストファイル(gc.txt)です。

Lua51.dllは正規のLuaJITランタイムです。この中の一部の機能により、Luaコードは実行時にWindows APIを名前で直接呼び出すことができるため、そうしたAPI呼び出しはコードを実行している実行ファイルのインポートテーブルには表示されません。

compiler.exeという名前ですが、実際にはこれは名前を変えたLuaJITインタープリタです。バッチスクリプトはgc.txtを引数としてcompiler.exeを起動し、インタープリタにテキストファイルの内容を読み込ませて実行させます。この時点で、Prometheus仮想マシンが暗号化された文字列プールから悪意のあるコードを再構築します。

そこから先は、ネットワークリクエスト、ファイル書き込み、プロセス生成を含むすべての悪意ある動作が、compiler.exeの内部で実行されます。

これら4つのファイルは合わさって「SmartLoader」というマルウェアローダーを構成します。これはNetskopeが以前にもGitHubリポジトリを通じて配布されているのを確認したことのあるものです。

Netskopeによると、コードを単体の実行ファイルではなくプレーンテキストファイルに配置することで「防御回避における優位性」が生まれるとのことです。自動化されたスキャナーやサンドボックスは通常ファイルを1つずつ検査するため、個々のファイル単体では警告を発するトリガーにならないためです。

ブロックチェーン上に隠されたC2(指令サーバー)

SmartLoaderは、まずip-api.comへGETリクエストを送信し、被害者のIPアドレス、国、都市、タイムゾーン、インターネットプロバイダーの情報を収集することから動作を開始します。この情報は、攻撃者がどの被害者を狙う価値があるか判断する材料になると考えられます。

サーバーアドレスをハードコードするのではなく、実行時にPolygonブロックチェーンからC2のIPアドレスを解決します。これは「EtherHiding」として知られる手法で、パブリックRPCプロバイダーを通じてスマートコントラクトに問い合わせ、接続先アドレスを取得します。

報告を送る前に、SmartLoaderは被害者のデスクトップのスクリーンショットを撮影します。これは、ローダーのID、デバイス識別子、被害者のパブリックIP、OSバージョンを含む暗号化されたビーコンとともに送信されます。

この仕組みにより、攻撃者はマルウェア本体に手を加えることなくインフラを移動させることができます。サーバーがブロックされた場合、攻撃者はスマートコントラクトに保存されている値を更新するだけで、感染済みのすべてのマシンが自動的に新しいアドレスを取得します。

サーバーからの応答には、暗号化された設定データとタスクリストが含まれており、今回のケースではSmartLoaderに対し、最終的にインフォスティーラーを配信する第2段階のペイロードをダウンロードするよう指示していました。

独自の偽装を持つ第2段階

第2段階のスクリプトであるdist.luaは、独自にバンドルされたLuaJITインタープリタとDLLとともにダウンロードされます。静的解析の結果、その難読化手法は第1段階で使われたものとは異なるツール「MoonSec」に関連付けられましたが、コード内にバージョンを示す痕跡は見つかりませんでした。

研究者らは次のように付け加えています。「実行してみると、第2段階のLuaスクリプトは最初のローダーと非常に似ています」

このスクリプトは、送信トラフィックの暗号化とサーバー応答の復号に同じXORキーを再利用し、同じ位置情報チェックを実行し、EtherHidingを用いてC2アドレスを隠蔽します。さらに、第1段階で使用されたもの以外に、フォールバック用のRPCプロバイダーを2つ追加しています。

Netskopeは、2026年7月に5日間の間隔を空けて作成された2つのGitHubアカウント上で、第2段階のファイルがホストされているのを発見しました。両アカウントはいずれも同一のペイロードを配信していました。これら2つのアカウントは、いずれもすでにテイクダウン(削除)申請済みです。

Netskopeが複数のサンプルを分析した結果、4月に同社が初めて報告したNodeJSベースの株を含む、複数種類のインフォスティーラーが混在していることが判明しました。

この攻撃キャンペーンは北米、アジア、南欧の組織を標的としており、金融サービス、銀行、テクノロジー分野が特に被害を受けている業種として挙げられています。

翻訳元: https://www.helpnetsecurity.com/2026/08/04/developers-github-fake-ai-tools-infostealer/

ソース: helpnetsecurity.com