Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Meltdown/Spectreの脆弱性、リスク、対策

856 views

Published on

最近大騒ぎになっているMeltdown/Spectre脆弱性/攻撃について

Published in: Technology
  • Be the first to comment

Meltdown/Spectreの脆弱性、リスク、対策

  1. 1. ⼤和セキュリティ勉強会 / 神戸デジタル・ラボ 2018/01/07 ⽥中ザック Meltdown/Spectreの 脆弱性、リスク、対策
  2. 2. *注意*•難しい攻撃です! •⽭盾している情報も結構ある •エキスパートでも何が正しいのかはっきり分かっていない •⼤体イメージできたらOK! 「コンピューターハードウェアの2つの学位を 持っていてIntelのプロダクトセキュリティチー ムで働いていた。既にSpectreとMeltdownについ て知っていたけど、理解するのに⾊んな記事を 何度も読み直す必要があった。
 よく意味がわからなくても落ち込まないで∼」
  3. 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)
  4. 4. 発見者 •2017年6月ごろにたまたま同じタイミングで
 複数のチームに発見された •Meltdown
 ・ Jann Horn (Google Project Zero)
 ・ Werner Haas, Thomas Prescher (Cyberus Technology),
 ・ Daniel Gruss, Moritz Lipp, Stefan Mangard, 
 Michael Schwarz (Graz University of Technology) •Spectre
 • Jann Horn (Google Project Zero)
 • Paul Kocher 
  5. 5. 誰が脆弱? •1995年から作られた
 Intel、ARM、AMD CPUを使っている⼈ •つまり、EVERYONE!! •(例外:2013年以前のIntel ItaniumとAtom等)
  6. 6. 世界が終わるような脆弱性?
  7. 7. 世界が終わるような脆弱性? •いやいや∼ 落ち着いてください! •今まで「世界が終わる」と⾔われるような脆弱性が
 沢⼭発見されて、⼤騒ぎになったけど
 (例:Heartbleed、ShellShock、Kaminsky DNS Bug等々)
 結局思ったほどの被害は無かった •とは⾔え、できるだけ早めに対策すべき
  8. 8. 危険度? •国家支援を受けている攻撃者(APT)に狙われている
 ⼈物、会社、政府機関等は特に注意? •去年から既に攻撃している? •(今から攻撃ツールがどんどん公開されるので、
 ペンテスターもスクリプトキディも悪用できるようになるでしょう) •確かに深刻な脆弱性だが、古いソフトを利用しない、
 ネットワークを監視する、弱いパスワードを利用しない、
 パスワードを再利用しない、2段階認証を利用する、
 不適切な権限を与えない等々の対策を優先する!!!
  9. 9. 脆弱性の背景
  10. 10. User/Kernelメモリ (プロテクトモード) User Mode
 (Ring 3) 権限:低 プロセス(起動中のアプリケーション)の仮想メモリ空間 Kernel Mode
 (Ring 0) 権限:⾼ アプリケーションの
 実⾏命令とデータ OS(ファイルアクセス、
 セキュリティチェック、
 プロセス管理、パスワード管理等)
  11. 11. User/Kernelメモリ •プログラムがファイルにアクセスしたり、
 ネットワークでデータを送信したい時は
 カーネルにお願いするしかない(System Call (syscall)) •syscallを実⾏すると、CPUが⼀旦Ring 3からRing 0に切り替わり、
 syscallの実⾏が終了するとまたRing 3に戻る •Userモードメモリから直接Kernelモードメモリへの
 アクセスは禁⽌されている! •Userプロセスが別プロセスのメモリへのアクセスも禁⽌
 (例外: Debugger、DLLインジェクション等々(管理者権限必要))
  12. 12. User Mode Sandbox (User Mode) (Kernel Mode) ウェブブラウザ ウェブサイト
 A JavaScript Sandbox A JavaScript Sandbox B ウェブサイト
 B あるウェブサイトのJavascriptが勝⼿に
 違うサイトの情報(例:Cookieの
 セッションID等)やブラウザの
 メモリ上にあるパスワード、
 セッションID等にアクセスできない
 ように
 (セッション乗っ取りできないように) Sandboxという制限された仮想環境で
 実⾏される。
  13. 13. Meltdown攻撃 (⾼レイヤー)
  14. 14. Meltdown攻撃 User Mode
 (Ring 3) 権限:低 Kernel Mode
 (Ring 0) 権限:⾼ ユーザプロセスが勝⼿に
 カーネルメモリの情報を
 閲覧できてしまう OSにある機密情報
 (パスワード等)を盗める
  15. 15. 物理メモリ v.s. 仮想メモリ リンク:https://ja.wikipedia.org/wiki/プロテクトモード 各32ビットアプリは4GBの仮想空間を持っている
 2^32 = 4GB (0x00000000 - 0xffffffff) 半分がユーザアドレス、半分がカーネルアドレス 使用されているメモリアドレスは物理メモリに
 マッピングされている OSと全てのプロセス情報は物理メモリにある 物理メモリをダンプできたら、全てのプロセス
 情報を盗める!

  16. 16. カーネルメモリ↔物理メモリのマッピング User Mode Kernel Mode 物理 メモリ 特定のカーネルアドレスが
 物理メモリアドレスに
 マッピングされている Linux/OS Xでは完全な
 メモリダンプが可能! Windowsではほとんど
 のメモリダンプが可能
  17. 17. Meltdown攻撃 •普通のユーザモードアプリから
 物理メモリをダンプできるので、
 システムの全ての情報にアクセスできてしまう •※端末でコード実⾏することが前提
 (Malware感染が必要?) •ウェブサイトのJavascriptでりモート攻撃も可能!
 (Mozillaが確認済み)
 (https://www.bleepingcomputer.com/news/security/mozilla-confirms-web-based-execution-vector-for-meltdown-and-spectre-attacks/)
  18. 18. 攻撃⼿法の背景
  19. 19. 投機実⾏ •“Speculative Execution” (コンセプトは1964年からある) •Wikipedia: 性能最適化の⼀種である。その主たる考え⽅ は、命令が確実に必要とされるかどうかを知る「前」に 実⾏するというもので、それによってその命令が
 必要だとわかった「後」でその命令をしたときに
 ⽣じる遅延を防ぐ。その命令が全く不要だったと判明
 した場合、その結果を単に無視する。目的は余分な計算 資源が利用可能な場合に並⾏性を向上させることである。
  20. 20. 投機実⾏ •以下のようなテクノロジーがこの考え⽅を採用している
 • メモリとファイルシステムにおけるプリフェッチ
 • 分岐予測
 if <条件> then
 この命令を実⾏
 else
 この命令を実⾏
 • データベースシステムにおける楽観的並⾏性制御
  21. 21. 投機実⾏(例) 命令1 命令2 命令3(メモリアクセス) 命令4 命令5 命令6 命令7 命令8 •OSの見⽅からすると、命令は順番 通りに実⾏されているように見える けど、実は違う •CPUスピードと比較したら
 メモリアクセスが非常に遅いので、
 待っている間に次の命令を⾏う
 (プリフェッチ) •そうしないと時間が無駄になる 遅いから
 待っている間に
 次の命令を
 できる限り
 CPUのパイプラインで
 事前に実⾏する
  22. 22. 投機実⾏(分岐の場合) (tanakaの場合) 命令1 命令2 命令3 if namae == “tanaka" (tanakaじゃない場合) 命令1 命令2 命令3 ・CPUが分岐予測でどっちの場合が多いか学習する ・確率の⾼い⽅の命令を事前に実⾏/計算してみる
  23. 23. サイドチャネル攻撃 •Wikipedia JP曰く:「暗号装置の動作状況を様々な物理的⼿段で
 観察することにより、装置内部のセンシティブな情報を
 取得しようとする攻撃(暗号解読)⽅法の総称である」 •(うん、、暗号解読に限らない。ちょっと違う・・) •Wikipedia EN曰く:Any attack based on information gained from the physical implementation of a computer system, rather than weaknesses in the implementation itself (e.g. cryptanalysis and software bugs). •本来はそうだけどphysical implementationにも限らない・・
  24. 24. サイドチャネル攻撃 •例: •タイミング攻撃 (Timing Attack. 例:Meltdown、Spectre) •故障利用攻撃 (Fault Attack. 例:Row hammer) •電⼒解析攻撃 (Power Monitoring Attack) •電磁波解析攻撃 (Electromagnetic Analysis. 例:TEMPEST) •キャッシュ攻撃 (Cache Attack:例:Meltdown/Spectre) •音響解析攻撃 (Acoustic Attack) •等々
  25. 25. 例:NSAのTEMPEST キーストロークを録音できたら、音響解析で
 何を打ったかを推測もできる
  26. 26. サイドチャネル攻撃 簡単に⾔えば、
 *間接的に攻撃する*
  27. 27. Meltdown攻撃⼿法 (中レイヤー)
  28. 28. Meltdown攻撃 (抽象編) •例: (@pwnallthethingsの記事を参考) •01: $A = muzukashii_keisan()
 02: if ($A == 8) {
 03: $B = load_memory(kernel_address)
 04: $C = load_memory($B)
 05: } 計算している間に 以下のコードを裏 で投機実⾏する $A != 8 ので投機実⾏した結果を捨てるが、
 カーネルアドレスにあるデータがCPUのキャッシュに残る
  29. 29. Meltdown攻撃 (抽象編) •例: •01: $A = muzukashii_keisan()
 02: if ($A == 8) {
 03: $B = load_memory(kernel_address)
 04: $C = load_memory($B)
 05: } KPTI等のOSパッチは投機実⾏を悪用して
 カーネルアドレスにアクセスできない
 (CPUが正しく権限を確認するかブロックする) ユーザプロセスがカーネル
 アドレスにアクセスしよう としたら次の命令を
 投機実⾏してはいけない!
  30. 30. Meltdown攻撃 (抽象編) •CPUキャッシュから機密データを取得 •「Flush+Reload」テクニック •投機実⾏させる前にまずCPUキャッシュをクリアする •データの値によってキャッシュされる所が異なる •キャッシュを順番にアクセス時間を図る •早くアクセスできたら、元のバイトを推測できる •(本当はビット単位でメモリダンプする。100~503KB/s)
  31. 31. Spectre攻撃 •攻撃⼿法はちょっと違うけど結果的に⼀緒
 (私が理解している範囲) •テクニックが違うから違う対策(違うパッチ)が必要 •攻撃の流れ/イメージは⼤体⼀緒 •CPUキャッシュをクリアして、投機実⾏させて、
 タイミング攻撃でキャッシュから機密情報を盗む
  32. 32. Spectre攻撃 •Spectreの白書によると、主なターゲットは端末内に
 別のプロセスを攻撃してメモリを盗むか
 ブラウザからJavascriptサンドボックスをエスケープして
 ウェブサイトのPWやセッションIDを盗むか •SpectreとMeltdownの白書ではSpectre攻撃でカーネル
 メモリにアクセスできないと主張しているが、Googleの
 研究者はカーネルメモリにアクセスするPoCを作ったし、
 白書にあるPoCはカーネルメモリにアクセスしている。。
  33. 33. 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)
  34. 34. Spectre攻撃 •Spectre攻撃は簡単に対策できないけど、
 簡単に攻撃できないと⾔われている •Spectre攻撃タイプ1は暫くパッチが無い?
  35. 35. リスク
  36. 36. リスク •悪意のあるウェブページを閲覧しただけで、
 全プロセスのメモリが盗まれる?(パスワードや暗号鍵) •仮想マシンからハイパーバイザーや
 隣の仮想マシンのメモリが盗まれる
 (Cloud/ホスティングプロバイダーが特に注意) •Docker Container、Sandboxエスケープ •カーネルメモリに書き込める脆弱性があった場合は
 カーネルのアドレス空間配置のランダム化(KASLR)対策
 を回避できる(ま、他のカーネルメモリ漏洩の脆弱性は⼭ほどあるの で、⾼度のハッカーなら簡単にKASLRを回避できると思われている)
  37. 37. 対策
  38. 38. US-CERTによると •新しいCPUハードウェアを 購⼊するしかない?? •しかし、対策済みのCPUは まだ出てないよね? •まだ存在しないCPUを
 どうやって購⼊するん??
  39. 39. CPUファームウェアアップデート •Intelは来週までに5年前から作っているCPUの9割位の
 パッチをリリースするそうです •パフォーマンスに影響ほぼゼロと主張 •多分Spectreも対策してくれる? •OSのパッチも必要?? •Anti-Virusソフト等は問題を起こさない?
  40. 40. Windowsの対策 • Windows Updateである程度対策できる • ※パフォーマンスが下がる (5-30%?) (PCID機能が付いているCPUはマシ) • ※レジストリ設定変更も必要!(サーバだけ) • ※XP、Vista、Win2003等の古いOSのパッチが無い • ※CPUベンダーからmicrocode/firmwareアップデートも必要 • ※Anti-Virusが対応していない場合はブルースクリーンになってしまう
 (特にSymantec?) Anti-Virusベンダーとの確認が必要。
 アップデートする前にパッチをテスト! • (Spectreタイプ2はHWアップデートかソフトアップデートでretpolineで緩和)
  41. 41. Windowsの対策 •Anti-Virusがパッチに対応していなければ、
 Windows Updateはパッチを適用してくれない
 (必ず確認して下さい!) •確認ツール: •MicrosoftのSpeculationControl Powershellモジュール
 https://support.microsoft.com/en-us/help/4073119/protect-against-speculative-execution-side-channel-vulnerabilities-in •第三者ツール:SpecuCheck
 https://github.com/ionescu007/SpecuCheck
  42. 42. Macの対策 •10.13.2にある程度対策済み (Meltdown対策だけ) •10.13.3に更に対策するパッチが出る? •High Sierraにアップグレードするしかない??
 (T_T) •32ビットOS Xは攻撃不可能らしい。。 •iOSは11.2.2 (1月8日のセキュリティアップデート)
  43. 43. 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年からある程度対策していた。今は完全に対応しているけど有料
  44. 44. Linuxの対策 •Spectre (タイプ2) の対策: •retpolineの攻撃緩和パッチ •まだリリースされていない •Haswell CPU以降は「IBRS」のmicrocodeパッチ
  45. 45. Spectre (タイプ1)対策 •※現在、対策⽅法が無い •アプリケーションで攻撃緩和するしか無い? •Intel、AMD、ARMが対応してくれる??
  46. 46. ブラウザ対策 •IE : Exploit Mitigation(攻撃緩和)パッチ有り •FF: 2017年11月のバージョン57.0.4から攻撃緩和 
 (Timer関数の結果を曖昧に) •Safari/iOS: 1月8日に攻撃緩和のパッチがリリース •(Spectreは新ハードウェアかFirmwareアップデートで 対応するしかないようです)
  47. 47. ブラウザ対策 •Chrome: 1月23日にパッチリリース
 それまでにSite Isolationを有効にすると
 サイトごとに別のプロセスが立ち上げるので、
 このような攻撃を防げるし、
 SOP Bypass/Universal XSS (UXSS)の対策にもなるのでお勧め •デメリット
 ・メモリ使用が若⼲上がる
 ・Cross-site iframesを印刷する時にHDDに保存してから
 印刷する必要がある
 ・Chromeデベロッパーツールはcross-site iframesに完全に対応していない
  48. 48. ブラウザ対策 NoScriptアドオンでJavascriptを
 できるだけ無効に!!
  49. 49. 検知
  50. 50. Linuxでの検知 Capsule8センサーの導⼊ Linux 3.13以上のTracing機能を
 利用して、ユーザモードからカーネル
 アドレスへのアクセスの試みを検知 https://capsule8.com/blog/detecting-meltdown-using-capsule8
  51. 51. フェイクニュース
  52. 52. フェイクニュース •なぜMeltdownとSpectreの白書でSpectreは
 カーネルメモリにアクセスできないって書いた?? •最初はみんな#intelbugを勝⼿に⾔っていたので、
 Intelのバグだけだと思われたけどAMDもARMも脆弱 •MeltdownはIntelだけで検証済みで
 AMD/ARMで検証できなかった •Spectre攻撃はIntel、AMD、ARMで検証できた
  53. 53. 教訓
  54. 54. 教訓 •Javascriptは恐ろし過ぎる!! •クラウド等のハイパーバイザーと横の仮想マシンへの
 新攻撃⼿法(特にサイドチャネル攻撃)はこれから増えるはず •⾼度な攻撃者(国家支援を受けている攻撃者(APT)等)は
 想像もつかないやり⽅で攻撃してくる前提で対策が必要 •完全な防御は無理なので、監視することが⼀番重要!
  55. 55.
  56. 56. 謎 •なぜ攻撃/脆弱性の名前を2つに分けた?
 別の研究チームだったから? •攻撃⼿法が違うだけで⼤体結果は⼀緒? •分けるんやったら、3つの分かりやすいネーミングにした⽅ が良かったでは? •例:Spectre-High-Risk、Spectre-Med-Risk、Spectre-Lowとか? •Googleが脆弱性を最初に見つけたのに
 なぜChromeのパッチが無い?
  57. 57. Proof of Concept 検証コード
  58. 58. PoC •https://bugs.chromium.org/p/project-zero/issues/detail?id=1272 •https://github.com/paboldin/meltdown-exploit •https://github.com/gkaindl/meltdown-poc •https://github.com/mniip/spectre-meltdown-poc •https://github.com/lgeek/spec_poc_arm •https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6
  59. 59. もっと知りたい! •https://googleprojectzero.blogspot.jp/2018/01/reading- privileged-memory-with-side.html •http://www.4gamer.net/games/999/G999902/20180105085/
 (日本語) •https://spectreattack.com/spectre.pdf •https://meltdownattack.com/meltdown.pdf •https://github.com/Eugnis/spectre-attack (PoC)
  60. 60. もっと知りたい! •SANS 504のインシデント対応とハッキングトレーニング •東京: 2月26日(月)∼3月3日(⼟)(6日間)
 (1月12日(⾦)までお得な早期お申込み割引実施中!) •⼤阪: 3月12日(月)∼17日(⼟)(6日間)
 (1月26日(⾦)までお得な早期お申込み割引実施中!)
  61. 61. もっと知りたい! 脆弱性診断、セキュリティ教育、
 コンサルティング
 インシデント対応、フォレンジック調査等々
  62. 62. ご清聴有難う御座います (何か間違っていたら
 教えて下さいね!) @yamatosecurity mathis@proactivedefense.jp

×
Save this presentationTap To Close