Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Apple M1 CPUの脆弱性「PACMAN」について解説する
Search
kuzushiki
June 27, 2022
Technology
0
560
Apple M1 CPUの脆弱性「PACMAN」について解説する
第20回 初心者のためのセキュリティ勉強会 (
https://sfb.connpass.com/event/249919/
) での発表資料です。
kuzushiki
June 27, 2022
Tweet
Share
More Decks by kuzushiki
See All by kuzushiki
Open xINT CTF 2021 writeup
kuzushiki
0
570
HTTP/2 Desync Attacksを解説する
kuzushiki
2
840
Other Decks in Technology
See All in Technology
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
5
210
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
110
KnowledgeBaseDocuments APIでベクトルインデックス管理を自動化する
iidaxs
1
270
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
37
15k
C++26 エラー性動作
faithandbrave
2
780
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
540
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.1k
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
19
18k
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
170
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
120
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
180
Featured
See All Featured
KATA
mclloyd
29
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Designing for Performance
lara
604
68k
Docker and Python
trallard
42
3.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Six Lessons from altMBA
skipperchong
27
3.5k
Faster Mobile Websites
deanohume
305
30k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Code Reviewing Like a Champion
maltzj
520
39k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Optimizing for Happiness
mojombo
376
70k
Transcript
Apple M1 CPUの脆弱性 「PACMAN」について解説する kuzushiki 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki
発表内容 Apple M1 CPU の脆弱性「PACMAN」の詳細が 6/9 に公開された PACMAN: Attacking ARM
Pointer Authentication with Speculative Execution https://pacmanattack.com/ 面白そうだったので調べてみることに 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 2 / 13
PACMAN ってなに? Apple M1 CPU の Pointer Authentication を回避することができる新しい攻撃手法 PACMAN
は ソフトウェア攻撃とハードウェア攻撃の中間 に位置する画期的な攻撃とのこと 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 3 / 13
M1 CPU 使ってるから心配なんだけど ソフトウェアのアップデートをちゃんとしているなら大丈夫! あくまで数あるセキュリティ機構のうち Pointer Authentication という機能をバイパスできるだけ Q. M2
CPU 買えば大丈夫? A. 「M2 チップで PACMAN が可能となるかどうかはまだ確認されていない」とのことなので、不安な方は購入を待つと良いかも… 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki APPLE M1 チップのポインタ認証を迂回する攻撃「PACMAN」 | スラド IT から引用 4 / 13
Pointer Authentication って何? ポインタの先頭部分に Pointer Authentication Code (PAC) と呼ばれるハッシュを付与し、検証できるようにする仕組み メモリ破壊の脆弱性(バッファオーバーフローなど)により、ポインタが書き換えられ不正な命令を実行されるのを防ぐ
M1 独自の機能というわけではなく、ARM, Qualcomm, Samsung などのチップメーカーも今後対応予定 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 5 / 13
どうやってバイパスするの? (1 / 3) 投機実行を悪用したサイドチャネル攻撃 投機実行とは? 標準的な CPU は順番通りに命令を実行 命令に使うデータを読み込むまで待機
<- この時間がもったいない! データを読み込むまでの間にもできることをしよう、というスタンス 例えば下記のケースでは yes() と no() を両方実行しておき、使わないほうは破棄する <- ここが大事 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki ` ` ` ` 1 if (cond): 2 yes() 3 else: 4 no() 6 / 13
どうやってバイパスするの? (2 / 3) 破棄されるほうの分岐で PAC の検証を行う 通常、PAC の検証に失敗すると例外となりプログラムがクラッシュしてしまう ->
投機実行の裏で行った場合、「例外となる」という結果が破棄されるため、クラッシュさせずに続行できる でも、破棄されるのに PAC の検証に成功したかどうやって判定するの? 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 7 / 13
どうやってバイパスするの? (3 / 3) サイドチャネル攻撃を行う サイドチャネル攻撃とは? コンピュータの物理的な特性を外部から観察あるいは測定することで、内部の情報の取得を試みる攻撃 今回は TLB (仮想アドレスに対応した物理メモリのアドレス専用のキャッシュ)
を使う TLBは直前に参照されたアドレスを格納する PAC を求めたいポインタのアドレスで埋め尽くしてしまう PAC の検証後にそのポインタへアクセスさせるように仕向け、その後アクセスした際の時間を確認 アクセス時間が短い -> TLBに格納されているキャッシュがロードされずに残ってる -> 検証失敗 アクセス時間が長い -> TLBに格納されているキャッシュがロードされ退避された -> 検証成功 アクセス時間により、 PAC の検証が成功したかどうかを確認できる! 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 8 / 13
攻撃の実証 (1 / 3) 1. PACMAN 攻撃の正確さ 不正な PAC と正常な
PAC (それぞれ1万個)を用い、TLB のデータに差が生じるかを検証している 縦軸: 頻度 横軸: ロードが成功し TLB から退避されたデータの個数 (a) と (b) では異なる PACMAN ガジェットを使用している 不正な PAC と 正常な PAC で明確な差が生じている -> PACMAN 攻撃は正確である 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 9 / 13
攻撃の実証 (2 / 3) 2. 総当りにかかる時間 1つの PAC をテストするのに平均 2.69
ミリ秒かかる -> M1 では 16 ビットの PAC が使われているので平均で 2.94 分かかると推定できる -> 十分実用的 ( 2.69 x 10 x 2 ≒ 176.29 ≒ 2.94 x 60 ) 3. 総当りの正確さ 50 回実験を行った -> 45回は正しい PAC が見つかり、残りの5回は見つからなかった 「ダメじゃん」と思われるかもしれないが、あくまで偽陰性のため再度総当りすればよい。 ※偽陽性(不正な PAC を「正しい」と判断してしまう)があるとクラッシュしてしまうので NG 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki -3 16 10 / 13
攻撃の実証 (3 / 3) 4. 実際に悪用できることの確認 意図的にバッファオーバーフローの脆弱性を作り込み、 Pointer Authentication をバイパスして関数ポインタをカーネル内に存在
する別の関数に書き換える -> 攻撃に成功した 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 11 / 13
対策 1. PAC の検証結果が投機実行により漏洩しないように、マイクロアーキテクチャやソフトウェアを変更する 2. Spectre に対する防御の先行研究を、PACMAN に対する防御に適応させる 3. ソフトウェアに存在するメモリ破壊の脆弱性にパッチを適用する
-> 皆さんが実行できるのは 3 の対策のみ 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 12 / 13
終わりに Apple M1 CPU の脆弱性「PACMAN」についてざっくりと解説した 今後検証コードが公開されるとのこと Check back here for
a complete release of all of our code coming soon. -> 来月までに公開されていたら勉強会でデモやるかも 第20回 初心者のためのセキュリティ勉強会 kuzu7shiki 13 / 13