LINE DM 201609
by
masaakichida
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
おわり