Slide 1

Slide 1 text

DEFCON CTF参戦記 千田 雅明

Slide 2

Slide 2 text

自己紹介 • 千田 雅明 • 得意な分野 • リバースエンジニアリング • バイナリ解析 • 脆弱性を探すこと • 確か2008年ころからCTFに参加し始めた • defcon ctf 2011, 2012, 2014, 2016の本戦に参加

Slide 3

Slide 3 text

DEFCON CTF • DEFCON • 世界最大のセキュリティカンファレンス • 毎年7〜8月にラスベガスで開催 • 2016年で24回目 • http://www.defcon.org • DEFCON CTF • セキュリティの技術を競う競技 • 予選の上位10チームほどが本戦に参加可能 • 別の大会からのシード権もあり、数チーム参加 (日本のSECCONなど) • 本戦が攻防戦形式 • https://legitbs.net

Slide 4

Slide 4 text

(通常の)攻防戦形式のCTF • 特徴 • 各チーム毎にサーバーが与えられ、実際に攻撃し合う • サーバーでは脆弱なサービスが稼働 • DEFCON CTFではバイナリ解析が必要な問題のみでる • 参加者の同士でサーバーを実際に攻撃することから攻防戦と呼ばれる • DEFCON 2016の攻防戦は形式が違った => 後述

Slide 5

Slide 5 text

攻撃時の流れ • バイナリを解析、脆弱性を探す • 逆センブル、逆コンパイル • ツールでfuzzing • stack overflow, heap overflow, Use After Free, ... • 攻撃コードを作成 • RoP (Return-Oriented Programming) • shellcode (動くなら) • 他のサーバーに侵入 • flagファイルを読み書き • 特に書き込みは得点が高い

Slide 6

Slide 6 text

防御時に行う事 • 脆弱性修正パッチを当てて根本的に対処 • 一般的な方法 • 包括的な緩和策を行い攻撃を無効化 • 別のOSで動かす • pythonなど別の言語で再実装 • libc.soを置き換える • heap構造を変える • stack量を変える • stackにカナリアを挿入 • qemuやptraceなどでsyscallをフック • flagファイルの読み書きをフック

Slide 7

Slide 7 text

その他 • 攻撃パケットの解析 • 脆弱性を特定に利用 • 攻撃パケットを再送信 • サーバー侵入後 • パッチ済みのバイナリ持ってくる • サーバー上の設定ミスを探る

Slide 8

Slide 8 text

今年のDEFCON CTF • DEFCON CTF 2016 • 2016/8/5 ~ 8/7 • Cyber Grand Challenge (CGC) 優勝のプログラムが参加 • DEFCON CTFもCGCのルールに従う • Cyber Grand Challenge • 今年のDEFCONのイベントの1つ • 全自動で攻防戦を行うプログラム同士が戦う競技 • 3年前からプログラムが開始 • DEFCON 2016で決勝(予選を勝ち抜いた7チーム) • ルールや仕様が細かく決まっている • 優勝賞金 2億円 • ForAllSecureチームの "Mayhem" が優勝 • https://cgc.darpa.mil/

Slide 9

Slide 9 text

CGC簡単なルール • 数分ごとに1ラウンド • ラウンド中に以下を行える • Challenge Binariy (CB)の提出 => パッチ済みのバイナリのこと • Proof of Vulnerability (PoV)の提出 => 脆弱性の攻撃コードのこと • ラウンド後に以下が他のチームに公開される • CB • 通信パケット

Slide 10

Slide 10 text

CGCスコアリング • スコア • Availability Score、Security Score、Evalution Scoreの乗算 • 3つのうちどれかが0になると0点 • CB提出時にSecurity Scoreが0点になる可能性があるところが曲者 • Availability Score • 以下2つの小さい方を採用 • 1. ファイルサイズやメモリ使用量が多くなると減点 • 2. テストケースに失敗すると減点 • Security Score • 脆弱性を突かれると減点 • ただし、CBを入れ替えた場合に脆弱性を1つ以上防がないと0点 • Evalution Score • 提出したPoVが脆弱性を突けると証明すると2点、しないと1点

Slide 11

Slide 11 text

通常の攻防戦との違い(1) • 特殊な環境 • 専用syscall • 専用libc • ASLRなし • stack RWX • x86 32bit • 完全に脆弱性をついてサーバーをコントロールする必要はない • PoV-type1: 実行アドレスのコントロールを証明 • PoV-type2: 特定のメモリ上のflagの読み出し(4byte)を証明

Slide 12

Slide 12 text

通常の攻防戦との違い(2) • あらかじめルールが決まっている • ツールを作りこんだ方が有利 • CGCに参加している人がいるチームもあった • パッチにリスクがある • CBの内容が次のラウンドでバレる • バックドアを仕掛けるチームもあった • CBを入れ替え時にペナルティがある • サーバーを管理しなくて良い • DoSの対応が必要ない

Slide 13

Slide 13 text

最終スコア 結果:15チーム中8位 http://legitbs.net/ より 1. PPP 113555 2. b1o0p 98891 3. DEFKOR 93539 ... 8. binja 80812 ... 15. Mayhem 72047

Slide 14

Slide 14 text

トラブル • Mayhemがpcapをトレースできるようになったのは最終日 • 参加者から見えるPerformanceが間違っていた。(数倍〜数十倍悪化に見えた) • 1ラウンド5分のはずがサーバーの処理延滞で10分程度に

Slide 15

Slide 15 text

個人的な感想 • mitigationが効果的な事への疑問 • stackのカナリア、ASLRなどの対策が行われているのは現在では普通の事 • それらをペナルティにかからないように最小コードで再実装する必要に迫ら れるのは何か違う • 一定のルールで競えるのは良い • 実践?それともゲーム?何を評価? • 出題されたバイナリが複雑なのは良い • C言語compilerなど複雑なものもあった

Slide 16

Slide 16 text

CGCやCTFに興味がある人へ • CODE BLUEでCGC 優勝チームの人の講演が行われる • 2016/10/20 – 21 • http://codeblue.jp/2016/

Slide 17

Slide 17 text

関連ドキュメントなど • CBC関連ドキュメント • http://cgc-docs.legitbs.net/ • https://github.com/CyberGrandChallenge/cgc-release-documentation • https://cgc.darpa.mil/ • CTFの過去の問題など • https://github.com/legitbs • https://github.com/ctfs/ • CTFの開催予定表 • https://ctftime.org/ • ※今回のDEFCON CTFの各チームの実際のCBなどのデータも公開される予定

Slide 18

Slide 18 text

おわり