脆弱性の解剖
名前付き脆弱性の解剖
Log4Shell・Heartbleed・Dirty COW・XZバックドア… 歴史に名を刻んだ脆弱性を、原理→エクスプロイト→修正→教訓で解剖する。
解説記事
脆弱性の解剖
何が起きたか→脆弱性の原理→エクスプロイトの流れ→修正と対策→教訓。防御のために、攻撃の仕組みを正しく知る。
Baron Samedit(sudo, CVE-2021-3156)
ほぼ全Linuxに入るsudoで約10年潜んだヒープ溢れが、なぜ末尾バックスラッシュ1個でローカルroot昇格に化けるのかを、エスケープ処理のオフバイ境界から正確につかめる。
Dirty COW(CVE-2016-5195)
9年潜んだLinuxカーネルの競合バグから、コピーオンライトのTOCTOUレース、読み取り専用ファイルを書き換える権限昇格、そして並行性バグの怖さを一気に学べる。
Dirty Pipe(CVE-2022-0847)
たった一つの初期化漏れフラグが、読み取り専用ファイルへの書き込みを許し一般ユーザーをrootにした事例から、パイプとページキャッシュの内部動作と状態管理の原則を学べる。
EternalBlue(MS17-010)
1個の型の取り違えがカーネルを乗っ取り世界を止めた事例から、SMBv1のプール破壊の原理・ワーム化の条件・レガシープロトコル廃止という正解までを一気に押さえられる。
GHOST(glibc gethostbyname, CVE-2015-0235)
たった1個の名前解決関数のサイズ計算ミスが、Linux基盤の広範なプログラムをRCEにさらした。境界計算の落とし穴と、基盤ライブラリを直したのに世界が脆弱なままだった理由を学べる。
Heartbleed(CVE-2014-0160)
たった1つの長さ検証漏れが世界中のTLSサーバーから秘密鍵まで抜いた事件を、未検証memcpyの原理・境界チェックの欠落・修正差分・境界検証の一般原則まで一気に理解できる。
KRACK(WPA2鍵再インストール攻撃)
堅牢なはずのWPA2が破れた理由を、4ウェイハンドシェイクの再送とnonce再利用という一点から理解できる。プロトコル仕様そのものの欠陥と、WPA3・実装修正・形式検証までを一気に押さえられる。
Log4Shell(CVE-2021-44228)
ログに一行書かれただけでサーバーが乗っ取られた事件から、ログ機能がなぜ任意コード実行になるのか、推移的依存の恐ろしさ、複数回に及んだ段階的修正までを一気に理解できる。
Rowhammer(DRAMビット反転)
権限のないプロセスがDRAMの物理的な弱点だけで全メモリを書き換える攻撃を、電荷リークの原理からページテーブル改変、TRR・ECCが破られた理由まで最短で理解できる。
Shellshock(CVE-2014-6271)
環境変数に潜む1行でWebサーバーが乗っ取られた事故から、bashの関数定義パーサの欠陥と、環境変数を信頼境界にしない設計原則を最短で学べる。
Spring4Shell(CVE-2022-22965)
リクエストパラメータだけでWebシェルを書き込めた重大RCEの全貌がつかめる。getClassを起点にClassLoaderを操るバインディングの原理と、12年前の緩和が破れた理由まで分かる。
XZ Utilsバックドア(CVE-2024-3094)
ほぼ全Linuxが載せる圧縮ライブラリに、2年かけて信頼を得たメンテナがsshd認証を破るバックドアを仕込んだ。CVSS10.0の攻撃がなぜ検知網をすり抜け、性能の違和感1つで暴かれたのかを解剖する。