libinjection : SQLi から XSS へ by ニック・ガルブレス

1,322 views

Published on

SQLi攻撃の迅速で正確な検知をする libinjection は Black Hat USA 2012 で紹介された。 2年たった現在、そのアルゴリズムは多くのオープンソースや専用WAFsやハニーポットで利用されている。 本講演では、XSSを検知する新しいアルゴリズムを紹介する。 SQLi 同様、libinjection アルゴリズムは正規表現を使わず、とても速く、誤検出率が少ない。 そして、オリジナルの libinjection アルゴリズムのように、GitHubで無償の使用許諾で入手できる。

ニック・ガルブレス - Nick Galbreath

ニック・ガルブレス氏は、オンライン広告取引システム開発の世界的リーディング企業である IPONWEB の技術担当副社長である。 IPONWEB 以前は、セキュリティ・詐欺・認証・その他大企業的機能を扱う監視グループ Etsyの技術部長。 Etsy 以前は彼はソーシャルとeコマース企業に所属し、それらには Right Media、UPromise、Friendster、Open Marketなどがある。 彼の著書に「Cryptography for Internet and Database Applications (Wiley)」がある。 彼は、Black Hat、Def Con、DevOpsDays、OWASP関連イベントでの講演経験を持つ。 ボストン大学の数学修士を保有、現在は東京在住である。

講演歴)
2013年
- LASCON http://lascon.org/about/, 基調講演者, 米国・テキサス州オースティン
- DevOpsDays 日本・東京
- Security Development Conference (Microsoft), 米国・カリフォルニア州サンフランシスコ
- DevOpsDays 米国・テキサス州オースティン
- Positive Hack Days http://phdays.com, ロシア・モスクワ
- RSA USA, San Francisco, CA, 講師とパネリスト

2012年
- DefCon 米国・ネバダ州ラスベガス
- BlackHat USA 米国・ ネバダ州ラスベガス
- その他

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,322
On SlideShare
0
From Embeds
0
Number of Embeds
78
Actions
Shares
0
Downloads
49
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

libinjection : SQLi から XSS へ by ニック・ガルブレス

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

×