SlideShare a Scribd company logo
1 of 177
CODE BLUE 2016
Presented by Isao Takaesu
機械学習でWebアプリケーション
の脆弱性を見つける方法
About the speaker
• 職業 : Webセキュリティエンジニア
• 所属 : 三井物産セキュアディレクション
• 趣味 : 脆弱性スキャナ作り、機械学習
• ブログ: http://www.mbsd.jp/blog/
• Black Hat Asia 2016 Arsenal
• AISECjpを主催
高江洲 勲
MBSD
タカエス イサオ
CODE BLUE 2016
Agenda
1. 研究の背景
2. 研究の目的
3. SAIVSの概要
4. 実現手法
5. 検証結果
6. デモンストレーション
7. 将来の展望
MBSD CODE BLUE 2016
研究の背景
MBSD CODE BLUE 2016
セキュリティ技術者の圧倒的な不足
研究の背景
MBSD CODE BLUE 2016
その数、約24万人 (IPA調べ)
研究の背景
MBSD CODE BLUE 2016
人間のみでは限界では?
研究の目的
MBSD CODE BLUE 2016
情報セキュリティの完全自動化
研究の目的
MBSD CODE BLUE 2016
先ずは、
Webアプリケーション診断
Webアプリケーション診断とは?
MBSD CODE BLUE 2016
Webアプリの脆弱性を検出
Webアプリケーション診断とは?
MBSD
診断員
Web Server
Web Apps
診断ベンダ 顧客
疑似攻撃
レスポンスの分析
CODE BLUE 2016
 Webアプリをクローリングしながら疑似攻撃
 レスポンスを分析して脆弱性を判定
Webアプリケーション診断とは?
MBSD
診断員
Web Server
Web Apps
診断ベンダ 顧客
疑似攻撃
SQLi?
XSS?
レスポンスの分析
CODE BLUE 2016
 Webアプリをクローリングしながら疑似攻撃
 レスポンスを分析して脆弱性を判定
Webアプリケーション診断の課題
MBSD CODE BLUE 2016
診断員の職人技に大きく依存
最終目標
全自動Webアプリ診断の実現
MBSD
人工知能
Web Server
Web Apps
診断ベンダ 顧客
疑似攻撃
レスポンスの分析
CODE BLUE 2016
SQLi?
XSS?
診断AI「SAIVS」
MBSD CODE BLUE 2016
自律的にWebアプリ診断を行うAI
SAIVS
Spider Artificial Intelligence Vulnerability Scanner
SAIVSの能力
MBSD
 Webアプリのクローリング
 脆弱性の検出
CODE BLUE 2016
SAIVSの能力
MBSD
 Webアプリのクローリング
 脆弱性の検出
CODE BLUE 2016
クローリングの重要性
MBSD CODE BLUE 2016
Top Login
Register Confirm
Contact Us
My Page
Complete
Send
message
脆弱性
クローリングの重要性
MBSD CODE BLUE 2016
Top Login
Register Confirm
Contact Us
My Page
Complete
正しくログインすることが必要
Send
message
クローリングの重要性
MBSD CODE BLUE 2016
Top Login
Register Confirm
Contact Us
My Page
Complete
正しく会員登録することが必要
Send
message
クローリングの重要性
MBSD CODE BLUE 2016
Top Login
Register Confirm
Contact Us
My Page
Complete
網羅的に正しくページ遷移することが重要
Send
message
MBSD
Webアプリのクローリングって難しい
なぜ?
CODE BLUE 2016
このページは何?
MBSD
人間:キーワードを基に容易にページ種別を認識
機械:困難(ログイン?会員登録?)
CODE BLUE 2016
何が起きたのか?
MBSD
人間:メッセ―ジ内容から遷移失敗を認識
機械:メッセージの解釈は困難
CODE BLUE 2016
フォームに入力する文字は?
MBSD
遷移
人間:入力フォームに正しい文字列を入力
機械:フォームの意味解釈は困難
???
???
???
???
???
CODE BLUE 2016
MBSD
クローリングには複雑な思考が必要
CODE BLUE 2016
クローリングの3要件
MBSD
 ページ種別の認識
 遷移成否の認識
 最適文字の入力
CODE BLUE 2016
MBSD CODE BLUE 2016
どのように実現するか?
本研究のアプローチ
MBSD CODE BLUE 2016
人間の脳をリバースエンジニアリング
本研究のアプローチ
MBSD CODE BLUE 2016
各思考パターンを
機械学習アルゴリズムで実現
クローリングの3要件
MBSD
 ページ種別の認識
 遷移成否の認識
 最適文字の入力
CODE BLUE 2016
人間によるページ種別認識
MBSD CODE BLUE 2016
人間によるページ種別認識
MBSD CODE BLUE 2016
ページ種別を特徴付けるキーワードで認識
機械によるページ種別認識
MBSD CODE BLUE 2016
ナイーブベイズを使う
ナイーブベイズ?
テキスト分類に使用される機械学習アルゴリズム
カテゴリテーブルと確率理論を使用
MBSD
利用例)
 スパムメールフィルタ
 ブログ記事のカテゴリ自動分類
 WAFの攻撃検知率向上
CODE BLUE 2016
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
MBSD CODE BLUE 2016
ナイーブベイズによるページ種別認識
ナイーブベイズによるページ種別認識
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
ページ種別認識のカテゴリテーブル
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
ページ種別認識のカテゴリテーブル
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
「ログイン」に多く含まれる
⇒カテゴリ「ログイン」の確率が最も高い
MBSD CODE BLUE 2016
ナイーブベイズによるページ種別認識
「ログイン」と認識
クローリングの3要件
MBSD
 ページ種別の認識 (✔)
 遷移成否の認識
 最適文字の入力
CODE BLUE 2016
MBSD CODE BLUE 2016
人間によるページ遷移成否の認識
MBSD CODE BLUE 2016
人間によるページ遷移成否の認識
遷移失敗を特徴付けるキーワードで判断
MBSD CODE BLUE 2016
ナイーブベイズを使う
機械による遷移成否認識
MBSD CODE BLUE 2016
機械による遷移成否認識
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
遷移成否を特徴付けるキーワードを抽出
ストップワードは除外
機械による遷移成否認識
遷移成否認識のカテゴリテーブル
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
遷移成否認識のカテゴリテーブル
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
「遷移失敗」に多く含まれる
⇒カテゴリ「遷移失敗」の確率が最も高い
MBSD CODE BLUE 2016
機械による遷移成否認識
「遷移失敗」と認識
クローリングの3要件
MBSD
 ページ種別の認識 (✔)
 遷移成否の認識 (✔)
 最適文字の入力
CODE BLUE 2016
MBSD
人間による最適文字の入力
CODE BLUE 2016
フォームの意味を解釈し、正しい文字を入力
遷移
Isao Takaesu
isao123@mbsd.jp
mbsd1234
mbsd1234
機械による最適文字の入力
MBSD CODE BLUE 2016
多層パーセプトロン(MLP)、Q学習を使う
多層パーセプトロン(MLP)?
画像認識などに使用される機械学習アルゴリズム
生物の神経回路構造と機能を模したモデル
MBSD
利用例)
 画像認識
 手書き数字認識
CODE BLUE 2016
・
・
・
・
・
・
・
・
・
Data Label
0
1
2
学習データ
手書き数字認識への利用例
CODE BLUE 2016MBSD
・
・
・
・
・
・
・
・
・
X₁
X₂
X784
X0
Y₁
Y₂
Y300
Y0
Z₁
Z₂
Z10
MLP
学習
入力データに応じた”答え”を出力することが可能
学習済みMLP
014679 425970401967
手書き数字認識への利用例
CODE BLUE 2016MBSD
Q学習?
エージェントの最良行動を学習する機械学習アルゴリズム
行動の良し悪しをQ値で評価
MBSD
利用例)
 ロボットの歩行動作習得
 ビデオゲームのプレイ
 経路探索
CODE BLUE 2016
ロボット歩行動作習得への利用例
MBSD CODE BLUE 2016
エージェント
環境
a1 前進
a2 左折
a3 右折
a4 後退
行動
状態 s
・・・
次の状態 s’
政策 ( a | s ) 遷移確率 ( s’ | s, a )
目の前に穴が…
報酬 r = R( s, a, s’ )
タスク:障害物を避けてゴールすること
報酬の合計が最大となる政策を学習
Q( s, a )値の更新
最適な文字入力を実現するモデル
MBSD
遷移試行を繰り返しながら最適な入力文字列を学習
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
最適な文字入力を実現するモデル
MBSD
遷移試行を繰り返しながら最適な入力文字列を学習
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
入力値のパターン
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
学習の流れ
MBSD
遷移元/遷移先ページをMLPに入力
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
学習の流れ
MBSD
(入力に対する)何れかの入力値パターンを選択
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
学習の流れ
MBSD
MLPが選択した入力値パターンで遷移を試行
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
学習の流れ
MBSD
遷移試行の結果を観測
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
学習の流れ
MBSD
遷移結果に応じた報酬の付与(Q値の更新)
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
学習の流れ
MBSD
MLPの重みを更新(バックプロパゲーション)
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
学習の流れ
MBSD
300回程度の試行で学習可能
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc@xxx・・・
状態観測
評価
重み更新
問題
MBSD CODE BLUE 2016
300回の試行 ⇒ 効率が悪い
MBSD CODE BLUE 2016
本番前に訓練を行う
解決方法
遷移の訓練に使用したWebアプリ(一例)
MBSD
OWASP Broken Web Apps
CODE BLUE 2016
SAIVSの訓練
MBSD CODE BLUE 2016
BodgeIt peruggia WackoPicko Yazd
SAIVS
遷移試行&学習
⇒ 各300回
各入力フォームに対する最適文字列の獲得
・・・
Web Apps
訓練で獲得した最適文字列(一例)
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
問題:添え字の不一致
MBSD CODE BLUE 2016
訓練時 診断時
不一致!!
MBSD CODE BLUE 2016
添え字の類似度を求める
解決方法
類似度の算出
MBSD CODE BLUE 2016
word2vecを使う
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
類似度計算への利用例
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」の類似度は高い
word2vecの学習データ
MBSD CODE BLUE 2016
The 20 Newsgroups data set.
約2万のニュースグループドキュメント集
ニュースグループ例)
 コンピュータ(Graphics, MS-Windows, Hardware)
 サイエンス(Cryptography, Electronics, Space)
 趣味(Motorcycles, Baseball, Hockey)
SAIVSの訓練
MBSD CODE BLUE 2016
Windows Crypt Hardware Space
SAIVS
The 20 Newsgroups data set
類似度の学習
単語同士の類似度の習得
・・・
word2vec
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
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
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
クローリングの3要件
MBSD
 ページ種別の認識 (✔)
 遷移成否の認識 (✔)
 最適文字の入力 (✔)
CODE BLUE 2016
クローリングのデモ
MBSD
Target:OWASP Broken Web Apps Cyclone
CODE BLUE 2016
クローリングのデモ
MBSD CODE BLUE 2016
Top Login
Register Confirm
User Search
Complete
1.Registerでアカウント作成
2.ログイン
3.ユーザ検索
脆弱性
クローリングのデモ
MBSD CODE BLUE 2016
Top Login
Register Confirm
User Search
Complete
1.Registerでアカウント作成
2.ログイン
3.ユーザ検索
クローリングのデモ
MBSD CODE BLUE 2016
Top Login
Register Confirm
User Search
Complete
1.Registerでアカウント作成
2.ログイン
3.ユーザ検索
クローリングのデモ
MBSD CODE BLUE 2016
Top Login
Register Confirm
User Search
Complete
1.Registerでアカウント作成
2.ログイン
3.ユーザ検索
クローリングのデモ
MBSD CODE BLUE 2016
Top Login
Register Confirm
User Search
Complete
1.Registerでアカウント作成
2.ログイン
3.ユーザ検索
MBSD CODE BLUE 2016
SAIVSの能力
MBSD
 Webアプリのクローリング(✔)
 脆弱性の検出
CODE BLUE 2016
本研究の目的
MBSD CODE BLUE 2016
少ない手数で脆弱性を検出
MBSD CODE BLUE 2016
Webアプリの脆弱性も色々あるが…
本研究の対象
MBSD CODE BLUE 2016
Reflected Cross-Site Scripting
(RXSS)
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
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
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
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
RXSS検出の3要件
MBSD
 HTML構文の理解
 JavaScript構文の理解
 サニタイズの回避
CODE BLUE 2016
MBSD CODE BLUE 2016
どのように実現するか?
本研究のアプローチ
MBSD CODE BLUE 2016
人間の脳をリバースエンジニアリング
本研究のアプローチ
MBSD CODE BLUE 2016
各思考パターンを
機械学習アルゴリズムで実現
RXSS検出の3要件
MBSD
 HTML構文の理解
 JavaScript構文の理解
 サニタイズの回避
CODE BLUE 2016
MBSD
機械によるHTML/JavaScriptの理解
LSTMを使う
CODE BLUE 2016
LSTM(Long-Short Term Memory)?
時系列データの学習が可能な機械学習アルゴリズム
短期的・長期的なデータ間の依存関係を学習可能
MBSD
利用例)
 機械翻訳
 文書生成(小説、歌詞、ソースコード)
 音生成(音楽、声)
CODE BLUE 2016
LSTM(Long-Short Term Memory)?
時系列データの学習が可能な機械学習アルゴリズム
短期的・長期的なデータ間の依存関係を学習可能
MBSD
利用例)
 機械翻訳
 文書生成(小説、歌詞、ソースコード)
 音生成(音楽、声)
CODE BLUE 2016
文書生成への利用例
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の生成コード
起点(シード)を基に次々とコードを生成
なぜ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
なぜ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
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なのか?
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なのか?
文脈を理解してスクリプトを挿入
⇒ スクリプトが動く
MBSD CODE BLUE 2016
どのようにしてLSTMを学習させるか?
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
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構文
学習済み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
シードに対応した構文生成が可能
RXSS検出の3要件
MBSD
 HTML構文の理解(✔)
 JavaScript構文の理解(✔)
 サニタイズの回避
CODE BLUE 2016
機械によるサニタイズの回避
MBSD CODE BLUE 2016
多層パーセプトロン(MLP)、Q学習を使う
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
検査試行を繰り返しながらサニタイズ回避パターンを学習
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
CODE BLUE 2016
出力箇所のパターン
MBSD
出力箇所 例
属性値 : 「”」 <~value="xxx">
属性値 : 「'」 <~value='xxx'>
属性値 : noquote <~value=xxx>
JavaScript 内 <script>xxx</script>
HTML タグの外側 <~>xxx</~>
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
CODE BLUE 2016
サニタイズのパターン
MBSD
サニタイズ 例
「“」の実体参照への変換・排除 「”」⇒「&quot;」
「‘」の実体参照への変換・排除 「’」⇒「&apos;」
「<」の実体参照への変換・排除 「<」⇒「&lt;」
「>」の実体参照への変換・排除 「>」⇒「&gt;」
「alert();」の排除 「alert();」⇒「」
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
CODE BLUE 2016
検査パターン(一例)
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
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
出力箇所/サニタイズパターンをMLPに入力
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
(入力に対する)何れかの検査パターンを選択
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
MLPが選択した検査パターンで検査を試行
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
検査結果を観測
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
検査結果に応じた報酬の付与(Q値の更新)
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
MLPの重みを更新(バックプロパゲーション)
CODE BLUE 2016
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更新
“ ⇒ &quot;
< ⇒ &lt;
・・・
サニタイズ
> ⇒ &gt;
100回程度の試行で最適な検査パターンを学習可能
CODE BLUE 2016
問題
MBSD CODE BLUE 2016
100回の試行 ⇒ 効率が悪い
MBSD CODE BLUE 2016
本番前に訓練を行う
訓練に使用した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);//
SAIVSの訓練
MBSD CODE BLUE 2016
Case06 Case08 Case10 Case27
SAIVS
WAVSEP
検査試行&学習
⇒各100回
各サニタイズパターンを回避する検査文字列の獲得
・・・
RXSS検出の3要件
MBSD
 HTML構文の理解(✔)
 JavaScript構文の理解(✔)
 サニタイズの回避(✔)
CODE BLUE 2016
MBSD
SAIVSの検査フロー
 第1次検査
 第2次検査
CODE BLUE 2016
出力箇所を調べるために正常リクエストを送信
MBSD
Web Server
Web Apps
SAIVS
正常リクエスト送信
CODE BLUE 2016
第1次検査
入力値の出力箇所を認識
MBSD
Web Server
Web Apps
SAIVS
正常リクエスト送信
レスポンスの分析
CODE BLUE 2016
第1次検査
<~value="xxx">
出力箇所を基にシードを抽出
MBSD
Web Server
Web Apps
SAIVS
正常リクエスト送信
レスポンスの分析
CODE BLUE 2016
第1次検査
<~value="xxx">
シードに対応したHTML/JSを生成
(学習済みLSTMを使用)
MBSD
Web Server
Web Apps
SAIVS
正常リクエスト送信
レスポンスの分析
CODE BLUE 2016
第1次検査
<~value=“”>
生成したHTML / JavaScriptにスクリプトを付与
MBSD
Web Server
Web Apps
SAIVS
正常リクエスト送信
レスポンスの分析
CODE BLUE 2016
第1次検査
<~value=“”><script>alert(3122);</script>
RXSSを検出するために検査リクエストを送信
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト送信
CODE BLUE 2016
第1次検査
<~value=“”><script>alert(3122);</script>
RXSS有無を判定
検出 ⇒ 検査終了、未検出 ⇒ 第2次検査へ
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト送信
レスポンスの分析
CODE BLUE 2016
第1次検査
RXSSあり?なし?
サニタイズのパターンを特定
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト送信
レスポンスの分析
CODE BLUE 2016
第2次検査
<~value=“”&gt;&lt;script&gt;alert(3122);・・・
サニタイズ回避可能な検査パターンを選択
(学習済みMLPを使用)
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト送信
レスポンスの分析
CODE BLUE 2016
第2次検査
Event handler?
サニタイズを回避する検査リクエストを送信
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト再送信
CODE BLUE 2016
第2次検査
Event handler?
RXSS有無を判定
検出 ⇒ 検査終了、未検出 ⇒ 第2次検査を再試行
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト再送信
レスポンスの分析
CODE BLUE 2016
第2次検査
RXSSあり?なし?
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTAREA タグ内
/reflect/onmouseover 〇
INPUTタグの属性値
入力値からタグ閉じが削除
/reflect/js4_dq × SCRIPT タグ内
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTAREA タグ内
/reflect/onmouseover 〇
INPUTタグの属性値
入力値からタグ閉じが削除
/reflect/js4_dq × SCRIPT タグ内
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
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
MBSD
Case1:検査の動画
CODE BLUE 2016
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTAREA タグ内
/reflect/onmouseover 〇
INPUTタグの属性値
入力値からタグ閉じが削除
/reflect/js4_dq × SCRIPT タグ内
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
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
MBSD
Case2:検査の動画
CODE BLUE 2016
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTAREA タグ内
/reflect/onmouseover 〇
INPUTタグの属性値
入力値からタグ閉じが削除
/reflect/js4_dq × SCRIPT タグ内
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
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
MBSD
Case3:検査の様子
CODE BLUE 2016
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTAREA タグ内
/reflect/onmouseover 〇
INPUTタグの属性値
入力値からタグ閉じが削除
/reflect/js4_dq × SCRIPT タグ内
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
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
MBSD
Case4:検査の様子
CODE BLUE 2016
SAIVSの能力
MBSD CODE BLUE 2016
 Webアプリのクローリング (✔)
 脆弱性の検出 (✔)
SAIVSの能力
MBSD CODE BLUE 2016
「WebアプリをクローリングしながらRXSSを検出」
これを、全自動で実現
SAIVSのデモ
MBSD
Target:OWASP Broken Web Apps Google Gruyere
CODE BLUE 2016
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
脆弱性
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
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
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
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
SAIVSのデモ
MBSD CODE BLUE 2016
機能名
サニタ
イズ
出力箇所/サニタイズ
New snippet register 〇
BODY タグ内
SCRIPTタグをサニタイズ
Profile update 〇
A タグ内
「<」「>」をサニタイズ
MBSD CODE BLUE 2016
SAIVSのデモ
MBSD
 クローリング能力の強化
 複雑なアプリへの対応
 CAPTCHAへの対応
CODE BLUE 2016
将来の展望
 脆弱性検出能力の強化
 複雑なRXSSパターンへの対応
 他脆弱性への対応
• Download “.PDF” version of this document:
≫ http://www.mbsd.jp
MBSD

More Related Content

More from CODE BLUE

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...CODE BLUE
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten NohlCODE BLUE
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo PupilloCODE BLUE
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫CODE BLUE
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...CODE BLUE
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka CODE BLUE
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...CODE BLUE
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...CODE BLUE
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...CODE BLUE
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...CODE BLUE
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也CODE BLUE
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...CODE BLUE
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...CODE BLUE
 

More from CODE BLUE (20)

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲

Editor's Notes

  1. 皆さんこんにちは。 これから「機械学習でWebアプリケーションの脆弱性を見つける方法」と題してお話します。 このセッションでは、文字通り機械学習を駆使し、全自動でWebアプリケーションの脆弱性を見つけ出す手法の解説と、デモンストレーションをお見せしたいと思います。
  2. 私は三井物産セキュアディレクションという日本のサイバーセキュリティ会社でセキュリティエンジニアをやっております「タカエス」と申します。 今年の3月にシンガポールで開催されたBlack Hat Asia Arsenalに参加しており、これからお話するSAIVSと呼ぶAIを披露しました
  3. 本日はこちらの流れでお話します。 研究の背景や理論を説明した後、最後にデモンストレーションを披露いたします。
  4. 先ず、本研究を始めた背景として、日本では「セキュリティ技術者が圧倒的に不足している」という現状があります。
  5. 2年前のIPAの試算によると、約24万人もの人材が不足していると言われています。 これは途方もない数字です。
  6. 労働力不足が叫ばれる日本の労働市場において、24万人の人材を確保することは現実的でしょうか? 私は、人間のみでは限界があると考えています。
  7. そこで、これを解決する一つの方法として、人材不足なのであれば「情報セキュリティを完全に自動化」すれば良いではないか?と考えました。
  8. ただ、情報セキュリティと一口で言っても多数のジャンルがありますが、まず初めに私が専門としている「Webアプリケーション診断」の自動化を試みることにしました。
  9. ところで「Webアプリケーション診断」とは何でしょうか? これは、Webアプリケーションに潜む脆弱性を見つけ出す行為を言います。
  10. こちら(絵)のように、診断員と呼ばれる脆弱性を見つけ出すエンジニアが、対象のWebアプリの一つ一つのページをクローリングしながら疑似攻撃を仕掛けていきます。
  11. そして、疑似攻撃に対するWebアプリからのレスポンスを分析し、脆弱性(SQLi、XSSなど)の有無を判定します。 このWebアプリ診断では脆弱性スキャナと呼ばれる脆弱性を見つけ出すツールも使われますが、
  12. 診断員の職人技に依存する部分が多く、人材が不足している現状があります。
  13. そこで、本研究では、人間の診断員に代わって全自動でWebアプリ診断を行う人工知能(AI)の開発を最終目標にしています。
  14. 現在、私はSAIVSと呼ぶ診断を行うAI、すなわち診断AIの研究開発を進めています。 現在のSAIVSはプロトタイプですが、
  15. 大きくこちらの二つの能力を有しています。
  16. 先ず「Webアプリのクローリング」能力についてお話します。
  17. Webアプリ診断において、クローリングは非常に重要です。 こちらはとあるWebアプリの画面遷移図を表しており、ドクロマークはそのページに脆弱性があることを意味しています。
  18. 例えば、「My page」にある脆弱性を見つけるためには、「Login」を通る必要があります。 すなわち、正しくログインすることが必要になります。
  19. 次に、「Complete」にある脆弱性を見つけるためには、正しく会員登録を行う必要があります。
  20. このように、Webアプリに潜む脆弱性を網羅的に見つける為には、1つ1つのページを正しく遷移することが非常に重要になります。
  21. 人間はこのクローリングという行為を当たり前のように行っていますが、これを機械で行うのは非常に難しいです。 それはなぜでしょうか?
  22. 例えば、こちらの画面は何をするためのページだと思いますか? 我々人間であれば、画面上の情報から即座に「会員登録」ページであると認識できます。 しかし、機械は画面上の文字の意味を理解できないため、ページ種別の認識は非常に困難です。
  23. 次に、こちらの画面を見て、何が起きたと思いますか? 人間であれば、画面上のメッセージから即座に「エラー」が発生したと認識できます。 しかし、機械にはメッセージの解釈は困難です。すなわち、何が起きたのか認識できません。
  24. 最後に、左のページから右のページに正しく遷移するために、これらの入力フォームに何を入れれば良いでしょうか? 人間であれば、「Name」や「Email」などのフォームの添え字から、何を入力すれば良いのか、即座に判断することができます。 しかし、機械はフォームの意味が分からないため、正しい文字を入力することは困難です。
  25. このように、一見簡単そうに見える「クローリング」では、実は非常に複雑な思考が必要であることが分かります。
  26. これを纏めると、機械が正しくクローリングを行うためには、最低限この三つの要件を満たす必要があります。
  27. では、この複雑な思考をどのように機械で実現するのでしょうか?
  28. 本研究のアプローチは、人間の脳をリバースエンジニアリングすることで、クローリングを行う際の人間の思考パターンを一つ一つ洗い出し、
  29. 各思考パターンを実現する機械学習アルゴリズムを当てはめていくことで、実現を試みました。
  30. では、これを一つずつ見ていきましょう。 まずは「ページ種別の認識」です。
  31. 人間がこのページの種別を認識する場合、
  32. 画面上にある「Sign in」「Email」「Password」といった、ページ種別を特徴付けるキーワードを基に「ログイン」ページであると認識します。 これは、過去に様々なページとその種類を見てきた中で、人間の脳内にキーワードとページ種別を対応付けるデータベースが構築されていることで、容易に認識することができます。 これと同じことを機械で実現するために、
  33. 本研究では「ナイーブベイズ」と呼ばれる機械学習アルゴリズムを使用します。
  34. ナイーブベイズとは、テキスト分類によく使われるアルゴリズムで、「分類カテゴリとキーワードを対応付けたカテゴリテーブル」と確率理論をベースにしています。 利用例として、良く皆さまがご存知のスパムフィルタなどに使用されています。
  35. 少し理解を深めるために、スパムフィルタを例にして説明します。 メール本文から抽出したキーワードを緑丸とすると、各キーワードがSPAM/HAMのカテゴリに属する確率をカテゴリテーブルを基に求めます。 そして、各キーワードの確率の積を求め、メール本文中のキーワード全体としてSPAM/HAMどちらに属する確率が高いのか求めます。 この例ではSPAMの確率が高いため、これらのキーワードを含んだメールはSPAMであると分類されます。
  36. このアルゴリズムをページ種別の認識に使用する場合、
  37. ページのHTMLソースを解析し、ページ種別を特徴付けると思われるキーワードのみを抽出します。 赤字で示した文字列がキーワードとなります。今回は画面上で強調されて表示されるHタグ内の文字列と、フォームの添え字に使われるFORMタグ内の文字列を抽出しています。 なお、ソース上には大量の文字列が含まれており、ページ種別の特徴付けに寄与しない文字列も含まれています。 そのような所謂ストップワードは除外することで、ページ種別認識の精度を高めています。
  38. こちらが今回使用するカテゴリテーブルです。 カテゴリすなわちページ種別と、各ページ種別を特徴付けるキーワードが対応したテーブルになっています。 なお、このテーブルは、私が手動で約50のWebアプリを訪れ、各WebアプリのHTMLソースから、ページ種別を特徴付けると思われる単語を抽出して作成しました。 先ほどのページで抽出したキーワードは「Sign in」「Email」「Password」でしたので、
  39. 各キーワードがどのカテゴリに含まれるのか求めます。 この例では、カテゴリ「ログイン」に最も多くのキーワードが含まれるため、
  40. このページは「ログイン」と認識することができます。 このように、ナイーブベイズを使用することで、シンプルかつ強力にページ種別の認識を実現することができます。
  41. 次に、「遷移成否の認識」を実現する手法を説明します。
  42. 人間が遷移成否を認識する場合、
  43. 画面上に現れるメッセージ上の「errors」「doesn’t match」「invalid」などといった、遷移成否を特徴付けるキーワードを基に「遷移に失敗した」と認識します。 勘のいい方は既に気付いたかもしれませんが、これを機械で実現するために、
  44. ナイーブベイズを使用します。
  45. このアルゴリズムを遷移成否の認識に使用する場合、
  46. 遷移試行の前後で差分として現れたメッセージ部分のHTMLソースを解析し、遷移成否を特徴付けると思われるキーワードのみを抽出します。 赤字で示した文字列がキーワードとなります。 ここでもストップワードは除外することで、遷移成否の認識精度を高めています。
  47. こちらが使用するカテゴリテーブルです。 このテーブルも、私が事前に手動で作成しました。 先ほどのページで抽出したキーワードは「errors」「problem」「doesn’t match」などでしたので、
  48. 各キーワードがどのカテゴリに含まれるのか求めます。 この例では、カテゴリ「遷移失敗」に最も多くのキーワードが含まれるため、
  49. 「遷移試行に失敗した」と認識することができます。
  50. クローリングの最後に「最適文字の入力」を実現する手法を説明します。
  51. 人間が画面遷移を行う場合、各フォームの添え字、例えば「Name」「Email」「Password」などの文字列を基に、各フォームに入力する最適な文字を判断します。 人間は過去の経験から、各フォームに適した文字列を即座に求めることができます。 これを機械で実現するために、
  52. 本研究では「多層パーセプトロン」と「Q学習」と呼ばれる機械学習アルゴリズムを組み合わせて使用します。 なお、多層パーセプトロンは名前が長いため、以降MLPと呼称します。
  53. MLPとは、画像や手書き文字の分類に使われるアルゴリズムで、生物の神経回路網をシミュレートしたモデルです。 例えば人間は、タイヤが四つ付いた鉄の塊を見れば、それが「自動車」であると即座に認識することができます。 これは、過去に様々な自動車と言われる画像や映像を見てきたことで、目から入ったタイヤ四つの鉄の塊=自動車、と脳内で信号が伝達されることで即座に判断することができます。 このような神経回路網の働きを模したものがMLPです。
  54. 少し理解を深めるために、手書き数字認識を例にして説明します。MLPで様々な認識を行うためには、事前にMLPの学習を行う必要があります。 この絵の左側は学習データを示しており、学習データは実際に認識を行う画像と、それに対応する答え、ラベルがセットになっています。 この学習データを一つ一つMLPに入力していき、MLPが導き出した答えと、実際のラベルと突合し、誤り即ち差分があればその差分を補正するようにMLPの重みを調整していきます。 この学習行為を大量に行うことで、徐々にMLPの重みが最適化されていき、
  55. 例えば、この左の画像をMLPに与えると、MLPは「これは9です」と正しい答えを導き出すことが可能になります。 これがMLPです。
  56. 次にQ学習です。 Q学習とは、エージェントと呼ばれる行動の主体が、「とある環境下」における最良な行動パターンを学習していくアルゴリズムです。 人間が成功と失敗を繰り返しながら、徐々に成功する行動パターンを学習していくのによく似ています。
  57. 「障害物を避けてゴールする」というタスクを例にしてQ学習を少し詳しく説明します。 Q学習では、現在の状態(s)に対し、エージェントが何らかの行動(a)を取り、次の状態(s’)に変化します。 この時、「元の状態(s)、行動(a)、次の状態(s‘)」の良し悪しを判定し、タスクの目標達成に近づいたら多くの報酬を、遠ざかったら少ない報酬を、穴に落ちたらマイナスの報酬を与えるルールにします。 初期状態ではエージェントは学習していないため、状態(s)すなわち前に穴がある状態でランダムな行動(a)を取ります。例えば左折したとします。 この行動の結果、ゴールに近づいたとしたら多くの報酬を与え、「前に穴がある状態で左折した」という政策の評価値(Q値)を大きく更新します。 Q値は政策の選択確率に影響を与え、Q値が大きい政策が頻繁に選択されるようになります。 このように、初期状態ではランダムに行動を取り、徐々に各政策のQ値を更新していくことで、タスクの終盤では、様々な状態における最良な政策すなわち行動が取れるようになります。 そして、Q学習では、タスク内の一連の行動を通して、報酬の合計が最大化される政策を学習します。 すなわち、目先の利益だけでなく、タスクの達成に寄与する行動を学習することが可能になります。
  58. このMLPとQ学習を組み合わせ、「最適な文字入力」を実現するモデルがこちらになります。 MLPへの入力は「遷移元ページと遷移先ページ」になります。 これは、同じ遷移先ページに遷移する場合でも、遷移元ページによってはフォームに入力する文字列が異なることがあり得る、というWebアプリの特徴を表しています。 入力を受け取ったMLPは何らかの「各フォームへの入力値の組み合わせ」を出力します。 そして、これらの入力値を使って遷移を試行し、その結果、「次のページに遷移する」というタスクの目標に近づいたか否かQ学習で評価します。 評価の結果、タスク目標の達成に寄与した行動に多くの報酬を与え、この報酬を基にMLPの重みを更新します。 このように、様々な遷移試行を繰り返しながらMLPの重みを最適化していくことで、タスクすなわち次のページに正しく遷移できる最適な入力文字列を学習することができます。
  59. 本研究では、MLPが出力する各フォームへの入力値を、
  60. このように定義しています。 これは一例ですが、「英字のみ」や「英字・数字」の組み合わせ、メアド風文字列など、フォームに入力され得る様々なパターンを用意しています。 ここで、入力値、すなわち次のページに遷移する際に送信されるパラメータの数が多くなると、組み合わせ数も爆発的に増加します。 こうなると、さきほどのMLPの学習が収束する時間が非常に多くかかる可能性があります。 そこで、今回はhiddenやcheckbox、selectオプションなどといったアプリが事前に用意した値は学習させず、GUIから入力する必要のあるtextやpasswordを持ったパラメータのみを学習対象としています。これにより、MLPの学習を収束し易くしています。
  61. それでは、学習の流れを見ていきましょう。 まず初めに、「遷移元ページ」と「遷移先ページ」をMLPに入力します。 なお、クローリングする各ページには予めINDEXを付けており、MLPに入力する情報は各ページのINDEX値となります。
  62. MLPは入力に対する何らかの入力値パターンを選択します。
  63. そして、MLPが選択した入力値パターンを使用し、遷移を試行します。
  64. 遷移試行の結果、遷移成否を先ほどのナイーブベイズで判断し、
  65. 遷移結果に応じて、MLPが選択した入力値パターンの報酬を決定します。
  66. 最後に、得られた報酬を基に、MLPの重みを更新します。
  67. このような行為を約300回繰り返すことで、入力フォームに対する最適な入力文字を学習することが可能になります。
  68. しかし、ここで一つ問題があります。 言うまでもなく、300回の試行は非常に効率が悪いということです。 もしかすると、総当たりの方が効率が良いかもしれません。
  69. そこで、遷移試行の事前訓練を施すことで、この問題の解決を図ります。
  70. こちらが訓練に使用したWebアプリの一例です。 主にOWASP Broken Web Appsに収録されているアプリを使用しています。
  71. これらのWebアプリの各フォームに対し、約300回の試行を行い、各入力フォームに対する最適な文字列を獲得します。
  72. これらが、訓練で獲得した、各入力フォームに対する最適な文字列の一例です。 このテーブルがあれば、例えば本番で「FirstName」というフォームに遭遇したとすると、その際は訓練に従って「abcdef」などの文字を入力すれば良いことになります。 これが上手くいけば、たった1回の遷移試行で次のページに正しく遷移することができます。
  73. しかし、ここでまた問題が発生します。 それは、訓練時のフォームの添え字と、本番時のフォームの添え字がマッチしないことが起こり得ます。 人間であれば、「Username」と「Name」が同じものを指していると認識できますが、機械ではどのように実現すれば良いでしょうか?
  74. 本研究では、添え字の類似度を求め、類似度が近い場合は同じものを指している、と判断させることにしました。 この文字の類似度を求めるために、
  75. 今回は「Word2Vec」という手法を使うことにしました。
  76. Word2Vecは自然言語処理の1手法であり、単語同士の類似度を高精度で求めることができます。 以下の例のように、「e-mail」に対し、「email」「mail」「reply」が類似していることを求めることができます。類似度が1に近いほど、類似していることを意味します。
  77. このWord2Vecも事前に学習させなければ、単語間の類似度を求めることはできません。 Word2Vecは、学習データに含まれる、計算対象すなわち注目単語の周辺にある単語を基に、各単語の類似度を求めています。 この例では、赤字で示した注目単語の周辺にある「send」「メアド風文字」「article」などの黒太字の単語に着目することで、「e-mail」「mail」「reply」の類似度は高いと判断します。
  78. 今回は、The 20 Newsgroups data setを学習に使いました。 これは約2万のニュースグループドキュメントが含まれており、様々なカテゴリにジャンル分けされています。 このドキュメントの中に、Webアプリのフォームの添え字に使用されている様々な単語が含まれていたので使用することにしました。
  79. この学習データセットをSAIVSに学習させることで、単語同士の類似度を習得することができます。
  80. これが訓練で獲得した類似単語の一例です。 例えば、「e-mail」に類似する単語は「email」「mail」「address」などになります。 次に「name」に類似する単語は「names」「username」「firstname」などになります。 本研究では、各単語の上位10個類似単語を抽出し、
  81. 本番時の添え字と類似する単語候補から、訓練時の添え字と一致するものを検索することで、
  82. 訓練時と本番時の添え字の不一致問題を解決しています。 一致した候補が保持している入力値をフォームへの入力値とします。 これにより、訓練時と診断時の添え字の不一致問題を解決することができます。
  83. このように、複数の機械学習アルゴリズムを駆使することで、クローリングに必要なこれら三つの要件を実現することが可能となります。
  84. ここで、これまでお話した手法を使用し、実際にWebアプリをクローリングするデモ動画をお見せしたいと思います。 クローリング対象は、OWASP Broken Web AppsのCycloneです。
  85. このWebアプリの画面遷移図はこのようになります。 Login後にある「User Search」に脆弱性が潜んでいます。
  86. 初期状態ではログインアカウントを持っていないため、各ページの種別をナイーブベイズで認識します。 そして、ログインをスキップして最初に会員登録ページでログインアカウントを作成します。
  87. この時、会員登録時の各フォームに、訓練済みのMLPを使用して最適な文字列を入力します。
  88. そして、アカウント作成後にログインし、
  89. 「User Search」ページにクローリングしながら脆弱性を探します。
  90. こちらがデモ動画です。 このように、人間と同じようにWebアプリをクローリングできていることが分かると思います。
  91. 以上、クローリングの実現手法の説明は終わります。 次にSAIVSのもう一つの能力である「脆弱性の検出」について説明します。
  92. 本研究では、脆弱性スキャナのように様々なシグネチャを送って脆弱性を検出するのではなく、人間と同じようにWebアプリの挙動を観察しながら少ない手数で脆弱性を検出させることを目標としています。
  93. ところで、Webアプリの脆弱性と言っても様々なものがありますが、
  94. 今回は反射型のXSSを対象とします。
  95. 簡単にXSSを説明しますと、例えば超脆弱なアプリがあったとします。 このアプリはパラメータ「input」に入力した文字列が、INPUTタグのVALUE属性内に出力されます。
  96. ここで、パラメータ「input」にスクリプトを入力したとします。 すると、入力したスクリプトがINPUTタグ内にこのように出力されます。 VALUE属性値が「”(ダブルクォート)」で閉じられ、また、「>(右括弧)」でINPUTタグが閉じられた後に、スクリプトが挿入されています。 その結果、JavaScriptが動作します。このように、XSS脆弱性があると、任意のJavaScriptを動作させることができます。
  97. 次にちょっとセキュアなアプリを例にしましょう。 先ほどと同じように、パラメータ「input」にスクリプトを入力します。 すると、SCRIPTタグが除外された状態で出力されます。これではJavaScriptは動作しません。 このように、ちょっとセキュアなアプリでは、XSSを防ぐためにサニタイジングを行っています。
  98. しかし、このような入力値、イベントハンドラをパラメータ「input」に入力すると、このように出力されます。 先程はSCRIPTタグを除外することでJavaScriptの動作を防いでいましたが、SCRIPTタグを使わないパターンには対応していないため、 JavaScriptが動作します。すなわち、アプリ側のサニタイズを回避して任意のスクリプトを動作させることが可能です。 この二つの例から分かることは、XSS脆弱性を見つけるためには、HTMLやJavaScript構文の理解に加え、様々なサニタイズ機構を回避するパターンを知っておく必要があります。
  99. 反射型XSSを見つける為には、最低限この三つの要件を満たす必要があります。
  100. では、この要件をどのようにして機械で実現したらよいでしょうか?
  101. これも、クローリングと同じように、診断員の脳をリバースエンジニアリングし、診断員がXSS脆弱性を見つける際の思考パターンを一つ一つ洗い出し、
  102. 各思考パターンを実現する機械学習アルゴリズムを当てはめていくことで、実現を試みました。
  103. では、これを一つずつ見ていきましょう。 まずは「HTML構文・JavaScript構文の理解」です。 人間はHTMLやJavaScriptのリファレンス本や達人に教えを乞うなどして理解することができますが、 機械では同じように学習することはできません。
  104. そこで本研究では、「LSTM」と呼ばれる機械学習アルゴリズムを使用します。
  105. LSTMとは、動画や音声・音楽といった時系列データの学習に使われるアルゴリズムです。 また、文章も一つ一つの単語を一つの時間と捉えると、時系列データとして考えることができます。
  106. この特徴を利用して、日英の機械翻訳や文書生成などで利用されています。
  107. これは「Andrej(アンドレイ)」さんと言う方が検証したソースコード生成の例です。 彼はLinuxのソースコードをLSTMに学習させ、LSTMがオリジナルのソースコードを生成できるのか検証を行っています。 左が学習に使用したソースコード、右がLSTMが生成したオリジナルのソースコードです。 これを見ても分かる通り、学習データからソースコードの特徴を学習し、起点となる文字列、ここで「static」を基に次々と後続のコードを生成していることが分かると思います。このソースコードは微妙に構文誤りがあるためそのままコンパイルはできませんが、よくコードの特徴を捉えています。
  108. このようなLSTMの特徴を利用し、HTML・JavaScript構文の理解を試みました。 例えば、パラメータ「in」の値がTEXTAREAタグ内に出力されるとします。
  109. TEXTAREAタグ内に出力されるため、単純にスクリプトを入力しただけではJavaScriptを動作させることはできません。
  110. 人間の診断員であれば、入力値が出力される場所に着目し、「一度TEXTAREAタグを閉じた後にスクリプトを挿入すれば、JavaScriptが動くのでは?」と考えるのが普通です。 これは、HTML構文を理解しているからこそ思いつく考えです。
  111. そこで、このようにTEXTAREAの閉じタグの後にスクリプトを付与した値を入力することで、めでたくJavaScriptを動作させることができます。 このように、様々なXSS脆弱性を見つけるためには、HTML構文の理解が必要です。 また、入力値はJavaScript構文内に出力されることもあるため、同じくJavaScript構文の理解が必要です。
  112. では、どうやってLSTMにHTML・JavaScript構文を学習させれば良いでしょうか。 手動で様々な構文データを作成しても良いのですが、これには非常に手間がかかります。
  113. そこで本研究では、無作為に選んだ幾つかのWebサイトをスクレイピングし、約2万ページ分、HTML構文12,000種類のHTMLデータを収集し、学習データとして使うことにしました。 このように、2万ページ分も収集すれば、様々な組み合わせのHTML構文パターンを得ることができます。
  114. JavaScript構文も同様に、約1万ページ分のJavaScript構文を学習データとして使うことにしました。
  115. このように収集したデータをLSTMに学習させることで、文書生成の起点となるシードを与えると、それに対応する適切なHTMLまたはJavaScript構文を自動生成することができます。 TEXTAREAタグにはTEXTAREAの閉じタグを、コメントにはコメント閉じを適切に生成できます。 このようにLSTMを使うことで、
  116. HTML構文の理解、JavaScript構文の理解を実現することができます。 次に、「サニタイズの回避」を実現する手法を説明します。
  117. ここでも「MLP」と「Q学習」を組み合わせることで実現を試みています。
  118. MLPとQ学習を組み合わせ、「サニタイズ回避」を実現するモデルがこちらになります。 MLPへの入力は「入力値が出力される場所」と「サニタイズの種類」になります。 入力を受け取ったMLPは何らかの「検査パターン」を選択します。 そして、これらの検査パターンを使ってRXSSの検出を試行し、その結果、「RXSSを検出する」というタスクの目標に近づいたか否かQ学習で評価します。 評価の結果、タスク目標の達成に寄与した検査パターンには多くの報酬を与え、この報酬を基にMLPの重みを更新します。 このように、様々な検査試行を繰り返しながらMLPの重みを最適化していくことで、タスクすなわちRXSSを検出できる最適な検査パターンを学習することができます。
  119. ここで、MLPに入力する「入力値が出力される場所」を見てみましょう。
  120. 本研究では、代表的なこの5つのパターンを用意しています。 今後、他のパターンも追加していく予定です。
  121. 次に、MLPに入力する「サニタイズの種類」を見てみましょう。
  122. 本研究では、代表的なこの5つのパターンを用意しています。 こちらも、今後他のパターンも追加していく予定です。
  123. 次に、MLPが選択する「検査パターン」を見てみましょう。
  124. こちらは一例ですが、入力値が出力される場所に応じて、このような検査パターンを用意しています。 現状、これらの検査パターンは私が手動で代表的なものを用意していますが、今後はこの検査パターン自体もSAIVSが自分で生成できるようにしたいと考えています。これは今後の課題です。
  125. それでは、学習の流れを見ていきましょう。 まず初めに、「入力値が出力される場所」と「サニタイズの種類」をMLPに入力します。 なお、この入力には、クローリングの時と同じように予めINDEXを付けています。
  126. MLPは入力に対する何らかの検査パターンを選択します。 学習の初期はランダムに検査パターンを選択します。
  127. そして、MLPが選択した検査パターンを使用し、検査を試行します。
  128. 検査試行の結果、検査に使用した文字列が出力された箇所を観察し、
  129. サニタイズの状況に応じて、MLPが選択した検査パターンの報酬を決定します。 まったくサニタイズされていなければ多くの報酬を、一部がサニタイズされていた場合は少ない報酬を、全てサニタイズされていた場合はマイナスの報酬を与えます。
  130. 最後に、得られた報酬を基に、MLPの重みを更新します。
  131. このような行為を約100回繰り返すことで、「入力値が出力される場所とサニタイズの種類」に応じて、上手くサニタイズを回避する検査パターンを学習することが可能になります。
  132. しかし、ここで一つ問題があります。 言うまでもなく、100回の試行は非常に効率が悪いということです。 もしかすると、総当たりの方が効率が良いかもしれません。
  133. そこで、クローリングの時と同じように、検査試行の事前訓練を施すことで、この問題の解決を図ります。
  134. こちらが訓練に使用した訓練用アプリの一例です。 今回は脆弱性スキャナの検証用に使用される「WAVSEP」と呼ばれる「やられサイト」を使用しています。 このサイトには多数のXSSケースが含まれており、出力箇所やサニタイズのパターンも豊富に揃っています。
  135. このWAVSEPの各ケースに対し、約100回の検査試行を行い、各サニタイズパターンを回避する最適な検査パターンを獲得します。
  136. このように、複数の機械学習アルゴリズムを駆使することで、RXSSを検出するのに必要なこれら三つの要件を実現することが可能となります。
  137. ここまでの説明を踏まえて、SAIVSがRXSSを検出する流れを説明します。 SAIVSは第一次、第二次の2つのフェーズで検出を試みます。
  138. まず最初に、入力値が出力される場所を調べるために、正常リクエストを送信します。
  139. そして、アプリからのレスポンスを分析し、入力値が出力される場所を特定します。
  140. 出力箇所を基に、シードとなる文字列を抽出します。 この例では、何らかの属性値の前方部分がシードになります。
  141. そして、学習済みLSTMを使用し、シードに対応したHTMLまたはJavaScript構文を生成します。 この例では、属性値とタグを閉じるHTML構文を生成しています。
  142. LSTMが生成した構文の後に、単純なスクリプトを付与し、
  143. 検査リクエストを送信します。
  144. 検査リクエストに対するアプリからのレスポンスを分析し、RXSSの有無を判定し、検出ありの場合はその時点で検査は終了します。 上手くいけば、このたった1回の検査試行でRXSSを検出することができます。 逆にサニタイズされてRXSSが検出できなかった場合は、第二次検査に移行します。
  145. まず初めに、サニタイズの状況を観察し、サニタイズパターンを特定します。
  146. そして、訓練済みMLPを使用し、出力箇所とサニタイズパターンを基に、サニタイズを回避できる可能性が最も高い検査パターンを使い、
  147. 検査リクエストを送信します。
  148. そして、レスポンスを分析し、RXSSの有無を判定します。 検出有りの場合は、その時点で検査終了、検出できなかった場合は、次にサニタイズを回避できる可能性が高い検査パターンを使って再試行します。 なお、正しくRXSS対策が取られているアプリの場合は何度検査試行しても検出できませんので、最大10回試行して検出できない場合は、「RXSSの検出を諦める」ようにしています。
  149. この手法を踏まえ、幾つかRXSSを検出するデモ動画をお見せしたいと思います。 デモに使用したアプリは、「webseclab」です。 このアプリには様々なRXSS脆弱性を含んだケースが存在しますが、ここではこの4つのケースをお見せします。
  150. 先ずはケース1です。
  151. このケースは、入力値がBODYタグ内に出力され、サニタイズはありません。
  152. よって、単純なスクリプトを挿入するだけで、RXSSを検出することができます。 これはあまりにも単純なため、SAIVSでなくとも1回の試行で検出できます。
  153. このデモ動画がこちらになりますが、単純な例のためここでは割愛します。
  154. 次にケース2です。
  155. このケースは、入力値がTEXTAREAタグ内に出力され、サニタイズはありません。 TEXTAREAタグ内に出力されるため、単純なスクリプト挿入はできません。
  156. SAIVSはTEXTAREAタグ内に出力されていることを観察することで、このようにTEXTAREAタグを閉じた後にスクリプトを挿入するパターンを即座に導き出すことができます。 これにより、たった1回の試行でRXSSを検出できます。
  157. こちらがデモ動画です。
  158. 次にケース3です。
  159. このケースでは、入力値がINPUTタグのVALUE属性値内に出力されますが、SCRIPT閉じタグがサニタイズされるため、単純なスクリプトではRXSSを検出することができません。
  160. SAIVSはこのサニタイズを回避する検査パターンを訓練結果に基づき導き出します。 そして、このようにOPTIONタグにイベントハンドラを入れたパターンでRXSSを検出しています。試行回数は3回です。 ちなみに、なぜSAIVSがOPTIONタグを使用したのかは私にも分かりません。
  161. このデモ動画がこちらです。
  162. 最後にケース4です。
  163. このケースは、入力値がJavaScript内のオブジェクトリテラルキー「bad」のデータ部分に出力されており、サニタイズはありません。
  164. SAIVSはJavaScript構文を理解した上で、このような検査パターンを導きだしました。 オブジェクトリテラルキー「bad」のデータに適当な値を入れ、改行した後にalertを入れています。 こちらもたった1回の試行でRXSSを検出しています。
  165. こちらがデモ動画です。
  166. このように、機械学習アルゴリズムを使って人間の思考を再現することで、脆弱性、RXSSを検出できることが分かりました。
  167. 本研究では、「WebアプリをクローリングしながらRXSSを検出する」といった診断員のような行動を全自動で実現できることを示しました。
  168. 最後に、これまで説明したクローリング能力と脆弱性の検出能力を組み合わせ、少し実践的なデモをお見せしたいと思います。 デモで使うアプリはOWASP Broken Web Appsに収録されている「Google Gruyere(グルイエール)」です。
  169. これがGruyereの画面遷移図です。 「New snippet register」と「Profile update」にRXSS脆弱性が潜んでいます。
  170. この脆弱性を見つけるために、まず初めに「Sign Up」でアカウントを作成し、
  171. 作ったアカウントでログインし、
  172. Sinippet登録ページにクローリングしながらRXSS脆弱性の検査を行います。
  173. その後、Profile更新機能にクローリングし、同じくRXSS脆弱性の検査を行います。
  174. なお、RXSS脆弱性が潜んでいる二つの機能では、このような個所に入力値が出力され、またそれぞれサニタイズが施されています。 即ち、ただしくクローリングしながらサニタイズを回避してRXSSを検出する必要があります。
  175. それでは、さっそくデモを行いたいと思います。
  176. このように、診断員の思考パターンを一つ一つ洗い出し、それらに機械学習アルゴリズムを当てはめていくことで、人間のような行動を取りながらWebアプリ診断を行える可能性があることが分かりました。 今後は、より複雑なアプリやクローラー防止機能のCAPTCHAを乗り越える機能を付与し、クローリング能力を強化していきたいと考えています。 また、脆弱性の検出については、より複雑なRXSSへの対応や、ロジック系を含む他の脆弱性への対応を行い、脆弱性検出能力を強化していきたいと考えています。 そして、近い将来、SAIVSが人間と同等、もしくは人間をサポートする程の能力を獲得した際には、Webアプリ診断業務に投入していきたいと考えています。
  177. 以上で私のセッションを終了します。 ご清聴、ありがとうございました。