システムコールフックを使用した攻撃検出

Fourteenforty Research Institute, Inc.
システムコールフックを使用した攻撃検出
Fourteenforty Research Institute, Inc.
Fourteenforty Research Institute, Inc.
株式会社 フォティーンフォティー技術研究所
http://www.fourteenforty.jp
取締役技術担当 金居 良治
1
Fourteenforty Research Institute, Inc.
お題目
• System Call について
• System Call Protection
• System Call Hook
• 考察
2
Fourteenforty Research Institute, Inc.
System Call とは?
ユーザ アプリケーションからカーネル
のサービスルーチンを呼び出す
Disk I/O
Network I/O
Etc…
User App User App ・・・
Kernel
3
Fourteenforty Research Institute, Inc.
System Call 実装方法 (i386)
• INT (Linux, FreeBSD, Windows 2000)
割り込み
• SYSENTER (Linux?, Windows XP)
高速システムコール
4
Fourteenforty Research Institute, Inc.
INT による System Call の実装概略図
CPU
• INT = 割り込み
• 感覚的には関数
(ホントはもっといろいろやってます)
EAX: …
EBX:…
…
IDTR: ????
…
Interrupt Descriptor Table(IDT)
番号
…
アドレス
0x00
…
…
…
…
…
0x80
…
syscall
…
INT 0x80
User
…
…
syscall:
…
…
IRET
…
Kernel
5
Fourteenforty Research Institute, Inc.
INT による System Call の特徴
• IDTというメモリ領域に割り込みハンドラのア
ドレスがある
• Windows でも 2000 以前は INT を使用
• trap gate(FreeBSD), interrupt gate(Linux)
という2種類のバリエーションがある
6
Fourteenforty Research Institute, Inc.
SYSENTER の動作概略図
• System Call 用に特化、高速化してある
(ホントはもっといろいろやってます)
CPU
EAX: …
…
SYSENTER*MSR: ????
SYSENTER*MSR: ????
SYSENTER*MSR: ????
…
…
SYSENTER
…
…
syscall:
…
…
SYSEXIT
…
User
Kernel
7
Fourteenforty Research Institute, Inc.
SYSENTER による System Call の特徴
• INTのような冗長なチェックが無く、メモリアク
セスも無いので高速
• Pentium II で登場した命令
• Windows XP以降(Linuxも?)はこっち
• ここら辺の挙動が詳しく知りたい人は Intel の
ページへ
8
Fourteenforty Research Institute, Inc.
System Call で遊んでみよう!
•
•
•
•
以外と簡単
System Call Protection というのを考案
FreeBSD でカーネルモジュールとして実装
アーキテクチャは i386 に限定
9
Fourteenforty Research Institute, Inc.
攻撃に System Call が利用される例
• 例として、スタックベースのバッファ
オーバーフローについて検討
• だいたいシェルコード内でシステム
コールを使用する
• これが禁止できれば、シェルコード
が実行できても被害は最小に
• OpenBSD の W^X みたいなやつ
Stack
Return Address
Local Buffer
Shell Code
...
overwrite
…
INT 0x80
…
10
Fourteenforty Research Institute, Inc.
スタック上でのコード実行は禁止できるか
• 一部の例外を除いてスタック上でコードを実
行するようなコードは不要
• OpenBSD は出来てる
• i386では出来ないOSが多い(Windowsとか)
• FreeBSD i386 も出来ない
11
Fourteenforty Research Institute, Inc.
System Call Protection
• 書き込み属性のあるメモリ領域か
ら System Call の呼び出しを禁止
• 呼び出し元のアドレスはスタック上
にあるので、これを調べる
• コード領域に書き込み属性が設定
されていない事を利用
• スタック/ヒープベースのオーバーフ
ローが発生しても、悪用が困難に
Shell Code
...
INT 0x80
…
メモリの
属性チェック
User
Kernel
Int0x80_syscall
...
Check called addr
…
12
Fourteenforty Research Institute, Inc.
メモリの属性(パーミッション)
• FreeBSD では ports の pmap を使用して、
メモリの属性をチェックできる
13
Fourteenforty Research Institute, Inc.
System Call Hook の方法
CPU
EAX: …
EBX:…
…
IDTR: ????
…
Interrupt Descriptor Table(IDT)
番号
…
アドレス
0x00
…
…
…
…
…
0x80
…
syscall
…
INT 0x80
…
…
syscall:
…
…
IRET
…
User
Kernel
14
Fourteenforty Research Institute, Inc.
System Call Hook の方法
CPU
EAX: …
EBX:…
…
IDTR: ????
…
IDTR変更
Interrupt Descriptor Table(IDT)
割り込みハンド
ラの書き換え
番号
…
アドレス
0x00
…
…
…
…
…
0x80
…
syscall
…
INT 0x80
…
…
syscall:
…
…
IRET
…
User
Kernel
コード書き換え
15
Fourteenforty Research Institute, Inc.
割り込みハンドラのアドレスを書き換える
• カーネルモジュールとしての実装が可能
• 簡単 (setidt()を呼ぶだけ)
setidt(IDT_SYSCALL, &IDTVEC(my_int0x80_syscall), SDT_SYS386TGT,
SEL_UPL, GSEL(GCODE_SEL, SEL_KPL));
• ユーザ側からすれば、カーネルの再ビルドが
不要なので、手軽に試すことが出来る
→ コンセプトコードに最適!
16
Fourteenforty Research Institute, Inc.
実行した様子
System Call Protection
Off
System Call Protection
On
スタック/ヒープ上で
System Call が呼べない!
17
Fourteenforty Research Institute, Inc.
パフォーマンス – その1
• 10秒間に何回 getpid() を呼べるか計測
• System Call によるオーバーヘッドを計測
• 7.7% のパフォーマンス低下
System Call Protect
無効
有効
パフォーマンス
24,059,220 22,195,394 92.3%
18
Fourteenforty Research Institute, Inc.
パフォーマンス – その2
• ab(apache benchmark) で1秒あたりに処理
できるリクエスト数を計測
• ab -n 10000 –c 5 http://target:80/
• 3.1% のパフォーマンス低下
System Call Protect
無効
有効
パフォーマンス
873.7
847.0 96.9%
19
Fourteenforty Research Institute, Inc.
パフォーマンスまとめ
• 実際のアプリケーションでは 3~7%程度のパ
フォーマンス低下が予想される
• ターゲットを vmware 上で動かしたので、値は
不正確かも
• connect()やexec()等の危険なSystem Callが
呼ばれた時のみチェックをするようにすれば、
比較的、安全なまま高速化が可能
20
Fourteenforty Research Institute, Inc.
考察
• OpenBSD W^X を実装すれば済む話
• ただし、mips 等では実装が不可能。そういった
環境では役に立つかも
• バイパスする方法があるが、ASLR 等の他のセ
キュリティ機能と組み合わせる事で防御できる
• いろいろ応用が可能
21
Fourteenforty Research Institute, Inc.
ありがとうございました
Fourteenforty Research Institute, Inc.
株式会社 フォティーンフォティー技術研究所
http://www.fourteenforty.jp
取締役技術担当 金居 良治
[email protected]
22