Meltdown/Spectreの脆弱性、リスク、対策3. Meltdown/Spectreとは?
•“Speculative Execution Side Channel Attack”
(投機実⾏のサイドチャンル攻撃)
という新しい脆弱性のジャンルの2つの異なる脆弱性/攻撃
•現在、3つの攻撃⼿法が公開されている
タイプ1:配列の境界チェックバイパス (CVE-2017-5753) (Spectre)
タイプ2:分岐ターゲットインジェクション (CVE-2017-5715) (Spectre)
タイプ3:不正なデータキャッシュ読み込み (CVE-2017-5754) (Meltdown)
12. User Mode Sandbox
(User Mode)
(Kernel Mode)
ウェブブラウザ
ウェブサイト
A
JavaScript
Sandbox A
JavaScript
Sandbox B
ウェブサイト
B
あるウェブサイトのJavascriptが勝⼿に
違うサイトの情報(例:Cookieの
セッションID等)やブラウザの
メモリ上にあるパスワード、
セッションID等にアクセスできない
ように
(セッション乗っ取りできないように)
Sandboxという制限された仮想環境で
実⾏される。
25. サイドチャネル攻撃
•例:
•タイミング攻撃 (Timing Attack. 例:Meltdown、Spectre)
•故障利用攻撃 (Fault Attack. 例:Row hammer)
•電⼒解析攻撃 (Power Monitoring Attack)
•電磁波解析攻撃 (Electromagnetic Analysis. 例:TEMPEST)
•キャッシュ攻撃 (Cache Attack:例:Meltdown/Spectre)
•音響解析攻撃 (Acoustic Attack)
•等々
30. Meltdown攻撃 (抽象編)
•例:
•01: $A = muzukashii_keisan()
02: if ($A == 8) {
03: $B = load_memory(kernel_address)
04: $C = load_memory($B)
05: } KPTI等のOSパッチは投機実⾏を悪用して
カーネルアドレスにアクセスできない
(CPUが正しく権限を確認するかブロックする)
ユーザプロセスがカーネル
アドレスにアクセスしよう
としたら次の命令を
投機実⾏してはいけない!
34. Spectre攻撃(検証コード)
$ ./spectre.out
Putting 'The Magic Words are Squeamish Ossifrage.' in memory
Reading 40 bytes:
Reading at malicious_x = 0xffffffffffdfeed8... Success: 0x54='T' score=2
Reading at malicious_x = 0xffffffffffdfeed9... Success: 0x68='h' score=2
Reading at malicious_x = 0xffffffffffdfeeda... Success: 0x65='e' score=2
Reading at malicious_x = 0xffffffffffdfeedb... Success: 0x20=' ' score=2
Reading at malicious_x = 0xffffffffffdfeedc... Success: 0x4D='M' score=2
Reading at malicious_x = 0xffffffffffdfeedd... Success: 0x61='a' score=7 (second best: 0x00 score=3)
Reading at malicious_x = 0xffffffffffdfeede... Success: 0x67='g' score=2
Reading at malicious_x = 0xffffffffffdfeedf... Success: 0x69='i' score=2
Reading at malicious_x = 0xffffffffffdfeee0... Success: 0x63='c' score=7 (second best: 0x05 score=1)
Reading at malicious_x = 0xffffffffffdfeee1... Success: 0x20=' ' score=7 (second best: 0x00 score=3)
41. Windowsの対策
• Windows Updateである程度対策できる
• ※パフォーマンスが下がる (5-30%?) (PCID機能が付いているCPUはマシ)
• ※レジストリ設定変更も必要!(サーバだけ)
• ※XP、Vista、Win2003等の古いOSのパッチが無い
• ※CPUベンダーからmicrocode/firmwareアップデートも必要
• ※Anti-Virusが対応していない場合はブルースクリーンになってしまう
(特にSymantec?) Anti-Virusベンダーとの確認が必要。
アップデートする前にパッチをテスト!
• (Spectreタイプ2はHWアップデートかソフトアップデートでretpolineで緩和)
44. Linuxの対策
•Meltdown対策(ソフト側)
•64bit: KPTI (Kernel Page Table Isolation) (HWパッチが来たら不要?)
旧名:KAISER
プロセスの仮想空間からカーネル空間を隠す(完全にできないけど)
Kernel 4.15以上、4.14.11にバックポート
•32bit:
•4GB/4GB Split Memoryの場合は⼤丈夫そうなので、⼀番現実的な対策
(恐らくカーネルの再コンパイルが必要)
•GRSecurityのKERNEXEC&UDEREF
2006年からある程度対策していた。今は完全に対応しているけど有料
47. ブラウザ対策
•IE : Exploit Mitigation(攻撃緩和)パッチ有り
•FF: 2017年11月のバージョン57.0.4から攻撃緩和
(Timer関数の結果を曖昧に)
•Safari/iOS: 1月8日に攻撃緩和のパッチがリリース
•(Spectreは新ハードウェアかFirmwareアップデートで
対応するしかないようです)