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