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
620
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
8
CISSPに出てくるセキュリティモデルとアクセス制御モデルをまとめてみた
kuzushiki
0
2
攻撃者の視点から見たGraphQLのセキュリティ
kuzushiki
0
3
PythonのURLパーサで見つかった脆弱性について解説する
kuzushiki
0
1
Pythonのtarfileによる展開処理がセキュアになりそう
kuzushiki
0
1
Web Cache Deception Attackについて解説する
kuzushiki
0
4
PHP8.2の新機能✞SensitiveParameter✞につい て
kuzushiki
0
5
ファームウェア解析はじめました
kuzushiki
0
4
「7-Zip」の脆弱性について解説する (CVE-2022-29072)
kuzushiki
0
2
Other Decks in Technology
See All in Technology
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
2
240
30代からでも遅くない! 内製開発の世界に飛び込み、最前線で戦うLLMアプリ開発エンジニアになろう
minorun365
PRO
16
5.1k
Azure Maps Visual in PowerBIで分析しよう
nakasho
0
190
AIエージェント開発手法と業務導入のプラクティス
ykosaka
9
2.7k
Compose におけるパスワード自動入力とパスワード保存
tonionagauzzi
0
190
2025-04-14 Data & Analytics 井戸端会議 Multi tenant log platform with Iceberg
kamijin_fanta
0
180
2025-04-24 "Manga AI Understanding & Localization" Furukawa Arata (CyberAgent, Inc)
ornew
2
330
DjangoCon Europe 2025 Keynote - Django for Data Science
wsvincent
0
450
読んで学ぶ Amplify Gen2 / Amplify と CDK の関係を紐解く #jawsug_tokyo
tacck
PRO
1
300
更新系と状態
uhyo
8
2.2k
コスト最適重視でAurora PostgreSQLのログ分析基盤を作ってみた #jawsug_tokyo
non97
1
860
ペアーズにおける評価ドリブンな AI Agent 開発のご紹介
fukubaka0825
8
2.1k
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
A Modern Web Designer's Workflow
chriscoyier
693
190k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.5k
The Cost Of JavaScript in 2023
addyosmani
49
7.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
550
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
830
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Writing Fast Ruby
sferik
628
61k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
590
Mobile First: as difficult as doing things right
swwweet
223
9.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.4k
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