リクエストパラメータ変換によるWebアプリケーション脆弱性診断ツールの精度向上に関する研究
大久保研究室 M2 木村正太朗(5505503)
2022/02/01

全 58 ページ目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ2目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ
3

はじめに

P. 8

❚ Web アプリケーション (以降、WebAPと表記)

 様々な分野で利用されており、生活に必要不可欠なものとなっている
 近年 WebAP に対する攻撃も増加している❚ WebAP 脆弱性診断

 攻撃を受ける原因となる脆弱性を修正するため、脆弱性を特定する手法
 自動化のためツール（以降、診断ツールと表記）が使用されている

4

P. 9

はじめに
診断ツール

診断員

自動化された定型的な診断

サイトの特性に応じた診断

ロジックに係る複雑な診断

時間・人員等のリソース限界

共に実施することで相互補完が可能
診断ツールが脆弱性を正しく検知できることが前提
経験上、診断ツールが偽陰性を発生させている（定型的なものも含む）

5

P. 9-10

本研究の概要目的

 診断ツールが偽陰性を発生させる原因の特定
 判明した原因に対する解決策の提案

調査と検証実験・考察

提案手法と評価・考察

 実際の Web 診断のデータを

 プロキシによりパラメータを 一般的でないパラメータ(後述) 診断ツールを支援することで基にした調査を実施を認識できない問題を指摘

変換する手法を提案

診断可能パラメータを拡張

6

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ7

P. 14

パラメータの定義

HTTP リクエスト (一例)
POST /test?urlparam=aaa HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/97.0.4692.99 Safari/537.36 Edg/97.0.1072.69
Accept: */*Referer: http://www.example.com
Content-Length: 13
Content-Type: application/x-www-form-urlencoded
formparam=bbb

青字は全てパラメータである

XSS* や SQL インジェクション等の脆弱性の診断は、HTTP リクエストのうちWebAP によって処理される可能性のある変数 に対して診断を行う
本研究の中では下線部を パラメータ という* XSS : クロスサイトスクリプティング8

P. 14-15

一般的なパラメータの定義
 HTML ではユーザに何らかの入力を求める要素として form タグがある

 form タグに設定された属性値に応じて3種類のパラメータ形式が利用される

POST /test?urlparam=aaa HTTP/1.1(snip)
Content-Type: application/x-www-formurlencoded
formparam=bbb

POST /test HTTP/1.1(snip)
Content-Type: multipart/form-data;boundary=--------12345678--------12345678
Content-Disposition: name="file"
filename="sample.txt"
This is a text file.
--------12345678--

フォームパラメータ

URLパラメータ

Multipartパラメータ

本研究の中ではこれら3つを 一般的なパラメータ という* (snip) は一部省略していることを示している

9

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ10

P. 17-18

関連研究
研究

種類

概要

Doupé et al. [1]

性能評価

独自のWebAPを開発し、性能評価

Rennhard et al. [2]テストカバレッジ向上

プロキシベースのアプローチ

Pellegrino et al. [3]テストカバレッジ向上

JavaScriptプログラムの動的解析

Suteva et al. [4]

性能評価

入力ベクトルについても調査有り

Amankwah et al. [5]

性能評価

偽陰性発生なしとする結果

Mburano et al. [6]性能評価

脆弱性によって性能が異なるとする結果

 クロール性能やテストカバレッジの重要性を訴えるものが多い

診断ツールは対象ページを診断できれば、100％ 検出できるのか？
何かしらの原因により偽陰性が発生するはずと考えられる
 偽陰性が発生していても原因ついて言及している文献は少ない

11

関連研究との比較

P. 18-19❚ 性能評価の観点
既存研究

本研究

 ベンチマーク用WebAPに対して実施を用いた評価 ファイルアップロードができないという事実のみ
 実際のWeb診断のデータを基にした より現実的な評価
 ファイルアップロードができていてもファイル名に対して診断できないという事実も示し、より詳細❚ 提案するツールの観点（ツールの目的）
既存研究(Rennhard et al.)本研究 エンドポイントの認識や認証済みスキャンの信頼性向上
 認識できないパラメータに対しても診断可能とすること

12

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ13

P. 21-23

調査1
❚ 目的

診断ツールが偽陰性を発生させる原因を特定すること❚ 方法

2019年4月〜2021年2月上旬までの約2年分照合し判断診断ツールのログ 診断ツールが偽陰性を発生させた事例

 脆弱性があった場合にOSコマンドインジェクション



HTTPヘッダインジェクション



ディレクトリトラバーサル

これらを収集(PoC* を含む)

使用しなかった事例

正しく検知できないと思われる挙動

診断報告書

反射型XSS

 診断ツールを

SQLインジェクション

* 脆弱性があることを証明するための手順や攻撃コードを含むもの

14

P. 23-29

調査1の結果問題

概要

認証

診断ツールが認証状態になれず、認証後のページが診断不可

検知ロジック不備

HTML属性値やイベントハンドラに対するXSSの検知が不十分

パラメータ認識不足

ファイル名やパラメータ内の別形式のパラメータへ診断不可

凡例：

先行研究では指摘不十分

先行研究で指摘済み

ただし本調査では1つのツールによる結果のみであり調査したツール特有の結果 か 一般的な結果 かが不明
別途 検証実験が必要
15

P. 30

調査2
パラメータ認識の不足によって正しく診断できていない可能性
一般的に評価に使われるベンチマーク用WebAPはどうなっている？

脆弱性が埋め込まれている箇所を調査
WebAP

Version/Commit

URL

Bodgeit1.4.0

https://github.com/psiinon/bodgeit

Damn Vulnerable Web
Application (DVWA)

2.0.1

https://github.com/digininja/DVWA/

WackoPicko

065cb92

https://github.com/adamdoupe/WackoPicko

WebGoat8.1.0

https://github.com/WebGoat/WebGoat/

表. 調査対象としたベンチマーク用WebAP16

調査2の結果

P. 30-32

調査した全てのWebAPにおいて、URLパラメータやフォームデータを使用

診断ツールの評価によく使用されるWebAPは一般的なパラメータのみに脆弱性を埋め込んでいる診断ツールが持つ診断パターン（文字列）や検知ロジックによって脆弱性を検出できるかどうかは評価することができるが、多様な入力パラメータに対して診断できているかは評価できていない認識できるパラメータを測る検証実験 を実施
17

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ18

調査結果の検証❚ 検証実験
目的

P. 37

診断ツールが様々な入力パラメータに対して診断できているのかを明らかにする 偽陰性発生の原因に関する調査で得られた、診断ツールが脆弱性を検出できなかったパターンを一般化し、同様の脆弱性を埋め込んだ
テスト用 WebAP を作成

方法

 診断ツールの挙動から脆弱性を正しく診断できない可能性のあるパターンも同様に埋め込み

 複数の診断ツールを使用して作成した WebAP に対して診断を実施し、診断レポートやログを基に判定

対象とした
脆弱性*

反射型XSS、SQLインジェクション

* 調査で偽陰性が確認された脆弱性のみを対象とした

19

P. 37-40

調査結果の検証❚ 使用した診断ツール

Docker 利用

診断ツール

VersionURLOWASP ZAP

2.10.0https://www.zaproxy.org/

Vega

1.0-devel-130

https://subgraph.com/vega/index.en.html

Sqlmap1.5.6.2#dev

https://sqlmap.org/○

Wapiti3.0.5

https://pypi.org/project/wapiti3/○

Arachniv1.5.1-0.5.12

https://www.arachni-scanner.com/❚ 診断方法すべての通信を手動で記録

OWASP ZAP, Vega, Sqlmap*

診断ツールのクロールを実施

Wapiti, Arachni* プロキシ機能はないため、OWASP ZAP で記録したログを基にリクエストを生成20

P. 41-42

調査結果の検証
❚ 脆弱性

タイプ

XSS

SQLi

一般的パラメータ○○

イベントハンドラ○

User-Agent

説明
URLパラメータや x-www-form-urlencoded 方式のパラメータ
onclick 等のイベントハンドラへ反射するXSS○

User-Agent をログイン処理時に記録する想定

Referer○ContentDisposition○○

ファイルアップロード時の filename 属性

Raw JSON○○Content-Type: application/json でボディにJSON文字列

URL-Encoded JSON○○

Raw JSON をURLエンコードした x-www-form-urlencoded 方式

Multipart JSON○○

Raw JSON を multipart/form-data 形式のパラメータにセット

Referer ヘッダの値が反射するXSS

 全てのタイプで3段階の難易度と脆弱性のないものを設置（偽陽性も検出） 簡単にクロールできるよう、全てページはリンクで接続

21

P. 43

検証結果
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi

×◎

Referer XSS◎◎

Content-Disposition XSS◎Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

タイプ

URL-Encoded JSON XSS
URL-Encoded JSON SQLi
Multipart JSON XSS
Multipart JSON SQLi--

Sqlmap

◎
◎

-

-

-

△

-

△

-

-

-

WapitiArachni

◎

◎

△

△

○

○

-

-

-

◎
△

-

- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

22

P. 43-45

検証結果の考察
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi×◎Content-Disposition XSS◎-Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

タイプ

Sqlmap◎◎WapitiArachni

◎

◎

△

△

○

○

-

-

◎
◎XSS では全て偽陽性が発生
イベントハンドラに反射する

Referer XSS◎→ 調査とは真逆の結果であり、一般的ではなかった

URL-Encoded JSON XSS
URL-Encoded JSON SQLi
Multipart JSON XSS
Multipart JSON SQLi

-

-

-

-

△

-

△

-

-

-

△

-

- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

23

P. 43-45

検証結果の考察
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS

○

○

タイプ

Sqlmap◎×◎◎
診断ツールによっても大きく異なるがUser-Agent SQLi

WapitiArachni

◎

◎

△

△

○

○

-

-

◎
◎
パラメータとして認識できず正しく診断できないケース

Referer XSS

Content-Disposition XSS

JSON SQLi
URL-Encoded JSON XSS
URL-Encoded JSON SQLi
Multipart JSON XSS
Multipart JSON SQLi◎△△
→ 偽陰性発生の原因の1つと考えられる

Content-Disposition SQLi
JSON XSS◎ が多く存在した
×
×
-

-

△

-

△

-

-

-

-

- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

24

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ25

P. 47

提案手法
POST /test?urlparam=aaa HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-formurlencoded
Referer: http://www.example.com/

POST /test?urlparam=aaa HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-formurlencoded
Referer: ccc

formparam=bbb
formparam=bbb&mod_referer=ccc

formparam=bbb&mod_referer=ccc

診断ツール

Web サイト

提案ツール

凡例：診断できる 診断できない❚ 診断ツールを支援するプロキシ

追加パラメータ 診断できるパラメータを追加で認識させ、診断可能なパラメータを増やす
 追加したパラメータの値を診断できないパラメータに置換

26

P. 48

技術的課題
POST /test?urlparam=aaa HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-formurlencoded
Referer: http://www.example.com/

POST /test?urlparam=aaa HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-formurlencoded
Referer: ccc

formparam=bbb&mod_referer=ccc

formparam=bbb&mod_referer=ccc

診断ツール

提案ツール

Web サイト

課題1

課題2

診断ツールに追加でパラメータを認識させ、それに対する正しい応答を記憶させる必要がある

追加したパラメータの値を、本来のリクエストの形式に合わせて置換する必要がある27

P. 48-50

課題1 追加パラメータの認識❚ クローラー型
診断ツール❚ ローカルプロキシ型

Web サイト

ブラウザ

診断ツール

Web サイト改変ポイント 診断ツールが Web サイトを巡回 レスポンスに応じてリクエスト生成

レスポンスを改変し新たなパラメータを認識 診断ツールをブラウザのプロキシサーバに設定し通信を記録

ブラウザからのリクエストに新たなパラメータを追加
28

課題2 パラメータの置換❚ 初回アクセス

リクエストを記録

P. 50

 新しいエンドポイントに対するリクエストを提案ツールで記録ブラウザ

 診断ツールに追加のパラメータを
診断ツール

提案ツール

Web サイト

認識させるための動作を行う❚ 2回目以降のアクセス記録したリクエストを取得

 記録済みのリクエストを取得
 取得したリクエストの形式に合うようにパラメータを置換

診断ツール

提案ツール

Web サイト29

P. 50-51

提案手法の実装❚ 使用したソフトウェア 等
名前

バージョン

概要

URL

Python3.9.7

プログラミング言語

https://www.python.org/

mitmproxy

7.0.4

Python製プロキシOSS

https://mitmproxy.org/

 mitmproxy では様々な操作が可能な API を提供
 リクエストやレスポンスに応じた柔軟な操作が必要であったことから採用

mitmproxy の アドオンとして動作 するツールを作成

30

P. 51

提案ツールの概念
mitmproxy

ブラウザ

mitmproxy のアドオン (コア)診断ツール利用可能ミドルウェア

リクエストの記録と取得動作モードの管理

WebAP

ミドルウェアの管理
パラメータ置換

ミドルウェア1
変換器

復元器

ミドルウェア2
変換器

催促レスポンスの生成

パラメータの取得

復元器

ミドルウェア3
変換器

復元器

ミドルウェア4
変換器

復元器

︙

ミドルウェア1
変換器

復元器

ミドルウェア2
変換器

大きく分けてコア と ミドルウェアの2つに分かれる

復元器

ミドルウェア4変換器

復元器

パラメータ追加31

P. 52

提案ツールの概念
mitmproxy

ブラウザ

mitmproxy のアドオン (コア)診断ツール利用可能ミドルウェア

リクエストの記録と取得動作モードの管理

WebAP

ミドルウェアの管理
パラメータ置換

ミドルウェア1
変換器

復元器

ミドルウェア2
変換器

催促レスポンスの生成

パラメータの取得

復元器

ミドルウェア3
変換器

復元器

ミドルウェア4
変換器

復元器

︙

ミドルウェア1
変換器

復元器

ミドルウェア2

コア は提案ツールの中核
 リクエストの記録や取り出し ミドルウェアの管理

変換器

復元器

ミドルウェア4変換器

復元器

パラメータ追加32

P. 52

提案ツールの概念
mitmproxy

ブラウザ

mitmproxy のアドオン (コア)診断ツール利用可能ミドルウェア

リクエストの記録と取得動作モードの管理

WebAP

ミドルウェアの管理
パラメータ置換

ミドルウェア1
変換器

復元器

ミドルウェア2
変換器

催促レスポンスの生成

パラメータの取得

復元器

ミドルウェア3
変換器

復元器

ミドルウェア4
変換器

復元器

︙

ミドルウェア1
変換器

復元器

ミドルウェア2
変換器

適用するミドルウェアを切り替えることで提案手法を適用するパラメータを変更可能(この図では、1〜4 のミドルウェアのうち3以外を適用)

復元器

ミドルウェア4変換器

復元器

パラメータ追加

33

ミドルウェア

P. 53-55❚ ミドルウェアとは

 変換器と復元器の2つの機能を持ち、パラメータの置換を担うモジュール
 変換器：受信したリクエストをもとに、追加のパラメータ名と値を生成

 復元器：受信したリクエストから追加されたパラメータを取り除き記録したリクエストの形式に合わせてパラメータを置換❚ 実装したミドルウェア

 HTTPリクエストヘッダ：Referer、User-Agent、Cookie ヘッダの値を置換
 ファイル名：Multipart 形式の Content-Disposition 内の filename 引数を置換
 JSON：JSON形式のリクエストとパラメータ内のJSON文字列を置換

34

P. 53-55

変換器と復元器のイメージ❚ 変換器

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
User-Agent: hoge
Referer: https://example.com/

凡例：

ミドルウェア名
未適用

管理しているミドルウェア

param1=value1

User-Agent
変換器

診断ツール

適用済

提案ツール

復元器

Referer
変換器

復元器

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8;(snip...)<body><form action="testP~~" action="post"><input type="text" name="param1" value="value1"></form></body>35

P. 53-55

変換器と復元器のイメージ
❚ 変換器

凡例：

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
User-Agent: hoge
Referer: https://example.com/

ミドルウェア名
未適用

適用！
管理しているミドルウェア

param1=value1

User-Agent
変換器

診断ツール

適用済

提案ツール

復元器

Referer
変換器

復元器

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8;(snip...)<body><form action="testP~~" action="post"><input type="text" name="param1" value="value1"><input type="text" name="h_useragent" value="hoge">

適用！

</form></body>36

P. 53-55

変換器と復元器のイメージ
❚ 変換器

凡例：

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
User-Agent: hoge
Referer: https://example.com/

ミドルウェア名
未適用

管理しているミドルウェア

param1=value1

User-Agent
変換器

診断ツール

適用済

提案ツール

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8;(snip...)<body><form action="testP~~" action="post"><input type="text" name="param1" value="value1"><input type="text" name="h_useragent" value="hoge"><input type="text" name="h_referer" value="https..."></form></body>復元器

Referer
変換器

復元器

適用！
適用！
37

P. 53-55

変換器と復元器のイメージ❚ 復元器

一定規則を満たすときに復元器を使用POST /testP~~ HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
User-Agent: hoge
Referer: https://example.com/

凡例：

ミドルウェア名
未適用

管理しているミドルウェア

param1=value1&h_useragent=foo&h_referer=bar

User-Agent
変換器

診断ツール

適用済

提案ツール

復元器

Referer
変換器

復元器

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
User-Agent: hoge
Referer: https://example.com/
param1=value1&h_useragent=foo&h_referer=bar※ URL の修正はミドルウェアではなくコアで実施

Web サイト38

P. 53-55

変換器と復元器のイメージ
❚ 復元器

凡例：

POST /testP~~ HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
User-Agent: hoge
Referer: https://example.com/

ミドルウェア名
未適用

適用済

適用！

管理しているミドルウェア

param1=value1&h_useragent=foo&h_referer=bar

User-Agent
変換器

診断ツール

提案ツール

復元器

Referer
変換器

復元器

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
User-Agent: hoge
Referer: bar

適用！

param1=value1&h_useragent=foo&h_referer=bar※ URL の修正はミドルウェアではなくコアで実施

Web サイト39

P. 53-55

変換器と復元器のイメージ
❚ 復元器

凡例：

POST /testP~~ HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
User-Agent: hoge
Referer: https://example.com/

ミドルウェア名
未適用

適用済

適用！

管理しているミドルウェア

param1=value1&h_useragent=foo&h_referer=bar

User-Agent
変換器

診断ツール

提案ツール

復元器

Referer
変換器

復元器

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
User-Agent: foo
Referer: bar

適用！

param1=value1&h_useragent=foo&h_referer=bar※ URL の修正はミドルウェアではなくコアで実施

Web サイト40

P. 53-55

変換器と復元器のイメージ❚ 復元器

POST /testP~~ HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
User-Agent: hoge
Referer: https://example.com/

凡例：

ミドルウェア名
未適用

管理しているミドルウェア

param1=value1&h_useragent=foo&h_referer=bar

User-Agent
変換器

診断ツール

適用済

提案ツール

復元器

Referer
変換器

復元器

POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
User-Agent: foo
Referer: bar
param1=value1※ URL の修正はミドルウェアではなくコアで実施

Web サイト41

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ42

P. 63-64

提案手法の実験と評価

ブラウザ

外部プロキシ設定

診断ツール

提案ツール

テスト用 WebAP❚ 実験方法と実験環境

 使用した診断ツール、テスト用 WebAP は検証実験で実施した条件と同じ
 提案ツールを使用するためブラウザと診断ツールの外部プロキシ設定を変更

43

P. 65-66

提案手法の実験と評価
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi

×◎

Referer XSS◎◎

Content-Disposition XSS◎Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

URL-Encoded JSON XSS×

URL-Encoded JSON SQLi

×Multipart JSON XSS

×Multipart JSON SQLi

×

タイプ

Sqlmap

◎
◎

-

◎

-

△

-

△

-

△

-

Arachni

◎

◎

△

△

○

○

△

△

◎

◎

◎

-

-

Wapiti△-- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

44

P. 65-66

提案手法の実験と評価
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi

×◎

Referer XSS◎◎

Content-Disposition XSS◎Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

URL-Encoded JSON XSS×

URL-Encoded JSON SQLi

×Multipart JSON XSS

×Multipart JSON SQLi

×

タイプ

Sqlmap◎◎--WapitiArachni

◎

◎

△

△

○

○

△

△

◎

◎

◎
◎

△

-

OWASP△
ZAP と Wapiti にでは診断を実施した項目について- 用意した全てのパターンに対して△診断可能となった。
--△- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

45

P. 65-66

提案手法の実験と評価
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi

×◎

Referer XSS◎◎

Content-Disposition XSS◎Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

URL-Encoded JSON XSS×

URL-Encoded JSON SQLi

×Multipart JSON XSS

×Multipart JSON SQLi

×

タイプ

Sqlmap◎◎-WapitiArachni

◎

◎

△

△

○

○

△

△

◎

◎

◎
◎

△

-

SQLインジェクションの検知率が悪い。
診断時の設定で強度を "超" にしたところ△検知されるようになったが偽陽性も発生
-

△

-

△

-

- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

46

P. 65-66

提案手法の実験と評価
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi

×◎

Referer XSS◎◎

Content-Disposition XSS◎Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

URL-Encoded JSON XSS×

URL-Encoded JSON SQLi

×Multipart JSON XSS

×Multipart JSON SQLi

×

タイプ

Sqlmap◎◎--WapitiArachni

◎

◎

△

△

○

○

△

△

◎

◎

◎
◎

△

-

-

△Arachni についてはVega とMultipart
形式のリクエストが発行できず
ファイル名に対する診断ができなかった△-△- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

47

P. 65-66

提案手法の実験と評価
ZAP

Vega

一般的なパラメータXSS◎◎

一般的なパラメータSQLi

×△

イベントハンドラXSS○○

User-Agent SQLi

×◎

Referer XSS◎◎

Content-Disposition XSS◎Content-Disposition SQLi△

JSON XSS×

JSON SQLi

×

URL-Encoded JSON XSS×

URL-Encoded JSON SQLi

×Multipart JSON XSS

×Multipart JSON SQLi

×

タイプ

Sqlmap◎◎-WapitiArachni

◎

◎

△

△

○

○

△

△

◎

◎

◎
◎

△

提案ツールを使用していなかったときに△検知できていた脆弱性が、提案ツールの使用によって検知できなくなった事象は△- 確認できなかった。

-→ ツール使用による新たな偽陰性は発生しなかった。
△-- … 診断せず × … 検知せず △ … 一部検知せず ○ … 全て検知（FPあり） ◎ … 全て検知 * 網掛けは実施せず

48

提案手法の実験と評価

P. 64-65❚ 影響確認のための実験提案手法を用いることにより、送信リクエスト数の増大やプロキシのオーバーヘッドによって、処理時間が長くなる

提案手法の使用有無による

送信リクエスト数 と 診断時間 の比較を実施(参考) 取得方法
診断ツールが診断終了時に表示するリクエスト数を取得

以下の方法のいずれか
 最初と最後のリクエストの送信時間の差分
 診断ツールが診断終了時に表示する処理時間
 time コマンドの結果
49

P. 66-69

提案手法の実験と評価❚ 提案ツール有無による比較

送信リクエスト数

診断時間

ツール名

提案ツール無提案ツール有提案ツール無提案ツール有OWASP ZAP

10,962

46,144

0:16:42

1:04:35

Vega

-

-

0:17:09

0:16:59

Wapiti11,980103,277

0:03:53

0:33:31

Arachni

112,219

381,710

0:21:59

1:54:22

Sqlmal (平均*)11,082

18,573

0:07:24

0:22:40

 Vega は送信リクエスト数を表示する機能がなく取得できなかった パラメータの追加ができておらず、単に提案ツールを経由しただけだった* Sqlmap はエンドポイント毎に測定したため、それらの平均値を記載

50

P. 66-69

提案手法の実験と評価❚ 提案ツール有無による比較

送信リクエスト数

診断時間

ツール名

提案ツール無提案ツール有提案ツール無提案ツール有OWASP ZAP

10,962

46,144

0:16:42

1:04:35-

0:17:09103,277

0:03:53

381,710

0:21:59

18,573

0:07:24

Vega-

Wapiti11,980Arachni

112,219

Sqlmal (平均*)11,082

x8.6
x3.4

x8.6
x5.2

0:16:59
0:33:31
1:54:220:22:40

 クローラー型ではエンドポイントの追加を行ったことでリクエスト数が増大
 Wapiti では診断時間の増加が送信リクエスト数に比例 Arachni では処理に遅延が発生したことで診断時間がさらに増加* Sqlmap はエンドポイント毎に測定したため、それらの平均値を記載

51

P. 66-69

提案手法の実験と評価❚ 提案ツール有無による比較

送信リクエスト数

診断時間

ツール名

提案ツール無提案ツール有提案ツール無提案ツール有OWASP ZAP

10,962

46,144

0:16:42

1:04:35-

0:17:09

x4.2

x3.9

Vega

-

0:16:59

Wapiti11,980103,277

0:03:53

0:33:31

Arachni

112,219

381,710

0:21:59

1:54:22

Sqlmal (平均*)11,082

18,573

0:07:24

0:22:40

 ローカルプロキシ型でもパラメータ数が増えたことでリクエスト数が増大
 OWASP ZAP では診断時間の増加率が送信リクエストの増加率より小さい
 提案ツールを経由することによるオーバーヘッドはあまり大きくない* Sqlmap はエンドポイント毎に測定したため、それらの平均値を記載

52

P. 66-69

提案手法の実験と評価❚ 提案ツール有無による比較

送信リクエスト数

診断時間

ツール名

提案ツール無提案ツール有提案ツール無提案ツール有OWASP ZAP

10,962

46,144

0:16:42

1:04:35

Vega

-

-

0:17:09

0:16:59

Wapiti11,980103,277

0:03:53

0:33:31

Arachni

112,219

381,710

0:21:59

Sqlmal (平均*)11,082

18,573

0:07:24

x1.7

x3.1

1:54:220:22:40

 Sqlmap ではパラメータが WebAP に影響しないと判断すると打ち切る仕様
 他と比べてリクエスト数の増加率が低い
 診断時間は提案ツールの使用に関わらずタイムアウトが多発* Sqlmap はエンドポイント毎に測定したため、それらの平均値を記載

53

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ54

考察

P. 71-72❚ 提案手法の有効性

 診断ツールの内部構造を変更せずに、元々の診断ツールの検知精度を低下させることなく、診断可能なパラメータを拡張することができた

 本研究で取り扱ったツールの他にも、外部プロキシの設定をすることができる機能があれば、動作可能であると考えている❚ 提案手法を使用することによる影響

 送信リクエスト数が増加することによって診断時間の増加する→ GETメソッドではパラメータ置換をしないなどの工夫が必要

55

考察

P. 72-73❚ 提案手法の限界

 診断ツールが対応していない形式のリクエストについては効果を発揮しない→ Multipart 形式に対応していない Vega や Arachni では提案手法を用いてもファイル名に対しては診断できなかった→ 診断ツールの使用時にはこうした対応状況を確認することが重要 意図的に追加したパラメータに対して診断するため、レポートの内容が実際には存在しないパラメータに対するものになってしまう→ 特にクローラー型では実際に存在しないエンドポイントに対するレポート結果となってしまう

56

目次

1. はじめに
2. 発表内での定義
3. 関連研究
4. 調査
5. 調査結果の検証

6. 提案手法
7. 提案手法の評価
8. 考察
9. まとめ57

まとめと今後の課題

P. 73,75❚ まとめ 一般的でないパラメータに対して診断ツールが正しく診断できない可能性について、実際のデータを用いた調査と検証実験を行った

 解決策として診断ツールと WebAP 間で動作するプロキシを提案し、その有効性を実験によって示した❚ 今後の課題 HTTPS を用いた場合への対応や影響調査
 JSON 形式を用いた XSS に対しても診断ができるような仕組みづくり

58以下、参考資料59

追加パラメータの認識❚ 新たなパラメータを認識させるレスポンス (例)HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: hoge
(snip...)<body><form action="testP~~" method="post"><input type="text" name="h_referer" /><input type="text" name="h_user-agent" /><input type="text" name="param1" /></form></body>

新たなエンドポイントに対して
パラメータを追加してリクエストを発行するよう促す
60

参考文献
[1] Adam Doupé, et al. Why johnny can’t pentest: An analysis of black-box web vulnerability scanners.
Vol. 6201, pp. 111–131, 07 2010.
[2] Marc Rennhard, et al. Improving the effectiveness of web application vulnerability scanning.
International Journal on Advances in Internet Technology, Vol. 12, pp. 12–27, 08 2019.

[3] Giancarlo Pellegrino, et al. jÄk: Using dynamic analysis to crawl and test modern web applications.
In Herbert Bos, Fabian Monrose, and Gregory Blanc, editors, Research in Attacks, Intrusions, andDefenses, pp. 295–316, Cham, 2015. Springer International Publishing.

[4] Natasa Suteva, et al. Evaluation and testing of several free/open source web vulnerability scanners.
pp. 221–224, 04 2013.

[5] Richard Amankwah, et al. An empirical comparison of commercial and open-source web
vulnerability scanners. Software: Practice and Experience, Vol. 50, No. 9, pp. 1842–1857, 07 2020.

[6] Balume Mburano et al. Evaluation of web vulnerability scanners based on owasp benchmark. 26th
International Conference on Systems Engineering (ICSEng), pp. 1–6, 12 2018.

61