HashiCorpのTerraform Registryを悪用したマルウェア配布が初確認、北朝鮮関与の「Graphalgo」キャンペーンか
要点
- HashiCorpが運営するTerraform RegistryおよびGo Modulesを通じて、Go言語ベースのマルウェアが配布されていることがセキュリティ研究者により特定された。
- Terraformの公式レジストリが悪意あるペイロードの配信経路として悪用された事例の確認は今回が初めてとなる。
- 一連の攻撃は北朝鮮関連の脅威アクターによる「Graphalgo」キャンペーンとの重複が指摘されており、架空の採用課題などを介して開発者を標的にしている。
- 感染したマルウェアはSlackとブロックチェーンのスマートコントラクトを組み合わせた二重のC2(指令サーバー)通信機構を備えている。
リード文
セキュリティ研究機関の報告により、HashiCorpがホストするTerraform RegistryおよびGo Modulesを介してGo言語製のマルウェアが配布されていたことが2026年9月に明らかになりました。クラウドインフラの構成管理ツールとして広く利用されるTerraformの公式リポジトリが悪意あるコードの配信経路として悪用された事例が確認されるのは、今回が初となります。セキュリティ企業のAikidoらによると、この攻撃は北朝鮮(DPRK)の脅威アクターによるサイバー攻撃キャンペーン「Graphalgo」の一環とみられています。
Terraform RegistryとGoモジュールを介した不正配布
Aikidoが公開した調査結果によると、悪意あるコードが含まれていたのは以下の2つのTerraformプロバイダー(Terraformが各種クラウドやサービスを操作するための拡張機能プラグイン)と、2つのGoモジュールです。
- Terraformプロバイダー
gocommunity-io/dockerd(ダウンロード数:222回)kreuzwenker/docker(ダウンロード数:1,449回)
- Goモジュール
gocommunity.io/orderedbtreegogets.dev/btreex
これらのパッケージを通じて展開されるマルウェアは、2026年2月にReversingLabsが最初に報告し、北朝鮮の攻撃グループへの帰属が指摘された攻撃活動「Graphalgo」と手口が重複していることが判明しています。
開発者を狙う巧妙なソーシャルエンジニアリング
攻撃者は主にソフトウェア開発者を標的としており、LinkedInやFacebookといったSNSプラットフォーム、あるいはフォーラム上の求人募集を通じて接触を図ります。その際、実在しない架空のWeb3企業を装い、採用選考の一環としてコーディング課題の実施を依頼する手口が用いられています。
提示されるGitHubリポジトリ自体は一見無害に見えるものの、プロジェクトが依存する外部パッケージ(npmやPyPIなどで公開されているもの)を経由して悪意ある動作が引き起こされる仕組みです。
今回の発見と前後して、Checkmarx、JFrog、SafeDepなどの研究チームも、同一のマルウェアを配布する複数のnpmパッケージを特定したと報告しています。確認された不正なnpmパッケージには、indexed-btree、mathsbase、mathmain、math-universe、modern-events、quick-events、crypto-hasher、events-router、sort-btree、graphcore-js、graphlib-js などが含まれます。
Slackとブロックチェーンを併用する二重のC2機構
セキュリティ各社の解析によると、今回確認されたマルウェアは極めて高度な標的型攻撃の性質を備えています。JFrogの分析では、被害者の環境で特定の行列を用いた線形方程式系が解かれた場合にのみペイロードの復号が行われる仕組みが確認されました。また、GitHub Actionsのワーカー群を利用してダウンロード数を意図的に水増しし、正規のパッケージのように偽装していた点も指摘されています。
Aikidoによると、Terraformプロバイダー等で配布されたマルウェアはnpm版のコードをGo言語に移植したものであり、インフラや通信手法を共有しています。最大の特徴は、以下の2系統からなる二重のC2(指令サーバーとの通信経路)チャネルです。
- Slack APIを利用した通信:
攻撃者が管理するSlackのBotトークンを用い、conversations.historyエンドポイントを10秒ごとにポーリング(定期問い合わせ)します。データ転送は「開始(Start)」「分割データ(Chunk)」「結合(End)」のパケットに分けて処理されます。 - スマートコントラクトを利用した通信:
Arbitrum SepoliaおよびEthereum Sepoliaテストネット上にデプロイされたスマートコントラクトから、ハードコードされたアドレスを参照して3秒ごとに暗号化されたコマンドを取得します。取得された命令は、GoまたはJavaScriptのコードとして実行されます。
感染初期の動作として、マルウェアはハードウェア構成、OS、ホスト名、Node.js環境の有無などのシステム情報を収集し、攻撃者のSlackチャンネルへ送信します。その後、エフェメラル(一時的)な公開鍵・秘密鍵ペアを生成し、攻撃者側の公開鍵と組み合わせて共有鍵を作成することで、感染端末間の通信漏洩を防ぎながら暗号化通信を確立します。
SafeDepは、最終段階で送り込まれるペイロードが非対称暗号によって保護されているため、復元されたインプラント以降にどのような追加コードやタスクが実行されたかについては特定できていないと説明しています。