<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title></title>
<!-- metadata -->
<meta name="generator" content="S5" />
<meta name="version" content="S5 1.1" />
<meta name="presdate" content="20060628" />
<meta name="author" content="島本 大輔（M2）" />
<meta name="company" content="" />
<!-- configuration parameters -->
<meta name="defaultView" content="slideshow" />
<meta name="controlVis" content="hidden" />
<!-- style sheet links -->
<link rel="stylesheet" href="ui/original/slides.css" type="text/css" media="projection" id="slideProj" />
<link rel="stylesheet" href="ui/original/outline.css" type="text/css" media="screen" id="outlineStyle" />
<link rel="stylesheet" href="ui/original/print.css" type="text/css" media="print" id="slidePrint" />
<link rel="stylesheet" href="ui/original/opera.css" type="text/css" media="projection" id="operaFix" />
<link rel="stylesheet" href="ui/original/pretty.css" type="text/css" media="projection" />
<!-- S5 JS -->
<script src="ui/original/slides.js" type="text/javascript"></script>

<link rel="stylesheet" href="./original.css" type="text/css" />
</head>

<body>

<div class="layout">
<div id="controls"><!-- DO NOT EDIT --></div>
<div id="currentSlide"><!-- DO NOT EDIT --></div>
<div id="header"></div>
<div id="footer">
<h1>全体ミーティング 06/12/22(Fri)</h1>
<h2>島本 大輔(M2)</h2>
</div>
</div>


<div class="presentation">

<div class="slide">
<h1>全体ミーティング 〜進捗報告〜</h1>
<h2>2006年12月22日（金）</h2>
<h3>島本 大輔</h3>
<h4>修士2年</h4>
</div>

<div class="slide">
<h1>研究内容</h1>
<ul>
  <li><span style="font-size: 110%;">System Service 監視による Windows 向け異常検知</span></li>
  <ul>
    <li>概要
      <div style="border: solid 1px black; font-size: 80%; padding: 10px 10px 10px 10px; color: darkblue; width: 70%;">
        Windows 版システムコールである System Service を利用し、プログラムの振る舞いを監視することにより異常検知を行い、Windows のセキュリティを高めたい。        
      </div>
    </li>
  </ul>
</ul>
</div>

<div class="slide">
<h1>モチベーション1</h1>
<ul>
  <li>現在のセキュリティ対策はパターンマッチが主流</li>
  <ul>
    <li>ウィルス対策ソフトにおけるウィルスの定義ファイル</li>
    <li>ファイアウォールのポートやパケットの設定</li>
    <li>侵入検知システムのルール</li>
  </ul>
  <div style="text-align: center; margin-top: 50px;">
    <span style="background-color: yellow; color: blue;">
    既存の攻撃に対する防御策 ＝ 新種の攻撃に弱い
    </span>
  </div>
</ul>
</div>

<div class="slide">
<h1>モチベーション2</h1>
<ul>
  <li>Windows 向けの研究を行ってみたい</li>
  <ul>
    <li>Windows 向けの（公開された）異常検知研究が少ない</li>
    <li>研究に必要なデータが公開されているものも少ない</li>
    <li>ベンダー内にはあるのかもしれない</li>
  </ul>
</ul>
</div>

<div class="slide">
<h1>どうする？</h1>
<ul>
  <li style="list-style-type: none;">モチベーション1の問題に対する解決案</li>
  <ul>
    <li>静的なデータとのパターンマッチングではなく、プログラムの振る舞いを利用した異常検知を行う</li>
  </ul>
  <li style="list-style-type: none;">＋モチベーション2</li>
  <ul>
    <li>Windows 向けの異常検知手法について研究する</li>
  </ul>
  <li style="list-style-type: none;">＝
    <span style="color: #F33; text-decoration: underline;">
      プログラムの振る舞いを利用した Windows 向け異常検知
    </span>
  </li>
</ul>
</div>

<div class="slide">
<h1>プログラムの振る舞い</h1>
<ul>
  <li>プログラムが動作したときに得られる情報</li>
  <ul>
    <li>プロセスの実行時情報</li>
    <ul>
      <li>[Forrest et. al. '96] のシステムコール</li>
      <li>[Sekar et. al. '01] のプログラムカウンタ</li>
      <li>[Feng et. al. '03] のスタック</li>
    </ul>
    <li>外部へのアクセス</li>
    <ul>
      <li>HDD への書き込み</li>
      <li>パケットの通信</li>
    </ul>
    <li>ログの情報</li>
    <ul>
      <li>syslog のデータ</li>
      <li>Apache のログ</li>
    </ul>
  </ul>
</ul>
</div>

<div class="slide">
<h1>システムコールの監視</h1>
<ul>
  <li>Forrest らの "A Sense of Self for Unix Processes"(1996) が元祖</li>
  <ul>
    <li>正常動作におけるシステムコールの流れを記録し、それを元に異常検知</li>
  </ul>
  <li>利点</li>
  <ul>
    <li>あらゆるプログラムに適用可能</li>
    <li>プロセスの動作を細かく読み取ることが可能</li>
    <li>プロセスの流れを把握することが可能</li>
  </ul>
  <div style="text-align: center; margin-top: 50px;">
    <span style="background-color: yellow; color: blue;">
    Windows へ応用できるのか？
    </span>
  </div>
</ul>
</div>

<div class="slide">
<h1>Windows でのシステムコール</h1>
<ul>
  <li>Windows でのシステムコール ＝ <span style="color: red;">System Service</span></li>
  <ul>
    <li>Windows の根本的な機能を提供</li>
    <li>通常、直接書くことはなく、wrapper関数の中で呼ばれる</li>
  </ul>
  <li>UNIX 系 OS のシステムコールと<span style="color: red;">似ている</span>点</li>
  <ul>
    <li>ファイル、プロセス、スレッド関連のものが存在する</li>
  </ul>
  <li>UNIX 系 OS のシステムコールと<span style="color: red;">異なる</span>点</li>
  <ul>
    <li>まったく異なる機能のものが存在する</li>
    <li>System Service の方が数が多い（WinXP SP2 で 951個）</li>
  </ul>
</ul>
<div style="margin-top: 50px;">
  <span style="color: blue; text-decoration: underline;">
    <a href="../documents/xpcalllist.xls">System Service のリスト（xls）</a>
  </span>
</div>
</div>

<div class="slide">
<h1>System Service の監視手法</h1>
<ul>
  <li>カーネルモードへ遷移する瞬間（interrupt）を intercept（hook）する</li>
  <ul>
    <li>Windows 2000 以前ではソフトウェア割り込み（int 2e）</li>
    <li>Windows XP 以降は sysenter 命令</li>
  </ul>
</ul>
<div style="text-align: left; padding: 5px 20px 10px 20px; margin: 50px 0px 0px 50px; width: 500px; border: black 1px solid;">
  <div style="color: blue;">sysenter 命令</div>
  <div style="margin-left: 20px; font-size: 70%;">システムコール用のカーネルモードへの遷移命令。インストラクションポインタやスタックポインタの書き換えを行ってくれる。</div>
</div>
</div>

<div class="slide">
<h1>動作図（監視前）</h1>
<div style="text-align: center;">
  <img src="zentai_061222/withoutads.png" />
  <div style="font-size: 70%;">SSDT (System Service Descriptor Table) ： System Service のアドレスが格納してある</div>
</div>
</div>

<div class="slide">
<h1>動作図（監視後）</h1>
<div style="text-align: center;">
  <img src="zentai_061222/withads.png" />
</div>
</div>

<div class="slide">
<h1>実装</h1>
<ul>
  <li>デバイスドライバ interceptor.sys</li>
  <ul>
    <li>System Service の ID をバッファに記録</li>
    <li>別スレッドが定期的にバッファ内のデータをファイルへ書き出す</li>
    <li>C とインラインアセンブリで実装</li>
  </ul>
  <li>GUI プログラム interceptor_gui.exe</li>
  <ul>
    <li>デバイスドライバの開始、停止などの操作</li>
    <li>C++ で実装</li>
    <li>GUI のライブラリとして WTL (Windows Template Library) を利用</li>
  </ul>
</ul>
</div>

<div class="slide">
<h1>改善点</h1>
<ul>
  <li>System Service の記録を落としていた可能性が高い</li>
  <ul>
    <li>以前までの記録（および実験結果）には誤りがあった可能性大</li>
    <li>記録の書き出し時にプロセスをサスペンドさせるようにした<br />
        （NtSuspendProcess, NtResumeProcess を利用）
    </li>
  </ul>
  <li>ファイルへの書き出しをカーネルモードから行うように変更</li>
  <ul>
    <li>以前はGUI（ユーザモード）のメモリへコピーしてから書き出していた</li>
    <li>無駄なコピーがなくなり、高速化（したはず）</li>
  </ul>
</ul>
</div>

<div class="slide">
<h1>評価</h1>
<ol>
  <li>普段利用しているプログラムのデータを取得（約1時間）</li>
  <ul>
    <li>例：Firefox, IE, Google Video, Quicktime, Winamp, Adobe Reader, Explorer, etc.</li>
  </ul>
  <li>データから各 System Service の5秒毎の発生回数の平均を計算</li>
  <ul>
    <li>平均の計算は Python スクリプトで処理</li>
  </ul>
</ol>
<div>
  <span style="margin-left: 100px;">
    <a href="../devel/interceptor/logs/callcount.xls" style="text-decoration: underline;">
    結果のグラフ（xls）
    </a>
  </span>
</div>
</ul>
</div>

<div class="slide">
<h1>結果より</h1>
<ul>
  <li>何回か実行しても同じようなグラフになっている例が多い</li>
  <ul>
    <li>プログラム毎の特徴を抽出できる可能性</li>
  </ul>
  <li>プログラムによって、極端に多く発生する System Service が存在する</li>
  <ul>
    <li>Firefox の NtUserValidatehandleSecure (1248)</li>
    <li>Quicktime の NtQueryPerformanceCounter (00A5)</li>
  </ul>
  <li>同じ種類のプログラムでも、大きく異なる結果になる</li>
  <ul>
    <li>IE と Firefox</li>
    <li>Quicktime と Google Video</li>
  </ul>
</ul>
</div>

<div class="slide">
<h1>今後の予定</h1>
<ul>
  <li>目標をデータの取得・解析中心に変更</li>
  <ul>
    <li>解析するプログラムの種類（分野）を増やす</li>
    <li>ウィルス、ワーム、スパイウェアなどの分析</li>
  </ul>
  <li>論文を書く</li>
</ul>
</div>

<div class="slide">
<h1>Fin</h1>
<div style="text-align: center; font-size: 1.5em; margin-top: 100px;">
  以上です。<br />
  ご清聴ありがとうございました。
</div>
</div>

<!--
<div class="slide">
<h1></h1>
<ul>
  <li></li>
  <li></li>
</ul>
</div>

  <div style="text-align: center; margin-top: 50px;">
    <span style="background-color: yellow; color: blue;">
    
    </span>
  </div>
-->

</body>
</html>
