libinjection SQLiからXSSまで Nick Galbreath @ngalbreath Signal Sciences Corp [email protected] Code Blue ∙ 東京 ∙ 2014-02-18 リブインジェクション
Nov 12, 2014
libinjection SQLiからXSSまで
Nick Galbreath @ngalbreath!Signal Sciences [email protected]
Code Blue ∙ 東京 ∙ 2014-02-18
リブインジェクション
This is also in English!
日本語はこちら↓
https://speakerdeck.com/ngalbreath/ codeblue2014-en-libinjection-from-sqli-to-xss
https://speakerdeck.com/ngalbreath/ codeblue2014-jp-libinjection-from-sqli-to-xss
ニック・ガルブレスNick Galbreath @ngalbreath
• ファウンダー/CTO of Signal Sciences Corp
• 前職: IponWeb (モスコワ, 東京)
• その前: Etsy.com (ニューヨーク市)
「libinjection」とは?• SQLi攻撃を検出するための小さなライブラリー
• C言語
• Python、lua、phpのAPI
• Black Hat USA 2012で初登場
• オープンソースとBSDライセンス
• https://github.com/client9/libinjection
なんでlibinjectionなの?• 既存の検出のほとんどが正規表現で行われる
• ユニットテストがない
• パフォーマンス(速度)テストがない
• ソースコードのカバー領域テストがない
• 正確性のテストがない
• 誤検出のテストがない
libinjection SQLiの現在
• Version 3.9.1
• 8000 SQLi 特徴
• 400+ ユニットテスト
• 85,000+ SQLi サンプル
現在の使われ方• mod_security WAF http://www.modsecurity.org/• ironbee WAF https://www.ironbee.com/• glastopf honeypot http://glastopf.org/• プライベートなWAFs
• さまざまな企業内で
• サードパーティのJava実装https://github.com/Kanatoko/libinjection-Java
• サードパーティの.NET実装 https://github.com/kochetkov/Libinjection.NetLibinjection.Net
XSS
SQLiとの類似性
• 標準的なライブラリーがない
• あるとしても限られたテストしか存在しない
• 正規表現に基づいた検出
• もっと良くできないか?
2種類のXSS
• HTML インジェクション攻撃
• Javascript インジェクション攻撃
XSS Javascript インジェクション
• DOMスタイルの攻撃
• 既存のjavascriptコードへの攻撃
• 本当の検出はクライアントでしかできない
• かなりの難題
HTML インジェクション• HTML インジェクションとは、HTMLのトークン化アルゴリズムに対する攻撃 (text “<b>foo</b>” to tags <b>, foo, </b>)
• HTMLのコンテキストをjavascriptに変更し、新しいjavascriptを追加することが目的
• これらの攻撃は検出できるべき
HTML インジェクションサンプル
<b>XSS</b> (HTML)
<foo XSS> (tag attribute name)
<foo name=XSS> (tag attribute value)
<foo name='XSS'> (引用符の中)
<foo name="XSS"> (引用符の中)
<foo name=`XSS`> (IEのみ!)
HTML トークン化ウェブブラウザ• これまで、すべてのブラウザーはHTMLを異なる方法でトークン化していた
• 壊れたHTMLタグ、想定外の文字やエンコードを使ったあらゆる攻撃が発生してしまっていた
• 現在では、ほぼすべてのブラウザーがHTML5で規定されたアルゴリズムを使用している
• HTML5のアルゴリズムはとても正確
すべてのステップhttp://www.w3.org/html/wg/drafts/html/CR/syntax.html#tokenization
ステップがかなり明確
デスクトップブラウザの60%以上は、HTML5である
http://tnw.co/1cqFueo
IE 9 9%IE 10 11%IE 11 10%Firefox 14%Chrome 13%Safari 5%------------HTML5 62%
残りが、IE6、IE7、IE8• IE6 が消えるのは時間の問題
• IE7 の市場シェアはたった2%
• IE8 の市場シェアは20%
• ほとんどがWindows XP
• これらの市場シェアがこれ以上増えることはない
libinjection XSS
HTML5ウェブブラウザ におけるHTML インジェク
ション攻撃 • No: XML / XSLT インジェクション
• No: IE6、IE7、Opera
• FF、Chromeの古いバージョン
• No: DOMスタイルの攻撃
libinjection HTML5
• 完全なHTML5トークン化
• ツリーやDOMを構築しない
• いかなるデータもコピーしない
トークン化のサンプル
TAG_NAME_OPEN img ATTR_NAME src ATTR_VALUE junk ATTR_NAME onerror ATTR_VALUE alert(1); TAG_NAME_CLOSE >
<img src=“junk” onerror=alert(1);>
異なるHTMLコンテキストでチェック
各インプットは、6つの異なるHTMLコンテキストでチェックされる。
<b>XSS</b> (raw HTML)
<foo XSS> (tag attribute name)
<foo name=XSS> (tag attribute value)
<foo name='XSS'> (引用符の中)
<foo name="XSS"> (引用符の中)
<foo name=`XSS`> (IEのみ!)
問題のあるトークンを除外• 問題のあるタグ、アトリビュート、バリューが除外される。
• タグ:<script>、XMLまたはSVGに関連するすべて
• アトリビュートの名前: on*など
• アトリビュートのバリュー:javascriptのURL
• などなど
トレーニングデータ
XSS Cheat Sheets
• ほとんどが時効(Firefox 3! )
• 古い攻撃が除去される
HTML5SEC.org
• 素晴らしい情報資源
• 一部古い攻撃など最新ではないものも
@soaj1664ashar• 新しい攻撃を定期的に開発してる
• XSSが好きなら、彼をフォローしよう
• http://bit.ly/1bwXTgn
• http://pastebin.com/u6FY1xDA
• http://bit.ly/1iXODkW
攻撃 /スキャナー
• XSSスキャナーのアウトプットを活用
• Shazzer fuzzのデータベースhttp://shazzer.co.uk/ (ModSecurityチームのおかげ)
現在の状況
既に活用できます
• githubhttps://github.com/client9/libinjection
• ウェブサイトhttps://libinjection.client9.com/
• まだアルファ段階
$ make test-xss ./reader -t -i -x -m 10 ../data/xss* ../data/xss-html5secorg.txt 149 False test 62_1 <x '="foo"><x foo='><img src=x onerror=alert(1)//'> ../data/xss-html5secorg.txt 151 False test 62_2 <! '="foo"><x foo='><img src=x onerror=alert(2)//'> ../data/xss-html5secorg.txt 153 False test 62_3 <? '="foo"><x foo='><img src=x onerror=alert(3)//'> ../data/xss-html5secorg.txt 352 False test 102 <img src="x` `<script>alert(1)</script>"` `> ../data/xss-soaj1664ashar-pastebin-u6FY1xDA.txt 96 False 92) <--`<img/src=` onerror=alert(1)> --!> ../data/xss-soaj1664ashar.txt 21 False <form/action=ja	vascr	ipt:confirm(document.cookie)> <button/type=submit> ../data/xss-xenotix.txt 17 False "'`><?img src=xxx:x onerror=javascript:alert(1)> ../data/xss-xenotix.txt 19 False '`"><?script>javascript:alert(1)</script> ../data/xss-xenotix.txt 610 False ̀ "'><img src=xxx:x ?onerror=javascript:alert(1)> ../data/xss-xenotix.txt 613 False ̀ "'><img src=xxx:x ?onerror=javascript:alert(1)> ../data/xss-xenotix.txt 615 False ̀ "'><img src=xxx:x ?onerror=javascript:alert(1)> !XSS : 1628 SAFE : 11 TOTAL : 1639 !Threshold is 10, got 11, failing.
1639件の総サンプル数 1628件が正しいXSS検出数 11件の検出漏れ
IE:引用符に関する問題
• IE 8は、英語でいうところの‘unbalanced quotes’ (引用符が正しく閉じていないなど)に対する動作がおかしい
• この問題に関しては現在対応が進行中
<img src="x` `<script>alert(1)</script>"` `>
パフォーマンス
500,000件以上を 1秒でチェック
2014-02-18のTO DO• まだアルファ段階 — 現時点では素晴らしいミスが隠されている可能性はある
• 検出漏れに関するQAは未完成
• 一部のIEインジェクションには未対応
• 実験のためのテストベッドがない(今週後半にでも)
• QAの充実、コードのカバレッジの強化が必要
• スクリプト言語の対応はまだ(近いうち)
ありがとうございました。