• 検索結果がありません。

スライド 1

N/A
N/A
Protected

Academic year: 2021

シェア "スライド 1"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

Fourteenforty Research Institute, Inc.システムコールフックを使用した攻撃検出

Fourteenforty Research Institute, Inc.

株式会社 フォティーンフォティー技術研究所

http://www.fourteenforty.jp

(2)

お題目

• System Call について

• System Call Protection

• System Call Hook

(3)

System Call とは?

User App Kernel ユーザ アプリケーションからカーネル のサービスルーチンを呼び出す User App Disk I/O Network I/O Etc… ・・・

(4)

System Call 実装方法 (i386)

• INT (Linux, FreeBSD, Windows 2000)

割り込み

(5)

INT による System Call の実装概略図

… syscall: … … IRET … … INT 0x80 … User Kernel EAX: … EBX:… … IDTR: ???? … CPU 番号 アドレス 0x00 … … … … … 0x80 … syscall Interrupt Descriptor Table(IDT)

• INT = 割り込み • 感覚的には関数

(6)

INT による System Call の特徴

• IDTというメモリ領域に割り込みハンドラのア ドレスがある

• Windows でも 2000 以前は INT を使用

• trap gate(FreeBSD), interrupt gate(Linux) という2種類のバリエーションがある

(7)

SYSENTER の動作概略図

… syscall: … … SYSEXIT … … SYSENTER … User Kernel EAX: … … SYSENTER*MSR: ???? SYSENTER*MSR: ???? SYSENTER*MSR: ???? … CPU • System Call 用に特化、高速化してある (ホントはもっといろいろやってます)

(8)

SYSENTER による System Call の特徴

• INTのような冗長なチェックが無く、メモリアク セスも無いので高速 • Pentium II で登場した命令 • Windows XP以降(Linuxも?)はこっち • ここら辺の挙動が詳しく知りたい人は Intel の

(9)

System Call で遊んでみよう!

• 以外と簡単

• System Call Protection というのを考案

• FreeBSD でカーネルモジュールとして実装 • アーキテクチャは i386 に限定

(10)

攻撃に System Call が利用される例

Local Buffer Return Address Shell Code ... … INT 0x80 … overwrite Stack • 例として、スタックベースのバッファ オーバーフローについて検討 • だいたいシェルコード内でシステム コールを使用する • これが禁止できれば、シェルコード が実行できても被害は最小に • OpenBSD の W^X みたいなやつ

(11)

スタック上でのコード実行は禁止できるか

• 一部の例外を除いてスタック上でコードを実 行するようなコードは不要 • OpenBSD は出来てる • i386では出来ないOSが多い(Windowsとか) • FreeBSD i386 も出来ない

(12)

System Call Protection

Shell Code ... INT 0x80 … • 書き込み属性のあるメモリ領域か ら System Call の呼び出しを禁止 • 呼び出し元のアドレスはスタック上 にあるので、これを調べる • コード領域に書き込み属性が設定 されていない事を利用 • スタック/ヒープベースのオーバーフ ローが発生しても、悪用が困難に Int0x80_syscall ...

Check called addr

User Kernel

メモリの 属性チェック

(13)

メモリの属性(パーミッション)

• FreeBSD では ports の pmap を使用して、 メモリの属性をチェックできる

(14)

System Call Hook の方法

… syscall: … … … INT 0x80 … User Kernel EAX: … EBX:… … IDTR: ???? … CPU 番号 アドレス

(15)

System Call Hook の方法

… syscall: … … IRET … … INT 0x80 … User Kernel EAX: … EBX:… … IDTR: ???? … CPU 番号 アドレス 0x00 … … … … … 0x80 … syscall

Interrupt Descriptor Table(IDT) コード書き換え

IDTR変更

割り込みハンド ラの書き換え

(16)

割り込みハンドラのアドレスを書き換える

• カーネルモジュールとしての実装が可能 • 簡単 (setidt()を呼ぶだけ)

setidt(IDT_SYSCALL, &IDTVEC(my_int0x80_syscall), SDT_SYS386TGT, SEL_UPL, GSEL(GCODE_SEL, SEL_KPL));

• ユーザ側からすれば、カーネルの再ビルドが 不要なので、手軽に試すことが出来る

(17)

実行した様子

System Call Protection On

System Call Protection Off

スタック/ヒープ上で System Call が呼べない!

(18)

パフォーマンス

– その1

• 10秒間に何回 getpid() を呼べるか計測 • System Call によるオーバーヘッドを計測 • 7.7% のパフォーマンス低下

System Call Protect

(19)

パフォーマンス

– その2

• ab(apache benchmark) で1秒あたりに処理 できるリクエスト数を計測

• ab -n 10000 –c 5 http://target:80/ • 3.1% のパフォーマンス低下

System Call Protect

無効 有効 パフォーマンス

(20)

パフォーマンスまとめ

• 実際のアプリケーションでは 3~7%程度のパ フォーマンス低下が予想される • ターゲットを vmware 上で動かしたので、値は 不正確かも • connect()やexec()等の危険なSystem Callが 呼ばれた時のみチェックをするようにすれば、 比較的、安全なまま高速化が可能

(21)

考察

• OpenBSD W^X を実装すれば済む話 • ただし、mips 等では実装が不可能。そういった 環境では役に立つかも • バイパスする方法があるが、ASLR 等の他のセ キュリティ機能と組み合わせる事で防御できる • いろいろ応用が可能

(22)

ありがとうございました

Fourteenforty Research Institute, Inc.

参照

関連したドキュメント

スライダは、Microchip アプリケーション ライブラリ で入手できる mTouch のフレームワークとライブラリ を使って実装できます。 また

実行時の安全を保証するための例外機構は一方で速度低下の原因となるため,部分冗長性除去(Par- tial Redundancy

VMware vSphereR 7 Acceleration Kit VMware vSphereR 7 Essentials Plus Kit VMware vSphere 7 Acceleration Kit、および、VMware vSphere 7 Essentials Plus Kitは、VMware

定可能性は大前提とした上で、どの程度の時間で、どの程度のメモリを用いれば計

評価 ○当該機器の機能が求められる際の区画の浸水深は,同じ区 画内に設置されているホウ酸水注入系設備の最も低い機能

評価 ○当該機器の機能が求められる際の区画の浸水深は,同じ区 画内に設置されているホウ酸水注入系設備の最も低い機能

○当該機器の機能が求められる際の区画の浸水深は,同じ区 画内に設置されているホウ酸水注入系設備の最も低い機能

当面の間 (メタネーション等の技術の実用化が期待される2030年頃まで) は、本制度において