qemu-kvm-dsysmon

Similar documents
qemu-kvm-dsysmon

2013年『STSSスキルコミュニティ』 テーマ別Kickoff資料

EV3 の初期設定

t20s3-fn09.pdf

目次 1. はじめに 本書対象者 PALRO のアプリケーションについて Ubuntu 8.04LTS の入手について Linux 上での開発環境の構築 事前準備 Ubuntu のインストール..

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

吉田坂本.pptx

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

GettingStartedTK2

オフラインメンテナンス説明書-ver5.0.0

インストール先 PC 推奨環境 Intel Virtualization Technology 対応 CPU Windows 7 以降 64 bit メモリ 4 GB 以上 ハードディスク空き容量 20 GB 以上 インターネット接続 ( アップデートを うため ) ( 動作を保証するものではありま

目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール

Microsoft PowerPoint _2.プログラミングの基礎_final

オフラインメンテナンス説明書

目次 LS-DYNA 利用の手引き 1 1. はじめに 利用できるバージョン 概要 1 2. TSUBAME での利用方法 使用可能な LS-DYNA の実行 4 (1) TSUBAMEにログイン 4 (2) バージョンの切り替え 4 (3) インタラ

ユーザーズマニュアル 有線ネットワークシステム 発行日 2016 年 3 月 30 日

appli_HPhi_install

PowerPoint プレゼンテーション

Windows AIKを使用したPE2

intra-mart ワークフローデザイナ

LS-DYNA 利用の手引 第 1 版 東京工業大学学術国際情報センター 2017 年 9 月 25 日

Nagios XI - SNMPでのLinux監視

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

2013 科学技術振興機構 D-RE デモ環境導入ガイド DEOS プロジェクト 目次 1 はじめに 準備 dre ユーザの追加 D-RE の導入 システムコンテナの作成 システムコンテナの起動

Taro-ラズパイのインストールと設定

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

7th CodeGear Developer Camp

科学技術振興機構 D-RE デモ環境導入ガイド DEOS プロジェクト 目次 1 はじめに 準備 dre ユーザの追加 D-RE の導入 システムコンテナの作成 システムコンテナの起動... 6

Microsoft PowerPoint - DEXCS2015_Salome_Installation pptx

MotionBoard Ver. 5.6 パッチ適用手順書

2 ビルド手順 KZM-CA9-01 用の Linux カーネル クロスツールチェイン ユーザーランドをビルドする手順を以下に示します 2.1 buildroot 環境の準備 ビルドに必要なパッケージをインストールします HOSTPC# apt-get install bison flex gett

Microsoft Word - VPN...[.U.K.C.hLinux doc

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

r10s4-fn03.pdf

Microsoft Word - SCR331DI_mac10.14_manual.doc

仮想化基礎演習テキスト Ⅰ 第 1.0 版 演習で学ぶ仮想化基礎 ( クライアント仮想化編 ) 九州ラーニングネット株式会社 特定非営利活動法人パソコン整備士協会

Installation Guide for Linux

演習に必要な

目次 1. はじめに 本文書の目的 前提条件 略語 事前準備 ホスト名の名前解決 Linux 版パッケージ システム要件 ソフトウェア要件 パッケージ構成

ActiveImage Protector 2016 R2 for Express5800 / ftサーバ

1 D-Visor OS

再起動した状態になり パスワードを入力すると 図 2 のように DEXCS2011 のアイコ ンがデスクトップ上に表示される 2 端末を準備する メニューバーにある端末の形を左クリック 図 2 デスクトップ メニューバーに端末の形がない場合 図 3 メニューバー アプリケーション アクセサリー 端末

日医特定健康診査システム ORCA PROJECT Linux 対応版インストールマニュアル (Version 対応 ) Ubuntu Trusty 用 版 2017 年 2 月 23 日 Copyright (C) Japan Medical

1. 対象装置 (1) 日立仮想 Fibre Channel アダプタ 適用装置 : EP8000 7xx/S8xx/E8xx/S9xx 2. 仮想 FC アダプタドライバ来歴 この仮想 FC アダプタドライバは 次の機能拡張とバグ修正を含みます バージョン内容 新規追加 7

スライド 1

インテル(R) Visual Fortran コンパイラ 10.0

Dr.Web Desktop Security Suite Ver.10.1 簡易構築ガイド -Linux 用 - 株式会社 Doctor Web Pacific 初版 : 2015/10/20 改訂 : Copyright Doctor Web Pacific Inc. All rights re

McAfee Firewall for Linux リリース ノート

LK-RZN-A01 Install Manual

LSI MegaRAID SAS Device Driver Installation Guide - 日本語

XMP structure: 1

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

PRIMERGY RX300 S6 SAS コントローラカード <RAID 5> フリーOS 動作確認情報

Microsoft Word - K5VSSP32-install.docx

Microsoft Word - XOOPS インストールマニュアルv12.doc

WiFiの現状

Warp demo station manual

KDDI ホスティングサービス G120 KDDI ホスティングサービス G200 WordPress インストールガイド ( ご参考資料 ) rev.1.2 KDDI 株式会社 1

UCS M シリーズ サーバでの Redhat/CentOS オペレーティング システムのインストール

レセプト電算ファイルのCD書き込み手順書

FTPサーバーへのアクセス権限設定

TOMOYO Linux の概要

DHCPサーバのクラスタ化

<4D F736F F D DD92E B838B5F8EE688B590E096BE8F915F3194C55F E646F63>

WebOTXプロファイラを使用したメモリリーク調査方法

Raspberry Pi 3(Raspbian) での Actian Zen Edge 使用 株式会社エージーテック 2018 年 7 月 5 日

目次 1 はじめに アンインストール前の注意点 Sophos アンインストール手順 アンインストーラの場所を確認する アンインストーラの実行 F-Secure Client Security for Mac インストー

目次 1. はじめに ライセンス証書の受領 ライセンス証書に含まれる内容 環境前提条件 準備 インストール環境の確認 リポジトリ設定 Cent OS

STK 10 無償版ライセンス申請手順 2014/04 1

PRIMERGY TX2540 M1 未サポートOS動作検証確認情報

ソフトウェアエンジニアリング - 機能 #54

PRIMERGY TX100 S1 未サポートOS動作検証確認情報

MINI2440マニュアル

Microsoft Windows Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red Hat

intra-mart Accel Platform — OData for SAP HANA セットアップガイド   初版  

Maple 12 Windows版シングルユーザ/ネットワークライセンス

LK-RZG-A02 Install Manual

CLAIM接続利用手順

IBM SPSS Statistics - Essentials for Python: のインストール手順 Mac OS

ServerView RAID Manager VMware vSphere ESXi 6 インストールガイド

Linux修正適用手順書

PRIMERGY TX100 S3 未サポートOS動作検証確認情報

ConsoleDA Agent For Server インストールガイド

CLAIM接続利用手順

PowerPoint Presentation

PRIMERGY RX300S6未サポートOS動作検証確認情報

HPE ProLiant Thin Micro TM200 サーバー Microsoft Windows Server インストール手順

Pirates Buster Series Secure Viewer セットアップマニュアル (Web インストーラ)

Microsoft Windows Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です Linux は Linus Torvalds 氏の日本およびその他の国における登録商標または商標です Red Hat

PRIMERGY TX1320 M2 未サポートOS動作検証確認情報

PRIMERGY TX1310 M1 未サポートOS動作検証確認情報

CertJuken 専門的な IT 認証問題集を提供する CertJuken

PRIMERGY CX250 S2 未サポートOS動作検証確認情報

CLUSTERPRO MC StorageSaver istorage M シリーズ使用時の設定手順 (HP-UX 版 Linux 版 Windows 版 ) 2013(Apr) NEC Corporation istorage M シリーズを使用する場合の StorageSaver 設定手順 (H

PRIMERGY TX100 S3 未サポートOS動作検証確認情報

Hphi実行環境導入マニュアル_v1.1.1

PRIMERGY TX1320 M1 未サポートOS動作検証確認情報

CompuSec SW 強制削除手順

1. 対象装置 (1) 日立仮想 Fibre Channel アダプタ 適用装置 : EP8000 7xx 2. 仮想 FC アダプタドライバ来歴 この仮想 FC アダプタドライバは 次の機能拡張とバグ修正を含みます バージョン内容 新規追加 AIX ロ

Transcription:

DEOS-FY2014-QK-02J 2013-2014 科学技術振興機構 QEMU-KVM + D-System Monitor 環境構築手順書 Version 1.2 2014/02/01 DEOS 研究開発センター DEOS プロジェクト JST-CREST 研究領域 実用化を目指した組込みシステム用ディペンダブル オペレーティングシステム

2013-2014 科学技術振興機構 DEOS プロジェクト 目次 1. D-Visor と D-System Monitor 3 2. 動作環境 3 3. 環境構築の流れ 3 4. QEMU-KVM の修正 4 4-1. 必要なパッケージのインストール... 4 4-2. パッチの適用... 4 4-3. アドレスの変更... 5 4-4.QEMU-KVM のビルド... 5 4-5. シンボリックリンクの作成... 5 5. Host OS の KVM カーネル モジュールの修正 5 6. QEMU-KVM の実行 6 7. Guest OS へのパッチの適用 6 8. デモ用のカーネル モジュール等の作成 7 8-1.rpldev.ko と rpld の作成... 7 8-2.rpld_receiver の作成... 8 8-3.file_rootkit.ko の作成... 8 8-4.process_rootkit.ko の作成... 8 8-5. 監視用ユーザープログラムの準備... 8 9. GUI の準備 8 10. デモの実行 9 10-1.GUI の起動... 9 10-2.FoxyKBD の実行... 9 10-3.RootkitLibra の実行... 9 10-4.Waseda LMS の実行... 10 11. おわりに 10 本書に記載されているシステム名 製品名 サービス名などは一般に各社の商標または登録商標です Page2 2014/02/01

DEOS プロジェクト 2013-2014 科学技術振興機構 1. D-Visor と D-System Monitor D-System Monitor は OS を外側から観察し OS に対する攻撃 改竄を監視します OS を外側から監視するためには OS を稼働させるハードウェアに特別な観察のための仕組みを用意する方法も考えられますが DEOS プロジェクトでは OS を仮想マシン (VM) 上で動かし VM を管理する仮想マシンモニタ (VMM) に観察を支援する機能を組み込み それを使って OS を外側から監視します この仮想マシンモニタを D-Visor と呼びます DEOS プロジェクトでは D-Visor として x86 マルチコア CPU 上で動く D-Visor86 を開発し ( D-Visor86 + D-System Monitor 環境構築手順書 を参照 ) D-Visor86 上で動作する D-System Monitor も開発しました しかし D-Visor86 は稼働するハードウェアに制限があります そこで D-System Monitor の適用領域を拡大することを目的として 様々な環境で使用されている QEMU-KVM を修正し D-Visor として利用しようと試みたのが 本書で説明する D-System Monitor を組み込んだ QEMU-KVM( 以下 QEMU-KVM+D-System Monitor ) です OS に対する攻撃 改竄としては様々なものが考えられ それぞれに応じた監視機構を D-System Monitor 内に実現することが必要となりますが QEMU-KVM+D-System Monitor で現在使用できる監視機構は以下の 3 つです 1. FoxyKBD 疑似的に大量のキーボード入力を発生させ 同時にネットワークの転送量を監視します 無関係なはずのキーボード入力とネットワーク転送に相関がみられる場合は 異常な振舞いの可能性があります 2. RootkitLibra NFS マウントしているディレクトリについて Guest OS 上で見える結果と NFS パケット内のデータを比較して Guest OS が不正なファイルメタデータを返すことを検出します 3. Waseda LMS (Lightweight Monitoring Service) Guest OS の kernel 中の task list と run queue を比較して プロセス情報に矛盾があることを検出します いずれも D-Visor86 上で稼働している D-System Monitor の監視機構と同じ機能であり ソースコードの一部を修正して QEMU-KVM+D-System Monitor に組み込んでいます 2. 動作環境 QEMU-KVM+D-System Monitor の稼働実績がある環境は以下のとおりです ハードウェア Intel VT をサポートする x86_64 CPU が搭載された PC AMD-V の CPU には未対応です ソフトウェア Host OS: Ubuntu 12.04 LTS x86_64 版 Guest OS: Ubuntu 12.04 LTS x86_64 版 3. 環境構築の流れ QEMU-KVM+D-System Monitor が動作する環境を構築するには 以下のような作業が必要になります 1. Host OS の QEMU-KVM を修正する 2. Host OS の KVM カーネル モジュールを修正するさらに 前述の 3 つの監視機構を動かして 異常を検出するデモを行なうには 以下のような作業が必要です 3. Guest OS にパッチをあてて デモのために異常なデータを返す状態にする 2014/02/01 Page3

2013-2014 科学技術振興機構 DEOS プロジェクト 4. デモ用のカーネル モジュール等を準備する 5. 監視機構が使用するユーザープログラムを準備する 6. GUI を準備する次章以降で これらの作業の詳細を説明します Host OS として Ubuntu 12.04 x86_64 版がインストールされ さらに KVM パッケージがインストール済みであることを前提としています また プログラムのビルド等はすべて Host OS 上で実行しているものとしています さらに Guest OS の SMP kernel のソースコードも必要です Host OS 上ではデモ用 GUI も動作させるので X Window 環境も必要です 公開している qemu-kvm-dsysmon-0.1.2.tar.gz には以下のようなファイルが含まれています プログラムはいずれもソースコードかパッチです 名前 COPYING COPYRIGHT GUI/ README file-rootkit/ guest-os/ host-os/ process-rootkit/ qemu-kvm/ rpld-receiver/ rpld.conf rtkl-collec.kvm/ start-qemu.sh ttyrpld-2.60/ 内容 GPL v2 ライセンスコピーライト GUI のファイル Readme ファイル異常なファイルメタデータを返すデモ用カーネル モジュール Guest OS 変更のための patch 等 Host OS の KVM カーネル モジュールの修正のための patch 異常なプロセス情報を返すデモ用カーネル モジュール QEMU-KVM に D-System Monitor を組み込むための patch キーボード入力データを受信するプログラム rpld の設定ファイル RootkitLibra 監視機構のユーザープログラム GuestOS 上で動作 QEMU-KVM+D-System Monitor を起動するためのシェル スクリプトキーボード入力データを記録するためのオープンソースプログラム用の patch これらを使用して以下の環境構築作業を実施する前に Ubuntu 12.04 LTS x86_64 版をインストールした Guest OS の KVM 用イメージを 従来の KVM コマンドを使って作成しておいてください 以下では その Guest OS の KVM イメージに対して kernel を入れ替えたりカーネル モジュールを導入したりします 4. QEMU-KVM の修正 この章では QEMU-KVM を修正して D-System Monitor を組み込みます 4-1. 必要なパッケージのインストール ビルド等で必要となるパッケージを Host OS にインストールしておいてください $ sudo apt-get install zlib1g-dev $ sudo apt-get install libglib2.0-dev $ sudo apt-get install libsdl1.2-dev $ sudo apt-get install uml-utilities 4-2. パッチの適用 Page4 2014/02/01

DEOS プロジェクト 2013-2014 科学技術振興機構 qemu-kvm-1.0+noroms のソースコードを入手し パッチ (qemu-kvm/qemu-kvm-1.0+noroms.patch) を適用してください $ mkdir work $ cd work $ apt-get source qemu-kvm $ patch p0 < /path/to/patch/file 4-3. アドレスの変更 ソースコード中の以下の定数値を変更してください それぞれ Guest OS の System.map から調べた 値を使用してください qemu-kvm-1.0+noroms/dsysmon/lms.c の以下の 4 行を変更してください #define INIT_TASK_DEFAULT 0xffffffff81c0d020UL (init_task のアドレス ) #define PER_CPU_RQ_DEFAULT 0x00000000000137c0UL (runqueues のアドレス ) #define PER_CPU_OFFSET 0xffffffff81cde480UL (per_cpu_offset のアドレス ) #define NR_CPU_IDS 0xffffffff81ce0364UL (nr_cpu_ids のアドレス ) qemu-kvm-1.0+noroms/dsysmon/dsm_lib.c の以下の 1 行を変更してください #define INIT_LEVEL4_PGT 0xffffffff81c05000UL (init_level4_pgt のアドレス ) ただし これらの値は QEMU-KVM 実行後の D-System Monitor 起動時に指定することも可能です 4-4.QEMU-KVM のビルド ビルドする前に qemu-kvm-1.0+noroms/makefile.objs 中の lms_kern.o の QEMU_CFLAGS の定義 (2 行 ) の -I が Guest OS の SMP Kernel のソースコード中の 2 個所の include ディレクトリを参照するように変更しておいてください obj ディレクトリを作成し 以下のようにして QEMU-KVM をビルドします $ mkdir obj $ cd obj $../qemu-kvm-1.0+noroms/configure --target-list=x86_64-softmmu これによって obj/x86_64-softmmu ディレクトリの下に qemu-system-x86_64 として実行モジュールが作成されます 4-5. シンボリックリンクの作成 ビルドした qemu-system-x86_64 を実行するためには 以下のように obj/pc-bios ディレクトリの下にシンボリックリンクを作成しておく必要があります $ cd pc-bios $ ln -s /usr/share/qemu/*.bin. 5. Host OS の KVM カーネル モジュールの修正 Host OS の KVM カーネル モジュールを修正する必要があります パッチ (host-os/kvm.patch) を使用して Host OS の KVM カーネル モジュールを修正してください このパッチのベースのコードは linux kernel 3.2.0-52.78 です Ubuntu 12.04 LTS x86_64 版の kernel ソースコードを入手してビルド環境を整えたのち KVM カーネル モジュールだけを変更します $ cd /path/to/linux-source-3.2.0 $ cd arch/x86/kvm 2014/02/01 Page5

2013-2014 科学技術振興機構 DEOS プロジェクト $ patch -p1 < /path/to/kvm.patch $ cd../../.. M=arch/x86/kvm modules これで arch/x86/kvm の下に kvm.ko と kvm-intel.ko が作成されるので Host OS の /lib/modules/<kernel-version>/kernel/arch/x86/kvm の下のファイルを置き換え Host OS を reboot してください 6. QEMU-KVM の実行 第 4 章と第 5 章の作業が済むと QEMU-KVM が実行可能になります tar.gz ファイルに含まれる start-qemu.sh シェル スクリプト中の qemu-system-x86_64 実行モジュールの path と Guest OS イメージファイルの場所を適切に変更して $ sudo /path/to/start-qemu.sh を実行すると QEMU-KVM が起動します qemu-system-x86_64 を起動する際に -smp 4 を指定しているので 4 個の CPU コアがある SMP システムの仮想マシンが作成されます start-qemu.sh を実行したターミナルに Guest OS の login プロンプトが表示されると共に VNC viewer で localhost:5901 に接続すると Guest OS の画面が表示されます これで従来の QEMU-KVM と同様に使用可能です この時 別のターミナルから $ sudo nc -U /tmp/qemu-monitor を実行すると QEMU-KVM の monitor に接続することができます QEMU-KVM の monitor が表示する (qemu) のプロンプトから dsysmon コマンドを入力すると 以下のように D-System Monitor を起動することができます (qemu) dsysmon <<< 入力行 dsysmon start dsysmon init_level4_pgt = 0x1c05000 init_task = 0xffffffff81c0d020 runqueues = 0x137c0 per_cpu_offset = 0xffffffff81cde480 nr_cpu_ids = 0xffffffff81ce0364 ここで 表示されている init_level4_pgt 等は 前記の 4-3 で設定した仮想アドレスの値です ( ただし init_level4_pgt は上位の 0xffffffff8 が省略された値として表示されています ) また dsysmon コマンドの入力時に 以下のように init_levet4_pgt, init_task, runqueues, per_cpu_offset, nr_cpu_ids を指定することも可能です (qemu) dsysmon 0xffffffff81c05000 0xffffffff81c0d020 0x137c0 0xffffffff81cde480 0xffffffff81ce0364 <<< 入力行 dsysmon start dsysmon init_level4_pgt = 0x1c05000 init_task = 0xffffffff81c0d020 runqueues = 0x137c0 per_cpu_offset = 0xffffffff81cde480 nr_cpu_ids = 0xffffffff81ce0364 この時 アドレスは init_levet4_pgt, init_task, runqueues, per_cpu_offset, nr_cpu_ids の順に 16 進数で指定する必要があります ( ソースコード中で定義された値のまま変更不要なアドレスは 0 と指定することができます それも含めて必ず 5 つのアドレスを指定する必要があります ) dsysmon コマンドによって D-Syetem Monitor が起動され QEMU-KVM 中で D-System Monitor 用の thread が複数走り出しますが 監視はまだ開始されていません 監視の開始には 以下の手順に従って GUI 等を準備することが必要になります 7. Guest OS へのパッチの適用 この章で説明している Guest OS の修正は デモを目的として異常な動作をさせるためのものです デモ用の Guest OS 以外にはこの修正は適用しないでください Page6 2014/02/01

DEOS プロジェクト 2013-2014 科学技術振興機構 デモを実行するためには Guest OS に異常な動作をさせる必要があります そのために Guest OS 用 SMP Kernel にパッチ (guest-os/linux-source.patch) を適用して修正し 第 8 章で説明するデモ用のカーネル モジュールが使用可能となるようにする必要があります DEOS 研究開発センターで kernel をビルドした時の config ファイルを guest-os/.config として参考のために tar.gz ファイルに入れてあります 以下のように Guest OS 用 SMP Kernel のソースコードに linux-source.patch を適用してください このパッチのベースのコードは linux kernel 3.2.0-52.78 です $ cd linux-source-3.2.0 $ patch -p1 < /path/to/linux-source.patch その後 kernel をビルドし Guest OS の SMP Kernel を置き換えます この修正によって Guest OS 用 SMP Kernel 中のシンボル init_levet4_pgt, init_task, runqueues, per_cpu_offset, nr_cpu_ids のアドレスがそれまでと異なってしまった場合には 前記 4-3 と 4-4 を再度実行して QEMU-KVM を作成し直す必要があります ( 第 6 章で説明したように QEMU-KVM の monitor から dsysmon コマンドを実行する時に指定することも可能です ) 8. デモ用のカーネル モジュール等の作成 この章で説明しているカーネル モジュール等は デモを目的として異常な動作をさせるためのものです デモ目的以外ではここで説明するカーネル モジュール等は使用しないでください デモの実行のために Guest OS を異常な状態にする必要があり そのためのカーネル モジュールを用意しています この章で作成したカーネル モジュールを実行するためには 第 7 章に記述した Guest OS の修正が済んでいることが必要です 8-1.rpldev.ko と rpld の作成 rpldev.ko はキーボード入力データを取得するためのカーネル モジュールで rpld は取得したキーボード入力データを他のマシンに転送するプログラムです この 2 つのプログラムによって Guest OS のキーボード入力データが他のマシンに転送される状態を作り出します ビルドと実行のために libhx-dev が必要になるので Guest OS と Host OS の双方にインストールしておいてください $ sudo apt-get install libhx-dev まず ttyrpld-2.60 のソースコードを Web で見つけてダウンロードしておきます たとえば 以下の Web ページからダウンロードできます http://sourceforge.net/projects/ttyrpld/ ダウンロードした ttyrpld-2.60.tar.bz2 を適当なディレクトリに展開してください それに対してパッチ (ttyrpld-2.60/ttyrpld-2.60.patch) を適用した後に rpldev.ko と rpld を作成します $ cd ttyrpld-2.60 $ patch p1 < /path/to/ttyrpld-2.60.patch ビルドの前に ttyrpld-2.60/k_linux-2.6/makefile の MODULES_DIR を Guest OS の kernel のソースコードを参照できるように適切に変更しておいてください $ cd ttyrpld-2.60 $./configure $ cd k_linux-2.6 これで ttyrpld-2.60/k_linux-2.6 ディレクトリの下に rpldev.ko が作成され ttyrpld-2.60/user ディレクトリの下に rpld が作成されます また rpld.conf も必要なので rpldev.ko, rpld, rpld.conf の 3 ファイルを Guest OS に転送しておきます rpld.conf は Guest OS 上で rpld と同じディレクトリに置いてください この rpld.conf ファイル中の NET_ADDR には Host OS マシンの IP アドレスを指定する必要 2014/02/01 Page7

2013-2014 科学技術振興機構 DEOS プロジェクト があります 以下では Guest OS に /rootkits というディレクトリがあり そこに rpldev.ko, rpld, rpld.conf が置かれているとします 8-2.rpld_receiver の作成 tar.gz ファイル中の rpld-receiver ディレクトリの下のファイルを使用して rpld-receiver を作成します このプログラムは 8-1 で作成した rpld からのデータを受信するプログラムで Host OS 上で動かします $ cd rpld-receiver 8-3.file_rootkit.ko の作成 file_rootkit.ko は異常なファイルメタデータを返すためのカーネル モジュールで Guest OS 上で使用します file_rootkit ディレクトリの下のファイルを使用して file_rootkit.ko を作成します file_rootkit/makefile の MODULES_DIR を Guest OS の kernel のソースコードを参照できるように適切に変更しておいてください $ cd file_rootkit これで file_rootkit.ko が作成されるので Guest OS の /rootkits ディレクトリに転送しておいてください 8-4.process_rootkit.ko の作成 process_rootkit.ko は異常なプロセス情報を返すためのカーネル モジュールで Guest OS 上で使用します process_rootkit ディレクトリの下のファイルを使用して process_rootkit.ko を作成します process_rootkit/makefile の MODULES_DIR を Guest OS の kernel のソースコードを参照できるように適切に変更しておいてください $ cd process_rootkit これで process_rootkit.ko が作成されるので Guest OS の /rootkits ディレクトリに転送しておいてください 8-5. 監視用ユーザープログラムの準備 3 つの監視機構の内 RootkitLibra の使用の際には Guest OS 上で監視用ユーザープログラムを実行する必要があります その監視用ユーザープログラム rtkl-collect のソースコードは rtkl-collect.kvm ディレクトリの下にありますので 以下のようにして rtkl-collect を作成してください $ cd rtkl-collect.kvm これで rtkl-collect が作成されるので Guest OS の適当なディレクトリに転送しておいてください 9. GUI の準備 GUI は python プログラムなので Host OS に python をインストールしておく必要があります また python-wxgtk2.8 と python-matplotlib が必要なので インストールしておいてください $ sudo apt-get install python-wxgtk2.8 python-matplotlib GUI の起動は tar.gz ファイル中の GUI ディレクトリの下のシェルスクリプト (DEMO-B-gui.sh) で行ないます DEMO-B-gui.sh の中の ${TOOL_DIR}/dsm-gui.py と ${RTKL_DIR}/rpld_receiver がそれぞ Page8 2014/02/01

DEOS プロジェクト 2013-2014 科学技術振興機構 れの実行ファイルのパスを適切に参照できるように TOOL_DIR と RTKL_DIR を変更しておく必要があります 10. デモの実行 第 9 章までの作業が済むと GUI を使用するデモが実行可能になります 次のように監視機構を動かすことができます 各監視機構や GUI の詳細は D-Visor86 + D-System Monitor 環境構築手順書 (DEOS-FY2013-VS-02J) も参照してください 10-1.GUI の起動 以下のように QEMU-KVM の monitor プロンプトから dsysmon を起動した後に GUI を起動します QEMU-KVM が異常終了すると /tmp/dsysmonnnnnn (NNNNN は数字 ) というディレクトリが残ってしまうことがあります その場合は GUI が起動できないので 事前に /tmp/dsysmonnnnnn ディレクトリとその下のすべてのファイルを削除しておいてください まず 1 つのターミナルから QEMU-KVM を起動します $ sudo /path/to/start-qemu.sh 次に 別のターミナルから qemu の monitor に接続して dsysmon を起動します ( 第 7 章で説明したように init_levet4_pgt 等のアドレスを dsysmon 起動時に指定することも可能です ) $ sudo nc -U /tmp/qemu-monitor (qemu) dsysmon <<< 入力行 dsysmon start dsysmon init_level4_pgt = 0x1c05000 init_task = 0xffffffff81c0d020 runqueues = 0x137c0 per_cpu_offset = 0xffffffff81cde480 nr_cpu_ids = 0xffffffff81ce0364 さらに 別のターミナルから GUI を起動します $ sudo /path/to/demo-b-gui.sh これで GUI ウィンドウが表示されます DEMO-B-gui.sh の中で dsm-gui.py を起動する際に-c 4 で CPU コアが4 個のあることを指定しています 10-2.FoxyKBD の実行 まず Host OS の上で rpld_receiver を起動してください コマンドのオプションは不要です $ cd /path/to/directory/of/rpld_receiver $./rpld_receiver & 次に Guest OS 上で rpldev.ko カーネル モジュールをロードしてから /rootkits/rpld を実行します どちらも root 権限で実行してください その際に /rootkits/rpld.conf ファイル中の NET_ADDR に Host OS の IP アドレスが設定されていることを確認してください $ sudo insmod /rootkits/rpldev.ko $ sudo /rootkits/rpld & これによって Guest OS 上で /rootkits/rpld がキーボード入力データを取得し そのデータをネットワーク経由で Host OS 上の rpld_receiver に転送するようになります この状態で GUI 上の control fkbd injection の start ボタンを押すと大量のキーボード入力が疑似的に生成されます stop ボタンを押すと キーボード入力の疑似的な生成が止まります GUI 上の左側のグラフは Guest OS と Host OS の間のネットワーク転送量を表示しているので キーボード入力の増加とネットワーク転送量が関連していることが確認でき 何らかの異常な振舞いが起こっていることを検出したことになります 10-3.RootkitLibra の実行 Guest OS 上で file_rootkit.ko カーネル モジュールをロードしてください 2014/02/01 Page9

2013-2014 科学技術振興機構 DEOS プロジェクト $ sudo insmod /rootkits/file_rootkit.ko これによって Guest OS 上で /proc/fhide と /proc/fmodify という仮想的なファイルが作成され 以下のような操作で i-node 番号が InodeNumber であるファイルのメタデータとして異常な値を返すようになります $ echo InodeNumber > /proc/fhide $ echo InodeNumber size > /proc/fmodify /proc/fhide への書き込みでファイルが隠され /proc/fmodify への書き込みで不正なファイルサイズになります 返される異常値は Guest OS 上で ls -li 等のコマンドで確認できます Host OS から NFS で export したディレクトリを Guest OS から以下のように NFS version 3 でマウントしてください NFS version 4 は現在のところサポートしていません NFS マウントされたディレクトリ下のファイルのメタデータを上記の /proc/fhide か /proc/fmodify で異常な値に変更し さらに そのディレクトリで rtkl-collect を実行すると Host OS 側で異常が検出できます $ sudo mount.nfs -o nfsvers=3 192.168.1.26:/aaa /mnt $ echo 123456 > /proc/fhide $ /path/to/rtkl-collect -r /mnt この例では Host OS の IP アドレスが 192.168.1.26 であり Host OS の /aaa ディレクトリを Guest OS 側では /mnt に NFS マウント (version 3) しています echo コマンドで /proc/fhide に 123456 を書き込むことで その /mnt の下の 123456 という i-node 番号のファイルが見えなくなるようにファイルメタデータの変更を行なっています rtkl-collect を実行すると Guest OS 側で見えているファイル情報が Host OS 側に送られ その情報と NFS パケット中のデータを比較することで 異常を検出します この後 Host OS の GUI 上の RootkitLibra の Start ボタンを押すと 5 秒に 1 回ずつ検出された異常が報告されます 10-4.Waseda LMS の実行 Guest OS 上で process_rootkit.ko カーネル モジュールをロードしてください $ sudo insmod /rootkits/process_rootkit.ko これによって Guest OS 上で /proc/phide という仮想的なファイルが作成され 以下のような操作でプロセス ID が PID のプロセスについて正常なプロセス情報を返さないようになります $ echo PID > /proc/phide このプロセスは ps コマンド等でも表示されません この後 Host OS の GUI 上の Lightweight Monitoring Service の Start ボタンを押すと 1 秒に 1 回ずつ検出された異常が報告されます 異常なプロセスの PID が赤く表示されます 異常なプロセス情報は そのプロセスが走行状態にある場合のみ検出可能なので デモの際には 無限ループ等の常に走行状態にあるプロセスを使用する必要があります 11. おわりに QEMU-KVM+D-System Monitor を使用すると Guest OS を外側から監視して 異常な振る舞いを検出することができます 様々な環境で使用されている QEMU-KVM に組み込まれているので 適用領域の拡大が期待されます Page10 2014/02/01