偽の GitHub リポジトリを連携させるマルウェア・オペレーション:SmartLoader/StealC Malware を配布

109 Fake GitHub Repos Spread SmartLoader, StealC Malware

2026/04/22 gbhackers — 偽の GitHub リポジトリを用いる連携型のマルウェア・オペレーションが、 LuaJIT ベースの SmartLoader と後続の StealC Infostealer を配布していることが確認された。悪意のリポジトリは 109 件であり、そのオペレーションに用いられるアカウントは 103 件である。このキャンペーンのコア要素は、オープンソース・コードのクローン/難読化された Lua ステージ/ブロックチェーン・ベースの C2 解決の組み合わせであり、検知回避とインフラの機動性を維持している。

この攻撃者は GitHub Releases を利用せず、リポジトリ内部の深層に ZIP アーカイブを埋め込み、README を書き換えることで、隠されたダウンロードへとユーザーを誘導する。

2026年04月12日の時点で明らかになったのは、少なくとも 103 の GitHub アカウントにまたがる 109 件の悪意のリポジトリが、同一のパターンに従っていることだ。それが示すのは、単なる模倣ではなく、スケールされた自動化エコシステムの存在である。

この活動は短くとも 7 週間にわたり継続しており、2026年04月初旬まで新規リポジトリが作成され続けていたことが、ZIP のタイムスタンプ/PE コンパイル時刻/コミット履歴の分析により確認されている。

GitHub 上の正規セキュリティ・プロジェクトをトロイ化したクローンの発見により、このオペレーションの存在が明らかになった。攻撃者は、ソースツリー全体をコピーしながら配布の経路を改変している。

複数アカウントが並行して、複数の悪意のプロジェクトをホストし、短い時間の中に更新活動を集約していることが観測されている。そこから示唆されるのは、ルアーやリンクを一括で更新できる集中型ツールの存在である。

インフラの再利用/一貫したステージ構造/統一された SmartLoader の挙動は、単一オペレータまたは高度に連携したグループの存在を示す。

偽 GitHub リポジトリ上のルアー

一連のルアーが悪用するのは、検索における可視性と人気オープンソースツールに対するユーザーの信頼である。人気上昇中のリポジトリを新規アカウントでクローンし、ファイル名およびコードを維持することで、正規のリポジトリに見せかける。

Comparison between the fake PyrsistenceSniper repository and the legitimate original, showing identical naming but modified content (Source: Hexastrike).
Comparison between the fake PyrsistenceSniper repository and the legitimate original, showing identical naming but modified content (Source: Hexastrike).

それぞれの README は大幅に改変されている。詳細なインストール手順や技術説明は削除され、”shields.io” 形式の Download バッジやカラーボタンが配置されている。それらすべてから誘導される先は、同一の埋め込み ZIP パスとなる。

リポジトリの説明やトピックも調整され、無関係な SEO キーワードが含まれる場合もあり、GitHub 検索結果で正規リポジトリと並ぶようにデザインされている。

埋め込みアーカイブは、通常のビルド成果物に見えるパス (例:project-name-version.zip) に配置され、リポジトリ構造に自然に溶け込んでいる。

Example of shields.io download badges used across multiple malicious repositories, all pointing to embedded ZIP files (Source: Hexastrike).
Example of shields.io download badges used across multiple malicious repositories, all pointing to embedded ZIP files (Source: Hexastrike).

これまでに説明したように、正規に見えるコード/強いダウンロード誘導/埋め込み ZIP の組み合わせにより、開発者やセキュリティ研究者を標的とする、効果的なソーシャルエンジニアリング経路が形成される。

それぞれの悪意の ZIP には、通常で 3〜4 ファイルが含まれる。具体的に言うと、1 行のバッチランチャ/名前変更された LuaJIT 2.1.0-beta3 GUI 実行ファイル/各種の lua51.dll に加えて、”.txt” または “.log” 名で保存される難読化 Lua スクリプトで構成されている。

上記のバッチファイルは、Windows の “start” コマンドを使用し GUI サブシステム・バイナリを起動するため、コンソール・ウィンドウには何も表示されない。使用されるファイル名は loader.exe/unit.exe/boot.exe/java.exe などであるが、実行モデルは共通している。

Lua ペイロードは、単一行の Prometheus 難読化 SmartLoader スクリプトであり、サイズは約 300 KB である。そこで用いられる、算術マスク定数/エンコード文字列/ランダム識別子/VM 型ディスパッチャにより解析を困難にしている。

SmartLoader は、LuaJIT の FFI を用いて Windows 構造および API を宣言する。それにより実行されるのは、コンソール非表示化/アンチデバッグ/ホスト識別/GDI によるスクリーンショットの取得などであり、後続の攻撃のための準備が整えられる。

さらに、PE 解析構造およびスレッド生成機構を定義し、追加 PE ペイロードをメモリへとロードするため、ディスクには痕跡が残されない。

ブロックチェーン・ベース C2 と StealC 配布

SmartLoader は、C2 エンドポイントをハードコードせず、Polygon Smart Contract を JSON-RPC eth_call 経由で “polygon.drpc.org” に問い合わせる。その際に、固定 “contract” アドレスおよび “selector” を デッドドロップ・リゾルバ (Dead Drop Resolver) として悪用する。

この手法 により、バイナリを更新することなく、on-chain データを変更するだけで、インフラのローテーションが可能になる。

GitHub user profile showing crafted activity since mid-March, designed to make the account appear legitimate and active (Source: Hexastrike).
GitHub user profile showing crafted activity since mid-March, designed to make the account appear legitimate and active (Source: Hexastrike).

“contract” は、カレント C2 URL を含むエンコード文字列を返す。この文字列をデコードするローダにより、単一 /24 ブロック内の bare-IP HTTP エンドポイントへの接続が確立される。

サーバが解決された後に SmartLoader は、”/api/<victim_id>” へ向けて “multipart/form-data” POST を送信し、ホスト情報およびスクリーン・ショットなどの収集データを送信する。

レスポンスに含まれる暗号化された “loader” 命令および “tasks” リストが、マルウェアによりメモリ内で復号され実行される。タスクの完了は、”POST /task/<victim_id>” により報告され、通常は HTTP 204 が返される。

それと並行して SmartLoader は、攻撃者が管理する GitHub リポジトリへ接続し、暗号化された blob を復号し、冗長な Lua ステージと圧縮された StealC PE を生成する。続いて SmartLoader の内蔵 PE ローダにより、それらがメモリ上で実行される。

Captured SmartLoader HTTP POST request to the bare-IP C2, showing the multipart upload structure used to send host metadata and collected data (Source: Hexastrike).
Captured SmartLoader HTTP POST request to the bare-IP C2, showing the multipart upload structure used to send host metadata and collected data (Source: Hexastrike).

永続化の維持は、2 つのスケジュール・タスクにより行われる。それらは、音声管理ツールや Office コンポーネントなどの名称を装い、%LOCALAPPDATA% 配下のバイナリおよび Lua ステージを参照する。

一方のタスクは、キャッシュされた Lua ステージを実行して GitHub リポジトリ削除に耐性を持ち、もう一方のタスクは、新規ステージをダウンロードしてローカル削除からの復旧を行う。

検知および防御

防御側は、以下の高シグナル挙動を監視すべきである:

  • バッチファイルから起動される未署名 LuaJIT バイナリ (.txt/.log 引数付き)
  • %TEMP% または %LOCALAPPDATA% からの Lua runtime/lua51.dll ロード
  • ブラウザ以外からの Polygon JSON-RPC 通信
  • SmartLoader 特有の eth_call パターン

予防策としては以下が有効である:

  • GitHub ソースの厳格な検証
  • ユーザーディレクトリからの未署名インタープリタ実行のブロック
  • GitHub raw 通信の監視
  • 非開発環境からのブロックチェーン RPC エンドポイントアクセス制限