39
仮仮仮仮仮仮仮仮仮仮仮 IDS 仮 仮仮仮仮仮仮仮仮仮仮仮仮仮仮 九九九九九九九九九 九九九九九九九九九九九九九 10675002 九九九九

仮想マシンを用いて既存 IDS を オフロードするための実行環境

  • Upload
    dinos

  • View
    100

  • Download
    1

Embed Size (px)

DESCRIPTION

仮想マシンを用いて既存 IDS を オフロードするための実行環境. 九州工業大学 大学院 情報工学府情報創成工学専攻 10675002 飯田貴大. 侵入検知システム( IDS ). IDS は攻撃者の侵入を検知するために用いられ る ファイル、ネットワーク、 OS などを監視 例: Tripwire ファイルの修正や追加などについて監視を行う ポリシファイルに従ってデータベースを 作成 データベースと比較することで検出を行う. 攻撃者. policy. Tripwire. DB. 異常. IDS への 攻撃. IDS が攻撃を受けると検知できなくなる - PowerPoint PPT Presentation

Citation preview

Page 1: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

仮想マシンを用いて既存 IDSをオフロードするための実行環境九州工業大学大学院情報工学府情報創成工学専攻

10675002飯田貴大

Page 2: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

IDS は攻撃者の侵入を検知するために用いられる◦ ファイル、ネットワーク、 OS などを監視◦ 例: Tripwire

ファイルの修正や追加などについて監視を行う ポリシファイルに従ってデータベースを作成 データベースと比較することで検出を行う

侵入検知システム( IDS)

Tripwire攻撃者

異常policy

DB

Page 3: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

IDS が攻撃を受けると検知できなくなる◦ IDS が停止させられたり IDS 本体が置き換えられてしまう◦ 例: Tripwire のポリシファイルやデータベースが改ざんされると Tripwire が騙される

ポリシファイルを改ざんされると特定のファイルやパスを検査できなくなる データベースを改ざんされるとファイルを書き換えられていないと誤認する

IDSへの攻撃

Tripwire攻撃者

policy

DB

Page 4: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

サーバを仮想マシン (VM) 上で動かし、 IDS だけ別の仮想マシン上で動かす手法◦IDS が攻撃の影響を受けにくくなる

サーバ VM に侵入した攻撃者から実行ファイルや設定ファイル等を改竄されることはない◦IDS-VM はサービスを提供しないため脆弱性を利用した攻撃はされにくい

仮想マシンを用いた IDSのオフロード

IDS-VM サーバ VM 攻撃者

Tripwirepolicy

DB

Page 5: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

オフロードすると既存の IDS を使えなくなる◦ 単純に動かすだけでは IDS-VM の監視を行ってしまう◦ サーバ VM を監視するように IDS を修正するのは大変

内部構造を基にサーバ VM のメモリを解析する必要がある マウントしたサーバ VM のディスクを監視するために監視対象のパスの書き換えが必要となる

既存の IDSへの修正が必要

IDS-VM サーバ VM

IDSカーネル

メモリ解析

仮想ディスク

パスの書き換え

Page 6: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

オフロードした既存の IDS に修正を加えることなく動作させることを可能にする実行環境◦ IDS-VM からサーバ VM の監視を行える◦ サーバ VM 内で実行しているかのように IDS を実行できる◦ サーバ VM のカーネルが攻撃されない限り安全に監視できる

提案: VM Shadow

VM ShadowIDS

サーバ VMIDS-VM

VM ShadowIDS

サーバ VM

Page 7: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow は IDS と OS の間のインターフェースをエミュレートする◦ システムコールのエミュレーション

IDS がシステムコールを使ってサーバ VM の情報を取得できるようにする◦ ファイルシステムのエミュレーション

サーバ VM のファイルシステムを提供する◦ ネットワークのエミュレーション

サーバ VM と同じネットワークインタフェースを提供する

VM Shadowの実現

Page 8: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow 内の IDS が発行したシステムコールに対して必要に応じてサーバ VM の情報を返す◦ 必要ならサーバ VM のカーネルを解析して情報を取得

サーバ VM についての情報の取得 例: uname

◦ それ以外は IDS-VM のカーネルにシステムコールを発行 メモリ管理

システムコール・エミュレータ

VM ShadowIDS

システムコールエミュレータ

サーバ VMIDS-VM

カーネルカーネル

uname

init_task

Linuxserver-vm2.6.27.35

task_struct utsname

Page 9: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow 内の IDS からサーバ VM で使われているファイルシステム全体を参照可能◦ サーバ VM と同じディレクトリ構成を提供する◦ IDS 関連のファイルは IDS-VM のファイルを提供する

Shadowファイルシステム

VM ShadowIDS

Shadowファイルシステム

サーバ VMIDS-VM

仮想ディスク

bin lib

/

tripwirels

Page 10: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

実行ファイルは IDS-VM から安全に読み込む◦ execve システムコールによる読み込みは IDS-VM から◦ 共有ライブラリの読み込みも IDS-VM から

ダイナミックリンカによる読み込みかどうかで判別◦ 実行しない場合にはサーバ VM から

実行されるファイルの判別

VM Shadow

IDS

Shadowファイルシステム

サーバ VMIDS-VM

仮想ディスク

execveダイナミックリンカ

ダイナミックリンカopen

Page 11: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

IDS の設定ファイル等を IDS-VM から読み込めるようにする◦ サーバ VM から隔離したいファイルを管理者が指定できる◦ マッピングを記述することで IDS-VM 上の指定したファイルを使わせることができる

VM ごとに異なるファイルにマッピングできる

マッピングファイルによる指定

/etc/tripwire/tw.pol /etc/tripwire/vm1/tw.pol/etc/tripwire /etc/tripwire/var/lib/tripwire//etc/lib/tripwire/vm1

Tripwire のマッピングファイル

IDS-VM 上のパスIDS がアクセスするパス

Page 12: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

サーバ VM の OS 内の情報を返すファイルシステム◦ Linux の proc ファイルシステムと同じインタフェースを提供◦ プロセスやネットワーク、システムの情報を返す

例: /proc/*/stat◦ VM Shadow 作成時にサーバ VM のメモリを解析して構築

プロセスリスト、ソケット一覧

Shadow procファイルシステム

サーバ VM

カーネルShadowprocfs

IDS

/proc/*/stat

IDS-VMVM Shadowinit・・

firefoxvncservermalware

mail

Page 13: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

サーバ VM が持つネットワークインタフェースにアクセスできるようにする◦ 対応する仮想ネットワークインタフェース( vif )が

IDS-VM に作成される サーバ VM へのパケットが取得可能

◦ サーバ VM のネットワークインタフェースにアクセスすると vif にアクセスさせる 例: eth0→vif

ネットワーク・エミュレータ

VM ShadowIDS

サーバ VMIDS-VM

eth0vif

ネットワークエミュレータ

eth0

Page 14: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow を提供するシステム Transcall を開発◦ Xen を使って IDS のオフロードを実現◦ Transcall はカーネルを変更せずに実現

ptrace を用いてシステムコール・エミュレータを実装 FUSE を用いて Shadow proc ファイルシステムを実装 全て合わせて 3848 行で実装

実装

IDS

Linux

サーバ VMIDS-VM

FUSE

Shadow

procfs カーネル

システムコールエミュレータ

Tran

scal

l

カーネル

Page 15: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow を用いて既存の IDS がオフロードできるのか実験を行った◦ VM Shadow 内で既存の IDS が正常に監視できるかどうかの動作テスト◦ VM Shadow 内で動かす IDS の性能評価

実験

実験環境•CPU Intel Quad 2.83GHz•メモリ 4GB•Xen3.4.0•IDS-VM Linux2.6.18.8•サーバ VM Linux2.6.27.35

Page 16: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

chkrootkit を用いてサーバ VM のルートキットの検出を行った◦ 検査項目は大きく分けて 4 種類

◦ ネットワーク周り以外の検査項目はほぼ IDS-VM から異常検出することができた ネットワークは完全に対応できていない

chkrootkitの動作テスト

  検査項目コマンドamd cron echo egrep ifconfig login ls netstat passwd ps

sshd su…ファイルaliens asp inetdconf OSX_RSPLUG w55808 wted z2

ネットワークbindshell scalper slapper sniffer

プロセスchkutmp lkm

Page 17: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

Tripwire/Snortの動作テスト Tripwire を用いてサーバ VM のファイルの整合性チェックを行った

◦ 最初にサーバ VM の「正常な」状態を記録◦ サーバ VM 内で適当なファイルを変更◦ Tripwire は変更されたファイル数を正しく報告

Snort を用いてサーバ VM のパケット監視を行った◦ サーバ VM に攻撃パケットを送信◦ Snort は正しく警告を出した

VM ShadowTripwire

サーバ VMIDS-VM

policyDB

ファイル変更

VM ShadowSnort

サーバ VMIDS-VM

eth0vif

攻撃パケット

監視

監視

Page 18: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow 内で動かした chkrootkit の実行時間を測定◦ サーバ VM で直接動かした場合の約 1.5倍遅い◦ lkm の検査がほとんどを占めている

Shadow proc ファイルシステムを利用するため実行に時間がかかる

chkrootkitの実行時間

010203040506070

38.6

58.5

chkrootkit の実行時間

サーバ VM

VM Shadow

実行時間(秒)

05

10152025303540

19.2

34.8

lkm の実行時間

サーバ VMVM Shadow

時間(秒)

Page 19: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow 内で動かしたTripwire の実行時間を測定◦ Xen では IDS-VM からサーバ VMの仮想ディスクにアクセスするほうが高速

VM Shadow 内で動かしたSnort の CPU 使用率を測定◦ ネットワークが仮想化されていない IDS-VM の方が高速

Tripwire/Snortの性能

0

20

40

60

80

100

120

140120.8

97.1

Tripwireの実行時間

サーバ VMVM Shadow

実行時間(秒)

0

10

20

30

40

50

60 55.8

35.2

Snortの CPU使用率

サーバ VMVM Shadow

平均CPU使用率(%)

1.2倍高速

20%低減

Page 20: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VIX [Hay et al.’08]◦ IDS-VM からサーバ VM の情報を取得するコマンド群を提供◦ 提供されているコマンドを使わない IDS は修正が必要

VMwatcher[Jiang et al.’07]◦ IDS-VM で既存のアンチウィルスを動かすことができる◦ サーバ VM のファイルシステムを参照するのみ

スキャンするパスをマウント先に変更する必要がある HyperSpector [Kourai et al.’05]

◦ IDS-VM で既存の IDS を実行できる◦ OS の仮想化機能を利用しているため比較的容易

VM Shadow はシステムレベルの仮想化を前提

関連研究

Page 21: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

既存の IDS を変更することなく、オフロードすることを可能にする VM Shadow を提案◦ IDS-VM からサーバ VM を監視するための実行環境

システムコール・エミュレータ、 Shadow ファイルシステム、ネットワーク・エミュレータから成る◦ 既存の chkrootkit 、 Tripwire 、 Snort の動作を確認できた

今後の課題◦ より多くの既存の IDS を動作させられるようにする

まとめ

Page 22: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

オープンソースで公開◦ URL:http://www.ksl.ci.kyutech.ac.jp/~yone/

Transcall を利用した研究◦ OUassister :仮想マシンのオフラインアップデート機構

Transcall が提供する VM Shadow 内でアップデータを動作させることでファイルの更新をエミュレートする◦ ファイルキャッシュを考慮した IDS オフロード

Transcall の機能を拡張し、ファイル検査時にファイルキャッシュも含めて検査できるようにしている

Transcallの公開

Page 23: 仮想マシンを用いて既存 IDS を オフロードするための実行環境
Page 24: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow を用いて隠しプロセスの発見ができるかどうかの実験を行った◦ VM Shadow 内とサーバ VM 上での ps の実行結果を比較◦ サーバ VM では init プロセスを隠蔽する改竄された psを実行

隠蔽された init プロセスの発見を行えた

隠しプロセスの発見

VMサーバIDS-VM

VM ShadowIDS

サーバ VMIDS-VM

Page 25: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

chkrootkit を用いてサーバ VM のルートキットの検出を行った◦ chkrootkit は ps や netstat コマンド等を用いており、

proc ファイルシステムも参照する◦ サーバ VM には改ざんされた ps コマンドを置いた

chkrootkit の検査に引っ掛かる文字列を埋め込んだ IDS-VM からサーバ VM の改ざんされた ps コマンドを検知できた

chkrootkitの動作テストVM ShadowIDS

サーバ VMIDS-VM

Page 26: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

uname システムコールが返す情報をサーバ VMから取得◦ サーバ VM のカーネルメモリの中から utsname 構造体を発見

カーネル名、ホスト名、バージョン等が格納されている init_task 変数からたどることができる

例 :unameのエミュレーション

VM ShadowIDS

システムコールエミュレータ

サーバ VMIDS-VM

カーネルカーネル

uname

init_task

Linuxserver-vm2.6.27.35

task_struct utsname

Page 27: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

/proc/net/◦ tcp, udp, unix

TCP/IP, UDP/IP, UNIX ドメインソケットの情報 サーバ VM のカーネル内の sock 構造体から取得

例: TCP/IP の場合◦ tcp_hashinfo 変数が指すハッシュ表をたどることで取得できる

ネットワーク情報の構築

サーバ VM

カーネルShadowprocfs

IDS

/proc/net/tcp

IDS-VMVM Shadow tcp_hashinfo

sock

Page 28: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

IDS-VM

IDS-VM からサーバ VM の監視が行えるか実験を行った◦ VM Shadow 内とサーバ VM 上の chkrootkit の実行結果を比較◦ 大部分で同じ結果が得られることを確認

まだ対応出来ていない個所がある

実験: chkrootkitの実行

・・・ ・・・

サーバ VM

Page 29: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow を用いてネットワーク情報が取得できるかどうかの実験を行った◦ VM Shadow 内とサーバ VM 上の netstat の実行結果を比較◦ 同じ情報が取得できていることを確認

実験:ネットワーク情報取得

VMサーバIDS-VM

Page 30: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

VM Shadow 内で動かした ps コマンドの実行時間を測定◦ サーバ VM で直接動かした場合の 2.3倍◦原因は ptraceおよび FUSE を用いたことによるオーバヘッド◦ サーバ VM からの情報取得のオーバヘッドは含まれない

VM シャドウの作成時に取得しているため

実験: Transcallの性能

平均実行時間(ミリ秒)

ps( サーバ VM) 59.2VM Shadow+ps(IDS-VM) 137.3

表1 実行速度比較 実験環境•CPU Intel Quad 2.83GHz•メモリ 4GB•Xen3.4.0•IDS-VM Linux2.6.18.8•サーバ VM Linux2.6.27.35

Page 31: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

ptrace システムコールを用いてシステムコールのトラップを行う◦ エミュレートするシステムコールの場合

uname 引数が指すメモリの内容を書き換えて IDS に出力を返す

◦ ファイル関連のシステムコールの場合 open,stat 引数のパス名を置換する

ポリシ /proc /

システムコールのトラップ

IDS

システムコールエミュレータ

open("/proc")uname(buf)

Page 32: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

ps コマンドは /proc を参照しながら実行◦ /proc/self をチェック

サーバ VM 上に ps プロセスは存在しない IDS-VM で実行中の ps プロセスの情報を返す(例外処理)

◦ /proc 上のディレクトリエントリ一覧を取得 サーバ VM 上で動いているプロセスの PID の一覧を返す

◦各プロセスのディレクトリから stat 、 status ファイルを読み込む 実行されている端末、実行時間、コマンド名などを取得

psコマンドの実行例

サーバ VM

カーネルShadowprocfs

PSIDS-VM

VM Shadow ps

Page 33: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

前回◦ access◦ chdir◦ execve◦ open◦ readlink◦ stat◦ uname

VM シャドウ内で行える動作が増加◦ cp,cd など基本的な動作は一通り出来る

対応しているシステムコール 追加

◦ chmod◦ chown◦ fchmodat◦ fchownat◦ link◦ lstat◦ mkdir◦ newfstatat◦ openat

◦ rename◦ rmdir◦ statfs◦ symlink◦ unlink◦ unlinkat◦ utime◦ utimensat

Page 34: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

カーネルの内部データ構造を基にメモリを解析◦ あらかじめカーネルの型情報やシンボル情報を取得しておく

デバッグ情報や System.map を利用 例: init_task( アドレス: 0xffffffff814a8340)

◦ サーバ VM のメモリページを IDS-VM にマップしてアクセス

サーバ VMのカーネル情報の取得

Transcall Init_task

0xffffffff814a83400x2b1ceb7a1340

IDS-VM サーバ VM

Page 35: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

/proc/ プロセス ID [/task/ スレッド ID] /◦ stat, status

サーバ VM のカーネル内の task_struct 構造体から取得◦ cmdline

プロセスのメモリから取得 /proc/self/

◦ IDS-VM の IDS プロセスの情報をコピーする /proc/net/

◦ tcp, udp, unix TCP/IP, UDP/IP, UNIX ドメインソケットの情報

エミュレートするファイル

Page 36: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

サーバ VM のカーネルが改ざんされない限り、正しい情報を取得できる◦ サーバ VM への RPC は脆弱

システムコールをサーバ VM 上で実行させその結果を取得 RPC サーバが改ざんされると偽の情報を返される可能性がある

OS名を改ざんされると OS に依存した攻撃を見逃す危険性

サーバVMのメモリを直接見る必要性

Transcall

VM シャドウIDS

サーバ VMIDS-VM

RPCサーバ

カーネルuname uname

攻撃

Page 37: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

MAC アドレス◦ サーバ VM のコンフィグファイルに記述されているのでその値を流用する◦ 例 vif = [ ‘mac=00:16:3e:5b:b3:ec, bridge=eth0’ ]

IP アドレス◦ RARP パケットを利用して IP アドレスを取得する

RARP パケットは MAC アドレスから IP アドレスを調べるパケット

サーバ VMの IF情報取得

Page 38: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

IDS-VM とサーバ VM の仮想ディスクへのアクセス速度を測定◦ 1GB のファイルに 1MB のブロックサイズでシーケンシャルリードを行った

ディスクアクセス速度

0.0

500.0

1000.0

1500.0

2000.0

2500.0

3000.0

327.5

2520.1

サーバ VM からのディスクアクセスIDS-VM からのディスクアクセスアク

セス速度(M

B/s)

Page 39: 仮想マシンを用いて既存 IDS を オフロードするための実行環境

FUSEのアーキテクチャexample/hello

/tmp/fuse

FUSE

ls –l /tmp/fuse libfuse

glibcglibc

Ext3

NFSVFS

userspacekernel