Presentation is loading. Please wait.

Presentation is loading. Please wait.

Nov 14 2013 Yosuke HASEGAWA #owaspjapan. OWASP Japan Local Chapter Meeting #8 #owaspjapan 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft.

Similar presentations


Presentation on theme: "Nov 14 2013 Yosuke HASEGAWA #owaspjapan. OWASP Japan Local Chapter Meeting #8 #owaspjapan 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft."— Presentation transcript:

1 Nov 14 2013 Yosuke HASEGAWA #owaspjapan

2 OWASP Japan Local Chapter Meeting #8 #owaspjapan 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft MVP for Consumer Security Oct 2005 -  http://utf-8.jp/

3 お知らせ announcement

4 OWASP Japan Local Chapter Meeting #8 #owaspjapan HTML5 調査報告 from JPCERT/CC

5 オープンリダイレクト Open redirect

6 OWASP Japan Local Chapter Meeting #8 #owaspjapan Open redirect オープンリダイレクト  本来はWebサイト内でのリダイレクト機能  攻撃者の指定した任意のサイトへジャンプで きてしまう  フィッシングやSEOポイゾニングに使用され る  サイト自体に被害を与えるわけではない  サイトの信頼は損ねる http://example.jp/go?url=http://evil.example.com/ http://example.jp/go?url=/next/page.html

7 OWASP Japan Local Chapter Meeting #8 #owaspjapan Open redirect オープンリダイレクト  実在した例 site:www.microsoft.com/japan/ adult

8 OWASP Japan Local Chapter Meeting #8 #owaspjapan Open redirect オープンリダイレクト  リダイレクトの方法  HTTP応答として301または302を返す  JavaScriptによるlocationオブジェクトへ の代入 

9 OWASP Japan Local Chapter Meeting #8 #owaspjapan Redirect with 301 or 302  脆弱な例  オープンリダイレクトだけでなくHTTPヘッ ダインジェクションもある。 #!/usr/bin/perl use URI::Escape; my $url = uri_unescape( $ENV{QUERY_STRING} || '/' ); print "Status: 302 Found\n"; print "Location: $url\n\n"; HTTP/1.1 302 Found Date: Tue, 28 Feb 2013 12:34:56 GMT Location: http://other.example.jp/

10 OWASP Japan Local Chapter Meeting #8 #owaspjapan location with JavaScript  JavaScriptによるリダイレクト  JavaScriptコード増に伴い増加  オープンリダイレクトだけでなくXSSにも http://example.jp/#javascript:alert(1) // http://example.jp/#/nextpage var url = decodeURIComponent( location.hash.substring(1) ); location.href = url;

11 OWASP Japan Local Chapter Meeting #8 #owaspjapan  IE6,7の は癖がある  「;」より後ろのURLが転送先に使用される  「;」をエスケープしても防げない  によるリダイレクトの動 的生成は避けたほうがよい

12 OWASP Japan Local Chapter Meeting #8 #owaspjapan オープンリダイレクトを防ぐために  転送先URLの確認…実は難しいよね  http://example.com/  //example.com/  http:\\example.com/  http:/\example.com  /\example.com/  その他にもいろいろ if( url.match( /^\/[^\/]/ ) ){ location.href = url; } // bad code

13 OWASP Japan Local Chapter Meeting #8 #owaspjapan オープンリダイレクトを防ぐために  HTTPレスポンスヘッダの改行コード  ブラウザによっては\r、\nどちらかだけで も改行とみなされる X-header: foo(0x0D 0x0A)Location: http://example.com/ X-header: foo(0x0A)Location: http://example.com/ X-header: foo(0x0D)Location: http://example.com/

14 OWASP Japan Local Chapter Meeting #8 #owaspjapan オープンリダイレクトを防ぐために  根本的対策  転送先URLを事前にリストとして保持 // JavaScript によるリダイレクト var pages = { foo:'/foo', bar:'/bar', baz:'/baz' }; var url = pages[ location.hash.substring(1) ] || '/'; location.href = url; #!/usr/bin/perl use URI::Escape; my $index = uri_unescape( $ENV{QUERY_STRING} || '' ); my $pages = { foo=>'/foo', bar=>'/bar', baz=>'/baz' }; my $url = $pages->{$index} || '/'; print "Status: 302 Found\n"; print "Location: $url\n\n";

15 CSRF

16 OWASP Japan Local Chapter Meeting #8 #owaspjapan CSRF  XHR Lv.2により攻撃しやすくなった  攻撃対象 : ファイルのアップロードフォーム

17 OWASP Japan Local Chapter Meeting #8 #owaspjapan CSRF  従来の攻撃手法  罠ページではformを自動でsubmitする  これではファイルの中身は送信できない <form method="POST" action="http://target.example.jp/upload" enctype="multipart/form-data">

18 OWASP Japan Local Chapter Meeting #8 #owaspjapan CSRF  XHR Lv.2によるCSRF攻撃 var xhr = new XMLHttpRequest(); var boundary = '----boundary'; var file="abcd"; // 送信するファイルの内容 var request; xhr.open( 'POST', 'http://target.example.jp/upload', 'true' ); xhr.setRequestHeader( 'Content-Type', 'multipart/form-data; boundary=' + boundary ); xhr.withCredentials = true; // Cookie を付与 xhr.onreadystatechange = function(){}; request = '--' + boundary + '\r\n' + 'Content-Disposition: form-data; name="file"; ' + ' filename="filename.txt"\r\n' + 'Content-Type: application/octet-stream\r\n\r\n' + file + '\r\n' + '--' + boundary + '--'; xhr.send( request );

19 OWASP Japan Local Chapter Meeting #8 #owaspjapan CSRF  XHR Lv.2によるCSRF攻撃  XHRではクロスオリジンでリクエストを発行 可能(サーバ側が非対応でも送信は可能)  Content-Typeおよび送信内容をJavaScript で組み立てて発行(バイナリも可)  従来不可能だったファイルのアップロードの CSRFが攻略可能になった

20 OWASP Japan Local Chapter Meeting #8 #owaspjapan CSRF  対策  従来同様、副作用を持つ全ての箇所にトーク ンを要求する <input type="hidden" name="token" value="2ACE730295E23F2C">

21 HTM5時代のCSRF対策

22 OWASP Japan Local Chapter Meeting #8 #owaspjapan HTML5時代のCSRF対策  XMLHttpRequestを明示するリクエスト ヘッダを付与(これだけ!!) xhr = new XMLHttpRequest(); xhr.open( "POST", "/inquiry", true ); xhr.setRequestHeader( "Content-Type", "..." ); xhr.setRequestHeader( "X-Requested-With","XMLHttpRequest"); xhr.send( params ); POST http://example.jp/inquiry HTTP/1.1 Host: example.jp UserAgent: Mozilla/5.0 X-Requested-With: XMLHttpRequest Content-Type: application/x-www-form-urlencoded

23 OWASP Japan Local Chapter Meeting #8 #owaspjapan HTML5時代のCSRF対策  罠サイトからの によるPOSTで はX-Requested-Withリクエストヘッダ は付与されない POST http://example.jp/inquiry HTTP/1.1 Host: example.jp UserAgent: Mozilla/5.0 Referer: http://trap.example.com/ Content-Type: application/x-www-form-urlencoded <form method="POST" action="http://example.jp/inquiry">

24 OWASP Japan Local Chapter Meeting #8 #owaspjapan HTML5時代のCSRF対策  罠サイトからのXHRによるPOSTでは罠サ イトを指すOriginヘッダを持つPreflightリ クエストが発行される OPTIONS /inquiry HTTP/1.1 Host: example.jp UserAgent: Mozilla/5.0 Origin: http://trap.example.com Access-Control-Request-Method: POST Access-Control-Request-Headers: X-Requested-With xhr = new XMLHttpRequest(); xhr.open( "POST", "http:/example.jp/inquiry", true ); xhr.setRequestHeader( "Content-Type", "..." ); xhr.setRequestHeader( "X-Requested-With","XMLHttpRequest"); xhr.send( params );

25 OWASP Japan Local Chapter Meeting #8 #owaspjapan HTML5時代のCSRF対策  サーバ側でX-Requested-Withヘッダと Originヘッダを確認することでCSRF対策 が可能  セッションの保持が不要  クロスドメインPOSTでのCSRF対策も可能  JavaScript必須  と違いページ遷移しない  DNS rebinding対策必須

26 まとめ Conclusion

27 OWASP Japan Local Chapter Meeting #8 #owaspjapan まとめ  オープンリダイレクト  JSによるオープンリダイレクトが増加傾向  転送先URLを事前に固定リストで保持  CSRF  JSによってファイルアップロードが可能  XHRではセッションなしにCSRF対策可能

28 質問タイム Question ?

29 OWASP Japan Local Chapter Meeting #8 #owaspjapan Question? 質問 hasegawa@utf-8.jp hasegawa@netagent.co.jp @hasegawayosuke http://utf-8.jp/


Download ppt "Nov 14 2013 Yosuke HASEGAWA #owaspjapan. OWASP Japan Local Chapter Meeting #8 #owaspjapan 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft."

Similar presentations


Ads by Google