CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法

1,001 views

Published on

2016年10月20日
CODE BLUE 2016 Track1
機械学習でWebアプリケーションの脆弱性を見つける方法

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

No Downloads
Views
Total views
1,001
On SlideShare
0
From Embeds
0
Number of Embeds
85
Actions
Shares
0
Downloads
11
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法

  1. 1. CODE BLUE 2016 Presented by Isao Takaesu 機械学習でWebアプリケーション の脆弱性を見つける方法
  2. 2. About the speaker • 職業 : Webセキュリティエンジニア • 所属 : 三井物産セキュアディレクション • 趣味 : 脆弱性スキャナ作り、機械学習 • ブログ: http://www.mbsd.jp/blog/ • Black Hat Asia 2016 Arsenal • AISECjpを主催 高江洲 勲 MBSD タカエス イサオ CODE BLUE 2016
  3. 3. Agenda 1. 研究の背景 2. 研究の目的 3. SAIVSの概要 4. 実現手法 5. 検証結果 6. デモンストレーション 7. 将来の展望 MBSD CODE BLUE 2016
  4. 4. 研究の背景 MBSD CODE BLUE 2016 セキュリティ技術者の圧倒的な不足
  5. 5. 研究の背景 MBSD CODE BLUE 2016 その数、約24万人 (IPA調べ)
  6. 6. 研究の背景 MBSD CODE BLUE 2016 人間のみでは限界では?
  7. 7. 研究の目的 MBSD CODE BLUE 2016 情報セキュリティの完全自動化
  8. 8. 研究の目的 MBSD CODE BLUE 2016 先ずは、 Webアプリケーション診断
  9. 9. Webアプリケーション診断とは? MBSD CODE BLUE 2016 Webアプリの脆弱性を検出
  10. 10. Webアプリケーション診断とは? MBSD 診断員 Web Server Web Apps 診断ベンダ 顧客 疑似攻撃 レスポンスの分析 CODE BLUE 2016  Webアプリをクローリングしながら疑似攻撃  レスポンスを分析して脆弱性を判定
  11. 11. Webアプリケーション診断とは? MBSD 診断員 Web Server Web Apps 診断ベンダ 顧客 疑似攻撃 SQLi? XSS? レスポンスの分析 CODE BLUE 2016  Webアプリをクローリングしながら疑似攻撃  レスポンスを分析して脆弱性を判定
  12. 12. Webアプリケーション診断の課題 MBSD CODE BLUE 2016 診断員の職人技に大きく依存
  13. 13. 最終目標 全自動Webアプリ診断の実現 MBSD 人工知能 Web Server Web Apps 診断ベンダ 顧客 疑似攻撃 レスポンスの分析 CODE BLUE 2016 SQLi? XSS?
  14. 14. 診断AI「SAIVS」 MBSD CODE BLUE 2016 自律的にWebアプリ診断を行うAI SAIVS Spider Artificial Intelligence Vulnerability Scanner
  15. 15. SAIVSの能力 MBSD  Webアプリのクローリング  脆弱性の検出 CODE BLUE 2016
  16. 16. SAIVSの能力 MBSD  Webアプリのクローリング  脆弱性の検出 CODE BLUE 2016
  17. 17. クローリングの重要性 MBSD CODE BLUE 2016 Top Login Register Confirm Contact Us My Page Complete Send message 脆弱性
  18. 18. クローリングの重要性 MBSD CODE BLUE 2016 Top Login Register Confirm Contact Us My Page Complete 正しくログインすることが必要 Send message
  19. 19. クローリングの重要性 MBSD CODE BLUE 2016 Top Login Register Confirm Contact Us My Page Complete 正しく会員登録することが必要 Send message
  20. 20. クローリングの重要性 MBSD CODE BLUE 2016 Top Login Register Confirm Contact Us My Page Complete 網羅的に正しくページ遷移することが重要 Send message
  21. 21. MBSD Webアプリのクローリングって難しい なぜ? CODE BLUE 2016
  22. 22. このページは何? MBSD 人間:キーワードを基に容易にページ種別を認識 機械:困難(ログイン?会員登録?) CODE BLUE 2016
  23. 23. 何が起きたのか? MBSD 人間:メッセ―ジ内容から遷移失敗を認識 機械:メッセージの解釈は困難 CODE BLUE 2016
  24. 24. フォームに入力する文字は? MBSD 遷移 人間:入力フォームに正しい文字列を入力 機械:フォームの意味解釈は困難 ??? ??? ??? ??? ??? CODE BLUE 2016
  25. 25. MBSD クローリングには複雑な思考が必要 CODE BLUE 2016
  26. 26. クローリングの3要件 MBSD  ページ種別の認識  遷移成否の認識  最適文字の入力 CODE BLUE 2016
  27. 27. MBSD CODE BLUE 2016 どのように実現するか?
  28. 28. 本研究のアプローチ MBSD CODE BLUE 2016 人間の脳をリバースエンジニアリング
  29. 29. 本研究のアプローチ MBSD CODE BLUE 2016 各思考パターンを 機械学習アルゴリズムで実現
  30. 30. クローリングの3要件 MBSD  ページ種別の認識  遷移成否の認識  最適文字の入力 CODE BLUE 2016
  31. 31. 人間によるページ種別認識 MBSD CODE BLUE 2016
  32. 32. 人間によるページ種別認識 MBSD CODE BLUE 2016 ページ種別を特徴付けるキーワードで認識
  33. 33. 機械によるページ種別認識 MBSD CODE BLUE 2016 ナイーブベイズを使う
  34. 34. ナイーブベイズ? テキスト分類に使用される機械学習アルゴリズム カテゴリテーブルと確率理論を使用 MBSD 利用例)  スパムメールフィルタ  ブログ記事のカテゴリ自動分類  WAFの攻撃検知率向上 CODE BLUE 2016
  35. 35. 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の確率を求め、確率が高いカテゴリを選択 スパムメールフィルタへの利用例 CODE BLUE 2016
  36. 36. MBSD CODE BLUE 2016 ナイーブベイズによるページ種別認識
  37. 37. ナイーブベイズによるページ種別認識 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> ページを特徴付けるキーワードを抽出 ストップワードは除外 CODE BLUE 2016
  38. 38. ページ種別認識のカテゴリテーブル 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 … CODE BLUE 2016 抽出したキーワードが多く含まれるカテゴリを選択 keywords : Sign in, Email, Password
  39. 39. ページ種別認識のカテゴリテーブル 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 … CODE BLUE 2016 「ログイン」に多く含まれる ⇒カテゴリ「ログイン」の確率が最も高い
  40. 40. MBSD CODE BLUE 2016 ナイーブベイズによるページ種別認識 「ログイン」と認識
  41. 41. クローリングの3要件 MBSD  ページ種別の認識 (✔)  遷移成否の認識  最適文字の入力 CODE BLUE 2016
  42. 42. MBSD CODE BLUE 2016 人間によるページ遷移成否の認識
  43. 43. MBSD CODE BLUE 2016 人間によるページ遷移成否の認識 遷移失敗を特徴付けるキーワードで判断
  44. 44. MBSD CODE BLUE 2016 ナイーブベイズを使う 機械による遷移成否認識
  45. 45. MBSD CODE BLUE 2016 機械による遷移成否認識
  46. 46. 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> CODE BLUE 2016 遷移成否を特徴付けるキーワードを抽出 ストップワードは除外 機械による遷移成否認識
  47. 47. 遷移成否認識のカテゴリテーブル MBSD カテゴリ キーワード 遷移成功 good, valid, success, normal, fine, clean, nice, can, match, confirmation, ok, finish, thank … 遷移失敗 bad, invalid, failure, error, problem, unmatch, doesn’t match, can’t, too, wrong, ng, blank … CODE BLUE 2016 抽出したキーワードが多く含まれるカテゴリを選択 keywords : errors, problem, doesn’t match, invalid
  48. 48. 遷移成否認識のカテゴリテーブル 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 … CODE BLUE 2016 「遷移失敗」に多く含まれる ⇒カテゴリ「遷移失敗」の確率が最も高い
  49. 49. MBSD CODE BLUE 2016 機械による遷移成否認識 「遷移失敗」と認識
  50. 50. クローリングの3要件 MBSD  ページ種別の認識 (✔)  遷移成否の認識 (✔)  最適文字の入力 CODE BLUE 2016
  51. 51. MBSD 人間による最適文字の入力 CODE BLUE 2016 フォームの意味を解釈し、正しい文字を入力 遷移 Isao Takaesu isao123@mbsd.jp mbsd1234 mbsd1234
  52. 52. 機械による最適文字の入力 MBSD CODE BLUE 2016 多層パーセプトロン(MLP)、Q学習を使う
  53. 53. 多層パーセプトロン(MLP)? 画像認識などに使用される機械学習アルゴリズム 生物の神経回路構造と機能を模したモデル MBSD 利用例)  画像認識  手書き数字認識 CODE BLUE 2016
  54. 54. ・ ・ ・ ・ ・ ・ ・ ・ ・ Data Label 0 1 2 学習データ 手書き数字認識への利用例 CODE BLUE 2016MBSD ・ ・ ・ ・ ・ ・ ・ ・ ・ X₁ X₂ X784 X0 Y₁ Y₂ Y300 Y0 Z₁ Z₂ Z10 MLP 学習 入力データに応じた”答え”を出力することが可能
  55. 55. 学習済みMLP 014679 425970401967 手書き数字認識への利用例 CODE BLUE 2016MBSD
  56. 56. Q学習? エージェントの最良行動を学習する機械学習アルゴリズム 行動の良し悪しをQ値で評価 MBSD 利用例)  ロボットの歩行動作習得  ビデオゲームのプレイ  経路探索 CODE BLUE 2016
  57. 57. ロボット歩行動作習得への利用例 MBSD CODE BLUE 2016 エージェント 環境 a1 前進 a2 左折 a3 右折 a4 後退 行動 状態 s ・・・ 次の状態 s’ 方策 ( a | s ) 遷移確率 ( s’ | s, a ) 目の前に穴が… 報酬 r = R( s, a, s’ ) タスク:障害物を避けてゴールすること 報酬の合計が最大となる方策を学習 Q( s, a )値の更新
  58. 58. 最適な文字入力を実現するモデル MBSD 遷移試行を繰り返しながら最適な入力文字列を学習 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  59. 59. 最適な文字入力を実現するモデル MBSD 遷移試行を繰り返しながら最適な入力文字列を学習 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  60. 60. 入力値のパターン MBSD パターン 入力値 英字のみ abc, abcdef, aBc, aBcdEf, ABCDEF … 数字のみ 123, 12345, 4111111111111111 … 英字・数字 abc123, 123abc, aBc123, 1a2b3c … 英字・記号 abc!, abc!#$, abcdef!, abcdef!#$ … 数字・記号 123!, 123!#$, 12345!, !#$12345 … 英字・数字・記号 abc123!, 123abc!, abc!123, !#$%&a1 … メアド風 abc@hoge.com, abc123@hoge.com … CODE BLUE 2016 入力値の組み合わせをパラメータに設定 対象:INPUT TYPE = text, password
  61. 61. 学習の流れ MBSD 遷移元/遷移先ページをMLPに入力 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  62. 62. 学習の流れ MBSD (入力に対する)何れかの入力値パターンを選択 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  63. 63. 学習の流れ MBSD MLPが選択した入力値パターンで遷移を試行 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  64. 64. 学習の流れ MBSD 遷移試行の結果を観測 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  65. 65. 学習の流れ MBSD 遷移結果に応じた報酬の付与(Q値の更新) CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  66. 66. 学習の流れ MBSD MLPの重みを更新(バックプロパゲーション) CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  67. 67. 学習の流れ MBSD 300回程度の試行で学習可能 CODE BLUE 2016 ・ ・ ・ ・ ・ ・ 遷移元ページ MLP 入力値 Q学習 遷移先ページ p1=abc, xyz・・・ p1=123, 12a・・・ p1=abc@xxx・・・ 状態観測 評価 重み更新
  68. 68. 問題 MBSD CODE BLUE 2016 300回の試行 ⇒ 効率が悪い
  69. 69. MBSD CODE BLUE 2016 本番前に訓練を行う 解決方法
  70. 70. 遷移の訓練に使用したWebアプリ(一例) MBSD OWASP Broken Web Apps CODE BLUE 2016
  71. 71. SAIVSの訓練 MBSD CODE BLUE 2016 BodgeIt peruggia WackoPicko Yazd SAIVS 遷移試行&学習 ⇒ 各300回 各入力フォームに対する最適文字列の獲得 ・・・ Web Apps
  72. 72. 訓練で獲得した最適文字列(一例) 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 … Email address abc@hoge.com, abc123@hoge.com … Username abc, abcdef, aBc, aBcdEf, ABCDEF … Signature abc, abcdef, aBc, aBcdEf, ABCDEF … CODE BLUE 2016
  73. 73. 問題:添え字の不一致 MBSD CODE BLUE 2016 訓練時 診断時 不一致!!
  74. 74. MBSD CODE BLUE 2016 添え字の類似度を求める 解決方法
  75. 75. 類似度の算出 MBSD CODE BLUE 2016 word2vecを使う
  76. 76. word2vec? 単語同士の類似度を求める自然言語処理の手法 単語をベクトルで表現 MBSD CODE BLUE 2016 利用例)  単語の類似度 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
  77. 77. 類似度計算への利用例 MBSD CODE BLUE 2016 注目単語周辺の単語を基に類似度を計算 学習データ) 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」の類似度は高い
  78. 78. word2vecの学習データ MBSD CODE BLUE 2016 The 20 Newsgroups data set. 約2万のニュースグループドキュメント集 ニュースグループ例)  コンピュータ(Graphics, MS-Windows, Hardware)  サイエンス(Cryptography, Electronics, Space)  趣味(Motorcycles, Baseball, Hockey)
  79. 79. SAIVSの訓練 MBSD CODE BLUE 2016 Windows Crypt Hardware Space SAIVS The 20 Newsgroups data set 類似度の学習 単語同士の類似度の習得 ・・・ word2vec
  80. 80. 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 CODE BLUE 2016 候補 類似度 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 訓練で獲得した類似単語 上位10個の候補単語を抽出 Target :websiteTarget :nameTarget : e-mail
  81. 81. 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 CODE BLUE 2016 候補 類似度 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 訓練で獲得した類似単語 訓練時の添え字と一致する候補単語を選択 Target :websiteTarget :nameTarget : e-mail
  82. 82. 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 CODE BLUE 2016 候補 類似度 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 訓練で獲得した類似単語 ⇒ abc@hoge.com ⇒ aBcdEf ⇒ http://hoge.com Target :websiteTarget :nameTarget : e-mail
  83. 83. クローリングの3要件 MBSD  ページ種別の認識 (✔)  遷移成否の認識 (✔)  最適文字の入力 (✔) CODE BLUE 2016
  84. 84. クローリングのデモ MBSD Target:OWASP Broken Web Apps Cyclone CODE BLUE 2016
  85. 85. クローリングのデモ MBSD CODE BLUE 2016 Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索 脆弱性
  86. 86. クローリングのデモ MBSD CODE BLUE 2016 Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索
  87. 87. クローリングのデモ MBSD CODE BLUE 2016 Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索
  88. 88. クローリングのデモ MBSD CODE BLUE 2016 Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索
  89. 89. クローリングのデモ MBSD CODE BLUE 2016 Top Login Register Confirm User Search Complete 1.Registerでアカウント作成 2.ログイン 3.ユーザ検索
  90. 90. MBSD CODE BLUE 2016 https://www.youtube.com/watch?v=aXw3vgXbl1U クローリングのデモ動画
  91. 91. SAIVSの能力 MBSD  Webアプリのクローリング(✔)  脆弱性の検出 CODE BLUE 2016
  92. 92. 本研究の目的 MBSD CODE BLUE 2016 少ない手数で脆弱性を検出
  93. 93. MBSD CODE BLUE 2016 Webアプリの脆弱性も色々あるが…
  94. 94. 本研究の対象 MBSD CODE BLUE 2016 Reflected Cross-Site Scripting (RXSS)
  95. 95. RXSSの例①:超脆弱なアプリ MBSD <html> <head> <meta http-equiv="Content-Type" content="text/html"> <title>Case 3 - RXSS</title> </head> <body> <input type="text" value="testData"> </body> </html> http://xxx/case3/?input=testData 入力値がINPUTタグのVALUE属性内にエコーバック CODE BLUE 2016
  96. 96. RXSSの例①: 攻撃された様子 MBSD <html> <head> <meta http-equiv="Content-Type" content="text/html"> <title>Case 3 - RXSS</title> </head> <body> <input type="text" value=""/><script>alert('XSS');</script>"> </body> </html> http://xxx/case3/?input="/><script>alert(‘XSS');</script> HTML内へのスクリプト埋め込み CODE BLUE 2016
  97. 97. RXSSの例②:ちょっとセキュアなアプリ MBSD <html> <head> <meta http-equiv="Content-Type" content="text/html"> <title>Case 4 - RXSS</title> </head> <body> <input type="text" value=""/> alert('XSS');"> </body> </html> SCRIPTタグのサニタイズ http://xxx/case4/?input="/><script>alert(‘XSS');</script> CODE BLUE 2016
  98. 98. RXSSの例②:攻撃された様子 MBSD <html> <head> <meta http-equiv="Content-Type" content="text/html"> <title>Case 4 - RXSS</title> </head> <body> <input type="text" value=""onmouseout=alert('XSS')""> </body> </html> サニタイズを回避してスクリプト埋め込み http://xxx/case4/?input=“onmouseout=alert(‘XSS')” CODE BLUE 2016
  99. 99. RXSS検出の3要件 MBSD  HTML構文の理解  JavaScript構文の理解  サニタイズの回避 CODE BLUE 2016
  100. 100. MBSD CODE BLUE 2016 どのように実現するか?
  101. 101. 本研究のアプローチ MBSD CODE BLUE 2016 人間の脳をリバースエンジニアリング
  102. 102. 本研究のアプローチ MBSD CODE BLUE 2016 各思考パターンを 機械学習アルゴリズムで実現
  103. 103. RXSS検出の3要件 MBSD  HTML構文の理解  JavaScript構文の理解  サニタイズの回避 CODE BLUE 2016
  104. 104. MBSD 機械によるHTML/JavaScriptの理解 LSTMを使う CODE BLUE 2016
  105. 105. LSTM(Long-Short Term Memory)? 時系列データの学習が可能な機械学習アルゴリズム 短期的・長期的なデータ間の依存関係を学習可能 MBSD 利用例)  機械翻訳  文書生成(小説、歌詞、ソースコード)  音生成(音楽、声) CODE BLUE 2016
  106. 106. LSTM(Long-Short Term Memory)? 時系列データの学習が可能な機械学習アルゴリズム 短期的・長期的なデータ間の依存関係を学習可能 MBSD 利用例)  機械翻訳  文書生成(小説、歌詞、ソースコード)  音生成(音楽、声) CODE BLUE 2016
  107. 107. 文書生成への利用例 MBSD CODE BLUE 2016 ソースコードの生成(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の生成コード 起点(シード)を基に次々とコードを生成
  108. 108. なぜLSTMなのか? 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内にエコーバック CODE BLUE 2016
  109. 109. なぜLSTMなのか? 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> スクリプトは動作しない ⇒単純なスクリプト挿入は不可 CODE BLUE 2016
  110. 110. 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タグを閉じた後にスクリプト挿入?」 CODE BLUE 2016 なぜLSTMなのか?
  111. 111. 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> CODE BLUE 2016 なぜLSTMなのか? 文脈を理解してスクリプトを挿入 ⇒ スクリプトが動く
  112. 112. MBSD CODE BLUE 2016 どのようにしてLSTMを学習させるか?
  113. 113. 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種類) CODE BLUE 2016
  114. 114. 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)); CODE BLUE 2016 LSTMの学習データ(JavaScript) 1万ページ分のJavaScript構文
  115. 115. 学習済み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 CODE BLUE 2016 シードに対応した構文生成が可能
  116. 116. RXSS検出の3要件 MBSD  HTML構文の理解(✔)  JavaScript構文の理解(✔)  サニタイズの回避 CODE BLUE 2016
  117. 117. 機械によるサニタイズの回避 MBSD CODE BLUE 2016 多層パーセプトロン(MLP)、Q学習を使う
  118. 118. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 サニタイズ回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; 検査試行を繰り返しながらサニタイズ回避パターンを学習 CODE BLUE 2016
  119. 119. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 サニタイズ回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; CODE BLUE 2016
  120. 120. 出力箇所のパターン MBSD 出力箇所 例 属性値 : 「”」 <~value="xxx"> 属性値 : 「'」 <~value='xxx'> 属性値 : noquote <~value=xxx> JavaScript 内 <script>xxx</script> HTML タグの外側 <~>xxx</~> CODE BLUE 2016
  121. 121. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 サニタイズ回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; CODE BLUE 2016
  122. 122. サニタイズのパターン MBSD サニタイズ 例 「“」の実体参照への変換・排除 「”」⇒「&quot;」 「‘」の実体参照への変換・排除 「’」⇒「&apos;」 「<」の実体参照への変換・排除 「<」⇒「&lt;」 「>」の実体参照への変換・排除 「>」⇒「&gt;」 「alert();」の排除 「alert();」⇒「」 CODE BLUE 2016
  123. 123. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 サニタイズ回避を実現するモデル ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; CODE BLUE 2016
  124. 124. 検査パターン(一例) MBSD 出力箇所 検査パターン 「”」で囲まれた属性値 「'」で囲まれた属性値 noquoteの属性値 HTML タグの外側 “event handler "><sCriPt>xxx "><img src=xxx ‘event handler ‘><sCriPt>xxx <svg/onload=alert()> <sCriPt>xxx</sCriPt> JavaScript 内 ";alert();// [CR][LF]alert(); ¥";alert();// CODE BLUE 2016
  125. 125. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; 出力箇所/サニタイズパターンをMLPに入力 CODE BLUE 2016
  126. 126. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; (入力に対する)何れかの検査パターンを選択 CODE BLUE 2016
  127. 127. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; MLPが選択した検査パターンで検査を試行 CODE BLUE 2016
  128. 128. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; 検査結果を観測 CODE BLUE 2016
  129. 129. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; 検査結果に応じた報酬の付与(Q値の更新) CODE BLUE 2016
  130. 130. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; MLPの重みを更新(バックプロパゲーション) CODE BLUE 2016
  131. 131. MBSD ・ ・ ・ ・ ・ ・ 属性値 JS内 ・・・ 出力箇所 MLP タグの外 “sCriPt” 他のタグ URL encode 検査パターン Event handler ・ ・ ・ Q学習 状態観測 学習の流れ ・ ・ ・ 評価 重み更新 “ ⇒ &quot; < ⇒ &lt; ・・・ サニタイズ > ⇒ &gt; 100回程度の試行で最適な検査パターンを学習可能 CODE BLUE 2016
  132. 132. 問題 MBSD CODE BLUE 2016 100回の試行 ⇒ 効率が悪い
  133. 133. MBSD CODE BLUE 2016 本番前に訓練を行う
  134. 134. 訓練に使用したWebアプリ(一例) MBSD WAVSEP CODE BLUE 2016 ReflectedXSS GET Input Vector Case06 出力箇所 :IMG タグの SRC 属性値 サニタイズ:< , > ⇒ &lt; , &gt; 検査例 :"onmouseover=alert(3122);" Case10 出力箇所 :SCRIPT タグの onClick 値 サニタイズ:“ , < , > ⇒ &quot; , &lt; , &gt; 検査例 :';alert(3122);// Case27 出力箇所 :JavaScript の単行コメント内 サニタイズ:コメントアウト 検査例 :[CR][LF]alert(3122);//
  135. 135. SAIVSの訓練 MBSD CODE BLUE 2016 Case06 Case08 Case10 Case27 SAIVS WAVSEP 検査試行&学習 ⇒各100回 各サニタイズパターンを回避する検査文字列の獲得 ・・・
  136. 136. RXSS検出の3要件 MBSD  HTML構文の理解(✔)  JavaScript構文の理解(✔)  サニタイズの回避(✔) CODE BLUE 2016
  137. 137. MBSD SAIVSの検査フロー  第1次検査  第2次検査 CODE BLUE 2016
  138. 138. 出力箇所を調べるために正常リクエストを送信 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 CODE BLUE 2016 第1次検査
  139. 139. 入力値の出力箇所を認識 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 CODE BLUE 2016 第1次検査 <~value="xxx">
  140. 140. 出力箇所を基にシードを抽出 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 CODE BLUE 2016 第1次検査 <~value="xxx">
  141. 141. シードに対応したHTML/JSを生成 (学習済みLSTMを使用) MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 CODE BLUE 2016 第1次検査 <~value=“”>
  142. 142. 生成したHTML / JavaScriptにスクリプトを付与 MBSD Web Server Web Apps SAIVS 正常リクエスト送信 レスポンスの分析 CODE BLUE 2016 第1次検査 <~value=“”><script>alert(3122);</script>
  143. 143. RXSSを検出するために検査リクエストを送信 MBSD Web Server Web Apps SAIVS 検査リクエスト送信 CODE BLUE 2016 第1次検査 <~value=“”><script>alert(3122);</script>
  144. 144. RXSS有無を判定 検出 ⇒ 検査終了、未検出 ⇒ 第2次検査へ MBSD Web Server Web Apps SAIVS 検査リクエスト送信 レスポンスの分析 CODE BLUE 2016 第1次検査 RXSSあり?なし?
  145. 145. サニタイズのパターンを特定 MBSD Web Server Web Apps SAIVS 検査リクエスト送信 レスポンスの分析 CODE BLUE 2016 第2次検査 <~value=“”&gt;&lt;script&gt;alert(3122);・・・
  146. 146. サニタイズ回避可能な検査パターンを選択 (学習済みMLPを使用) MBSD Web Server Web Apps SAIVS 検査リクエスト送信 レスポンスの分析 CODE BLUE 2016 第2次検査 Event handler?
  147. 147. サニタイズを回避する検査リクエストを送信 MBSD Web Server Web Apps SAIVS 検査リクエスト再送信 CODE BLUE 2016 第2次検査 Event handler?
  148. 148. RXSS有無を判定 検出 ⇒ 検査終了、未検出 ⇒ 第2次検査を再試行 MBSD Web Server Web Apps SAIVS 検査リクエスト再送信 レスポンスの分析 CODE BLUE 2016 第2次検査 RXSSあり?なし?
  149. 149. RXSS検出のデモ MBSD Target:webseclab CODE BLUE 2016 Case サニタ イズ 出力箇所/サニタイズ /reflect/full1 × BODY タグ内 /reflect/textarea1 × TEXTAREA タグ内 /reflect/onmouseover 〇 INPUTタグの属性値 入力値からタグ閉じが削除 /reflect/js4_dq × SCRIPT タグ内
  150. 150. RXSS検出のデモ MBSD Target:webseclab CODE BLUE 2016 Case サニタ イズ 出力箇所/サニタイズ /reflect/full1 × BODY タグ内 /reflect/textarea1 × TEXTAREA タグ内 /reflect/onmouseover 〇 INPUTタグの属性値 入力値からタグ閉じが削除 /reflect/js4_dq × SCRIPT タグ内
  151. 151. MBSD <!doctype html><html><head><title>Full Javascript Injection (full.1)</title></head><body> Hello!<BR> The value of cgi parameter &quot;in&quot; is:saivs12345 </body></html> http://xxx/reflect/full1?in=saivs12345 出力箇所 :BODYタグ内 サニタイズ:なし Case1:正常リクエスト送信時 CODE BLUE 2016
  152. 152. MBSD <!doctype html><html><head><title>Full Javascript Injection (full.1)</title></head><body> Hello!<BR> The value of cgi parameter &quot;in&quot; is: lasther=''></form>D0i7Q"VW53N'nT7t0<script>alert(3122) ;kc5i3</script>ueFj8 </body></html> http://xxx/reflect/full1?in=lasther=''%3E%3C/form%3ED0i7Q%22VW 53N'nT7t0%3Cscript%3Ealert(3122);kc5i3%3C/script%3EueFj8 試行回数:1回 Case1:検査リクエスト送信時 CODE BLUE 2016
  153. 153. MBSD Case1:検査の動画 CODE BLUE 2016 https://www.youtube.com/watch?v=3RkhSED5DQU
  154. 154. RXSS検出のデモ MBSD Target:webseclab CODE BLUE 2016 Case サニタ イズ 出力箇所/サニタイズ /reflect/full1 × BODY タグ内 /reflect/textarea1 × TEXTAREA タグ内 /reflect/onmouseover 〇 INPUTタグの属性値 入力値からタグ閉じが削除 /reflect/js4_dq × SCRIPT タグ内
  155. 155. MBSD <!doctype html><html><head><title>Reflected XSS in textarea (textarea1)</title></head><body> <H2>Textarea injection test</H2> <p> <FORM> <textarea name="in" rows="5" cols="60">saivs12345 </textarea> <p> http://xxx/reflect/textarea1?in=saivs12345 出力箇所 :TEXTAREAタグ内 サニタイズ:なし Case2:正常リクエスト送信時 CODE BLUE 2016
  156. 156. MBSD <!doctype html><html><head><title>Reflected XSS in textarea (textarea1)</title></head><body> <H2>Textarea injection test</H2> <p> <FORM> <textarea name="in" rows="5" cols="60"></textarea>7Q7p N"MBPcc'PA6tz<script>alert(3122);WKr8J</script>fowCP</ textarea> <p> http://xxx/reflect/textarea1?in=%3C/textarea%3E7Q7pN%22MBPcc' PA6tz%3Cscript%3Ealert(3122);WKr8J%3C/script%3EfowCP 試行回数:1回 Case2:検査リクエスト送信時 CODE BLUE 2016
  157. 157. MBSD Case2:検査の動画 CODE BLUE 2016 https://www.youtube.com/watch?v=6UHbMGdqr_0
  158. 158. RXSS検出のデモ MBSD Target:webseclab CODE BLUE 2016 Case サニタ イズ 出力箇所/サニタイズ /reflect/full1 × BODY タグ内 /reflect/textarea1 × TEXTAREA タグ内 /reflect/onmouseover 〇 INPUTタグの属性値 入力値からタグ閉じが削除 /reflect/js4_dq × SCRIPT タグ内
  159. 159. MBSD <!doctype html><html> <head><title>Reflected XSS - attribute injection in ta gs (dq.2)</title></head><body> <H2>Update Your Preferences</H2><p> <FORM> Homepage: <input value=""><script>alert()" name="in" s ize="40"><BR> http://xxx/xss/reflect/onmouseover?in=”><script>alert()</script> 出力箇所 :INPUTタグ内 サニタイズ:タグ閉じの削除 Case3:正常リクエスト送信時 CODE BLUE 2016
  160. 160. MBSD <!doctype html><html> <head><title>Reflected XSS - attribute injection in tags (dq.2)</title></head><body> <H2>Update Your Preferences</H2><p> <FORM> Homepage: <input value=""> <option s onmouseover=alert (3122);//" name="in" size="40"><BR> http://xxx/xss/reflect/onmouseover?in=%22%3E%3C/option%3E%3 Coption%20s%20onmouseover=alert(3122);// 試行回数:3回 Case3:検査リクエスト送信時 CODE BLUE 2016
  161. 161. MBSD Case3:検査の様子 CODE BLUE 2016 https://www.youtube.com/watch?v=-r3C1moUVqU
  162. 162. RXSS検出のデモ MBSD Target:webseclab CODE BLUE 2016 Case サニタ イズ 出力箇所/サニタイズ /reflect/full1 × BODY タグ内 /reflect/textarea1 × TEXTAREA タグ内 /reflect/onmouseover 〇 INPUTタグの属性値 入力値からタグ閉じが削除 /reflect/js4_dq × SCRIPT タグ内
  163. 163. MBSD <!doctype html><html><head><title>JavaScript and double-quote injection in JS block (js.4)</title> </head><body> <script language="javascript"> var f = { date: "", week: "1", bad: "saivs12345", phase: "2", http://xxx/xss/reflect/js4_dq?in=saivs12345 出力箇所 :SCRIPTタグ内 サニタイズ:なし Case4:正常リクエスト送信時 CODE BLUE 2016
  164. 164. MBSD <!doctype html><html><head><title>JavaScript and double-quote injection in JS block (js.4)</title> </head><body> <script language="javascript"> var f = { date: "", week: "1", bad: "6", skuI;alert(3122);//1VU7k", phase: "2", http://xxx/xss/reflect/js4_dq?in=6%22,%0A%20%20%20%20%20%20 %20%20%20%20%20%20skuI;alert(3122);//1VU7k 試行回数:1回 Case4:検査リクエスト送信時 CODE BLUE 2016
  165. 165. MBSD Case4:検査の様子 CODE BLUE 2016 https://www.youtube.com/watch?v=Pf2lSB25C3M
  166. 166. SAIVSの能力 MBSD CODE BLUE 2016  Webアプリのクローリング (✔)  脆弱性の検出 (✔)
  167. 167. SAIVSの能力 MBSD CODE BLUE 2016 「WebアプリをクローリングしながらRXSSを検出」 これを、全自動で実現
  168. 168. SAIVSのデモ MBSD Target:OWASP Broken Web Apps Google Gruyere CODE BLUE 2016
  169. 169. SAIVSのデモ MBSD CODE BLUE 2016 Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update 脆弱性
  170. 170. SAIVSのデモ MBSD CODE BLUE 2016 Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update
  171. 171. SAIVSのデモ MBSD CODE BLUE 2016 Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update
  172. 172. SAIVSのデモ MBSD CODE BLUE 2016 Top Sign up Login New snippet Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile New snippet register Profile update
  173. 173. SAIVSのデモ MBSD CODE BLUE 2016 Top Sign up Login Sign up complete 1.Sign upでアカウント作成 2.ログイン 3.Snippet 登録 4.Profile 更新 Profile Profile update New snippet New snippet register
  174. 174. SAIVSのデモ MBSD CODE BLUE 2016 機能名 サニタ イズ 出力箇所/サニタイズ New snippet register 〇 BODY タグ内 SCRIPTタグをサニタイズ Profile update 〇 A タグ内 「<」「>」をサニタイズ
  175. 175. MBSD CODE BLUE 2016 SAIVSのデモ https://www.youtube.com/watch?v=N5d9oM0NcM0
  176. 176. MBSD  クローリング能力の強化  複雑なアプリへの対応  CAPTCHAへの対応 CODE BLUE 2016 将来の展望  脆弱性検出能力の強化  複雑なRXSSパターンへの対応  他脆弱性への対応
  177. 177. • Download “.PDF” version of this document: ≫ http://www.mbsd.jp MBSD

×