スライド 1

Similar documents
04-process_thread_2.ppt

自己紹介 湯浅陽一 1999 年より Linux kernel 開発に参加 MIPS アーキテクチャのいくつかの CPU へ Linux kernel を移植

今週の進捗

PowerPoint プレゼンテーション

Microsoft PowerPoint - Android+TPMによるセキュアブート_KDDI研_後日配布用

PowerPoint Presentation


PowerPoint プレゼンテーション

ex05_2012.pptx

Monthly Research / セキュアハードウェアの登場とその分析

Microsoft PowerPoint - OS07.pptx

TRAVENTY CG V 動作検証報告書

sg_lenovo_os.xlsx

延命セキュリティ製品 製品名お客様の想定対象 OS McAfee Embedded Control 特定の業務で利用する物理 PC 仮想 PC や Server 2003 Server 2003 ホワイトリスト型 Trend Micro Safe Lock 特定の業務で利用するスタンドアロン PC

TFTP serverの実装

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

スライド 1

の 2 章である OSDI 2.5 章 2.6 章 2.5 Overview of processes in Minix3 Minix3 におけるプロセスの扱い方や システムとしてのプロセス Layer の分け方など概念を中心にこの章では扱っている 実際の実装については 2.6 章で扱う 2.5.1

bitvisor_summit.pptx

Microsoft PowerPoint - kougi7.ppt

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

制御システムのセキュリティリスク軽減対策~EMET のご紹介~

BitVisor 2017年の主な変更点

セキュアVMの アーキテクチャ概要

MMUなしプロセッサ用Linuxの共有ライブラリ機構

本論文では,32bit の Linux OS における C 言語で書かれたプログラムかつ GCC (GNU Compiler Collection) でコンパイルされた Linux ELF (Executable and Linkable Format) 形式 [6] のバイナリに焦点を絞る. 1

計算機アーキテクチャ

Microsoft PowerPoint - os ppt [互換モード]

アジェンダ Renesas Synergy TM プラットフォーム構成 ThreadX とは ThreadX の状態遷移 ThreadX とμITRONの機能比較 まとめ ページ 2

untitled

POSIXプログラミング Pthreads編

24th Embarcadero Developer Camp

プログラムローダを用いた 関数の置換により Stack-based Buffer Overflow攻撃を 緩和する手法の提案と実装

(Microsoft PowerPoint - DSE2019_IOProfiler\203v\203\214\203[\203\223\216\221\227\277-Rev1.1)

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

センサーデバイスへの仮想IP割り当て実験

Perle社 ターミナルサーバIOLAN STS8と富士通PCサーバ PRIMERGY RX2520 M1 の接続検証結果報告書(Red Hat Enterprise Linux 6.6(for Intel64)版)

単体テスト設計のコツ

MENU 키를 누르면 아래의 화면이 나타납니다

,…I…y…„†[…e…B…fi…O…V…X…e…•‡Ì…J†[…l…‰fi®“ì‡Ì›Â”‰›»pdfauthor

McAfee Application Control ご紹介

Microsoft IISのWebDAV認証回避の脆弱性に関する検証レポート

— intra-martで運用する場合のセキュリティの考え方    

BitVisor Updates in 2016

PowerPoint プレゼンテーション

ESMPRO/JMSS Ver6.0

Windows GPO のスクリプトと Cisco NAC 相互運用性

クラウド時代のセキュリティ運用課題 従来 主流であったオンサイト作業は 少なくなり インターネット経由 VPN 経由によるリモート運用が中心となってきています オンプレミス プライベートクラウド パブリッククラウド A 社システム部門運用代行業者システム開発ベンダ 作業立会いができない 無断作業 D

赤堀蒼磨, 納堂博史, 鈴木秀和, 内藤克浩, 渡邊晃 名城大学理工学部 愛知工業大学情報科学部

CodeRecorderでカバレッジ

VG シリーズ用ローカルファームアップ / 自動ファームウェア更新設定手順書 VG400aⅡ ローカルファームアップ / 自動ファームウェア更新設定手順書

インストールの前に

Transcription:

1 システムコールフックを使用した攻撃検出 株式会社フォティーンフォティー技術研究所 http://www.fourteenforty.jp 取締役技術担当金居良治

2 お題目 System Call について System Call Protection System Call Hook 考察

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

4 System Call 実装方法 (i386) INT (Linux, FreeBSD, Windows 2000) 割り込み SYSENTER (Linux?, Windows XP) 高速システムコール

INT による System Call の実装概略図 INT = 割り込み 感覚的には関数 ( ホントはもっといろいろやってます ) CPU EAX: EBX: IDTR:???? Interrupt Descriptor Table(IDT) 番号 アドレス 0x00 0x80 syscall INT 0x80 syscall: IRET User Kernel 5

INT による System Call の特徴 IDT というメモリ領域に割り込みハンドラのアドレスがある Windows でも 2000 以前は INT を使用 trap gate(freebsd), interrupt gate(linux) という 2 種類のバリエーションがある 6

7 SYSENTER の動作概略図 System Call 用に特化 高速化してある ( ホントはもっといろいろやってます ) CPU EAX: SYSENTER*MSR:???? SYSENTER*MSR:???? SYSENTER*MSR:???? SYSENTER syscall: SYSEXIT User Kernel

SYSENTER による System Call の特徴 INT のような冗長なチェックが無く メモリアクセスも無いので高速 Pentium II で登場した命令 Windows XP 以降 (Linux も?) はこっち ここら辺の挙動が詳しく知りたい人は Intel のページへ 8

System Call で遊んでみよう! 以外と簡単 System Call Protection というのを考案 FreeBSD でカーネルモジュールとして実装 アーキテクチャは i386 に限定 9

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

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

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

13 メモリの属性 ( パーミッション ) FreeBSD では ports の pmap を使用して メモリの属性をチェックできる

14 System Call Hook の方法 CPU EAX: EBX: IDTR:???? Interrupt Descriptor Table(IDT) 番号 アドレス 0x00 0x80 syscall INT 0x80 syscall: IRET User Kernel

15 System Call Hook の方法 IDTR 変更 割り込みハンドラの書き換え CPU EAX: EBX: IDTR:???? Interrupt Descriptor Table(IDT) 番号 アドレス 0x00 0x80 syscall INT 0x80 syscall: IRET User Kernel コード書き換え

割り込みハンドラのアドレスを書き換える カーネルモジュールとしての実装が可能 簡単 (setidt() を呼ぶだけ ) setidt(idt_syscall, &IDTVEC(my_int0x80_syscall), SDT_SYS386TGT, SEL_UPL, GSEL(GCODE_SEL, SEL_KPL)); ユーザ側からすれば カーネルの再ビルドが不要なので 手軽に試すことが出来る コンセプトコードに最適! 16

17 実行した様子 System Call Protection Off System Call Protection On スタック / ヒープ上で System Call が呼べない!

パフォーマンス その 1 10 秒間に何回 getpid() を呼べるか計測 System Call によるオーバーヘッドを計測 7.7% のパフォーマンス低下 System Call Protect 無効 有効 パフォーマンス 24,059,220 22,195,394 92.3% 18

パフォーマンス その 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

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

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

ありがとうございました 株式会社フォティーンフォティー技術研究所 http://www.fourteenforty.jp 取締役技術担当金居良治 kanai@fourteenforty.jp 22