Mastra npm supply-chain compromiseとSapphire SleetのDefender設定確認ガイド

Mastra npm supply-chain compromiseとSapphire Sleetの件で、管理者がまず確認すべき場所は、Microsoft Defenderポータルの「Threat analytics」「Threat intelligence」「Advanced hunting」「Incidents & alerts」「Settings > Endpoints」です。結論としては、影響有無の確認、IoCの照合、Defenderの保護設定、CI/CD環境の調査、開発者へのトークンローテーション周知を同時に進める必要があります。

Microsoftは2026年6月19日の更新で、このMastra npm supply-chain compromiseを、北朝鮮系の国家支援型アクターであるSapphire Sleetに高い信頼度で関連付けました。公式ソース上の分類は「Research」で、Microsoft Defender Security Research TeamとMicrosoft Threat Intelligenceによる調査として公開されています。(Microsoft)

目次

Mastra npm supply-chain compromiseとSapphire Sleetの要点

今回のインシデントは、単に「npmパッケージに悪意あるコードが入った」という話ではありません。開発者端末やCI/CDパイプラインでnpm installまたはnpm updateが実行されるだけで、アプリケーションコードから該当パッケージを直接importしていなくても影響を受ける可能性があった点が重要です。

Microsoftの調査では、Mastraおよび@mastraスコープの140以上のnpmパッケージが影響を受け、攻撃者はehindero npmメンテナーアカウントを乗っ取り、easy-day-jsというdayjsに似せたタイポスクワット依存関係を注入したとされています。easy-day-jsはインストール時のpostinstallフックを使い、難読化されたドロッパー、C2通信、二段階目ペイロードの取得、隠しプロセス実行へつながる挙動を持っていました。(Microsoft)

確認項目内容実務上の意味
公式分類Microsoft Security Blog上ではResearch製品リリース告知ではなく、脅威調査として読む
関連アクターSapphire Sleet金融、暗号資産、ブロックチェーン関連の組織は特に優先度を上げる
影響範囲Mastraおよび@mastraスコープの140以上のパッケージ直接依存だけでなく、ロックファイルとCI/CDキャッシュも確認する
悪性依存関係easy-day-jsdayjsではなく、名前が似た別パッケージを探す
主なリスク認証情報、トークン、ビルド環境、下流ソフトウェア完全性端末調査だけで終わらせず、シークレット更新まで実施する
日本時間での目安悪性版公開は2026年6月17日午前10時台日本の開発チームにはUTCではなくJSTで周知する

Microsoftは、侵害済みパッケージが削除され、攻撃者の@mastraスコープへの公開権限が取り消されたことも説明しています。ただし、すでに該当時間帯にインストールされた環境では、ローカル端末、CI runner、コンテナイメージ、キャッシュ、ビルド成果物に痕跡が残っている可能性があります。(Microsoft)

Microsoft Defenderで最初に確認する管理画面

Microsoft Defenderポータルは、脅威の保護、検出、調査、対応を一元化する管理画面です。Microsoft Defender XDRでは、Incidents & alerts、Hunting、Threat analyticsなどの機能が統合され、契約しているサブスクリプションに応じて表示される機能が変わります。(Microsoft Learn)

目的管理画面確認すること
公式の脅威レポートを確認するThreat analyticsMastraSapphire Sleetnpmで検索し、Analyst report、Indicators、Recommended actionsを確認
組織内の関連インシデントを見るIncidents & alertsNode.js、PowerShell、C2通信、Defender除外追加に関するアラートを確認
端末・CI runnerの痕跡を探すHunting > Advanced huntingeasy-day-jssetup.cjs、C2 IP、Runキー、PowerShell実行をKQLで検索
IoCをブロックまたは警告に使うSettings > Endpoints > IndicatorsIP、URL、ドメインのIndicatorを追加。対象デバイスグループを絞る
Defenderの保護機能を確認するSettings > Endpoints > Advanced featuresEDR in block mode、Custom network indicators、Tamper protection、Live responseを確認
クラウド保護を管理するIntune admin center > Endpoint security > AntivirusMicrosoft Defender AntivirusポリシーでAllow Cloud Protectionとサンプル送信を確認
脅威インテリジェンスを深掘りするThreat intelligence > Intel explorer / Intel profilesSapphire Sleet、関連ドメイン、IP、ファイルハッシュ、インフラ関係を調査

Threat analyticsでは、脅威ごとの概要、アナリストレポート、関連インシデント、影響資産、推奨アクション、Indicatorsタブを確認できます。Indicatorsタブはプレビュー機能としてIoCの一覧を提供し、Microsoftの研究者が新しい証拠を見つけると更新される仕組みです。(Microsoft Learn)

利用条件と権限でつまずきやすいポイント

Threat analyticsを利用するには、少なくとも1つのMicrosoft Defender XDR製品ライセンスが必要です。ただし、Microsoft Defender for Endpoint P1のみではThreat analyticsのアクセス要件を満たしません。また、レポートや関連アラート、影響資産を見るには、Security data basicsの読み取り権限などが必要です。(Microsoft Learn)

Advanced huntingは、最大30日分の生データを探索できるクエリベースのハンティング機能です。Microsoft Defender for Endpoint、Defender for Office 365、Defender for Cloud Apps、Defender for Identity、Microsoft Sentinelのデータを対象にできますが、実際に見えるテーブルはライセンス、連携状態、RBAC権限に左右されます。(Microsoft Learn)

Microsoft Threat IntelligenceはDefenderポータルに統合されており、Threat intelligenceメニューからIntel profilesやIntel explorerを利用できます。Defender TI premiumライセンスが前提となる機能がある一方、premiumライセンスがないユーザーでも無料のDefender TI offeringにアクセスできるとMicrosoft Learnでは説明されています。既存のDefender TI体験は2026年8月1日の製品廃止まで利用可能と案内されています。(Microsoft Learn)

ネットワークIndicatorでIP、URL、ドメインをブロックするには、Microsoft Defender for Endpoint Plan 1またはPlan 2が対象です。Microsoft EdgeなどMicrosoftブラウザーではSmartScreenが関係し、それ以外のブラウザーやアプリではNetwork Protectionをブロックモードにする必要があります。Custom network indicatorsは、DefenderポータルのSettings > Endpoints > General > Advanced featuresで有効化します。(Microsoft Learn)

Mastra / Sapphire Sleet対応で確認すべきDefender設定

今回のようなnpmサプライチェーン攻撃では、検出だけでなく「攻撃者に保護設定を弱められていないか」の確認が重要です。Microsoftの調査では、ポスト侵害段階でDefender除外の追加やサービスレベルの永続化が観測されています。(Microsoft)

設定確認場所望ましい状態注意点
Cloud-delivered protectionIntune > Endpoint security > AntivirusAllowedBlock at first sight、サンプル解析、EDR in block modeなど複数機能に関係
Automatic sample submissionIntune > Endpoint security > AntivirusSend safe samples automatically以上Never sendやAlways promptは保護レベルを下げる場合がある
Tamper protectionSettings > Endpoints > Advanced features / Intune有効攻撃者による保護設定変更や除外追加を抑止する
EDR in block modeSettings > Endpoints > Advanced features必要に応じて有効Defender Antivirusがパッシブでも悪性アーティファクトのブロックに寄与
Custom network indicatorsSettings > Endpoints > Advanced features有効C2 IP、ドメインをIndicatorで制御する前提
Network ProtectionIntune、GPO、セキュリティベースラインブロックモード非MicrosoftブラウザーやNode.jsなどの通信制御で重要
Device onboardingSettings > Endpoints > Device management > Onboarding開発者端末、CI runner、ビルドサーバーまで対象開発端末だけでなく、一時的なrunnerやサーバーも棚卸しする
Threat analytics通知Settings > Microsoft Defender XDR > Email notifications > Threat analyticsSOC、開発責任者、インフラ責任者に通知レポート更新を見逃すとIoC更新への反応が遅れる

Cloud-delivered protectionは既定で有効とされますが、過去の組織ポリシーで無効化されている場合があります。IntuneではEndpoint security > AntivirusからMicrosoft Defender Antivirusポリシーを作成または編集し、Allow Cloud ProtectionをAllowedに設定します。PowerShellではSet-MpPreference -MAPSReporting AdvancedSet-MpPreference -SubmitSamplesConsent SendAllSamplesで構成できますが、組織環境ではIntuneやポリシーによる一元管理を優先してください。(Microsoft Learn)

Tamper protectionは、ウイルスと脅威の防止、リアルタイム保護、クラウド保護、除外設定などが不正に変更されるのを防ぐ機能です。Microsoft Learnでは、PowerShellのGet-MpComputerStatusIsTamperProtectedRealTimeProtectionEnabledを確認する方法も示されています。(Microsoft Learn)

Get-MpComputerStatus |
  Select-Object IsTamperProtected, RealTimeProtectionEnabled, AMServiceEnabled, AntivirusEnabled

Advanced huntingで確認するKQL例

Microsoftのブログでは、setup.cjseasy-day-jsを含むNode.jsプロセス、C2 IPへのアウトバウンド通信を探すAdvanced huntingクエリが提示されています。ここでは実務で使いやすいように、30日以内の調査に広げた例を示します。Advanced huntingのクエリはUTC基準で扱われるため、2026年6月17日午前10時台JSTの事象を調べる場合もUTC換算を意識してください。(Microsoft)

easy-day-jsまたはsetup.cjsの実行痕跡を探す

DeviceProcessEvents
| where Timestamp > ago(30d)
| where FileName in~ ("node", "node.exe")
| where ProcessCommandLine has_any ("setup.cjs", "easy-day-js", "--no-warnings")
   or FolderPath has "easy-day-js"
| project Timestamp, DeviceName, AccountName, FileName,
          ProcessCommandLine, FolderPath,
          InitiatingProcessFileName, InitiatingProcessCommandLine,
          DeviceId, ReportId
| order by Timestamp desc

このクエリでヒットした場合は、単に該当ファイルを削除するのではなく、該当端末で実行されたnpmコマンド、作業ディレクトリ、Gitリポジトリ、CIジョブ名、同時刻のネットワーク通信を確認します。開発者端末でヒットした場合、ブラウザー拡張機能、暗号資産ウォレット、クラウド認証情報、npmトークン、GitHub PAT、CI/CDシークレットの漏えい可能性を前提に扱うべきです。

C2 IPおよび関連ドメインへの通信を探す

DeviceNetworkEvents
| where Timestamp > ago(30d)
| where RemoteIP in ("23.254.164.92", "23.254.164.123")
   or RemoteUrl has_any ("teams.onweblive.org", "maskasd.com")
| project Timestamp, DeviceName, InitiatingProcessFileName,
          InitiatingProcessCommandLine, RemoteIP, RemotePort,
          RemoteUrl, ActionType, DeviceId, ReportId
| order by Timestamp desc

Microsoftが公開したIoCには、23.254.164.9223.254.164.123teams.onweblive.orgmaskasd.comなどが含まれています。ネットワークIndicatorでブロックする場合は、Settings > Endpoints > IndicatorsからIP addressesまたはURLs/Domainsタブを使い、対象デバイスグループ、期限、説明を明確に設定します。なお、URL/IPブロックは反映まで最大48時間かかる場合があり、多くの場合は2時間未満とされています。(Microsoft)

Runキーと不審な永続化を探す

DeviceRegistryEvents
| where Timestamp > ago(30d)
| where RegistryKey has @"\Software\Microsoft\Windows\CurrentVersion\Run"
| where RegistryValueName in~ ("NvmProtocal", "MicrosoftUpdate")
   or RegistryValueData has_any ("NodePackages", "protocal.cjs", "system.bat")
| project Timestamp, DeviceName, ActionType, RegistryKey,
          RegistryValueName, RegistryValueData,
          InitiatingProcessFileName, InitiatingProcessCommandLine,
          DeviceId, ReportId
| order by Timestamp desc

Microsoftの調査では、WindowsでHKCU\...\CurrentVersion\Runを使った永続化、NvmProtocalprotocal.cjsMicrosoftUpdateなど、正規のNode.jsやMicrosoft更新に見せかける名称が使われています。名前だけで安全と判断せず、作成時刻、親プロセス、実行ユーザー、配置先パスをセットで確認してください。(Microsoft)

Defender除外や不審なサービス作成を探す

DeviceProcessEvents
| where Timestamp > ago(30d)
| where ProcessCommandLine has_any ("Add-MpPreference", "Set-MpPreference", "ExclusionPath")
   or ProcessCommandLine has "sc create scdev"
   or ProcessCommandLine has "scdev.dll"
| project Timestamp, DeviceName, AccountName, FileName,
          ProcessCommandLine, InitiatingProcessFileName,
          InitiatingProcessCommandLine, DeviceId, ReportId
| order by Timestamp desc

Defender除外の変更は、マルウェアそのものの検出よりも見落とされやすいポイントです。特にC:\Windows\System32のような広すぎる除外、正規サービスに見せかけた自動起動サービス、svchost.exeを使う不審なサービス定義があれば、端末隔離とフォレンジックを優先します。

カスタム検出ルールにするか、一回限りの調査にするか

Mastra npm supply-chain compromiseへの対応では、まずAdvanced huntingで過去30日を調査し、ヒット状況を把握します。そのうえで、今後も同様のnpmポストインストール攻撃を監視したい場合は、Custom detection rulesとして登録します。

Microsoft Defender XDRのカスタム検出は、Advanced huntingクエリをもとに定期実行し、条件一致時にアラートや応答アクションを生成できます。作成時はAdvanced huntingからCreate detection ruleを選ぶ方法と、Custom detection rules一覧から新規作成する方法があります。Defenderデータを対象にする場合、TimestampDeviceIdまたはDeviceNameなどの列を返すように設計すると、アラートの紐付けが安定します。(Microsoft Learn)

判断基準一回限りのAdvanced huntingCustom detection rules
目的既に影響を受けたか確認する今後の類似挙動を継続監視する
対象2026年6月17日前後のnpm実行、C2通信Node.js postinstall、難読化スクリプト、異常なPowerShell
メリットノイズを見ながら柔軟に調査できるSOCの運用フローに乗せやすい
注意点実行し忘れると追跡が止まるクエリが広すぎるとアラート疲れを招く
推奨初動調査、影響範囲特定影響端末があった場合、または開発端末が多い組織

カスタム検出は、1回の実行で最大150件のアラート生成制限があります。通常業務で発生するNode.js実行まで拾うとノイズが増えるため、setup.cjseasy-day-js、不審な一時ディレクトリ、既知C2、Defender除外変更など、複数条件を組み合わせて精度を上げてください。(Microsoft Learn)

開発者とCI/CD管理者へ周知する内容

今回の攻撃は、セキュリティ担当だけで完結しません。開発者、SRE、CI/CD管理者、情シスが同じ前提で動けるように、短く具体的な周知文を出すことが重要です。

周知で必ず伝えるべきこと

対象伝える内容理由
開発者2026年6月17日午前10時以降にMastra関連でnpm installまたはnpm updateを実行した場合は申告依存関係の解決だけでpostinstallが走る可能性がある
CI/CD管理者該当時間帯のジョブログ、runner、キャッシュ、コンテナレイヤーを確認一時runnerでもシークレットが読み取られた可能性がある
リポジトリ管理者package-lock.jsonpnpm-lock.yamlyarn.lockeasy-day-jsを検索直接依存ではなく推移的依存で入る可能性がある
クラウド管理者GitHub PAT、npm token、Azure/AWS/GCPキー、LLM APIキーを棚卸し開発端末やCIに保存された認証情報が狙われる
ヘルプデスク該当端末を自己判断で初期化しないよう案内証跡が消えると影響範囲の判断が難しくなる

開発者には、次のようなコマンドを案内すると実務で確認しやすくなります。ただし、ヒットした端末では証跡保全を優先し、勝手に削除や再インストールを進めないよう明記してください。

npm ls easy-day-js

grep -R "easy-day-js" package-lock.json pnpm-lock.yaml yarn.lock 2>/dev/null

社内周知文の例

2026年6月17日午前10時以降に、Mastraまたは@mastra関連パッケージを含むプロジェクトでnpm installまたはnpm updateを実行した方は、開発端末名、リポジトリ名、実行時刻、CIジョブ名をセキュリティ担当へ連絡してください。該当端末では、自己判断でキャッシュ削除、再インストール、初期化を行わないでください。必要に応じて、npm token、GitHub PAT、クラウド認証情報、CI/CDシークレット、APIキーのローテーションを実施します。

この文面のポイントは、「Mastraを使っている人だけ確認してください」ではなく、「Mastra関連パッケージを含む依存関係でnpm install/updateを実行した人」を対象にすることです。今回の攻撃では、パッケージをアプリケーションコードで使ったかどうかより、インストール時にpostinstallが動いたかどうかが重要です。

対応フロー:検出、封じ込め、復旧、再発防止

Mastra npm supply-chain compromiseとSapphire Sleetの設定確認は、次の順番で進めると抜け漏れを減らせます。

フェーズ実施内容完了条件
影響確認Threat analytics、Advanced hunting、ロックファイル、CIログを確認影響端末、影響リポジトリ、影響ジョブの一覧がある
封じ込め端末隔離、C2ブロック、該当runner停止、キャッシュ凍結新たな通信やビルド実行が止まっている
認証情報対応npm token、GitHub PAT、CI secrets、クラウドキー、APIキーをローテーション更新済みキーと失効済みキーが記録されている
証跡確認Runキー、サービス、PowerShell履歴削除、Defender除外を確認永続化と防御回避の有無が判断できている
復旧クリーンな依存関係、クリーンなrunner、再生成したコンテナでビルド侵害時点のキャッシュや成果物を使っていない
再発防止lockfile運用、依存関係レビュー、--ignore-scriptsの適用範囲検討開発チームの手順書に反映されている

Microsoftは緩和策として、影響を受けた@mastraパッケージの直接・推移的依存の確認、node_modulesやlockfile上のeasy-day-js確認、既知の安全なバージョンへの固定、npm install --ignore-scriptsの利用、IoCアーティファクト確認、認証情報やトークンのローテーション、C2 IPのブロック、CI/CDログ監査、クラウド配信保護の有効化を挙げています。(Microsoft)

設定確認で失敗しやすいポイント

Defenderポータルに画面が見えない

管理者によって「Threat analyticsが見えない」「Threat intelligenceが見えない」「Advanced huntingの一部テーブルが見えない」という差が出ることがあります。これは多くの場合、ライセンス、Microsoft Defender XDRの有効化、製品ごとの連携、RBACスコープ、Microsoft Sentinelワークスペース接続のいずれかが原因です。

特にThreat analyticsは、対象レポート自体が見えても、関連インシデント、影響資産、露出、推奨アクションまで見えるかは、利用中の製品と権限に左右されます。SOC担当者にはSecurity Reader相当だけで足りるか、設定変更担当にはSecurity AdministratorやSecurity settings manage相当が必要かを分けて設計してください。(Microsoft Learn)

C2ブロックだけで完了と判断する

C2 IPやドメインをブロックするのは必要ですが、それだけでは不十分です。今回のような攻撃では、すでに取得されたトークン、CI/CDシークレット、ブラウザー情報、永続化されたバックドアの確認が必要です。ネットワーク遮断後も、認証情報のローテーションとビルド環境の再作成を完了条件に含めてください。

dayjsを誤って疑う

悪性パッケージはdayjsではなく、easy-day-jsです。名前が似ているため、開発者向けの周知では「正規のdayjsそのものを削除する話ではない」と明記すると混乱を減らせます。

CI runnerを端末管理の対象外にしている

開発者端末だけをMicrosoft Defender for Endpointにオンボードしていて、CI runner、ビルドサーバー、セルフホストrunner、検証用VMが対象外になっている組織は珍しくありません。今回のようなnpm install起点の攻撃では、むしろCI/CD環境のほうが高価値なシークレットを持っている場合があります。Defender for Endpointのオンボーディング画面では、OSを選択し、接続方式と展開方法を選んでオンボーディングパッケージを取得できます。(Microsoft Learn)

Indicatorの優先順位を誤解する

URL、ドメイン、IPのIndicatorでは、Allow、Warn、Blockが競合した場合、AllowがWarnより、WarnがBlockより優先されます。過去に例外としてAllowを作っていると、今回追加したBlockが効かない可能性があります。Indicatorを追加したら、同じIP、ドメイン、上位ドメイン、長いURLパスのAllow設定がないかも確認してください。(Microsoft Learn)

次に取るべき行動

Mastra npm supply-chain compromiseとSapphire Sleetへの対応では、まずThreat analyticsとMicrosoft Security Blogの情報でIoCと推奨アクションを確認し、Advanced huntingで自組織の実行痕跡を調べます。次に、Settings > EndpointsとIntuneでCloud-delivered protection、Tamper protection、Custom network indicators、Network Protection、EDR in block modeの状態を確認します。

影響が疑われる端末やCI/CDジョブが1件でも見つかった場合は、端末調査だけで終わらせず、npm token、GitHub PAT、クラウド認証情報、CI/CDシークレット、APIキーのローテーションまで進めてください。最後に、開発者へ「該当時間帯にnpm install/updateを実行したか」「easy-day-jsがlockfileに含まれるか」「自己判断で削除しないこと」を周知すれば、技術調査と現場対応の両方をそろえられます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次