北朝鮮連動のAPTグループ「Contagious Interview(UNC1069)」が5つのパッケージエコシステムに1,700本以上の悪意あるパッケージを展開。開発者のクレデンシャルや暗号資産ウォレットを狙うクロスエコシステム・サプライチェーン攻撃の全貌を解説します。
開発者を狙い、5エコシステムを同時汚染
2026年4月8日、セキュリティ企業 Socket が衝撃的なレポートを公開した。
北朝鮮連動の APT グループ「Contagious Interview(別名 UNC1069)」が、npm・PyPI・Go・Rust・Packagist(PHP)の 5つのパッケージエコシステムにわたって 1,700 本超の悪意あるパッケージを公開していたという。侵害の始期は 2025 年 1 月にまでさかのぼり、単発の攻撃ではなく 約 15 ヶ月にわたる組織的なサプライチェーン汚染作戦であることが判明した。
今年 3 月に明らかになった axios npm パッケージへの直接侵害(WAVESHAPER.V2 バックドア埋め込み)も、この Contagious Interview 作戦の一部として位置づけられている。
- 悪意あるパッケージ数: 1,700 本以上(2025 年 1 月〜2026 年 4 月)
- 標的エコシステム: npm・PyPI・Go・Rust・Packagist(PHP)
- 主な手口: 正規の開発ツールを装った偽パッケージ+遅延実行型ペイロード
- 攻撃主体: Contagious Interview(UNC1069 / BlueNoroff / Sapphire Sleet)
- 狙い: 開発者のクレデンシャル・暗号資産・クラウド認証情報
- 情報源: Socket Research Team(2026 年 4 月 8 日公開)
なぜ「開発者」が標的になるのか
Contagious Interview が開発者を集中的に狙う理由は明確だ。開発者のマシンには他の職種にはない「宝の山」が詰まっている。
- ソースコードリポジトリ(GitHub・GitLab・Bitbucket)へのアクセストークン
- クラウド認証情報(AWS Access Key、GCP サービスアカウント、Azure CLI トークン)
- CI/CD パイプライン(本番環境への自動デプロイ権限)
- SSH 秘密鍵(本番サーバーへの直接アクセス)
- npm・PyPI・Docker Hub などのパッケージ公開権限
- 暗号資産ウォレット(MetaMask、Ledger など)
一人の開発者アカウントを侵害するだけで、その組織のインフラ全体に足場を築けるケースがある。北朝鮮にとって、暗号資産の窃取と組織への持続的アクセスという 2 つの目的を同時に達成できる標的だ。
1,700 本の偽パッケージ — エコシステム別の手口
Socket のリサーチチームが特定した代表的なパッケージ群を紹介する。すべて正規の開発ツール名を模倣したものだ。
npm(JavaScript / Node.js)
| パッケージ名 | 偽装対象 |
|---|---|
| dev-log-core | winston / pino ログライブラリ |
| logger-base | 汎用ロガーユーティリティ |
| logkitx | 開発者向けデバッグログ |
| pino-debugger | pino ロガーの拡張プラグイン |
PyPI(Python)
| パッケージ名 | 偽装対象 |
|---|---|
| logutilkit | Python logging ユーティリティ |
| apachelicense | Apache ライセンスハンドラー |
| fluxhttp | HTTP クライアントラッパー |
Go / Rust / Packagist
| パッケージ名 | エコシステム |
|---|---|
| formstash, mit-license-pkg | Go |
| logtrace | Rust |
| golangorg/logkit | Packagist(PHP、Go 公式偽装) |
これらはすべて「一見無害なログユーティリティや HTTP ライブラリ」に見せかけている。攻撃者が「ロギング系ライブラリ」を好む理由は、開発者がほぼ無条件に信頼し、プロダクションコードにも組み込まれやすいからだ。
検出を難しくする「遅延実行」技術
Contagious Interview の手口で特に注目すべきなのが、**遅延実行(Delayed Execution)**の採用だ。
通常のマルウェア入りパッケージは、postinstall フック(インストール直後)や import 時に悪意あるコードを実行する。これはセキュリティスキャナーに検出されやすい。
しかし今回の手口は異なる。悪意あるコードを通常の関数の内部に埋め込み、その関数が実際に呼び出されるまで起動しない。つまり開発者がパッケージをインストールし、ユニットテストを実行し、コードレビューを経て本番環境にデプロイ――そのどこかのタイミングで初めて悪意あるロジックが動き出す。
# 概念的な例(実際の悪意あるコードではない)
def setup_logger(name: str, level: str = "INFO"):
"""一見正常なロガーセットアップ関数"""
import logging
logger = logging.getLogger(name)
logger.setLevel(level)
# ここに悪意あるコードが埋め込まれる
# 実際の呼び出し時まで実行されないため、
# 静的解析・インストール時スキャンをすり抜ける
_exfiltrate_if_triggered()
return logger
この手法により、多くの静的解析ツールや npm audit のようなチェックをすり抜けられる。
ソーシャルエンジニアリング — LinkedIn・Telegram・Slackで偽装接触
パッケージを配布するだけでなく、攻撃者は積極的なソーシャルエンジニアリングも組み合わせる。
Security Alliance(SEAL)が追跡したところ、UNC1069 は 2026 年 2 月 6 日〜4 月 7 日の 2 ヶ月間で 164 のドメインを使い捨て、Microsoft Teams と Zoom の偽サイトを運営していた。
典型的なシナリオは次のとおりだ。
- LinkedIn や Slack で「技術面接の候補者」として開発者にコンタクト
- 「コーディング課題」と称して、悪意あるパッケージを含む GitHub リポジトリを送付
- 開発者が手元でリポジトリをクローン・実行すると感染
- 「面接ツール」として Microsoft Teams 偽サイトの URL を送り、偽アプリをインストールさせる
このキャンペーン名「Contagious Interview(感染する面接)」はまさにこの手口から来ている。
パッケージインストール前
- 公開者のアカウント履歴を確認(作成日、他のパッケージ数)
- weekly downloads が数十〜数百の新興パッケージに注意
- 依存関係グラフに不審な追加パッケージが含まれていないか
プロジェクト内
package.json/requirements.txtに見覚えのないパッケージが追加されていないかpostinstallスクリプトが定義されているパッケージの内容を確認node_modules内に.exe・.sh・base64 エンコードされた文字列を含むファイルがないか
組織レベル
- プライベートレジストリ(Nexus、Artifactory)を経由したパッケージ管理
- CI/CD ランナーのクラウドクレデンシャル権限を最小化
- npm/PyPI のアクセストークンに有効期限を設定し、長期トークンを排除
ペイロードの能力 — RAT と情報窃取の複合マルウェア
Socket の分析では、最終ペイロードは 情報窃取型マルウェアと RAT(Remote Access Trojan)の複合機能を持つとされる。
Windows 向け機能:
- キーロガー(キーストロークの記録)
- ブラウザ保存パスワード・Cookie の抽出
- パスワードマネージャーのデータベースへのアクセス試行
- 暗号資産ウォレット(MetaMask 拡張、Ledger)の認証情報窃取
- API キー・環境変数(
.envファイル)の収集 - ファイルのアップロード・ダウンロード
- 任意プロセスの起動・終了
- リモートアクセスツール(RATクライアント)の常駐インストール
macOS / Linux 向け機能:
~/.ssh/以下の秘密鍵の外部送信~/.aws/・~/.config/gcloud/等のクラウド認証情報の収集- ブラウザのプロファイルデータ(Chromium ベース)の抽出
systemdサービスや LaunchAgent による永続化
UNC1069 ─ 北朝鮮サイバー作戦のフロントライン
Contagious Interview を運営する UNC1069 は、Google GTIG(Threat Intelligence Group)が 2018 年から追跡する北朝鮮連動の脅威アクターだ。BlueNoroff・Sapphire Sleet・Stardust Chollima とも重複が確認されており、Lazarus Group の傘下クラスタと評価されている。
主な資金調達先は仮想通貨・DeFi エコシステムだ。2025 年には UNC1069 および関連クラスタが少なくとも 15 億ドル相当の暗号資産窃取に関与したと推定されている。
今回の 1,700 本超のパッケージ展開は、個別組織を直接標的にする従来の手口から、開発エコシステム全体を「面」として汚染する戦略への転換を示している。攻撃者にとって、1 本のパッケージが数千の開発者にインストールされれば、個別フィッシングの何倍もの効率で足場を広げられる。
対策の本質 ─ 「信頼のデフォルト化」を疑う
今回の事案が突きつける根本的な問いは、「パッケージをインストールすること=そのコードを自分のマシンで実行すること」という当たり前のリスクが、いかに日常の開発フローで忘れられているかだ。
# 不明なパッケージの内容を事前に確認する
npm pack <package-name>
tar -xf <package-name>.tgz && cat package/package.json
cat package/*.js | grep -E "(exec|spawn|child_process|fetch|axios|request)"
# PyPI: ダウンロードのみでインストールしない
pip download <package-name> --no-deps
unzip <package-name>*.whl -d ./inspect/
SBOMの導入と、CI/CDパイプラインへのソフトウェアコンポジション解析(SCA)ツール(Socket、Snyk、Dependabot)の組み込みが、現時点で最も実効性のある対策だ。
参考情報
- Socket Research Team: Contagious Interview Cross-Ecosystem Supply Chain Attack(2026年4月8日)
- Security Alliance (SEAL): UNC1069 Domain Infrastructure Report(2026年4月)
- Google Cloud Blog: North Korea Threat Actor Targets Axios NPM Package in Supply Chain Attack
- Vulert: North Korean Hackers Spread 1,700+ Malicious Packages Across npm, PyPI, Go & Rust
- The Hacker News: N. Korean Hackers Spread 1,700 Malicious Packages Across npm, PyPI, Go, Rust