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
600
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
Next.jsの脆弱性(CVE-2025-29927)の話
kuzushiki
0
3
CISSPに出てくるセキュリティモデルとアクセス制御モデルをまとめてみた
kuzushiki
0
2
攻撃者の視点から見たGraphQLのセキュリティ
kuzushiki
0
1
PythonのURLパーサで見つかった脆弱性について解説する
kuzushiki
0
1
Pythonのtarfileによる展開処理がセキュアになりそう
kuzushiki
0
1
Web Cache Deception Attackについて解説する
kuzushiki
0
2
PHP8.2の新機能✞SensitiveParameter✞につい て
kuzushiki
0
2
ファームウェア解析はじめました
kuzushiki
0
3
「7-Zip」の脆弱性について解説する (CVE-2022-29072)
kuzushiki
0
2
Other Decks in Technology
See All in Technology
Symfony in 2025: Scaling to 0
fabpot
2
230
AI・LLM事業部のSREとタスクの自動運転
shinyorke
PRO
0
310
データベースで見る『家族アルバム みてね』の変遷 / The Evolution of Family Album Through the Lens of Databases
kohbis
3
850
Multitenant 23ai の全貌 - 機能・設計・実装・運用からマイクロサービスまで
oracle4engineer
PRO
2
130
銀行でDevOpsを進める理由と実践例 / 20250317 Masaki Iwama
shift_evolve
1
120
3/26 クラウド食堂LT #2 GenU案件を通して学んだ教訓 登壇資料
ymae
1
210
Compose MultiplatformにおけるiOSネイティブ実装のベストプラクティス
enomotok
1
220
モンテカルロ木探索のパフォーマンスを予測する Kaggleコンペ解説 〜生成AIによる未知のゲーム生成〜
rist
4
1.2k
OPENLOGI Company Profile for engineer
hr01
1
22k
近年の PyCon 情勢から見た PyCon APAC のまとめ
terapyon
0
140
一人QA時代が終わり、 QAチームが立ち上がった話
ma_cho29
0
290
ソフトウェアプロジェクトの成功率が上がらない原因-「社会価値を考える」ということ-
ytanaka5569
0
130
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
118
51k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
30
1.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Site-Speed That Sticks
csswizardry
4
450
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Visualization
eitanlees
146
16k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Code Review Best Practice
trishagee
67
18k
GraphQLの誤解/rethinking-graphql
sonatard
70
10k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
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