OSセキュリティチュートリアル
Upcoming SlideShare
Loading in...5
×
 

OSセキュリティチュートリアル

on

  • 6,549 views

 

Statistics

Views

Total Views
6,549
Slideshare-icon Views on SlideShare
6,393
Embed Views
156

Actions

Likes
18
Downloads
43
Comments
0

3 Embeds 156

https://twitter.com 154
http://b.hatena.ne.jp 1
http://s.deeeki.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    OSセキュリティチュートリアル OSセキュリティチュートリアル Presentation Transcript

    • チュートリアル 2014/Jan/8 / / OS周りのセキュリティ対策 須崎有康
    • Quiz セキュリティ技術と実装名を関係づけよ。 セキ リテ 技術と実装名を関係づけよ 注:1対1対応でないよ。 • • • • • • • • DEP ASLR Code Signing Code Signing Sandbox Access Control Encrypt Storage Encrypt Storage Integrity Check Trusted Computing • • • • • • • • SELinux Tripwire Ti i Exec Shield W^X TrouSerS T S S BitLocker Jail PAX
    • Quiz セキュリティ技術と実装名を関係づけよ。 セキ リテ 技術と実装名を関係づけよ 注:1対1対応でないよ。 • • • • • • • • DEP ASLR Code Signing Code Signing Sandbox Access Control Encrypt Storage Encrypt Storage Integrity Check Trusted Computing • • • • • • • • SELinux Tripwire Ti i Exec Shield W^X TrouSerS T S S BitLocker Jail PAX
    • OSのセキュリティ 例:Windows8の多層防衛 例 Wi d 8の多層防衛 システム境界 の対策 検知と 実行制御 脆弱性対策 リソース 保護・管理 RM MS Program m 領域 Secure b boot BitLock ker 「マイクロソフトにおけるサイバー攻撃への対処」より http://www.soumu.go.jp/main_content/000264302.pdf OS保護 System m 領域 域 EFS UAC Heap Protection P アプリケーション 整合性レベ ベル HE ASLR 脆弱性 初期設 設定による対 対策 Windows Firewall AppLock ker No Autorun Windows De W efender 保護された ビュー DEP Smart Screen 権限管理
    • バイナリに対する攻撃・防御の歴史 攻撃技術 Execute Code  E ec te Code on  the Stack Rturn‐To‐Libc A R T Lib Attack k 既に存在する実行コードを 使うだけなので、DEP防ぐこ とができない スタックに攻撃コード を置き、実行 1980 既存防御技術 Compiler OS Reuse to Unsafe Reuse to Unsafe Code Gadgets 1990  Type  Checking 総当たり攻撃やアド レス漏えいを利用し てASLRを回避できる (Return Oriented  Programming: ROP) 2000 2010 Stack  Guard Data  Execution  Prevention  P ti (DEP) Address Space  Layout  Randomization R d i ti (ASLR)  Moving Target Defense & Instruction Set  Randomization 次の防御技術 Hardware H d AMD NX bit Intel DX bit 生命の防衛技術を模したセキュ 生命の防衛技術を模したセキ リティ(多様性, 自己修復,免疫) (産総研の萌芽研究 「生命型セ キュリティ」 H25- )
    • DEP: Data Execution Prevention データ実行防止 • スタックやヒープ領域等にコードを置き、実行する攻撃を防ぐ。 • スタックやヒープは“通常”はコードが置かれることがないので、この メモリ領域を実行禁止にする。 • 物理メモリ自体には属性がない。メモリの属性は仮想メモリで使う が ページテーブルにあるが、Read/Write, Supervisor/User, Present bit,  Dirty bit などで実行の禁止が無かった。(今はある。後述) Dirty bit などで実行の禁止が無かった (今はある 後述)
    • DEPの実装 • ソフトウ アでの実装 ソフトウェアでの実装 – エミュレーションでの実装(PAX) – x86のコードセグメント境界を利用 (ExecShiled) • ハードウェアを使った実装 ハ ドウェアを使った実装 – SPARC, Alpha, PowerPCでは古くから対応。Intel系で は2000年以降。 は2000年以降 • Intel Itanium Merced 2001以降 • Intel DX (eXecute Disable)bit:Pentium4 Prescott 2004/1 以降 • ADM NX (N X t ) bit AMD64 2003/9以降 ADM NX (No eXecute) bit : AMD64 2003/9以降
    • DEPの実装例 • OpenBSD – W^X (2003年5月1日) 読み方"Write XOR Execute" W X (2003年5月1日) 読み方 Write XOR Execute • エミュレーションor NX bitを使う • Linux – “PAX” (2000年10月1日) • エミュレーションor NX bitを使う – “Exec Shield” by Ingo Molnar(2003年5月2日) • x86のコードセグメント境界を利用 • NX bitを使うカーネルパッチもあり • Windows – Wi d Windows XP Service Pack 2とWindows Server 2003  XP S i P k 2とWi d S 2003 Service Pack 1 (2004年8月6日)
    • DEPの問題 問題 • Self‐modifying code(自己書き換えコード)に対応できない – Code  obfuscation(難読化)では必要なものがある – GCCで使われてる「トランポリン」(動的に生成したコードを経由 する)は使えない。 – 自己書き換えによる最適化 • cpuid命令の結果からコードを書き換える – http://mkosaki.blog46.fc2.com/blog‐entry‐104.html 「alternative マ クロと自己修正コード」より クロと自己修正コ ド」より – 元を正せばマルチプロセッサ同期命令などという基本的な命令をP6,  Pentium4などという超最近に追加するIntelが悪いのが、素直にコン パイルオプションなぞにしてしまったら、ディストリビュータはきっと Pentium4をOFFにしたGenericカーネルを配布しだして遅くなるし条件 分岐命令なんぞいれた日にゃあ目も当てられない速度になるのは 請け合い。ってことで、かなり強引な手法がとられている。
    • DEPの回避方法 Memory Dual mapping M D l i • Matt “skape” Miller, Using dual‐mappings to evade automated  unpackers, 2008 より。 • 2つの仮想メモリページを1つ物理メモリページに割り当てる – Executable mapping • コードが実行される。Debugger はここのみ監視 DEP, Debugger の監視対象は コ ドのみ コードのみ Virtual Vi t l Physical – Editable mapping • Packerとして働き、コードを改 として働き ドを改 変(Self‐modification)する Code C d Executable • DEP(Data Execution Prevention) DEP(Data Execution Prevention) を回避して、コード改変 Data Editable データとして実 行コードを書き 換え
    • DEPを回避する攻撃 ROP: Return Oriented Programming • 攻撃 攻撃コードはスタック上の置 ドは タ ク上の置 かれて実行されてきたが、ス タック上でコ ド実行できな タック上でコード実行できな いような仕組み(DEP:Data Execution Prevention)が開発 された。 • これを回避する攻撃として既 存のコードを組み合わせて 存 ドを組み合わせ 攻撃コードを作成するROP:  Return Oriented  Return Oriented Programmingが出てきた。 プログラムを書き換 えてやろう 対策技術 スタックメモリが無防 備だぞ! スタックをオーバフローさ せて攻撃コードを書き込 む スタック上ではプログラ ムを実行できなくする NX (no execute)モード Return oriented programming 攻撃コード スタック上のリターンアドレスを変 えて、正常コードの断片を呼び出 す順番を変える 正常コード comp read write copy
    • Return Oriented Programming Return Oriented Programming • • Bufferover Flow等でスタックを破壊する。 メモリ上にあるRET命令の直前のコードを集めてプログラムを作る。スタッ ク上ではRETの直前のアドレスに移るようにスタックフレームを改ざんする。 スタック リターンアドレス XXXX リタ ンアドレス リターンアドレス YYYYY リタ ンアドレス リターンアドレス ZZZZ スタックを攻撃 スタックフレームのリター ンアドレスを積みなす メモリ上のコード XXXX MOVE  A,B RET … YYYYY ADD A,C MUL A,B MUL A B RET … ZZZZ MOVE B,C MOVE B C RET ROPで作られた 攻撃コード 左を実行する と右の攻撃 コードを実行 するのと同じ MOVE  A,B ADD A,C MUL A,B MUL A B MOVE B,C
    • ASLR • ROP自体はプログラムの起動時にコードをランダムに配置 するASLR: Address Space Layout Randomization により減 少された。 スタック リターンアドレス XXXX リタ ンアドレス リターンアドレス YYYYY リタ ンアドレス リターンアドレス ZZZZ スタックを攻撃 スタックフレームのリター ンアドレスを積みなす メモリ上のコード XXXX‐8192 MOVE  A,B RET … ADD A,C YYYYY‐8192 MUL A,B RET … ZZZZ‐8192 MOVE B,C RET ASLRではメモリロードにアドレスを ランダムに配置(ずらす)することで ROPを意味のないものにする。
    • ASLRのイメージ S のイメ ジ • 仮想メモリ内の位置を移動(全体がランダムにならない) – また アドレスビ トの変えられる位置は多くない また、アドレスビットの変えられる位置は多くない • 下位12bit (4KB)はページで固定。 • 上位はカーネル空間、ユーザ空間で切り分けている。 – Linux 32bitの場合、上位1GBがカーネル、下位3GBがユーザ。 0xFFFFFFFF カーネル 1回目実行 2回目実行 3回目実行 0xC0000000 コード ユーザ ユ ザ ヒープ プ スタック コード ヒ プ ヒープ スタック コード ヒープ 開始アドレス が変わるのみ が変わ スタック 0x00000000 32ビットASLRでは数ビットを変えるのみでエントロピーを確保できない。
    • ASLR のランダムさの程度 • 「Windows Server 2012 R2 マイグレーション ガイド」より。 http://download.microsoft.com/download/0/7/B/07BE7A3C‐07B9‐4173‐B251‐6865ADA98E5D/WS2012R2_MigrationGuide_v2.0.docx • 例:8 ビットの場合、256 通りの中から ベース アドレスが決まる メモリ領域 Windows 7 および 2008 R2 Windows 8 および Windows Server 2012 以降 32 ビットプロセス 64 ビット プロセス 32 ビット プロセス 64 ビット プロセス 64 ビット プロセス (HE 有効) 0 (ランダム化 なし) 0 (ランダム化 なし) 8 8 24 スタック 14 14 17 17 33 ヒープ 5 5 8 8 24 0 (ランダム化 なし) 0 (ランダム化 なし) 8 17 17 PEB、TEB 4 4 8 17 17 EXE イメージ 8 8 8 17 * 17 * DLL イメージ 8 8 8 19 * 19 * 非 ASLR DLL イメー イメ ジ (オプト イン) 0 (ランダム化 なし) 0 (ランダム化 なし) 8 8 24 ボトム アップの割り当 て (オプト イン) プ トップ ダウンの割り当 て (オプト イン) 表: Windows 7 と Windows 8 の ASLR の⽐較、数字はエントロピーのビット数 * ベース アドレス 4 GB 未満の 64 ビット EXE には 8 ビット、64 ビット DLL には 14 ビットのエントロピーが適⽤される
    • ASLRの課題 • バイナリ自体をPIC(Position Independent Code)にする 必要あり。 • 絶対アドレスを指定されている古いバイナリはASLRを 活用できない。 ASLRはロ ド時のみに配置を 回変えるので、 度ア • ASLRはロード時のみに配置を一回変えるので、一度ア ドレスが漏えいしたら意味がない。 – ApacheなどForkのみでプロセスを多く派生するものは危険。 • Execすればよいが、多くは行っていない。 – Re‐Randomization の必要性 Re Randomi ation の必要性 • タネンバウム研のUSENIX‐SEC12論文 – Enhanced Operating System Security Through Efficient and Fine‐grained  Address Space Randomization Add S R d i ti
    • Windowsのセキュリティ向上 XP SP0 XP XP2 Vista, 7 Win 8 DEP(software) × ○ ○ ○ DEP(hardware) DEP(h d ) × ○ ○ ○ ASLR(stack) × × ○ ◎ ASLR(module) × × ○ ◎ ASLR(heap) × × × ○ カーネル保護 (ASLR) × × △ ○ FFRI 「 Windows 8 – 脆弱性緩和機能の強化 」より https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC0QFjAA&url=http%3A%2F%2Fwww.ffri.jp%2Fassets%2Ffiles%2F monthly_research%2FMR201209_Windows8_Exploit_Mitigation.pdf&ei=t2DLUuPoL4SlkwXHsIHgCg&usg=AFQjCNGIBa1L4fHZrw7qHQhVRQWTYf2aTA&sig 2=btFLcMsnvqnEd5DyzKNMCw&bvm=bv.58187178,d.dGI
    • ASLRの次 Moving Target Defense Moving Target Defense • Moving Target Defense Moving Target Defense 既存のシステムは同じ 存 じ バイナリを使うので攻 撃対象になりやすい。 – 現在の攻撃は全てのマシンで同じバ イナリが使われているため、既存 イナリが使われているため 既存 コード再利用攻撃を受けやすい。 – 個々のマシンで異なるバイナリにす ることで、攻撃を難しくする。(多様性) バイナリ自体がシステ ム毎に変化することで 攻撃を回避する。 • Instruction Set Randomization Instruction Set Randomization • 実行毎にバイナリコードを変える。 • この数年で論文が出てきている コードもある この数年で論文が出てきている。コ ドもある。 • • • Minestone [ACSAC’10] http://nsl.cs.columbia.edu/projects/minestrone/isr/ Binary Stirring[CCS’12,テキサス大ダラス] y g[ , ] ORP [IEEE SSP12,コロンビア] http://nsl.cs.columbia.edu/projects/orp/
    • ISR: Instruction Set Randomization • 既存のバイナリコードを等価な命令で置きかえること でROPによるコ ド再利用を防ぐ。 でROPによるコード再利用を防ぐ。 今までの方式 ディスク div   b / 2 mul  a x 2 mul  a x 2 xor a, a ret ISR 実行 (ローダ) div   b / 2 mul  a x 2 mul a x 2 mul  a x 2 xor a, a ret メモリ アドレス コード領域 同じ命令が実 行される div   b / 2 mul  a x 2 mul  a x 2 xor a, a ret 成功 メモリ内容 が全く違う ディスク div   b / 2 mul  a x 2 mul  a x 2 xor a, a xor a a ret 実行 コード変換 div   b / 2 l mul  a x 2 mul  a x 2 xor a, a ret メモリ アドレス コード領域 等価な命令に置き 換えられる shift l a add a+a Add a+a mv 0, a 0 jump 攻撃者が同じ コードを入手、 コ ドを入手 解析、攻撃 失敗 攻撃者が同じ コードを入手、 解析、攻撃 • 問題点:セマンティックが変わらない場合 ROPに効 問題点:セマンティックが変わらない場合、ROPに効 果が無いのでは?評価が重要。
    • 外部の動向 Moving Target Defense • NISC「米国における情報セキュリティ研究 開発戦略の 動向について」2012/06より
    • まとめ • OS内のセキュリティ強化のアプローチは基本 キ 強 プ 基本 的に2つ – それしか使えないか • DEP S db A DEP, Sandbox, Access Control, Code signing C t l C d i i – でたらめにするか • ASLR, ISR (Instruction Set Randomization)