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
© Copyright 2024