EternalBlue(MS17-010)

1個の型の取り違えがカーネルを乗っ取り世界を止めた事例から、SMBv1のプール破壊の原理・ワーム化の条件・レガシープロトコル廃止という正解までを一気に押さえられる。

応用EternalBlueMS17-010SMBバッファオーバーフローWannaCry脆弱性最終更新: 2026-07-29
3つの要点
TL;DR
  1. EternalBlue本体は主にCVE-2017-0144(CVSS 8.1)。2017年3月のMS17-010で修正されたが、未適用機がWannaCryとNotPetyaの拡散基盤になった。
  2. SMBv1がOS/2 FEAをNT FEAへ換算する際にWORDとDWORDを取り違え、非ページプールを過大書き込みする。プールグルーミングと組み合わせ、カーネルRCEへ至る。
  3. 対策はMS17-010の適用に尽きるが、本質的にはSMBv1そのものの廃止。教訓はレガシープロトコルの負債・パッチ遅延の代償・攻撃ツール流出(Shadow Brokers)というサプライチェーンリスク。

何が起きたか(影響範囲・深刻度)

EternalBlueは、Windowsのファイル共有プロトコル SMBv1(Server Message Block バージョン1)の実装欠陥を突く、リモートコード実行(RCE)エクスプロイトです。米NSAが開発したとされ、2017年4月にShadow Brokersが公開して一般に流出しました。修正は2017年3月14日公開の月例セキュリティ情報 MS17-010 で、対応CVEは CVE-2017-0143 から CVE-2017-0148 の6件、EternalBlue本体が突くのは主に CVE-2017-0144 です。NVDの評価は CVSS 3.0 基本値 8.1(High、AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)。

深刻さの本質は、認証不要・ユーザー操作不要でカーネル権限(SYSTEM)のコード実行に至る点にあります。攻撃対象はネットワークに露出したTCP 445番ポートで、脆弱性がカーネルモードのドライバ srv.sys に存在するため、成功すればOSの最高権限を直接奪えます。この「認証前・ネットワーク越し・カーネル権限」という三拍子が、後述するワーム化を可能にしました。実際、2017年5月のWannaCry、続くNotPetyaが本エクスプロイトを拡散エンジンとして採用し、世界中で数十万台規模の感染を引き起こしています。

MS17-010は複数CVEの束

MS17-010はSMBv1の一連の欠陥(CVE-2017-0143〜0148)をまとめて塞ぐ更新です。EternalBlueは主にプールオーバーフロー系のCVE-2017-0144を利用しますが、実際のエクスプロイトチェーンは型変換の誤り・トランザクション状態の混同など複数の欠陥を連鎖させます。

脆弱性の原理

SMBv1には「トランザクション」という仕組みがあり、1リクエストに収まらない大きなデータを TRANS2 と、続きを送る TRANS2_SECONDARY に分割して送れます。攻撃はこのトランザクション処理と、SMBが扱う OS/2 由来の拡張属性リスト(FEAList: File Extended Attribute list)のサイズ計算を悪用します。

核心の関数が srv.sys 内の SrvOs2FeaListSizeToNt です。この関数は、送られてきたOS/2形式のFEAリストの総サイズを、Windows内部のNT形式FEAリストのサイズへ換算します。ここで型の取り違えが起きます。リスト全体のサイズを保持するフィールド SizeOfListInBytes は本来 DWORD(32ビット)ですが、換算の途中で WORD(16ビット)として扱われる箇所があり、上位16ビットが切り捨てられます。

// 概念図: サイズ計算の取り違え
本来: NTリストサイズ = 変換後の総バイト数 (DWORD, 32bit)
実際: 途中で WORD (16bit) に切り詰め → 計算値が実サイズより小さくなる

割り当て: 小さい(誤った)値でプール確保
書き込み: 大きい(本来の)値の分だけコピー
      → 確保領域の末尾を越えて隣接プールを上書き (pool overflow)

結果として、ドライバは「小さく見積もったサイズ」で非ページプール(non-paged pool: ページアウトされないカーネルヒープ領域)を確保しますが、実際のデータコピーは「本来の大きいサイズ」で行われます。この差分ぶんだけ、確保領域の外側にある隣接プールが上書きされます。これがプールオーバーフロー(pool corruption)です。整数の型変換ミスが、そのままヒープ破壊のプリミティブに化けます。

なぜ致命的か: カーネルヒープの破壊

非ページプールはカーネルの共有ヒープです。ここを任意に上書きできると、隣接オブジェクトのポインタや関数テーブルを書き換えられ、制御フローの奪取(=RCE)につながります。ユーザー空間のヒープと違い、破壊が即座にOS全体の権限に直結する点が深刻です。

エクスプロイトの流れ

横にスクロール

SMBv1の長さ不一致がカーネル実行と自律拡散を許した脆弱性の攻撃入力から影響と防御までを示す図
攻撃入力が信頼境界を越える概念的な連鎖と、優先する検知・緩和策を整理します。

実際のRCEは、破壊プリミティブを「狙った場所・狙った内容」で発火させる制御が要ります。以下は概念レベルの流れで、そのまま動くコードやペイロードは示しません。

  1. プールグルーミング: 攻撃者は連続したSMBパケットで大量の同サイズオブジェクトをプールに割り付け、意図した隣接関係を作り込みます。オーバーフローが上書きする「隣」を、都合のよいオブジェクトに揃えるための地ならしです。
  2. オーバーフローの発火: TRANS2_SECONDARY で細工したFEAリストを送り、SrvOs2FeaListSizeToNt の型取り違えを誘発してプールを破壊します。
  3. 制御構造の書き換え: 破壊対象として、多くの実装は srvnet.sys が確保する受信バッファ(SRVNET_BUFFER_HDR に相当する構造)を選びます。この構造に含まれるポインタを、攻撃者制御のデータや領域へ向くよう書き換えます。
  4. 実行フローの奪取: 書き換えたポインタ経由で、カーネルが攻撃者データを関数・ハンドラとして参照するよう仕向け、カーネルモードでのコード実行に到達します。実運用のエクスプロイトはここからシェルコードでペイロード(DoublePulsar等のバックドア)を常駐させました。
ワーム化を成立させた三条件

(1)認証前に到達できる(TCP 445の露出)、(2)ユーザー操作が要らない、(3)成功時に最高権限を得る。この3つが揃うと、感染ホストが次の脆弱ホストを自動探索・自己複製する自律拡散(ワーム)が成立します。WannaCryは暗号化と身代金要求に、NotPetyaは破壊に、この同じ拡散基盤を流用しました。

修正と対策

MS17-010が変えたのは、突き詰めればサイズ計算の健全化です。FEAリストのサイズを一貫して十分な幅の整数(DWORD)で扱い、割り当てサイズとコピーサイズを一致させ、トランザクションの境界・長さ検証を厳格化しました。これにより「小さく確保して大きく書く」という不一致そのものが起きなくなります。

ただしパッチ適用は必要条件であって十分条件ではありません。根本対策はSMBv1という30年前の設計を使うのをやめることです。Microsoftは以前からSMBv1の非推奨を進め、Windows 10や Windows Server 2016 以降では既定で無効化・順次アンインストールへ舵を切りました。SMBv2/v3はメッセージ署名や堅牢な検証を備え、そもそもこのクラスの欠陥を持ちません。

対策レイヤ具体策位置づけ
パッチMS17-010を適用必須。ただし未適用機は残り続ける
プロトコルSMBv1を無効化・削除しSMBv2/v3へ根本対策。攻撃面そのものを消す
ネットワークTCP 445を境界で遮断・内部セグメント化露出削減。横展開を止める
監視445の異常スキャン検知・EDR侵入後の自律拡散を早期に断つ

WannaCryの被害が甚大だったのは、パッチ公開(3月)から流出・悪用(4〜5月)まで時間があったにもかかわらず、多数の組織が445を露出したまま未適用で放置していたためです。緊急パッチはWindows XPなど当時すでにサポート切れだったOSにも例外的に提供されました。

教訓

押さえどころ

「整数の型・幅の取り違え → 割り当てとコピーのサイズ不一致 → ヒープ/プール破壊 → 制御フロー奪取」は、メモリ破壊系脆弱性の王道パターンです。SMBv1という認証前・カーネル権限の攻撃面と組み合わさったことがEternalBlueを決定的にしました。

  • レガシープロトコルは負債として棚卸しする: SMBv1は互換性のためだけに生き残り、現代的な検証も署名もないまま巨大な攻撃面を提供し続けました。「使っていないつもりで有効なまま」の古い機能こそ危険です。攻撃面の削減(不要機能の無効化)は、単体の脆弱性修正より効きます。
  • パッチ遅延はそのまま被害の窓になる: 修正は流出の前月に出ていました。露出資産(この場合TCP 445)の把握と適用の速さが、被害の有無を分けます。境界での遮断と内部セグメント化は、適用が間に合わない間の時間を稼ぎます。
  • 攻撃ツールの流出はサプライチェーンリスク: 国家機関が備蓄していたエクスプロイトがShadow Brokersにより公開され、そのまま実害へ直結しました。高度な攻撃能力は漏れれば誰でも使える兵器になります。脆弱性の秘匿(非開示)にはこの拡散リスクが常に伴います。

メモリ破壊やプール/ヒープ悪用、多層防御の考え方はセキュリティ、カーネルのメモリ管理や権限境界の仕組みはOS、445のようなポート露出と境界防御はネットワークの各トピックも参照してください。

脆弱性の解剖の記事ガイド

EternalBlue(MS17-010)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

EternalBlue

比較で見る軸

難易度: advanced / カテゴリ: 脆弱性の解剖 / タグ数: 6

導入後に効く点

SMBv1がOS/2 FEAをNT FEAへ換算する際にWORDとDWORDを取り違え、非ページプールを過大書き込みする。プールグルーミングと組み合わせ、カーネルRCEへ至る。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
脆弱性の解剖
タグ数
6

判断チェックリスト

  • 自社の用途が「EternalBlue / MS17-010」に近いか確認する。
  • 強みである「EternalBlue本体は主にCVE-2017-0144(CVSS 8.1)。2017年3月のMS17-010で修正されたが、未適用機がWannaCryとNotPetyaの拡散基盤になった。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

EternalBlueMS17-010SMBバッファオーバーフローWannaCry
参考: 公式情報