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.
CODE BLUE 2016
Presented by Isao Takaesu
機械学習でWebアプリケーション
の脆弱性を見つける方法
About the speaker
• 職業 : Webセキュリティエンジニア
• 所属 : 三井物産セキュアディレクション
• 趣味 : 脆弱性スキャナ作り、機械学習
• ブログ: http://www.mbsd.jp/blog/
• Bla...
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...
MBSD CODE BLUE 2016
ナイーブベイズによるページ種別認識
ナイーブベイズによるページ種別認識
MBSD
<h1>Sign in</h1>
<form action="/cyclone/sessions" method="post">
<label for="email">Email</label>
<...
ページ種別認識のカテゴリテーブル
MBSD
カテゴリ キーワード
ログイン Email, User ID, Password, Sign in …
会員登録 Email, Password, Confirm, Sign up …
検索 Word...
ページ種別認識のカテゴリテーブル
MBSD
カテゴリ キーワード
ログイン Email, User ID, Password, Sign in …
会員登録 Email, Password, Confirm, Sign up …
検索 Word...
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> Pass...
遷移成否認識のカテゴリテーブル
MBSD
カテゴリ キーワード
遷移成功
good, valid, success, normal, fine, clean, nice,
can, match, confirmation, ok, finish...
遷移成否認識のカテゴリテーブル
MBSD
カテゴリ キーワード
遷移成功
good, valid, success, normal, fine, clean, nice,
can, match, confirmation, ok, finish...
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₁
...
学習済み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 )
...
最適な文字入力を実現するモデル
MBSD
遷移試行を繰り返しながら最適な入力文字列を学習
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 1...
最適な文字入力を実現するモデル
MBSD
遷移試行を繰り返しながら最適な入力文字列を学習
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 1...
入力値のパターン
MBSD
パターン 入力値
英字のみ abc, abcdef, aBc, aBcdEf, ABCDEF …
数字のみ 123, 12345, 4111111111111111 …
英字・数字 abc123, 123abc, a...
学習の流れ
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=ab...
学習の流れ
MBSD
MLPが選択した入力値パターンで遷移を試行
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=abc...
学習の流れ
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@...
学習の流れ
MBSD
MLPの重みを更新(バックプロパゲーション)
CODE BLUE 2016
・
・
・
・
・
・
遷移元ページ
MLP
入力値
Q学習
遷移先ページ
p1=abc, xyz・・・
p1=123, 12a・・・
p1=ab...
学習の流れ
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 …
Fir...
問題:添え字の不一致
MBSD CODE BLUE 2016
訓練時 診断時
不一致!!
MBSD CODE BLUE 2016
添え字の類似度を求める
解決方法
類似度の算出
MBSD CODE BLUE 2016
word2vecを使う
word2vec?
単語同士の類似度を求める自然言語処理の手法
単語をベクトルで表現
MBSD CODE BLUE 2016
利用例)
 単語の類似度
Input : e-mail
 単語の加算・減算
word cos distance
e...
類似度計算への利用例
MBSD CODE BLUE 2016
注目単語周辺の単語を基に類似度を計算
学習データ)
interpretation further. However, if anyone wishes to discuss this...
word2vecの学習データ
MBSD CODE BLUE 2016
The 20 Newsgroups data set.
約2万のニュースグループドキュメント集
ニュースグループ例)
 コンピュータ(Graphics, MS-Window...
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...
MBSD
候補 類似度
email 0.956302
mail 0.927386
E-mail 0.900249
address 0.893337
reply 0.865438
contact 0.846801
message 0.792930...
MBSD
候補 類似度
email 0.956302
mail 0.927386
E-mail 0.900249
address 0.893337
reply 0.865438
contact 0.846801
message 0.792930...
クローリングの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>
</hea...
RXSSの例①: 攻撃された様子
MBSD
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Case 3 - RXSS</title>
</he...
RXSSの例②:ちょっとセキュアなアプリ
MBSD
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Case 4 - RXSS</title>
...
RXSSの例②:攻撃された様子
MBSD
<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Case 4 - RXSS</title>
</hea...
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
利用例)
 機械翻訳
 文書生成(小説、歌詞、ソースコード)
 音生成(音...
LSTM(Long-Short Term Memory)?
時系列データの学習が可能な機械学習アルゴリズム
短期的・長期的なデータ間の依存関係を学習可能
MBSD
利用例)
 機械翻訳
 文書生成(小説、歌詞、ソースコード)
 音生成(音...
文書生成への利用例
MBSD CODE BLUE 2016
ソースコードの生成(from Andrej Karpathy blog)
static int indicate_policy(void)
{
int error;
if (fd ==...
なぜLSTMなのか?
MBSD
<!doctype html><html><head><title>Reflected XSS in
textarea (textarea1)</title></head><body>
<H2>Textarea ...
なぜLSTMなのか?
MBSD
<!doctype html><html><head><title>Reflected XSS in
textarea (textarea1)</title></head><body>
<H2>Textarea ...
MBSD
<!doctype html><html><head><title>Reflected XSS in
textarea (textarea1)</title></head><body>
<H2>Textarea injection t...
MBSD
<!doctype html><html><head><title>Reflected XSS in
textarea (textarea1)</title></head><body>
<H2>Textarea injection t...
MBSD CODE BLUE 2016
どのようにしてLSTMを学習させるか?
LSTMの学習データ(HTML)
MBSD
<abbr class="" data-utime="" title=""></abbr>
<abbr class='' title=''></abbr>
<abbr data-utime='' ti...
MBSD
_satellite.pageBottom();']
(function(window) {
var _gaq = _gaq || [];
var methods = ['log', 'dir', 'trace'];
if (type...
学習済みLSTMが生成した構文(一例)
MBSD
シード 生成構文
<textarea cols="60">xxx </textarea>
<!– mbsdtest xxx -->
<input type="" value=“xxx ">
va...
RXSS検出の3要件
MBSD
 HTML構文の理解(✔)
 JavaScript構文の理解(✔)
 サニタイズの回避
CODE BLUE 2016
機械によるサニタイズの回避
MBSD CODE BLUE 2016
多層パーセプトロン(MLP)、Q学習を使う
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
...
出力箇所のパターン
MBSD
出力箇所 例
属性値 : 「”」 <~value="xxx">
属性値 : 「'」 <~value='xxx'>
属性値 : noquote <~value=xxx>
JavaScript 内 <script>xx...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
...
サニタイズのパターン
MBSD
サニタイズ 例
「“」の実体参照への変換・排除 「”」⇒「&quot;」
「‘」の実体参照への変換・排除 「’」⇒「&apos;」
「<」の実体参照への変換・排除 「<」⇒「&lt;」
「>」の実体参照への変換・...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
サニタイズ回避を実現するモデル
・
...
検査パターン(一例)
MBSD
出力箇所 検査パターン
「”」で囲まれた属性値
「'」で囲まれた属性値
noquoteの属性値
HTML タグの外側
“event handler
"><sCriPt>xxx
"><img src=xxx
‘ev...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
MBSD
・
・
・
・
・
・
属性値
JS内
・・・
出力箇所
MLP
タグの外
“sCriPt”
他のタグ
URL
encode
検査パターン
Event
handler
・
・
・
Q学習
状態観測
学習の流れ
・
・
・
評価
重み更...
問題
MBSD CODE BLUE 2016
100回の試行 ⇒ 効率が悪い
MBSD CODE BLUE 2016
本番前に訓練を行う
訓練に使用したWebアプリ(一例)
MBSD
WAVSEP
CODE BLUE 2016
ReflectedXSS GET Input Vector
Case06 出力箇所 :IMG タグの SRC 属性値
サニタイズ:< , > ⇒ &lt;...
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>a...
RXSSを検出するために検査リクエストを送信
MBSD
Web Server
Web Apps
SAIVS
検査リクエスト送信
CODE BLUE 2016
第1次検査
<~value=“”><script>alert(3122);</scri...
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(312...
サニタイズ回避可能な検査パターンを選択
(学習済み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 × TEXTA...
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTA...
MBSD
<!doctype html><html><head><title>Full Javascript
Injection (full.1)</title></head><body>
Hello!<BR>
The value of cgi...
MBSD
<!doctype html><html><head><title>Full Javascript
Injection (full.1)</title></head><body>
Hello!<BR>
The value of cgi...
MBSD
Case1:検査の動画
CODE BLUE 2016
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTA...
MBSD
<!doctype html><html><head><title>Reflected XSS in
textarea (textarea1)</title></head><body>
<H2>Textarea injection t...
MBSD
<!doctype html><html><head><title>Reflected XSS in
textarea (textarea1)</title></head><body>
<H2>Textarea injection t...
MBSD
Case2:検査の動画
CODE BLUE 2016
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTA...
MBSD
<!doctype html><html>
<head><title>Reflected XSS - attribute injection in ta
gs (dq.2)</title></head><body>
<H2>Updat...
MBSD
<!doctype html><html>
<head><title>Reflected XSS - attribute injection in
tags (dq.2)</title></head><body>
<H2>Update...
MBSD
Case3:検査の様子
CODE BLUE 2016
RXSS検出のデモ
MBSD
Target:webseclab
CODE BLUE 2016
Case
サニタ
イズ
出力箇所/サニタイズ
/reflect/full1 × BODY タグ内
/reflect/textarea1 × TEXTA...
MBSD
<!doctype html><html><head><title>JavaScript and
double-quote injection in JS block (js.4)</title>
</head><body>
<scr...
MBSD
<!doctype html><html><head><title>JavaScript and
double-quote injection in JS block (js.4)</title>
</head><body>
<scr...
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.Profil...
SAIVSのデモ
MBSD CODE BLUE 2016
Top Sign up
Login New snippet
Sign up
complete
1.Sign upでアカウント作成
2.ログイン
3.Snippet 登録
4.Profil...
SAIVSのデモ
MBSD CODE BLUE 2016
Top Sign up
Login New snippet
Sign up
complete
1.Sign upでアカウント作成
2.ログイン
3.Snippet 登録
4.Profil...
SAIVSのデモ
MBSD CODE BLUE 2016
Top Sign up
Login New snippet
Sign up
complete
1.Sign upでアカウント作成
2.ログイン
3.Snippet 登録
4.Profil...
SAIVSのデモ
MBSD CODE BLUE 2016
Top Sign up
Login
Sign up
complete
1.Sign upでアカウント作成
2.ログイン
3.Snippet 登録
4.Profile 更新
Profile...
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
Upcoming SlideShare
Loading in …5
×

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

853 views

Published on

日本では情報セキュリティに係る人材が不足している。私は人材不足を解消する一つの方法として、人工知能(AI)技術に着目し、自らの意志でWebアプリケーションの脆弱性を見つけ出すAI「SAIVS(Spider Artificial Intelligence Vulnerability Scanner)」の研究開発を進めている。SAIVSの最終目標は、人間の脆弱性診断員と同等以上の診断能力を獲得することである。現在のSAIVSはプロトタイプだが、以下に示す人間のような行動を取りながらWebアプリの脆弱性を見つけ出すことが可能である。

1. Webアプリのクローリング
SAIVSはログインや会員登録ページなどの動的ページを、人間と同じようにクローリングすることができる。例えばログインが必要なWebアプリの場合、先に会員登録ページでアカウントを作成し、その後にログインを行う。また、アカウント作成時は、入力フォームの意味(名前、E-mail、パスワードなど)を解釈し、フォームに最適な文字列を入力する。仮に入力値の不備によりエラーが発生した場合、エラーの意味を解釈し、エラーを回避する別の文字列を入力する。

2. 脆弱性の検出
SAIVSはWebアプリの挙動を観察した上で、少ない手数で効率的に脆弱性を見つけ出すことができる。例えば反射型XSSの場合、入力値がエコーバックされる箇所を認識し、HTMLやJavaScriptの文脈に応じて悪用可能なタグやスクリプトを挿入する。また、入力値がサニタイズされた場合は、これを回避する検査パターンを自ら判断して再度検査を行う。

これらの行動は、複数の機械学習アルゴリズムを使用し、脆弱性診断員が脆弱性を見つけ出す際の思考パターンをシミュレートすることで実現している。

本プレゼンでは、SAIVSを実現する手法の解説と、検証サイトをクローリングしながら脆弱性(反射型XSS)を見つけ出すデモンストレーションを披露する。

---
高江洲 勲 Isao Takaesu
三井物産セキュアディレクション株式会社に所属するWebセキュリティエンジニア。CISSP。
約7年間、Webアプリケーションの脆弱性を見つける業務(Webアプリ診断)に携わっており、これまでに多くの脆弱性を見つけてきた。最近、より多くの脆弱性を見つけたいと考えているが、人間によるWebアプリ診断では、リソースに限りがあると感じている。そこで、近年産業利用が加速している機械学習に着目し、本技術を用いて人間の代わりにWebアプリ診断を行うことを目指したAI「SAIVS」の研究開発を進めている。近い将来、SAIVSが私の代わりにWebアプリ診

Published in: Technology
  • Be the first to comment

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

  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
  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
  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
  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
  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
  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のデモ
  176. 176. MBSD  クローリング能力の強化  複雑なアプリへの対応  CAPTCHAへの対応 CODE BLUE 2016 将来の展望  脆弱性検出能力の強化  複雑なRXSSパターンへの対応  他脆弱性への対応
  177. 177. • Download “.PDF” version of this document: ≫ http://www.mbsd.jp MBSD

×