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

177

Click here to load reader

Upload: isao-takaesu

Post on 08-Jan-2017

3.774 views

Category:

Technology


0 download

TRANSCRIPT

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

CODE BLUE 2016

Presented by Isao Takaesu

機械学習でWebアプリケーション

の脆弱性を見つける方法

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

About the speaker

• 職業 : Webセキュリティエンジニア

• 所属 : 三井物産セキュアディレクション

• 趣味 : 脆弱性スキャナ作り、機械学習

• ブログ: http://www.mbsd.jp/blog/

• Black Hat Asia 2016 Arsenal

• AISECjpを主催

高江洲 勲

MBSD

タカエス イサオ

CODE BLUE 2016

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

Agenda

1. 研究の背景

2. 研究の目的

3. SAIVSの概要

4. 実現手法

5. 検証結果

6. デモンストレーション

7. 将来の展望

MBSD CODE BLUE 2016

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

研究の背景

MBSD CODE BLUE 2016

セキュリティ技術者の圧倒的な不足

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

研究の背景

MBSD CODE BLUE 2016

その数、約24万人 (IPA調べ)

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

研究の背景

MBSD CODE BLUE 2016

人間のみでは限界では?

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

研究の目的

MBSD CODE BLUE 2016

情報セキュリティの完全自動化

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

研究の目的

MBSD CODE BLUE 2016

先ずは、

Webアプリケーション診断

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

Webアプリケーション診断とは?

MBSD CODE BLUE 2016

Webアプリの脆弱性を検出

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

Webアプリケーション診断とは?

MBSD

診断員Web Server

Web Apps診断ベンダ 顧客

疑似攻撃

レスポンスの分析

CODE BLUE 2016

Webアプリをクローリングしながら疑似攻撃

レスポンスを分析して脆弱性を判定

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

Webアプリケーション診断とは?

MBSD

診断員Web Server

Web Apps診断ベンダ 顧客

疑似攻撃

SQLi?

XSS?

レスポンスの分析

CODE BLUE 2016

Webアプリをクローリングしながら疑似攻撃

レスポンスを分析して脆弱性を判定

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

Webアプリケーション診断の課題

MBSD CODE BLUE 2016

診断員の職人技に大きく依存

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

最終目標

全自動Webアプリ診断の実現

MBSD

人工知能Web Server

Web Apps診断ベンダ 顧客

疑似攻撃

レスポンスの分析

CODE BLUE 2016

SQLi?

XSS?

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

診断AI「SAIVS」

MBSD CODE BLUE 2016

自律的にWebアプリ診断を行うAI

SAIVS

Spider Artificial Intelligence Vulnerability Scanner

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

SAIVSの能力

MBSD

Webアプリのクローリング

脆弱性の検出

CODE BLUE 2016

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

SAIVSの能力

MBSD

Webアプリのクローリング

脆弱性の検出

CODE BLUE 2016

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

クローリングの重要性

MBSD CODE BLUE 2016

Top Login

Register Confirm

Contact Us

My Page

Complete

Send

message

脆弱性

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

クローリングの重要性

MBSD CODE BLUE 2016

Top Login

Register Confirm

Contact Us

My Page

Complete

正しくログインすることが必要

Send

message

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

クローリングの重要性

MBSD CODE BLUE 2016

Top Login

Register Confirm

Contact Us

My Page

Complete

正しく会員登録することが必要

Send

message

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

クローリングの重要性

MBSD CODE BLUE 2016

Top Login

Register Confirm

Contact Us

My Page

Complete

網羅的に正しくページ遷移することが重要

Send

message

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

MBSD

Webアプリのクローリングって難しい

なぜ?

CODE BLUE 2016

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

このページは何?

MBSD

人間:キーワードを基に容易にページ種別を認識

機械:困難(ログイン?会員登録?)CODE BLUE 2016

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

何が起きたのか?

MBSD

人間:メッセ―ジ内容から遷移失敗を認識

機械:メッセージの解釈は困難CODE BLUE 2016

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

フォームに入力する文字は?

MBSD

遷移

人間:入力フォームに正しい文字列を入力

機械:フォームの意味解釈は困難

???

???

???

???

???

CODE BLUE 2016

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

MBSD

クローリングには複雑な思考が必要

CODE BLUE 2016

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

クローリングの3要件

MBSD

ページ種別の認識

遷移成否の認識

最適文字の入力

CODE BLUE 2016

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

MBSD CODE BLUE 2016

どのように実現するか?

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

本研究のアプローチ

MBSD CODE BLUE 2016

人間の脳をリバースエンジニアリング

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

本研究のアプローチ

MBSD CODE BLUE 2016

各思考パターンを

機械学習アルゴリズムで実現

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

クローリングの3要件

MBSD

ページ種別の認識

遷移成否の認識

最適文字の入力

CODE BLUE 2016

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

人間によるページ種別認識

MBSD CODE BLUE 2016

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

人間によるページ種別認識

MBSD CODE BLUE 2016

ページ種別を特徴付けるキーワードで認識

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

機械によるページ種別認識

MBSD CODE BLUE 2016

ナイーブベイズを使う

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

ナイーブベイズ?

テキスト分類に使用される機械学習アルゴリズム

カテゴリテーブルと確率理論を使用

MBSD

利用例)

スパムメールフィルタ

ブログ記事のカテゴリ自動分類

WAFの攻撃検知率向上

CODE BLUE 2016

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

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

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

MBSD CODE BLUE 2016

ナイーブベイズによるページ種別認識

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

ナイーブベイズによるページ種別認識

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

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

ページ種別認識のカテゴリテーブル

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

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

ページ種別認識のカテゴリテーブル

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

「ログイン」に多く含まれる

⇒カテゴリ「ログイン」の確率が最も高い

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

MBSD CODE BLUE 2016

ナイーブベイズによるページ種別認識

「ログイン」と認識

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

クローリングの3要件

MBSD

ページ種別の認識 (✔)

遷移成否の認識

最適文字の入力

CODE BLUE 2016

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

MBSD CODE BLUE 2016

人間によるページ遷移成否の認識

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

MBSD CODE BLUE 2016

人間によるページ遷移成否の認識

遷移失敗を特徴付けるキーワードで判断

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

MBSD CODE BLUE 2016

ナイーブベイズを使う

機械による遷移成否認識

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

MBSD CODE BLUE 2016

機械による遷移成否認識

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

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

遷移成否を特徴付けるキーワードを抽出

ストップワードは除外

機械による遷移成否認識

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

遷移成否認識のカテゴリテーブル

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

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

遷移成否認識のカテゴリテーブル

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

「遷移失敗」に多く含まれる

⇒カテゴリ「遷移失敗」の確率が最も高い

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

MBSD CODE BLUE 2016

機械による遷移成否認識

「遷移失敗」と認識

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

クローリングの3要件

MBSD

ページ種別の認識 (✔)

遷移成否の認識 (✔)

最適文字の入力

CODE BLUE 2016

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

MBSD

人間による最適文字の入力

CODE BLUE 2016

フォームの意味を解釈し、正しい文字を入力

遷移

Isao Takaesu

[email protected]

mbsd1234

mbsd1234

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

機械による最適文字の入力

MBSD CODE BLUE 2016

多層パーセプトロン(MLP)、Q学習を使う

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

多層パーセプトロン(MLP)?

画像認識などに使用される機械学習アルゴリズム

生物の神経回路構造と機能を模したモデル

MBSD

利用例)

画像認識

手書き数字認識

CODE BLUE 2016

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

・・・

・・・

・・・

Data Label

0

1

2

学習データ

手書き数字認識への利用例

CODE BLUE 2016MBSD

・・・

・・・

・・・

X₁

X₂

X784

X0

Y₁

Y₂

Y300

Y0

Z₁

Z₂

Z10

MLP

学習

入力データに応じた”答え”を出力することが可能

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

学習済みMLP

014679 425970401967

手書き数字認識への利用例

CODE BLUE 2016MBSD

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

Q学習?

エージェントの最良行動を学習する機械学習アルゴリズム

行動の良し悪しをQ値で評価

MBSD

利用例)

ロボットの歩行動作習得

ビデオゲームのプレイ

経路探索

CODE BLUE 2016

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

ロボット歩行動作習得への利用例

MBSD CODE BLUE 2016

エージェント

環境

a1 前進

a2 左折

a3 右折

a4 後退

行動

状態 s

・・・

次の状態 s’

方策 ( a | s ) 遷移確率 ( s’ | s, a )

目の前に穴が…

報酬 r = R( s, a, s’ )

タスク:障害物を避けてゴールすること

報酬の合計が最大となる方策を学習

Q( s, a )値の更新

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

最適な文字入力を実現するモデル

MBSD

遷移試行を繰り返しながら最適な入力文字列を学習CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

最適な文字入力を実現するモデル

MBSD

遷移試行を繰り返しながら最適な入力文字列を学習CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

入力値のパターン

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 …

メアド風 [email protected], [email protected]

CODE BLUE 2016

入力値の組み合わせをパラメータに設定

対象:INPUT TYPE = text, password

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

学習の流れ

MBSD

遷移元/遷移先ページをMLPに入力CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

学習の流れ

MBSD

(入力に対する)何れかの入力値パターンを選択CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

学習の流れ

MBSD

MLPが選択した入力値パターンで遷移を試行CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

学習の流れ

MBSD

遷移試行の結果を観測CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

学習の流れ

MBSD

遷移結果に応じた報酬の付与(Q値の更新)CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

学習の流れ

MBSD

MLPの重みを更新(バックプロパゲーション)CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

学習の流れ

MBSD

300回程度の試行で学習可能CODE BLUE 2016

・・・

・・・

遷移元ページ

MLP

入力値

Q学習

遷移先ページ

p1=abc, xyz・・・

p1=123, 12a・・・

p1=abc@xxx・・・

状態観測

評価

重み更新

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

問題

MBSD CODE BLUE 2016

300回の試行 ⇒ 効率が悪い

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

MBSD CODE BLUE 2016

本番前に訓練を行う

解決方法

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

遷移の訓練に使用したWebアプリ(一例)

MBSD

OWASP Broken Web Apps

CODE BLUE 2016

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

SAIVSの訓練

MBSD CODE BLUE 2016

BodgeIt peruggia WackoPicko Yazd

SAIVS遷移試行&学習

⇒ 各300回

各入力フォームに対する最適文字列の獲得

・・・

Web Apps

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

訓練で獲得した最適文字列(一例)

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 [email protected], [email protected]

Username abc, abcdef, aBc, aBcdEf, ABCDEF …

Signature abc, abcdef, aBc, aBcdEf, ABCDEF …

CODE BLUE 2016

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

問題:添え字の不一致

MBSD CODE BLUE 2016

訓練時 診断時

不一致!!

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

MBSD CODE BLUE 2016

添え字の類似度を求める

解決方法

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

類似度の算出

MBSD CODE BLUE 2016

word2vecを使う

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

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

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

類似度計算への利用例

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 [email protected] (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 [email protected] saying help send atheism/index

and it will mail back a reply. mathew An・・・

send mail to [email protected] 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」の類似度は高い

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

word2vecの学習データ

MBSD CODE BLUE 2016

The 20 Newsgroups data set.

約2万のニュースグループドキュメント集

ニュースグループ例)

コンピュータ(Graphics, MS-Windows, Hardware)

サイエンス(Cryptography, Electronics, Space)

趣味(Motorcycles, Baseball, Hockey)

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

SAIVSの訓練

MBSD CODE BLUE 2016

Windows Crypt Hardware Space

SAIVS

The 20 Newsgroups data set

類似度の学習

単語同士の類似度の習得

・・・

word2vec

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

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

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

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

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

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

訓練で獲得した類似単語

[email protected] ⇒ aBcdEf ⇒ http://hoge.com

Target :websiteTarget :nameTarget : e-mail

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

クローリングの3要件

MBSD

ページ種別の認識 (✔)

遷移成否の認識 (✔)

最適文字の入力 (✔)

CODE BLUE 2016

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

クローリングのデモ

MBSD

Target:OWASP Broken Web Apps Cyclone

CODE BLUE 2016

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

クローリングのデモ

MBSD CODE BLUE 2016

Top Login

Register Confirm

User Search

Complete

1.Registerでアカウント作成

2.ログイン

3.ユーザ検索

脆弱性

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

クローリングのデモ

MBSD CODE BLUE 2016

Top Login

Register Confirm

User Search

Complete

1.Registerでアカウント作成

2.ログイン

3.ユーザ検索

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

クローリングのデモ

MBSD CODE BLUE 2016

Top Login

Register Confirm

User Search

Complete

1.Registerでアカウント作成

2.ログイン

3.ユーザ検索

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

クローリングのデモ

MBSD CODE BLUE 2016

Top Login

Register Confirm

User Search

Complete

1.Registerでアカウント作成

2.ログイン

3.ユーザ検索

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

クローリングのデモ

MBSD CODE BLUE 2016

Top Login

Register Confirm

User Search

Complete

1.Registerでアカウント作成

2.ログイン

3.ユーザ検索

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

MBSD CODE BLUE 2016

https://www.youtube.com/watch?v=aXw3vgXbl1U

クローリングのデモ動画

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

SAIVSの能力

MBSD

Webアプリのクローリング(✔)

脆弱性の検出

CODE BLUE 2016

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

本研究の目的

MBSD CODE BLUE 2016

少ない手数で脆弱性を検出

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

MBSD CODE BLUE 2016

Webアプリの脆弱性も色々あるが…

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

本研究の対象

MBSD CODE BLUE 2016

Reflected Cross-Site Scripting

(RXSS)

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

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

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

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

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

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

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

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

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

RXSS検出の3要件

MBSD

HTML構文の理解

JavaScript構文の理解

サニタイズの回避

CODE BLUE 2016

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

MBSD CODE BLUE 2016

どのように実現するか?

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

本研究のアプローチ

MBSD CODE BLUE 2016

人間の脳をリバースエンジニアリング

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

本研究のアプローチ

MBSD CODE BLUE 2016

各思考パターンを

機械学習アルゴリズムで実現

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

RXSS検出の3要件

MBSD

HTML構文の理解

JavaScript構文の理解

サニタイズの回避

CODE BLUE 2016

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

MBSD

機械によるHTML/JavaScriptの理解

LSTMを使う

CODE BLUE 2016

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

LSTM(Long-Short Term Memory)?

時系列データの学習が可能な機械学習アルゴリズム

短期的・長期的なデータ間の依存関係を学習可能

MBSD

利用例)

機械翻訳

文書生成(小説、歌詞、ソースコード)

音生成(音楽、声)

CODE BLUE 2016

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

LSTM(Long-Short Term Memory)?

時系列データの学習が可能な機械学習アルゴリズム

短期的・長期的なデータ間の依存関係を学習可能

MBSD

利用例)

機械翻訳

文書生成(小説、歌詞、ソースコード)

音生成(音楽、声)

CODE BLUE 2016

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

文書生成への利用例

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の生成コード

起点(シード)を基に次々とコードを生成

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

なぜ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

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

なぜ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

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

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なのか?

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

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></textarea>・・・

http://xxx/textarea1?in=</textarea><script>alert(‘XSS’);</script>

CODE BLUE 2016

なぜLSTMなのか?

文脈を理解してスクリプトを挿入

⇒ スクリプトが動く

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

MBSD CODE BLUE 2016

どのようにしてLSTMを学習させるか?

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

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

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

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構文

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

学習済み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

シードに対応した構文生成が可能

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

RXSS検出の3要件

MBSD

HTML構文の理解(✔)

JavaScript構文の理解(✔)

サニタイズの回避

CODE BLUE 2016

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

機械によるサニタイズの回避

MBSD CODE BLUE 2016

多層パーセプトロン(MLP)、Q学習を使う

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

サニタイズ回避を実現するモデル

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

検査試行を繰り返しながらサニタイズ回避パターンを学習CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

サニタイズ回避を実現するモデル

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

CODE BLUE 2016

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

出力箇所のパターン

MBSD

出力箇所 例

属性値 : 「”」 <~value="xxx">

属性値 : 「'」 <~value='xxx'>

属性値 : noquote <~value=xxx>

JavaScript 内 <script>xxx</script>

HTML タグの外側 <~>xxx</~>

CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

サニタイズ回避を実現するモデル

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

CODE BLUE 2016

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

サニタイズのパターン

MBSD

サニタイズ 例

「“」の実体参照への変換・排除 「”」⇒「&quot;」

「‘」の実体参照への変換・排除 「’」⇒「&apos;」

「<」の実体参照への変換・排除 「<」⇒「&lt;」

「>」の実体参照への変換・排除 「>」⇒「&gt;」

「alert();」の排除 「alert();」⇒「」

CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

サニタイズ回避を実現するモデル

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

CODE BLUE 2016

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

検査パターン(一例)

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

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

出力箇所/サニタイズパターンをMLPに入力CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

(入力に対する)何れかの検査パターンを選択CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

MLPが選択した検査パターンで検査を試行CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

検査結果を観測CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

検査結果に応じた報酬の付与(Q値の更新)CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

MLPの重みを更新(バックプロパゲーション)CODE BLUE 2016

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

MBSD

・・・

・・・

属性値

JS内

・・・

出力箇所

MLP

タグの外

“sCriPt”

他のタグ

URL encode

検査パターン

Event handler

・・・

Q学習

状態観測

学習の流れ

・・・

評価

重み更新

“ ⇒ &quot;

< ⇒ &lt;

・・・

サニタイズ

> ⇒ &gt;

100回程度の試行で最適な検査パターンを学習可能CODE BLUE 2016

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

問題

MBSD CODE BLUE 2016

100回の試行 ⇒ 効率が悪い

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

MBSD CODE BLUE 2016

本番前に訓練を行う

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

訓練に使用した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);//

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

SAIVSの訓練

MBSD CODE BLUE 2016

Case06 Case08 Case10 Case27

SAIVS

WAVSEP

検査試行&学習

⇒各100回

各サニタイズパターンを回避する検査文字列の獲得

・・・

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

RXSS検出の3要件

MBSD

HTML構文の理解(✔)

JavaScript構文の理解(✔)

サニタイズの回避(✔)

CODE BLUE 2016

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

MBSD

SAIVSの検査フロー

第1次検査

第2次検査

CODE BLUE 2016

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

出力箇所を調べるために正常リクエストを送信

MBSD

Web Server

Web AppsSAIVS

正常リクエスト送信

CODE BLUE 2016

第1次検査

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

入力値の出力箇所を認識

MBSD

Web Server

Web AppsSAIVS

正常リクエスト送信

レスポンスの分析

CODE BLUE 2016

第1次検査

<~value="xxx">

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

出力箇所を基にシードを抽出

MBSD

Web Server

Web AppsSAIVS

正常リクエスト送信

レスポンスの分析

CODE BLUE 2016

第1次検査

<~value="xxx">

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

シードに対応したHTML/JSを生成

(学習済みLSTMを使用)

MBSD

Web Server

Web AppsSAIVS

正常リクエスト送信

レスポンスの分析

CODE BLUE 2016

第1次検査

<~value=“”>

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

生成したHTML / JavaScriptにスクリプトを付与

MBSD

Web Server

Web AppsSAIVS

正常リクエスト送信

レスポンスの分析

CODE BLUE 2016

第1次検査

<~value=“”><script>alert(3122);</script>

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

RXSSを検出するために検査リクエストを送信

MBSD

Web Server

Web AppsSAIVS

検査リクエスト送信

CODE BLUE 2016

第1次検査

<~value=“”><script>alert(3122);</script>

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

RXSS有無を判定

検出 ⇒ 検査終了、未検出 ⇒ 第2次検査へ

MBSD

Web Server

Web AppsSAIVS

検査リクエスト送信

レスポンスの分析

CODE BLUE 2016

第1次検査

RXSSあり?なし?

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

サニタイズのパターンを特定

MBSD

Web Server

Web AppsSAIVS

検査リクエスト送信

レスポンスの分析

CODE BLUE 2016

第2次検査

<~value=“”&gt;&lt;script&gt;alert(3122);・・・

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

サニタイズ回避可能な検査パターンを選択

(学習済みMLPを使用)

MBSD

Web Server

Web AppsSAIVS

検査リクエスト送信

レスポンスの分析

CODE BLUE 2016

第2次検査

Event handler?

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

サニタイズを回避する検査リクエストを送信

MBSD

Web Server

Web AppsSAIVS

検査リクエスト再送信

CODE BLUE 2016

第2次検査

Event handler?

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

RXSS有無を判定

検出 ⇒ 検査終了、未検出 ⇒ 第2次検査を再試行

MBSD

Web Server

Web AppsSAIVS

検査リクエスト再送信

レスポンスの分析

CODE BLUE 2016

第2次検査

RXSSあり?なし?

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

RXSS検出のデモ

MBSD

Target:webseclab

CODE BLUE 2016

Caseサニタイズ

出力箇所/サニタイズ

/reflect/full1 × BODY タグ内

/reflect/textarea1 × TEXTAREA タグ内

/reflect/onmouseover 〇INPUTタグの属性値入力値からタグ閉じが削除

/reflect/js4_dq × SCRIPT タグ内

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

RXSS検出のデモ

MBSD

Target:webseclab

CODE BLUE 2016

Caseサニタイズ

出力箇所/サニタイズ

/reflect/full1 × BODY タグ内

/reflect/textarea1 × TEXTAREA タグ内

/reflect/onmouseover 〇INPUTタグの属性値入力値からタグ閉じが削除

/reflect/js4_dq × SCRIPT タグ内

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

MBSD

<!doctype html><html><head><title>Full JavascriptInjection (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

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

MBSD

<!doctype html><html><head><title>Full JavascriptInjection (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

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

MBSD

Case1:検査の動画

CODE BLUE 2016

https://www.youtube.com/watch?v=3RkhSED5DQU

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

RXSS検出のデモ

MBSD

Target:webseclab

CODE BLUE 2016

Caseサニタイズ

出力箇所/サニタイズ

/reflect/full1 × BODY タグ内

/reflect/textarea1 × TEXTAREA タグ内

/reflect/onmouseover 〇INPUTタグの属性値入力値からタグ閉じが削除

/reflect/js4_dq × SCRIPT タグ内

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

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

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

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>7Q7pN"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

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

MBSD

Case2:検査の動画

CODE BLUE 2016

https://www.youtube.com/watch?v=6UHbMGdqr_0

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

RXSS検出のデモ

MBSD

Target:webseclab

CODE BLUE 2016

Caseサニタイズ

出力箇所/サニタイズ

/reflect/full1 × BODY タグ内

/reflect/textarea1 × TEXTAREA タグ内

/reflect/onmouseover 〇INPUTタグの属性値入力値からタグ閉じが削除

/reflect/js4_dq × SCRIPT タグ内

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

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=""><script>alert()" name="in" size="40"><BR>

http://xxx/xss/reflect/onmouseover?in=”><script>alert()</script>

出力箇所 :INPUTタグ内

サニタイズ:タグ閉じの削除

Case3:正常リクエスト送信時

CODE BLUE 2016

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

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

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

MBSD

Case3:検査の様子

CODE BLUE 2016

https://www.youtube.com/watch?v=-r3C1moUVqU

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

RXSS検出のデモ

MBSD

Target:webseclab

CODE BLUE 2016

Caseサニタイズ

出力箇所/サニタイズ

/reflect/full1 × BODY タグ内

/reflect/textarea1 × TEXTAREA タグ内

/reflect/onmouseover 〇INPUTタグの属性値入力値からタグ閉じが削除

/reflect/js4_dq × SCRIPT タグ内

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

MBSD

<!doctype html><html><head><title>JavaScript anddouble-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

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

MBSD

<!doctype html><html><head><title>JavaScript anddouble-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

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

MBSD

Case4:検査の様子

CODE BLUE 2016

https://www.youtube.com/watch?v=Pf2lSB25C3M

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

SAIVSの能力

MBSD CODE BLUE 2016

Webアプリのクローリング (✔)

脆弱性の検出 (✔)

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

SAIVSの能力

MBSD CODE BLUE 2016

「WebアプリをクローリングしながらRXSSを検出」

これを、全自動で実現

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

SAIVSのデモ

MBSD

Target:OWASP Broken Web Apps Google Gruyere

CODE BLUE 2016

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

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

脆弱性

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

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

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

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

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

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

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

SAIVSのデモ

MBSD CODE BLUE 2016

Top Sign up

Login

Sign up

complete

1.Sign upでアカウント作成

2.ログイン

3.Snippet 登録

4.Profile 更新

Profile Profile

update

New snippetNew snippet

register

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

SAIVSのデモ

MBSD CODE BLUE 2016

機能名サニタイズ

出力箇所/サニタイズ

New snippet register 〇BODY タグ内SCRIPTタグをサニタイズ

Profile update 〇A タグ内「<」「>」をサニタイズ

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

MBSD CODE BLUE 2016

SAIVSのデモ

https://www.youtube.com/watch?v=N5d9oM0NcM0

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

MBSD

クローリング能力の強化

複雑なアプリへの対応

CAPTCHAへの対応

CODE BLUE 2016

将来の展望

脆弱性検出能力の強化

複雑なRXSSパターンへの対応

他脆弱性への対応

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

• Download “.PDF” version of this document:

≫ http://www.mbsd.jp

MBSD