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.

Pythonと機械学習によるWebセキュリティの自動化

15,121 views

Published on

PYCONJP 2017.
https://pycon.jp/2017/ja/

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

Pythonと機械学習によるWebセキュリティの自動化

  1. 1. 2017.09.08 PYCON JP 2017 Presented by Isao Takaesu Pythonと機械学習によるWebセキュリティの自動化
  2. 2. About the speaker • 職業 : セキュリティエンジニア • 所属 : 三井物産セキュアディレクション • 趣味 : 脆弱性スキャナ作り、機械学習 • ブログ: http://www.mbsd.jp/blog/ • Black Hat Asia Arsenal, CODE BLUE / 2016 • 情報セキュリティEXPO / 2017 • 勉強会「AISECjp」を主催 高江洲 勲 Takaesu Isao PYCON JP 2017 Twitter: @bbr_bbq MBSD
  3. 3. セキュリティ技術者の圧倒的な不足 PYCON JP 2017 背景 MBSD その数、約24万人 (IPA調べ)
  4. 4. 人間のみでは限界では? PYCON JP 2017 背景 MBSD
  5. 5. 情報セキュリティの完全自動化 PYCON JP 2017 研究の目的 MBSD
  6. 6. 先ずは、 Webアプリケーション診断 を自動化。 PYCON JP 2017 研究の目的 MBSD
  7. 7. Webアプリケーション診断とは… Webアプリの脆弱性を検出 PYCON JP 2017 Webアプリケーション診断とは? MBSD
  8. 8. PYCON JP 2017 Webアプリケーション診断 MBSD 診断員 Web Server Web Apps Fire wall 診断ベンダ 顧客 1. 疑似攻撃 SQLi? XSS? 2. 反応の分析 1. Webアプリをクローリングしながら疑似攻撃 2. Webアプリの反応を分析して脆弱性を判定
  9. 9. 診断員の職人技に大きく依存 それによる人手不足 PYCON JP 2017 Webアプリケーション診断の課題 MBSD
  10. 10. PYCON JP 2017 研究の最終目標 MBSD 人間の診断員のように、 Webアプリの脆弱性を検出するスキャナの開発 SAIVS Spider Artificial Intelligence Vulnerability Scanner ※現在はβ版
  11. 11. PYCON JP 2017 SAIVSの能力 MBSD ・Webアプリのクローリング ・脆弱性の検出 http://www.mbsd.jp/insight.html
  12. 12. PYCON JP 2017 SAIVSの能力 MBSD ・Webアプリのクローリング ・脆弱性の検出 http://www.mbsd.jp/insight.html
  13. 13. クローリングの重要性 MBSD Top Login Register Confirm Contact Us My Page Complete Send message 脆弱性 PYCON JP 2017 とあるWebアプリの画面遷移
  14. 14. クローリングの重要性 MBSD Top Login Register Confirm Contact Us My Page Complete 正しくログインすることが必要 Send message PYCON JP 2017
  15. 15. クローリングの重要性 MBSD Top Login Register Confirm Contact Us My Page Complete 正しく会員登録することが必要 Send message PYCON JP 2017
  16. 16. クローリングの重要性 MBSD Top Login Register Confirm Contact Us My Page Complete Send message PYCON JP 2017 網羅的に脆弱性を見つけるためには、 正しくページ遷移することが重要
  17. 17. クローリングの3要件 MBSD  ページ種別の認識 ログインか?会員登録か?  遷移成否の認識 遷移に成功したのか?失敗か?  最適文字の入力 フィールドに何を入力するのか? PYCON JP 2017
  18. 18. 使用する機械学習アルゴリズム MBSD  ページ種別の認識 ナイーブベイズ  遷移成否の認識 ナイーブベイズ  最適文字の入力 Word2Vec PYCON JP 2017
  19. 19. 使用する機械学習アルゴリズム MBSD  ページ種別の認識 ナイーブベイズ  遷移成否の認識 ナイーブベイズ  最適文字の入力 Word2Vec PYCON JP 2017
  20. 20. ナイーブベイズ? テキスト分類に使用される機械学習アルゴリズム カテゴリテーブルと確率理論を使用 MBSD 利用例)  スパムメールフィルタ  ブログ記事のカテゴリ自動分類  WAFの攻撃検知率向上 PYCON JP 2017
  21. 21. MBSD SPAM:0.672 ← こっちを選択 HAM :0.03 期間 SPAM:10% HAM :30% カテゴリ 限定 ココ クリック http:// wana.jp SPAM:40% HAM :10% SPAM:30% HAM :40% SPAM:70% HAM :50% SPAM:80% HAM :5% メール本文からキーワードを抽出 SPAM・HAMの確率を求め、確率が高いカテゴリを選択 スパムメールフィルタへの利用例 PYCON JP 2017
  22. 22. ナイーブベイズによる「ページ種別認識」 MBSD ページ種別を特徴付けるキーワードで認識 PYCON JP 2017
  23. 23. ナイーブベイズによる「ページ種別認識」 MBSD <h1>Sign in</h1> <form action="/cyclone/sessions" method="post"> <label for="email">Email</label> <input id="email" name="email" type="text" /> <label for="password">Password</label> <input id="password" name="password" type="password" /> </form> ページを特徴付けるキーワードを抽出 ストップワードは除外 PYCON JP 2017
  24. 24. ナイーブベイズによる「ページ種別認識」 MBSD カテゴリ キーワード ログイン Email, User ID, Password, Sign in … 会員登録 Email, Password, Confirm, Sign up … 検索 Word, Text, String, Sort, Search … 商品購入 Credit, Account, Expire, Purchase … パスワード変更 Password, Old Password, Change … カテゴリ「ログイン」に抽出ワードが多く含まれる ⇒「ログイン」の確率が最も高い PYCON JP 2017 ・カテゴリテーブル
  25. 25. MBSD ナイーブベイズによる「ページ種別認識」 「ログイン」と認識 PYCON JP 2017
  26. 26. MBSD ナイーブベイズによる「ページ遷移成否の認識」 遷移失敗を特徴付けるキーワードで判断 PYCON JP 2017
  27. 27. MBSD <h2>2 errors prohibited this user from being saved </h2> <p>There were problems with these fields:</p> <ul> <li> Password doesn't match confirmation </li> <li> Email is invalid </li> ["Password doesn't match confirmation","Email is invalid "] </ul> 遷移成否を特徴付けるキーワードを抽出 ストップワードは除外 ナイーブベイズによる「ページ遷移成否の認識」 PYCON JP 2017
  28. 28. ナイーブベイズによる「ページ遷移成否の認識」 MBSD カテゴリ キーワード 遷移成功 good, valid, success, normal, fine, clean, nice, can, match, confirmation, ok, finish, thank … 遷移失敗 bad, invalid, failure, error, problem, wrong, doesn’t match, can’t, too, ng, blank … カテゴリ「遷移失敗」に多く含まれる ⇒「遷移失敗」の確率が最も高い PYCON JP 2017 ・カテゴリテーブル
  29. 29. MBSD ナイーブベイズによる「ページ遷移成否の認識」 「遷移失敗」と認識 PYCON JP 2017
  30. 30. クローリングの実現方法 MBSD  ページ種別の認識 ナイーブベイズ  遷移成否の認識 ナイーブベイズ  最適文字の入力 Word2Vec PYCON JP 2017
  31. 31. MBSD Word2Vecによる「最適文字入力」 事前に様々な訓練用アプリに対し、総当たりで各フィールドに様々な値を入力。 遷移成功時のラベルと入力値を保存。 遷移 Isao Takaesu isao123@mbsd.jp mbsd1234 mbsd1234 PYCON JP 2017
  32. 32. PYCON JP 2017 訓練に使用したWebアプリ(一例) MBSD OWASP Broken Web Apps
  33. 33. Word2Vecによる「最適文字入力」 MBSD ラベル 遷移成功時の入力値 ID abc, abcdef, aBc, aBcdEf, ABCDEF … Password abc123!, 123abc!, abc!123, !#$%&a1 … FirstName abc, abcdef, aBc, aBcdEf, ABCDEF … LastName abc, abcdef, aBc, aBcdEf, ABCDEF … E-mail abc@hoge.com, abc123@hoge.com … Username abc, abcdef, aBc, aBcdEf, ABCDEF … Signature abc, abcdef, aBc, aBcdEf, ABCDEF … ・・・ ・・・ ・遷移成功時のラベルと入力値の組み合わせ PYCON JP 2017
  34. 34. ラベル不一致問題をどうするか? MBSD 訓練時 本番時 不一致!! PYCON JP 2017 UsernameとNameなど、微妙な単語の違いを Word2Vecで吸収(類似度を計算)。
  35. 35. Word2Vec? 単語同士の類似度を求める自然言語処理の手法 単語をベクトルで表現 MBSD 利用例)  単語の類似度 Input : e-mail  単語の加算・減算 word cos distance email 0.956302 mail 0.927386 reply 0.920610 formula answer Iraq - Violence Jordan Human - Animal Ethics Japan – Tokyo + France Paris PYCON JP 2017
  36. 36. 類似度計算への利用例 MBSD 注目単語周辺の単語を基に類似度を計算 学習データ) interpretation further. However, if anyone wishes to discuss this, I‘m certainly willing (either offline - e-mail - or Stephen In article bevans@carina.unm.edu (Mathemagician) writes: Just what do gay people do that straight・・・ carries archives of old alt.atheism.moderated articles and assorted other files. For more information, send mail to archive-server@mantis.co.uk saying help send atheism/index and it will mail back a reply. mathew An・・・ send mail to archive-server@mantis.co.uk saying help send atheism/index and it will mail back a reply. mathew An Introduction to Atheism by Mathew. This article attempts to provide a general introduction・・・ 「e-mail」「mail」「reply」の類似度は高い PYCON JP 2017
  37. 37. Word2Vecの学習データ MBSD The 20 Newsgroups data set. 約2万のニュースグループドキュメント集 ニュースグループ例)  コンピュータ(Graphics, MS-Windows, Hardware)  サイエンス(Cryptography, Electronics, Space)  趣味(Motorcycles, Baseball, Hockey) PYCON JP 2017
  38. 38. SAIVSの訓練 MBSD Windows Crypt Hardware Space SAIVS The 20 Newsgroups data set 類似度の学習 単語同士の類似度の習得 ・・・ word2vec PYCON JP 2017
  39. 39. MBSD 候補 類似度 email 0.956302 mail 0.927386 E-mail 0.900249 address 0.893337 reply 0.865438 contact 0.846801 message 0.792930 chat 0.754903 newsgroup 0.747636 候補 類似度 names 0.962508 username 0.939661 nickname 0.933694 naming 0.898254 surname 0.863966 initials 0.861093 firstname 0.849641 lastname 0.847604 title 0.782467 候補 類似度 homepage 0.794415 blog 0.752945 site 0.708534 webpage 0.701838 portal 0.701374 forum 0.692067 com 0.641086 archive 0.537914 org 0.531096 Word2Vecによる類似度計算 未知のラベルに対する上位10個の候補単語を抽出 Target :websiteTarget :nameTarget : e-mail PYCON JP 2017
  40. 40. MBSD 候補 類似度 email 0.956302 mail 0.927386 E-mail 0.900249 address 0.893337 reply 0.865438 contact 0.846801 message 0.792930 chat 0.754903 newsgroup 0.747636 候補 類似度 names 0.962508 username 0.939661 nickname 0.933694 naming 0.898254 surname 0.863966 initials 0.861093 firstname 0.849641 lastname 0.847604 title 0.782467 候補 類似度 homepage 0.794415 blog 0.752945 site 0.708534 webpage 0.701838 portal 0.701374 forum 0.692067 com 0.641086 archive 0.537914 org 0.531096 Word2Vecによる類似度計算 Target :websiteTarget :nameTarget : e-mail PYCON JP 2017 候補一覧から訓練時のラベルと一致する単語を選択
  41. 41. MBSD 候補 類似度 email 0.956302 mail 0.927386 E-mail 0.900249 address 0.893337 reply 0.865438 contact 0.846801 message 0.792930 chat 0.754903 newsgroup 0.747636 候補 類似度 names 0.962508 username 0.939661 nickname 0.933694 naming 0.898254 surname 0.863966 initials 0.861093 firstname 0.849641 lastname 0.847604 title 0.782467 候補 類似度 homepage 0.794415 blog 0.752945 site 0.708534 webpage 0.701838 portal 0.701374 forum 0.692067 com 0.641086 archive 0.537914 org 0.531096 Word2Vecによる類似度計算 ⇒ abc@hoge.com ⇒ aBcdEf ⇒ http://hoge.com Target :websiteTarget :nameTarget : e-mail PYCON JP 2017 (訓練で習得した)候補単語に紐づく値を選択
  42. 42. クローリングのデモ MBSD Target:OWASP Broken Web Apps Cyclone PYCON JP 2017
  43. 43. クローリングのデモ MBSD Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索 脆弱性 PYCON JP 2017
  44. 44. クローリングのデモ MBSD Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索 PYCON JP 2017
  45. 45. クローリングのデモ MBSD Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索 PYCON JP 2017
  46. 46. クローリングのデモ MBSD Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索 PYCON JP 2017
  47. 47. クローリングのデモ MBSD Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索 PYCON JP 2017
  48. 48. MBSD PYCON JP 2017 デモ動画 https://www.youtube.com/watch?v=aXw3vgXbl1U
  49. 49. クローリングの3要件 MBSD  ページ種別の認識(✔)  遷移成否の認識 (✔)  最適文字の入力(✔) PYCON JP 2017
  50. 50. PYCON JP 2017 SAIVSの能力 MBSD ・Webアプリのクローリング ・脆弱性の検出 http://www.mbsd.jp/insight.html
  51. 51. PYCON JP 2017 脆弱性の検出 MBSD 少ない手数で脆弱性を検出
  52. 52. PYCON JP 2017 今回対象とした脆弱性 MBSD Reflected Cross-Site Scripting (クロスサイトスクリプティング:XSS)
  53. 53. PYCON JP 2017 XSSの検査例① MBSD ・・・ <body> <input type="text" value="testData"> </body> ・・・ http://xxx/case1/?input=testData 1) 適当な値を入力 2) 入力値の出力箇所を観察 診断員 入力値がINPUTタグのVALUE属性値 に出力される。 「”/>」でINPUTタグを閉じた後に スクリプトを挿入できないか?
  54. 54. XSSの検査例① MBSD ・・・ <body> <input type="text" value=""/><script>alert(0);</script>"> </body> ・・・ http://xxx/case1/?input="/><script>alert(0);</script> 1) 検査値を入力 2) 入力値の出力箇所を観察 診断員 INPUTタグを「”/>」で閉じ、 その後にスクリプトが挿入できた。 (HTMLの理解が必要) PYCON JP 2017
  55. 55. PYCON JP 2017 XSSの検査例② MBSD ・・・ <input type="button" value="click" onClick="var user='testData'; alert('Welcome Mr. ' + user);"> ・・・ http://xxx/case3/?input=testData 1) 適当な値を入力 2) 入力値の出力箇所を観察 診断員 入力値がJavaScriptの変数宣言部に 出力される。 「’;」で変数宣言を終えた後に スクリプトを挿入できないか?
  56. 56. XSSの検査例② MBSD ・・・ <input type="button" value="click" onClick="var user='testData'; alert(0);//'; alert('Welcome Mr. ' + user);"> ・・・ http://xxx/case3/?input=testData';%20alert(0);// 1) 検査値を入力 2) 入力値の出力箇所を観察 診断員 変数宣言を「’;」で終えさせ、 その後にスクリプトが挿入できた。 (JavaScriptの理解が必要) PYCON JP 2017
  57. 57. XSSの検査例③ MBSD ・・・ <body> <input type="text" value=""/> alert(0);"> </body> ・・・ http://xxx/case2/?input="/><script>alert(0);</script> 1) 検査値を入力 2) 入力値の出力箇所を観察 診断員 SCRIPTタグが削除されている。 入力値を工夫しないとスクリプトが 挿入できない。 PYCON JP 2017
  58. 58. XSSの検査例③ MBSD ・・・ <body> <input type="text" value=""/> alert(0);"> </body> ・・・ http://xxx/case2/?input="/><script>alert(0);</script> 1) 検査値を入力 2) 入力値の出力箇所を観察 診断員 (過去の経験から)SCRIPTタグ を使わない検査値を試そう。 PYCON JP 2017
  59. 59. XSSの検査例③ MBSD ・・・ <body> <input type="text" value=""onmouseout=alert(0)""> </body> ・・・ http://xxx/case2/?input =“onmouseout=alert(0)” 1) 代替の検査値を入力 2) 入力値の出力箇所を観察 診断員 イベントハンドラを使うことで、 スクリプトの挿入ができた。 (防御機構の回避) PYCON JP 2017
  60. 60. XSS検出の3要件 MBSD  HTML構文の理解  JavaScript構文の理解  防御機構の回避 PYCON JP 2017
  61. 61. 使用する機械学習アルゴリズム+α MBSD  HTML構文の理解 LSTM  JavaScript構文の理解 LSTM  防御機構の回避 多層パーセプトロン、Q学習、GA PYCON JP 2017
  62. 62. 使用する機械学習アルゴリズム+α MBSD  HTML構文の理解 LSTM  JavaScript構文の理解 LSTM  防御機構の回避 多層パーセプトロン、Q学習、GA PYCON JP 2017
  63. 63. LSTM(Long-Short Term Memory)? 時系列データの学習が可能な機械学習アルゴリズム 短期的・長期的なデータ間の依存関係を学習可能 MBSD 利用例)  機械翻訳  文書生成(小説、歌詞、ソースコード)  音生成(音楽、声) PYCON JP 2017
  64. 64. LSTM(Long-Short Term Memory)? 時系列データの学習が可能な機械学習アルゴリズム 短期的・長期的なデータ間の依存関係を学習可能 MBSD 利用例)  機械翻訳  文書生成(小説、歌詞、ソースコード)  音生成(音楽、声) PYCON JP 2017
  65. 65. 文書生成への利用例 MBSD ソースコードの生成(from Andrej Karpathy blog) static int indicate_policy(void) { int error; if (fd == MARN_EPT) { if (ss->segment < mem_total) unblock_set_blocked(); else ret = 1; goto bail; } segaddr = in_SB(in.addr); selector = seg / 16; ・・・ 学習データ static void settings(struct *tty) { if (tty == tty) disable_single_st_p(dev); pci_disable_spool(port); return 0; } static void command(struct seq_file *m) { int column = 32 << (cmd[2] & 0x80); if (state) ・・・ LSTMの生成コード 起点(シード)を基に次々とコードを生成 PYCON JP 2017
  66. 66. LSTMの使用方法(1/4) MBSD <!doctype html><html><head><title>Reflected XSS in textarea (textarea1)</title></head><body> <H2>Textarea injection test</H2> <FORM> <textarea name="in" rows="5" cols="60">xxx</textarea> ・・・ http://xxx/textarea1?in=xxx 入力値がTEXTAREA内に出力 PYCON JP 2017 1) 値の入力 2) 入力値の出力箇所を観察
  67. 67. LSTMの使用方法(2/4) MBSD <!doctype html><html><head><title>Reflected XSS in textarea (textarea1)</title></head><body> <H2>Textarea injection test</H2> <FORM> <textarea name="in" rows="5" cols="60"> <script>alert('XSS');</script></textarea> ・・・ http://xxx/textarea1?in=<script>alert(‘XSS’);</script> 文脈を無視しているため、スクリプトは動作しない。 ⇒単純なスクリプト挿入は不可 PYCON JP 2017 1) 検査値を入力 2) 入力値の出力箇所を観察
  68. 68. MBSD <!doctype html><html><head><title>Reflected XSS in textarea (textarea1)</title></head><body> <H2>Textarea injection test</H2> <FORM> <textarea name="in" rows="5" cols="60">xxx</textarea> ・・・ http://xxx/textarea1?in=xxx 「TEXTAREAタグを閉じた後にスクリプト挿入?」 LSTMの使用方法(3/4) PYCON JP 2017 1) 値の入力 2) 入力値の出力箇所を観察
  69. 69. MBSD <!doctype html><html><head><title>Reflected XSS in textarea (textarea1)</title></head><body> <H2>Textarea injection test</H2> <FORM> <textarea name="in" rows="5" cols="60"></textarea><script>alert('XSS');</script></t extarea> ・・・ http://xxx/textarea1?in=</textarea><script>alert(‘XSS’);</script> LSTMの使用方法(4/4) 文脈を理解してスクリプト挿入、スクリプトが動く!! PYCON JP 2017 1) 検査値を入力 2) 入力値の出力箇所を観察
  70. 70. LSTMの学習データ(HTML) MBSD <abbr class="" data-utime="" title=""></abbr> <abbr class='' title=''></abbr> <abbr data-utime='' title=''></abbr> ・・・ <input name="" type="" value=""/> <input alt="" id="" onclick="" src="" type=""/> <input alt='' id="" src='' type=''/> <input alt='' name='' src='' type=''/> ・・・ <video autoplay="" loop="" muted=""></video> <video class="" height="" id="" width=""></video> <video src='' tabindex=''></video> <video src=''></video> 2万ページ分のHTML構文 (約12,000種類) PYCON JP 2017
  71. 71. MBSD _satellite.pageBottom();'] (function(window) { var _gaq = _gaq || []; var methods = ['log', 'dir', 'trace']; if (typeof window.console === 'undefined') { window.console = {}; } for (var i in methods) { if (!(methods[i] in window.console)) { window.console[methods[i]] = function() {}; } } }(window)); LSTMの学習データ(JavaScript) 1万ページ分のJavaScript構文 PYCON JP 2017
  72. 72. (学習済み)LSTMが生成した構文例 MBSD シード 生成構文 <textarea cols="60">xxx </textarea> <!– mbsdtest xxx --> <input type="" value=“xxx "> var hoge = ['log', ‘xxx red’];¥r¥n /* mbsdtest xxx */ function(){ xxx }¥r¥n シードに対応した構文を生成。 文脈に沿ってスクリプト挿入が可能。 PYCON JP 2017
  73. 73. XSS検出の3要件 MBSD  HTML構文の理解 LSTM  JavaScript構文の理解 LSTM  防御機構の回避 多層パーセプトロン、Q学習、GA PYCON JP 2017
  74. 74. 多層パーセプトロン(MLP)? 画像認識などに使用される機械学習アルゴリズム 生物の神経回路構造と機能を模したモデル MBSD 利用例)  画像認識  手書き数字認識 PYCON JP 2017
  75. 75. ・ ・ ・ ・ ・ ・ ・ ・ ・ Data Label 0 1 2 学習データ 手書き数字認識への利用例 MBSD ・ ・ ・ ・ ・ ・ ・ ・ ・ X₁ X₂ X784 X0 Y₁ Y₂ Y300 Y0 Z₁ Z₂ Z10 MLP 学習 入力データに応じた”答え”を出力することが可能 PYCON JP 2017
  76. 76. 学習済みMLP 014679 425970401967 手書き数字認識への利用例 MBSD PYCON JP 2017
  77. 77. Q学習? エージェントの最良行動を学習する機械学習アルゴリズム 行動の良し悪しをQ値で評価 MBSD 利用例)  ロボットの歩行動作習得  ビデオゲームのプレイ  経路探索 PYCON JP 2017
  78. 78. ロボット歩行動作習得への利用例 MBSD エージェント 環境 a1 前進 a2 左折 a3 右折 a4 後退 行動 状態 s ・・・ 次の状態 s’ 方策 ( a | s ) 遷移確率 ( s’ | s, a ) 目の前に穴が… 報酬 r = R( s, a, s’ ) タスク:障害物を避けてゴールすること 報酬の合計が最大となる方策を学習 Q( s, a )値の更新 PYCON JP 2017
  79. 79. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Deep Q-Networkを参考にしたモデル Multilayer Perceptron PYCON JP 2017
  80. 80. 出力箇所のパターン MBSD 出力箇所 例 属性値 : 「”」 <~value="xxx"> 属性値 : 「'」 <~value='xxx'> 属性値 : noquote <~value=xxx> JavaScript 内 <script>xxx</script> HTML タグの外側 <~>xxx</~> PYCON JP 2017
  81. 81. 防御機構のパターン MBSD 防御機構 例 「“」の実体参照への変換・排除 「”」⇒「&quot;」 「‘」の実体参照への変換・排除 「’」⇒「&apos;」 「<」の実体参照への変換・排除 「<」⇒「&lt;」 「>」の実体参照への変換・排除 「>」⇒「&gt;」 「alert();」の排除 「alert();」⇒「」 PYCON JP 2017
  82. 82. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Multilayer Perceptron PYCON JP 2017 出力箇所/防御機構のパターンをMLPに入力
  83. 83. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Multilayer Perceptron PYCON JP 2017 (入力に対する)何れかの検査値を選択
  84. 84. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Multilayer Perceptron PYCON JP 2017 MLPが選択した検査値で検査を試行
  85. 85. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Multilayer Perceptron PYCON JP 2017 検査結果を観測
  86. 86. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Multilayer Perceptron PYCON JP 2017 検査結果に応じた報酬の付与
  87. 87. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; Multilayer Perceptron PYCON JP 2017 MLPの重みを更新
  88. 88. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; 検査試行を繰り返しながら防御機構の回避パターンを学習 Multilayer Perceptron PYCON JP 2017
  89. 89. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 タグの外 “sCriPt” 他のタグ URL encode 検査値 Event handler ・ ・ ・ Q-learning 状態観測 防御機構回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ 防御機構 > ⇒ &gt; 検査試行を繰り返しながら防御機構の回避パターンを学習 Multilayer Perceptron PYCON JP 2017
  90. 90. 検査値の一例 <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``;// ・・・ 様々なパターンがあり、作成にはノウハウが必要。 MBSD PYCON JP 2017
  91. 91. PYCON JP 2017MBSD 検査値はどうやって集めるのか?
  92. 92. PYCON JP 2017MBSD 集めるのではなく、 自動生成する。
  93. 93. PYCON JP 2017 検査値の自動生成方法 MBSD ・遺伝的アルゴリズム (Genetic Algorithm:GA) ・Generative Adversarial Networks (GAN)
  94. 94. PYCON JP 2017 生成手順 MBSD 1.GAで検査値を幾つか生成(5~6パターンくらい) 2.GANで(1の検査値を基に)大量の検査値を生成
  95. 95. PYCON JP 2017 生成手順 MBSD 1.GAで検査値を幾つか生成(5~6パターンくらい) 2.GANで(1の検査値を基に)大量の検査値を生成
  96. 96. PYCON JP 2017 遺伝的アルゴリズム(Genetic Algorithm:GA) MBSD 進化計算を繰り返し、最適な遺伝子の組み合わせの個体を探索。 Initialization Fitness/Evaluation CrossoverMutation Individual ● ▲ ■ × ★Gene Selection Generation alternation
  97. 97. PYCON JP 2017 GAによる検査値の生成方法 MBSD ・XSSの検査値の一例 “><script>alert();</script> <object data=xss.html> <svg/onload=al¥u0065rt();> <video><source onerror=confirm(1);> <iframe onload=alert();> ・・・ 検査値はHTMLやJavaScriptの要素の組み合わせで構成。
  98. 98. PYCON JP 2017 GAによる検査値の生成方法 MBSD ・XSSの検査値の一例 [“], [>], [<script>], [alert();], [</script>] [<object], [data=], [xss.html], [>] [<svg], [/], [onload=], [al¥u0065rt();], [>] [<video>], [<source], [onerror=], [confirm(1);], [>] [<iframe], [onload=], [alert();], [>] ・・・ 各検査値の最小要素を遺伝子として定義。
  99. 99. PYCON JP 2017 GAによる検査値の生成方法 MBSD MDN docs等から要素を収集し、約220種類の遺伝子を定義。 ・遺伝子リスト
  100. 100. PYCON JP 2017 GAによる検査値の生成方法 MBSD ・生成手順の詳細 https://www.mbsd.jp/blog/20170821.html
  101. 101. PYCON JP 2017 GAによる検査値の生成方法 MBSD 進化計算を繰り返すことで、約6種類の検査値を生成。 ※計算時間は各5時間程度 No 検査値 1 <script>al¥u0065rt``;</script> 2 <iframe/onload=alert();><select/cols= 3 <svg/onload=alert();></iframe><q 4 <video><source onerror=confirm(1);> 5 <body onload=alert();><form </thead> 6 <video><source onerror=alert();src=x <video> ・GAで生成した検査値例
  102. 102. PYCON JP 2017 GAによる検査値の生成方法 MBSD 進化計算を繰り返すことで、約6種類の検査値を生成。 ※計算時間は各5時間程度 ⇒ あまり効率的ではない・・・ No 検査値 1 <script>al¥u0065rt``;</script> 2 <iframe/onload=alert();><select/cols= 3 <svg/onload=alert();></iframe><q 4 <video><source onerror=confirm(1);> 5 <body onload=alert();><form </thead> 6 <video><source onerror=alert();src=x <video> ・GAで生成した検査値例
  103. 103. PYCON JP 2017 生成手順 MBSD 1.GAで検査値を幾つか(5~6パターンくらい)生成 2.GANで(1の検査値を基に)大量の検査値を生成
  104. 104. PYCON JP 2017 Generative Adversarial Networks:GAN MBSD 訓練データを模倣したfakeデータを大量に生成。 ・ ・ ・ Noise (Z) Generator (G) ・ ・ ・ Generative Data : G(z) ・ ・ ・ ・ ・ ・ Train Data Train Data ・・・ Discriminator (D) Probability True? X
  105. 105. PYCON JP 2017 GANの利用例 MBSD 学習を重ねることで、徐々に訓練データに近似したデータを生成。 ・訓練データ ・GANで生成したデータ
  106. 106. PYCON JP 2017 GANによる検査値の生成方法 MBSD ・ ・ ・ Noise (Z) Generator (G) ・ ・ ・ Generative Data : G(z) ・ ・ ・ ・ ・ ・ Train Data Train Data ・・・ Discriminator (D) Genetic Algorithm Probability True? GAN ”GAの検査値“を訓練データにし、様々な検査値を生成。
  107. 107. PYCON JP 2017 GANで生成した検査値 MBSD 1つの訓練データから、複数種類の検査値が生成される。 ※処理時間は30分程度。 検査値 訓練データ:<script>alert();</script></table><hr/ --------------------------------------------------- 生成データ: <script>alert``;</script><table/</td> <script>al¥u0065rt();</script></tr><th/ <script>prompt(1);</script><th/<col/ <script>confirm(1);</script><thead <table/ ・・・ ・GANの学習過程で生成された検査値
  108. 108. PYCON JP 2017 GANで生成した検査値 MBSD 1つの訓練データから、複数種類の検査値が生成される。 ※処理時間は30分程度。 検査値 訓練データ:<iframe/onload=alert();><select/ --------------------------------------------------- 生成データ: colspan=<iframe <a onload=al¥u0065rt();> <object/onload="onfocus=alert();"<script type="text/javascript"> <iframe onload=alert``; /><select icon=<iframe/<img onload=al¥u0065rt();> ・・・ ・GANの学習過程で生成された検査値
  109. 109. PYCON JP 2017 GANで生成した検査値 MBSD 1つの訓練データから、複数種類の検査値が生成される。 ※処理時間は30分程度。 検査値 訓練データ:<svg/<canvas/<select/onload=confirm(1);> --------------------------------------------------- 生成データ: <svg/onload="¥u0061lert();"></output> <object/src=x onload=alert();¥n<script type="text/javascript"> <script/src="data:text/html,alert();"<script></script> <svg/onload=confirm(1);> ・・・ ・GANの学習過程で生成された検査値
  110. 110. PYCON JP 2017 GANで生成した検査値 MBSD 1つの訓練データから、複数種類の検査値が生成される。 ※処理時間は30分程度。 検査値 訓練データ:<video><source onerror=confirm(1);> --------------------------------------------------- 生成データ: <video><source onerror="¥u0061lert``;"> <video><source onerror="al¥u0065rt``;"> <video><source/onerror=alert();> <video><source onerror=prompt(1);> ・・・ ・GANの学習過程で生成された検査値
  111. 111. PYCON JP 2017 GANで生成した検査値 MBSD 1つの訓練データから、複数種類の検査値が生成される。 ※処理時間は30分程度。 検査値 訓練データ:icon=<iframe/<body onload=¥u0061lert();> --------------------------------------------------- 生成データ: headers=<body/<body onload=alert();> icon=<body <input/onload=confirm(1);> kind=<body <img onload=alert``;> <img src=x <keygen onerror=¥u0061lert``;> ・・・ ・GANの学習過程で生成された検査値
  112. 112. PYCON JP 2017 GANで生成した検査値 MBSD 1つの訓練データから、複数種類の検査値が生成される。 ※処理時間は30分程度。 検査値 訓練データ: <embed onload=alert();<script type="text/javascript"> --------------------------------------------------- 生成データ: <embed/onload=al¥u0065rt();¥n<script type="text/javascript"> <embed onload=alert``;¥n<script type="text/javascript"> <embed/onload=prompt(1);¥n<script type="text/javascript"> <embed/src=x onload=confirm(1);¥n<script type="text/javascript"> ・・・ ・GANの学習過程で生成された検査値
  113. 113. PYCON JP 2017MBSD GAとGANを組み合わせたモデルを 使用することで、効率よく大量の 検査値を生成可能。
  114. 114. XSS検出の3要件 MBSD  HTML構文の理解(✔)  JavaScript構文の理解(✔)  防御機構の回避(✔) PYCON JP 2017
  115. 115. MBSD SAIVSの検査手順  第1次検査  第2次検査 PYCON JP 2017
  116. 116. クローリングしながら、(入力値の) 出力箇所を調べるために正常リクエストを送信 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 第1次検査 PYCON JP 2017
  117. 117. 入力値の出力箇所を認識 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 第1次検査 <~value="xxx"> PYCON JP 2017
  118. 118. 出力箇所を基にシードを抽出 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 第1次検査 <~value="xxx"> PYCON JP 2017
  119. 119. シードに続くHTML/JS構文を考える ⇒学習済みLSTMを使用 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 第1次検査 <~value=“”> PYCON JP 2017
  120. 120. 考えたHTML / JS構文の後にスクリプトを付与 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 第1次検査 <~value=“”><script>alert(3122);</script> PYCON JP 2017
  121. 121. RXSSを検出するために検査リクエストを送信 MBSD Web Server Web Apps SAIVS 検査リクエスト送信 第1次検査 <~value=“”><script>alert(3122);</script> PYCON JP 2017
  122. 122. RXSS有無を判定 検出 ⇒ 検査終了、未検出 ⇒ 第2次検査へ MBSD Web Server Web Apps SAIVS 検査リクエスト送信 レスポンスの分析 第1次検査 RXSSあり?なし? PYCON JP 2017
  123. 123. スクリプトが動作しなかった理由を探る ⇒「<」「>」がエスケープされている MBSD Web Server Web Apps SAIVS 検査リクエスト送信 レスポンスの分析 第2次検査 <~value=“”&gt;&lt;script&gt;alert(3122);・・・ PYCON JP 2017
  124. 124. 過去の経験を基に、最適な代替検査値を選択 ⇒学習済みMLPを使用 MBSD Web Server Web Apps SAIVS 検査リクエスト送信 レスポンスの分析 第2次検査 Event handler? PYCON JP 2017
  125. 125. 代替の検査値を使用した検査リクエストを送信 MBSD Web Server Web Apps SAIVS 検査リクエスト再送信 第2次検査 Event handler? PYCON JP 2017
  126. 126. RXSS有無を判定 検出 ⇒ 検査終了、未検出 ⇒ 第2次検査を再試行 MBSD Web Server Web Apps SAIVS 検査リクエスト再送信 レスポンスの分析 第2次検査 RXSSあり?なし? PYCON JP 2017
  127. 127. SAIVSのデモ MBSD Target:OWASP Broken Web Apps Google Gruyere PYCON JP 2017
  128. 128. SAIVSのデモ MBSD Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update 脆弱性 PYCON JP 2017
  129. 129. SAIVSのデモ MBSD Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update PYCON JP 2017
  130. 130. SAIVSのデモ MBSD Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update PYCON JP 2017
  131. 131. SAIVSのデモ MBSD Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update PYCON JP 2017
  132. 132. SAIVSのデモ MBSD Top Sign up Login Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile Profile update New snippet New snippet register PYCON JP 2017
  133. 133. SAIVSのデモ MBSD 機能名 出力箇所/変換パターン New snippet register 出力箇所 : BODY タグ内 防御機構 : <script>⇒<block>への変換 Profile update 出力箇所 : A タグ内 防御機構 : 「<」、「>」のエスケープ クローリングしながらWebアプリの挙動を観察し、 適切な検査値を使用する必要がある。 PYCON JP 2017
  134. 134. MBSD SAIVSのデモ PYCON JP 2017 https://www.youtube.com/watch?v=N5d9oM0NcM0
  135. 135. スキャン結果 MBSD PYCON JP 2017
  136. 136. SAIVSの構成要素 MBSD 言語 Python 2.7.11 ライブラリ ・Word2Vec gensim 2.3.0 ・LSTM, 多層パーセプトロン(DQN, GAN) Keras 2.0.8 ・ナイーブベイズ, Q学習, GA not use library ・HTTP通信 requests 2.13.0 ・HTML Parser beautifulsoup4 4.5.1 動作環境 CPU : Intel Core™ i7-6500U 2.5GHz x 4core GPU : NVIDIA GeForce GTX 965M RAM : 16.0GB PYCON JP 2017
  137. 137. MBSD  クローリング能力の強化  複雑なアプリへの対応  CAPTCHAへの対応 Future work  脆弱性検出能力の強化  複雑なRXSSパターンへの対応  他脆弱性への対応 PYCON JP 2017
  138. 138. Download “.PDF” version of this document: ≫ https://www.slideshare.net/babaroa

×