libinjection : SQLi から XSS へ by ニック・ガルブレス
-
Upload
code-blue -
Category
Technology
-
view
798 -
download
5
description
Transcript of libinjection : SQLi から XSS へ by ニック・ガルブレス
![Page 1: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/1.jpg)
libinjection SQLiからXSSまで
Nick Galbreath @ngalbreath!Signal Sciences [email protected]
Code Blue ∙ 東京 ∙ 2014-02-18
リブインジェクション
![Page 2: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/2.jpg)
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
![Page 3: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/3.jpg)
ニック・ガルブレスNick Galbreath @ngalbreath
• ファウンダー/CTO of Signal Sciences Corp
• 前職: IponWeb (モスコワ, 東京)
• その前: Etsy.com (ニューヨーク市)
![Page 4: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/4.jpg)
「libinjection」とは?• SQLi攻撃を検出するための小さなライブラリー
• C言語
• Python、lua、phpのAPI
• Black Hat USA 2012で初登場
• オープンソースとBSDライセンス
• https://github.com/client9/libinjection
![Page 5: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/5.jpg)
なんでlibinjectionなの?• 既存の検出のほとんどが正規表現で行われる
• ユニットテストがない
• パフォーマンス(速度)テストがない
• ソースコードのカバー領域テストがない
• 正確性のテストがない
• 誤検出のテストがない
![Page 6: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/6.jpg)
libinjection SQLiの現在
• Version 3.9.1
• 8000 SQLi 特徴
• 400+ ユニットテスト
• 85,000+ SQLi サンプル
![Page 7: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/7.jpg)
現在の使われ方• 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
![Page 8: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/8.jpg)
XSS
![Page 9: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/9.jpg)
SQLiとの類似性
• 標準的なライブラリーがない
• あるとしても限られたテストしか存在しない
• 正規表現に基づいた検出
• もっと良くできないか?
![Page 10: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/10.jpg)
2種類のXSS
• HTML インジェクション攻撃
• Javascript インジェクション攻撃
![Page 11: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/11.jpg)
XSS Javascript インジェクション
• DOMスタイルの攻撃
• 既存のjavascriptコードへの攻撃
• 本当の検出はクライアントでしかできない
• かなりの難題
![Page 12: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/12.jpg)
HTML インジェクション• HTML インジェクションとは、HTMLのトークン化アルゴリズムに対する攻撃 (text “<b>foo</b>” to tags <b>, foo, </b>)
• HTMLのコンテキストをjavascriptに変更し、新しいjavascriptを追加することが目的
• これらの攻撃は検出できるべき
![Page 13: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/13.jpg)
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のみ!)
![Page 14: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/14.jpg)
HTML トークン化ウェブブラウザ• これまで、すべてのブラウザーはHTMLを異なる方法でトークン化していた
• 壊れたHTMLタグ、想定外の文字やエンコードを使ったあらゆる攻撃が発生してしまっていた
• 現在では、ほぼすべてのブラウザーがHTML5で規定されたアルゴリズムを使用している
• HTML5のアルゴリズムはとても正確
![Page 15: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/15.jpg)
すべてのステップhttp://www.w3.org/html/wg/drafts/html/CR/syntax.html#tokenization
![Page 16: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/16.jpg)
ステップがかなり明確
![Page 17: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/17.jpg)
デスクトップブラウザの60%以上は、HTML5である
http://tnw.co/1cqFueo
IE 9 9%IE 10 11%IE 11 10%Firefox 14%Chrome 13%Safari 5%------------HTML5 62%
![Page 19: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/19.jpg)
残りが、IE6、IE7、IE8• IE6 が消えるのは時間の問題
• IE7 の市場シェアはたった2%
• IE8 の市場シェアは20%
• ほとんどがWindows XP
• これらの市場シェアがこれ以上増えることはない
![Page 20: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/20.jpg)
libinjection XSS
![Page 21: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/21.jpg)
HTML5ウェブブラウザ におけるHTML インジェク
ション攻撃 • No: XML / XSLT インジェクション
• No: IE6、IE7、Opera
• FF、Chromeの古いバージョン
• No: DOMスタイルの攻撃
![Page 22: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/22.jpg)
libinjection HTML5
• 完全なHTML5トークン化
• ツリーやDOMを構築しない
• いかなるデータもコピーしない
![Page 23: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/23.jpg)
トークン化のサンプル
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);>
![Page 24: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/24.jpg)
異なる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のみ!)
![Page 25: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/25.jpg)
問題のあるトークンを除外• 問題のあるタグ、アトリビュート、バリューが除外される。
• タグ:<script>、XMLまたはSVGに関連するすべて
• アトリビュートの名前: on*など
• アトリビュートのバリュー:javascriptのURL
• などなど
![Page 26: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/26.jpg)
トレーニングデータ
![Page 27: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/27.jpg)
XSS Cheat Sheets
• ほとんどが時効(Firefox 3! )
• 古い攻撃が除去される
![Page 28: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/28.jpg)
HTML5SEC.org
• 素晴らしい情報資源
• 一部古い攻撃など最新ではないものも
![Page 29: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/29.jpg)
@soaj1664ashar• 新しい攻撃を定期的に開発してる
• XSSが好きなら、彼をフォローしよう
• http://bit.ly/1bwXTgn
• http://pastebin.com/u6FY1xDA
• http://bit.ly/1iXODkW
![Page 30: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/30.jpg)
攻撃 /スキャナー
• XSSスキャナーのアウトプットを活用
• Shazzer fuzzのデータベースhttp://shazzer.co.uk/ (ModSecurityチームのおかげ)
![Page 31: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/31.jpg)
現在の状況
![Page 32: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/32.jpg)
既に活用できます
• githubhttps://github.com/client9/libinjection
• ウェブサイトhttps://libinjection.client9.com/
• まだアルファ段階
![Page 33: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/33.jpg)
$ 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件の検出漏れ
![Page 34: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/34.jpg)
IE:引用符に関する問題
• IE 8は、英語でいうところの‘unbalanced quotes’ (引用符が正しく閉じていないなど)に対する動作がおかしい
• この問題に関しては現在対応が進行中
<img src="x` `<script>alert(1)</script>"` `>
![Page 35: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/35.jpg)
パフォーマンス
500,000件以上を 1秒でチェック
![Page 36: libinjection : SQLi から XSS へ by ニック・ガルブレス](https://reader034.fdocument.pub/reader034/viewer/2022042505/546310a0af795947088b53cc/html5/thumbnails/36.jpg)
2014-02-18のTO DO• まだアルファ段階 — 現時点では素晴らしいミスが隠されている可能性はある
• 検出漏れに関するQAは未完成
• 一部のIEインジェクションには未対応
• 実験のためのテストベッドがない(今週後半にでも)
• QAの充実、コードのカバレッジの強化が必要
• スクリプト言語の対応はまだ(近いうち)