SlideShare a Scribd company logo
1 of 10
Download to read offline
Intel LazyFP vulnerability:
Exploiting lazy FPU state switching
暗号とセキュリティ勉強会 2018/6/25
光成滋生
1 / 10
• 昔のOSはlazy FPUという仕組みを使っていた
• この仕組みにFPUレジスタの内容が漏洩する可能性
• LazyFP: Leaking FPU Register State using Microarchitectural
Side-Channels
• https://arxiv.org/abs/1806.07480
• 最近のLinuxでは使っていない
2 / 10
概要
• 小数やベクトル演算専用のコプロセッサ
• かつては別売だった
• i387コプロセッサ10万円
• 今はCPUの中に入ってる
3 / 10
FPU
• 1個のCPU上で複数のスレッドを動かす仕組み
• スレッドを切り替えるときにCPUの状態を入れ換える
4 / 10
コンテキストスイッチ
st0 : 1.2
st1 : -3
st2 : 3.14
st0 : 99
st1 : 88
st2 : 77
スレッド1からスレッド2への切り替え
st0 : 1.2
st1 : -3
st2 : 3.14
st0 : 99
st1 : 88
st2 : 77
CPU
memory
2. レジスタの内容を
メモリに保存する
3. メモリの内容を
レジスタに復元する
スレッド1の状態 スレッド2の状態
1. スレッド1を停止し
kernel空間に切り替える 4. スレッド2を再開
• 負荷が大きい
• FPUは80bitレジスタ8個
• AVX-512では512bitレジスタが32個で合計2KiB
• 動機
• 昔はFPUを使うアプリは限られていた
• 使わないのに退避・復元は無駄
• LazyFPU
• 使う必要が出たときだけ切り替えればよいのでは?
• スレッドを切り替えたらFPUを使えないモードにする
• そのスレッドがFPUを使ったら#NM(Device not available : no
math)例外が発生
• そのときにレジスタの退避・復元を行いFPUを使う
• FPUを使わなければ無駄な退避・復元をしなくてよい
5 / 10
難点とLazyFPU
• 投機実行(speculative execution)
• 必要ないかもしれない命令を先回りして実行しておくこと
• 必要になってから実行するよりも処理時間を短縮できる
投機実行なし
投機実行あり(x = 1を予測した場合)
6 / 10
Meltdown/Spectreの復習(1/2)
x = calc(...); if (x == 1) y++;
x = calc(...);
if (x == 1) y++;
if (x == 1) y++;
実際にx = 1なら速く終わる
予想が外れたら逆に遅くなる
• キャッシュメモリ
• メモリの読み書きは遅い(100nsecレベル)
• add/subは0.1nsecレベル
• CPUの近くに少量で高速なメモリを配置
• 一度readすると次のreadが高速になる
• Meltdown/Spectre
• 秘密情報に依存した場所を投機実行で読ませる
• そのあとどの領域がキャッシュに入ってるかを確認
7 / 10
Meltdown/Spectreの復習(2/2)
秘密情報xに対して
投機実行で
read mem[x]
させる
mem
0
1
2
3
4
5 0 1 2 3 4 5 mem
read
time
2番目のread
が速いので
x = 2と推測
• レジスタの1bitが漏洩するコード
• xmm0に秘密情報が入ったスレッドから
攻撃者のスレッドにコンテキストスイッチ
• 攻撃者は上記のコードを実行
• OSはmovq rax, xmm0の段階で#NM例外を発生
• しかし投機実行によりreadまで行ってしまう
• mem[0]とmem[64]のread timeの短い方がxmm0の最下位bit
8 / 10
LazyFPUの脆弱性
movq rax, xmm0 // FPUのxmm0をraxに代入(rax = xmm0)
and rax, 1 // raxの最下位bitのみにする(rax &= 1)
shl rax, 6 // 64掛ける(rax *= 64)
mov dword [mem + rax], 0 // mem[0]またはmem[64]をread
• 前ページの方法では#NM例外が発生するとxmm0の中
身がクリアされてしまう
• #NM例外ではなく#PF(page fault)を発生させる
• #PFが発生するためmovq rax, xmm0で#NM例外は発生しない
• xmm0の中身がクリアされない
• しかし投機実行でxmm0の最下位bitは判別可能
• movq rax, xmm0 / shr rax, 1 / and rax, 1とshiftを挟めば次のbit
も判別可能...を繰り返す
9 / 10
コンセプトコードの改良
movq dword [0], 0 // #PF
movq rax, xmm0
and rax, 1
shl rax, 6
mov dword [mem + rax], 0
• RTM(Restricted Trancastional Memory)
• トランザクション実行用の命令群
• 指定された命令群(トランザクション領域)を他のプロセッ
サからatomicに(一瞬で)実行されたように見える仕組み
• 何らかの原因で失敗すると何も実行しなかったことになる
• #PFよりもRTMを使う方が15倍ほど高速(3MiB/s)に
レジスタの中身が見える
10 / 10
RTM(Intel TSX)を使う
xbegin abort // トランザクション開始
movq rax, xmm0
and rax, 1
shl rax, 6
mov dword [mem + rax], 0
xabort // トランザクション強制失敗

More Related Content

Similar to LazyFP vulnerabilityの紹介

あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話nullnilaki
 
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをKenichiro MATOHARA
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてTomofumi Hayashi
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch UsecasesSakiko Kawai
 
Traffic Management with Istio ( with Demo )
Traffic Management with Istio ( with Demo )Traffic Management with Istio ( with Demo )
Traffic Management with Istio ( with Demo )ロフト くん
 
NSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow LoggingNSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow Logging順也 山口
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hwykuga
 
Trema day 1
Trema day 1Trema day 1
Trema day 1ykuga
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 VirtualTech Japan Inc.
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いMasakazu Asama
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-mainShotaro Uchida
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理Motonori Shindo
 
Good Arm FPGA Board Ultra96 and Google AI YOLO
Good Arm FPGA Board Ultra96 and Google AI YOLOGood Arm FPGA Board Ultra96 and Google AI YOLO
Good Arm FPGA Board Ultra96 and Google AI YOLOIf_CQ
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1Tomoya Hibi
 
Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Takehiro Kudou
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側do_aki
 

Similar to LazyFP vulnerabilityの紹介 (20)

あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話
 
ちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxをちょっと古いマシンにLinuxを
ちょっと古いマシンにLinuxを
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用について
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch Usecases
 
Traffic Management with Istio ( with Demo )
Traffic Management with Istio ( with Demo )Traffic Management with Istio ( with Demo )
Traffic Management with Istio ( with Demo )
 
NSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow LoggingNSG フローログを支える技術 - NVF Advanced Flow Logging
NSG フローログを支える技術 - NVF Advanced Flow Logging
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
SDN Japan: ovs-hw
SDN Japan: ovs-hwSDN Japan: ovs-hw
SDN Japan: ovs-hw
 
Trema day 1
Trema day 1Trema day 1
Trema day 1
 
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月 知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
知っているようで知らないNeutron -仮想ルータの冗長と分散- - OpenStack最新情報セミナー 2016年3月
 
Hydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違いHydrogen → Helium での Linux kernel の違い
Hydrogen → Helium での Linux kernel の違い
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
フロー技術によるネットワーク管理
フロー技術によるネットワーク管理フロー技術によるネットワーク管理
フロー技術によるネットワーク管理
 
Good Arm FPGA Board Ultra96 and Google AI YOLO
Good Arm FPGA Board Ultra96 and Google AI YOLOGood Arm FPGA Board Ultra96 and Google AI YOLO
Good Arm FPGA Board Ultra96 and Google AI YOLO
 
Lagopus Router v19.07.1
Lagopus Router v19.07.1Lagopus Router v19.07.1
Lagopus Router v19.07.1
 
Cisco Connect Japan 2014: MPLS アドバンス
Cisco Connect Japan 2014: MPLS アドバンスCisco Connect Japan 2014: MPLS アドバンス
Cisco Connect Japan 2014: MPLS アドバンス
 
Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302Openstack neutron vtjseminar_20160302
Openstack neutron vtjseminar_20160302
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 

More from MITSUNARI Shigeo

暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコルMITSUNARI Shigeo
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advancedMITSUNARI Shigeo
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装MITSUNARI Shigeo
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化MITSUNARI Shigeo
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 

More from MITSUNARI Shigeo (20)

暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル
 
暗認本読書会13 advanced
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advanced
 
暗認本読書会12
暗認本読書会12暗認本読書会12
暗認本読書会12
 
暗認本読書会11
暗認本読書会11暗認本読書会11
暗認本読書会11
 
暗認本読書会10
暗認本読書会10暗認本読書会10
暗認本読書会10
 
暗認本読書会9
暗認本読書会9暗認本読書会9
暗認本読書会9
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
暗認本読書会8
暗認本読書会8暗認本読書会8
暗認本読書会8
 
暗認本読書会7
暗認本読書会7暗認本読書会7
暗認本読書会7
 
暗認本読書会6
暗認本読書会6暗認本読書会6
暗認本読書会6
 
暗認本読書会5
暗認本読書会5暗認本読書会5
暗認本読書会5
 
暗認本読書会4
暗認本読書会4暗認本読書会4
暗認本読書会4
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
 
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
 
楕円曲線と暗号
楕円曲線と暗号楕円曲線と暗号
楕円曲線と暗号
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (8)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

LazyFP vulnerabilityの紹介

  • 1. Intel LazyFP vulnerability: Exploiting lazy FPU state switching 暗号とセキュリティ勉強会 2018/6/25 光成滋生 1 / 10
  • 2. • 昔のOSはlazy FPUという仕組みを使っていた • この仕組みにFPUレジスタの内容が漏洩する可能性 • LazyFP: Leaking FPU Register State using Microarchitectural Side-Channels • https://arxiv.org/abs/1806.07480 • 最近のLinuxでは使っていない 2 / 10 概要
  • 3. • 小数やベクトル演算専用のコプロセッサ • かつては別売だった • i387コプロセッサ10万円 • 今はCPUの中に入ってる 3 / 10 FPU
  • 4. • 1個のCPU上で複数のスレッドを動かす仕組み • スレッドを切り替えるときにCPUの状態を入れ換える 4 / 10 コンテキストスイッチ st0 : 1.2 st1 : -3 st2 : 3.14 st0 : 99 st1 : 88 st2 : 77 スレッド1からスレッド2への切り替え st0 : 1.2 st1 : -3 st2 : 3.14 st0 : 99 st1 : 88 st2 : 77 CPU memory 2. レジスタの内容を メモリに保存する 3. メモリの内容を レジスタに復元する スレッド1の状態 スレッド2の状態 1. スレッド1を停止し kernel空間に切り替える 4. スレッド2を再開
  • 5. • 負荷が大きい • FPUは80bitレジスタ8個 • AVX-512では512bitレジスタが32個で合計2KiB • 動機 • 昔はFPUを使うアプリは限られていた • 使わないのに退避・復元は無駄 • LazyFPU • 使う必要が出たときだけ切り替えればよいのでは? • スレッドを切り替えたらFPUを使えないモードにする • そのスレッドがFPUを使ったら#NM(Device not available : no math)例外が発生 • そのときにレジスタの退避・復元を行いFPUを使う • FPUを使わなければ無駄な退避・復元をしなくてよい 5 / 10 難点とLazyFPU
  • 6. • 投機実行(speculative execution) • 必要ないかもしれない命令を先回りして実行しておくこと • 必要になってから実行するよりも処理時間を短縮できる 投機実行なし 投機実行あり(x = 1を予測した場合) 6 / 10 Meltdown/Spectreの復習(1/2) x = calc(...); if (x == 1) y++; x = calc(...); if (x == 1) y++; if (x == 1) y++; 実際にx = 1なら速く終わる 予想が外れたら逆に遅くなる
  • 7. • キャッシュメモリ • メモリの読み書きは遅い(100nsecレベル) • add/subは0.1nsecレベル • CPUの近くに少量で高速なメモリを配置 • 一度readすると次のreadが高速になる • Meltdown/Spectre • 秘密情報に依存した場所を投機実行で読ませる • そのあとどの領域がキャッシュに入ってるかを確認 7 / 10 Meltdown/Spectreの復習(2/2) 秘密情報xに対して 投機実行で read mem[x] させる mem 0 1 2 3 4 5 0 1 2 3 4 5 mem read time 2番目のread が速いので x = 2と推測
  • 8. • レジスタの1bitが漏洩するコード • xmm0に秘密情報が入ったスレッドから 攻撃者のスレッドにコンテキストスイッチ • 攻撃者は上記のコードを実行 • OSはmovq rax, xmm0の段階で#NM例外を発生 • しかし投機実行によりreadまで行ってしまう • mem[0]とmem[64]のread timeの短い方がxmm0の最下位bit 8 / 10 LazyFPUの脆弱性 movq rax, xmm0 // FPUのxmm0をraxに代入(rax = xmm0) and rax, 1 // raxの最下位bitのみにする(rax &= 1) shl rax, 6 // 64掛ける(rax *= 64) mov dword [mem + rax], 0 // mem[0]またはmem[64]をread
  • 9. • 前ページの方法では#NM例外が発生するとxmm0の中 身がクリアされてしまう • #NM例外ではなく#PF(page fault)を発生させる • #PFが発生するためmovq rax, xmm0で#NM例外は発生しない • xmm0の中身がクリアされない • しかし投機実行でxmm0の最下位bitは判別可能 • movq rax, xmm0 / shr rax, 1 / and rax, 1とshiftを挟めば次のbit も判別可能...を繰り返す 9 / 10 コンセプトコードの改良 movq dword [0], 0 // #PF movq rax, xmm0 and rax, 1 shl rax, 6 mov dword [mem + rax], 0
  • 10. • RTM(Restricted Trancastional Memory) • トランザクション実行用の命令群 • 指定された命令群(トランザクション領域)を他のプロセッ サからatomicに(一瞬で)実行されたように見える仕組み • 何らかの原因で失敗すると何も実行しなかったことになる • #PFよりもRTMを使う方が15倍ほど高速(3MiB/s)に レジスタの中身が見える 10 / 10 RTM(Intel TSX)を使う xbegin abort // トランザクション開始 movq rax, xmm0 and rax, 1 shl rax, 6 mov dword [mem + rax], 0 xabort // トランザクション強制失敗