5. バイナリに対する攻撃・防御の歴史
攻撃技術
Execute Code
E ec te Code
on the Stack
Rturn‐To‐Libc A
R
T Lib Attack
k
既に存在する実行コードを
使うだけなので、DEP防ぐこ
とができない
スタックに攻撃コード
を置き、実行
1980
既存防御技術
Compiler
OS
Reuse to Unsafe
Reuse to Unsafe
Code Gadgets
1990
Type
Checking
総当たり攻撃やアド
レス漏えいを利用し
てASLRを回避できる
(Return Oriented
Programming: ROP)
2000
2010
Stack
Guard
Data
Execution
Prevention
P
ti
(DEP)
Address Space
Layout
Randomization
R d i ti
(ASLR)
Moving Target Defense
&
Instruction Set
Randomization
次の防御技術
Hardware
H d
AMD NX bit
Intel DX bit
生命の防衛技術を模したセキュ
生命の防衛技術を模したセキ
リティ(多様性, 自己修復,免疫)
(産総研の萌芽研究 「生命型セ
キュリティ」 H25- )
8. DEPの実装例
• OpenBSD
– W^X (2003年5月1日) 読み方"Write XOR Execute"
W X (2003年5月1日) 読み方 Write XOR Execute
• エミュレーションor NX bitを使う
• Linux
– “PAX” (2000年10月1日)
• エミュレーションor NX bitを使う
– “Exec Shield” by Ingo Molnar(2003年5月2日)
• x86のコードセグメント境界を利用
• NX bitを使うカーネルパッチもあり
• Windows
– Wi d
Windows XP Service Pack 2とWindows Server 2003
XP S i P k 2とWi d
S
2003
Service Pack 1 (2004年8月6日)
10. DEPの回避方法
Memory Dual mapping
M
D l
i
• Matt “skape” Miller, Using dual‐mappings to evade automated
unpackers, 2008 より。
• 2つの仮想メモリページを1つ物理メモリページに割り当てる
– Executable mapping
• コードが実行される。Debugger
はここのみ監視
DEP, Debugger
の監視対象は
コ ドのみ
コードのみ
Virtual
Vi t l
Physical
– Editable mapping
• Packerとして働き、コードを改
として働き
ドを改
変(Self‐modification)する
Code
C d
Executable
• DEP(Data Execution Prevention)
DEP(Data Execution Prevention)
を回避して、コード改変
Data
Editable
データとして実
行コードを書き
換え
16. ASLRの課題
• バイナリ自体をPIC(Position Independent Code)にする
必要あり。
• 絶対アドレスを指定されている古いバイナリはASLRを
活用できない。
ASLRはロ ド時のみに配置を 回変えるので、 度ア
• ASLRはロード時のみに配置を一回変えるので、一度ア
ドレスが漏えいしたら意味がない。
– ApacheなどForkのみでプロセスを多く派生するものは危険。
• Execすればよいが、多くは行っていない。
– Re‐Randomization の必要性
Re Randomi ation の必要性
• タネンバウム研のUSENIX‐SEC12論文
– Enhanced Operating System Security Through Efficient and Fine‐grained
Address Space Randomization
Add
S
R d i ti
19. ISR: Instruction Set Randomization
• 既存のバイナリコードを等価な命令で置きかえること
でROPによるコ ド再利用を防ぐ。
でROPによるコード再利用を防ぐ。
今までの方式
ディスク
div b / 2
mul a x 2
mul a x 2
xor a, a
ret
ISR
実行
(ローダ)
div b / 2
mul a x 2
mul a x 2
mul a x 2
xor a, a
ret
メモリ
アドレス
コード領域
同じ命令が実
行される
div b / 2
mul a x 2
mul a x 2
xor a, a
ret
成功
メモリ内容
が全く違う
ディスク
div b / 2
mul a x 2
mul a x 2
xor a, a
xor a a
ret
実行
コード変換
div b / 2
l
mul a x 2
mul a x 2
xor a, a
ret
メモリ
アドレス
コード領域
等価な命令に置き
換えられる
shift l a
add a+a
Add a+a
mv 0, a
0
jump
攻撃者が同じ
コードを入手、
コ ドを入手
解析、攻撃
失敗
攻撃者が同じ
コードを入手、
解析、攻撃
• 問題点:セマンティックが変わらない場合 ROPに効
問題点:セマンティックが変わらない場合、ROPに効
果が無いのでは?評価が重要。