Download presentation
Presentation is loading. Please wait.
1
めんどうくさくない Bugハンティング Jul Yosuke HASEGAWA
2
自己紹介 はせがわようすけ ネットエージェント株式会社 株式会社セキュアスカイ・テクノロジー 技術顧問
Microsoft MVP for Consumer Security Oct セキュリティキャンプ Webセキュリティクラス講師
3
これまでに調べた脆弱性 Webブラウザ、Webアプリケーションを中心にいろいろ…
CVE XSS of Mozilla Firefox CVE XSS of SquirrelMail CVE XSS of Internet Explorer CVE XSS of Mozilla Firefox CVE XSS of Namazu CVE XSS of Movable Type CVE Cross-origin data disclosure of Mozilla Firefox CVE Cross-origin data disclosure of Internet Explorer CVE XSS of Mozilla Firefox CVE XSS of Google Search Appliance CVE XSS of Sage CVE XSS of Mozilla Firefox
4
質問 Question
5
質問 : Web技術、好きですか? Q. Do you love web technologies?
6
質問 : Web技術、好きですか? Q. Do you love web technologies?
クロスサイトスクリプティング 強制ブラウズ 書式文字列攻撃 リモートファイルインクルード SQLインジェクション LDAPインジェクション バッファオーバーフロー パストラバーサル CSRF 質問 : Web技術、好きですか? Q. Do you love web technologies? セッションハイジャック OSコマンドインジェクション オープンリダイレクタ セッション固定攻撃 DoS メモリリーク HTTPレスポンス分割 HTTPヘッダインジェクション XPathインジェクション
7
Web技術、好きですか? 「はい」に挙手した人 かなり打たれ強い or 攻撃者
8
そもそもバグハンターって?
9
バグハンター(適当な想像) バグハンターってこんな人だ バグハントの方法 いつもバイナリエディタを開いてる デバッガは友達
電卓立ち上げたら勝ちだと思ってる バグハントの方法 とにかくコードを追う ファザーで叩く 見つけるための根気と執念
10
バグハンター ≒ バイナリアン? 否
11
バイナリもWebもバグハンターの資質は変わらない
バグハンター(適当な想像) バイナリ系バグハンター いつもバイナリエディタを開いてる デバッガは友達 電卓立ち上げたら勝ちだと思ってる バグハントの方法 とにかくコードを追う ファザーで叩く 見つけるための根気と執念 Web系バグハンター いつもローカルHTTPプロキシを開いてる IEは友達 alert立ち上げたら勝ちだと思ってる バグハントの方法 とにかく入出力を追う スキャナで叩く 見つけるための根気と執念 バイナリもWebもバグハンターの資質は変わらない
12
とにかく(コード|入出力)を追う 見つけるための根気と執念
だいぶめんどくさい!
13
「未来を予測する最善の方法は、 それを創りだすことだ」
バグ探しめんどくさい! 執念深く探すのはだいぶめんどくさい 探さずにバグを見つける方法はないものか? 「未来を予測する最善の方法は、 それを創りだすことだ」 アラン・ケイ
14
脆弱性も「創り」だしちゃえばいいんだ!!!
15
脆弱性を創りだす 新しい脆弱性を「創りだす」 めんどくさい解析とかイヤだ 手より頭を使う
実装のミスではなく、既存の仕様・機能を最大限悪用できる方法を考える 新しい攻撃手法を考える 昨日まで安全だったソフトウェアがある日とつぜん軒並み危険になる
16
新しい脆弱性を創りだす 既存の機能を最大限悪用できる方法、新しい攻撃手法 Unicode円記号によるパストラバーサル
UTF-7によるXSS(IE) E4X+WebWorkersによるデータ漏えい(Firefox)
17
Unicode円記号による パストラバーサル
18
円記号によるパストラバーサル Unicodeにはパス区切りの∖(U+005C)とは別に\(U+00A5)が定義
UnicodeからShift_JISへの変換でどちらも0x5Cに置き換わる いろいろできるんじゃね?
19
円記号によるパストラバーサル Unicodeの入力を持ちながら内部はShift_JISで処理
NTFS/FAT32上のファイル名 アンチウイルスでDoS、検索エンジンのインデックサでトラバーサルなど メーラの添付ファイル 一時展開するディレクトリを超えて展開
20
円記号によるパストラバーサル
21
円記号によるパストラバーサル
22
UTF-7によるXSS
23
UTF-7によるXSS 初出: 2005年12月、Googleを対象としたXSSをYair Amit氏が報告
24
UTF-7によるXSS 文字コードをUTF-7と誤認することによるXSS +ADw-script+AD4-alert(1)+ADw-script+AD4- 当時の対策「charsetをつける」 文字コードを誤認させるのが目的ならcharsetついてても攻略できるんじゃね?
25
UTF-7によるXSS charsetついてても
IEが認識できないcharsetならXSS可能 Content-Type: text/html;charset=cp932 <meta>より前にニセの<meta>吐いてXSS可能 <title>+ADw-/title+AD4APA-meta http-equiv+AD0-content-type content+AD0-text/html+ADs-charset=utf-7+AD4-</title>
26
UTF-7によるXSS GoogleのあちこちでXSS可能でした www, news, books, Appliance… (今ならがっぽり報奨金もらえたのに…)
27
E4X+WebWorkerによるデータ漏えい
28
E4X + Web Workers = データ漏えい
ECMAScript for XML (ECMA-357) JS内に直接XMLを記述可能 Firefox 15以前、ActionScriptでサポート
29
E4X + Web Workers = データ漏えい
ECMAScript for XML (ECMA-357) JS内に直接XMLを記述可能 Firefox、ActionScriptでサポート var s = <mail> <subject>Test mail</subject> <from>Yosuke HASEGAWA</from> </mail> ; alert( s.subject );
30
E4X + Web Workers = データ漏えい
XML内にJSの記述もできる。 XML内の {....} はJavaScriptとして動作
31
E4X + Web Workers = データ漏えい
XML内にJSの記述もできる。 XML内の {....} はJavaScriptとして動作 var s = <mail> <subject>Test mail</subject> <from> { alert(1) } </from> </mail> ; alert( s.subject ); { alert(1) }
32
E4X + Web Workers = データ漏えい
E4XはJavaScript 外部から読み込み可能
33
E4X + Web Workers = データ漏えい
var s = <mail> <subject>Test mail</subject> </mail> ; <script src="e4x.js"></script> <script> alert( s.subject ); </script>
34
E4X + Web Workers = データ漏えい
これはJavaScript? HTML? HTMLでもありJavaScriptでもある <div> { alert( "Hello, E4X World." ); } </div> Hello, HTML World.
35
E4X + Web Workers = データ漏えい
攻撃者がHTML内の2か所に文字列を挿入可能な場合、その間のメッセージが外部から取得可能 (以下のコードは現在のFirefoxではそのままでは動作しません) <div>{ foo( <span>秘密のメッセージ部分</span> ) } </div> <script> function foo( s ){ alert( s ); } </script> <script src="target.html"></script>
36
E4X + Web Workers = データ漏えい
FirefoxでのE4Xによるデータ漏えい対策 XML宣言、DOCTYPE宣言のついたXML,HTMLはE4Xとして解釈不可 script srcとして読み込まれたJSが単一のXMLオブジェクトのときはエラーとしてJSを実行しない 泥臭い… <div>{ foo( <span>秘密のメッセージ</span> ) } </div> // JavaScriptとして動作しない var s = <div>{ foo( <span>秘密のメッセージ</span> ) } </div>; // JavaScriptとして動作する
37
E4X + Web Workers = データ漏えい
JavaScript待望のマルチスレッド機構 バックグランドで重い処理を実行 DOMとは切り離されている
38
E4X + Web Workers = データ漏えい
var worker = new Worker( "worker.js" ); worker.onmessage = function( event ) { ... }; worker.postMessage( msg ); メイン側 onmessage = function( event ){ /* 時間のかかる処理 */ postMessage( msg ); // メイン側に通知 } worker.js
39
E4X + Web Workers = データ漏えい
new Workers( src ) は同一オリジンのみ (プロトコル、ホスト、ポートが一致すること) Worker内からは間接的に他オリジンのJSも利用可能 var worker = new Worker( "worker.js" ); // OK var worker = new Worker( " ); // NG メイン側 importScripts( " ); // OK worker.js
40
E4X + Web Workers = データ漏えい
FirefoxでのE4Xによるデータ漏えい対策 script srcとして読み込まれたJSが単一のXMLオブジェクトのときはエラーとしてJSを実行しない …というのが、Web Workers のimportScripts では効いていなかった E4XとWeb Workersを組み合わせると外部サイトのHTML内のデータを盗み見ることが可能だった <div>{ foo( <span>秘密のメッセージ</span> ) } </div> // JavaScriptとして動作しない var s = <div>{ foo( <span>秘密のメッセージ</span> ) } </div>; // JavaScriptとして動作する
41
E4X + Web Workers = データ漏えい
FirefoxでのE4Xによるデータ漏えい対策 E4XとWeb Workersを組み合わせると外部サイトのHTML内のデータを盗み見ることが可能だった // 罠サイト: WebWorkersからJSとしてHTMLを読む var worker = new Worker( “ ); // JavaScriptとして動作する <div>{ foo( <span>秘密のメッセージ</span> ) } </div>
42
E4X + Web Workers = データ漏えい
単一XMLオブジェクトが読み込めない 仕様通りの実装だと脆弱性を生む いったんは収まったがWeb Workersの実装に伴い再度オープン 枯れていない新しい機能は狙い目 MFSA で修正済み
43
E4X + Web Workers = データ漏えい
ちなみに Mozilla Security Bug Bounty Programの対象なので賞金もらいました :-)
44
$500の小切手!! (今なら$3000なのに)
45
まとめ
46
まとめ めんどくさくない方法でバグハント! 脆弱性を創りだす 報奨金は報告のタイミング次第 個別の脆弱性を丹念に探すのではなく
新しい攻撃手法を創りだし それに合致するソフトウェアの実装を探す 報奨金は報告のタイミング次第 うまくやればバグハンティングで暮らせる時代!
47
質問 @hasegawayosuke
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.