Slide 1

Slide 1 text

第75回ハンズオンセミナー 脆弱性診断ええんやで(^^) 脆弱性診断の仕組み 何故「思ってたのと違う」 ⾒積額が提⽰されるのか 2019年7⽉25⽇(⽊) 脆弱性診断研究会 (Security Testing Workshop)

Slide 2

Slide 2 text

脆弱性診断研究会とは Webアプリケーションの脆弱性を診断す る⼿法や脆弱性診断ツールの使⽤法な どを研究するコミュニティ。コワーキ ングスペース茅場町Co-Edo様にて第1 回セミナーを2014年8⽉に開催して以 来2019年7⽉現在で75回のセミナーを 実施。 © 2019 脆弱性診断研究会 Security Testing Workshop 2

Slide 3

Slide 3 text

⾃⼰紹介 松本 隆則 • @nilfigo(ニルフィーゴ、ニルフィ) • EGセキュアソリューションズ株式会社 (旧社名:HASHコンサルティング) • OWASP Japan プロモーションチーム 3 © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 4

Slide 4 text

アジェンダ 1. OWASPってナニ? 2. OWASP ZAPってナニ? 3. サイト調査とは 4. 診断対象の数え⽅ 5. パラメーター送信⽅法 6. まとめ 4 © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 5

Slide 5 text

OWASP ってナニ? The Open Web Application Security Project 5 © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 6

Slide 6 text

OWASP ってナニ? OWASPとは、Webをはじめとするソフトウェア のセキュリティ環境の現状、またセキュアな ソフトウェア開発を促進する技術・プロセス に関する情報共有と普及啓発を⽬的としたプ ロフェッショナルの集まる、オープンソー ス・ソフトウェアコミュニティです。 http://blog.owaspjapan.org/ より引⽤ 6 © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 7

Slide 7 text

OWASP ZAP ってナニ? • https://www.owasp.org/index.php/OWASP_Zed_Attac k_Proxy_Project • 世界中のエンジニアによって開発されている セキュリティ診断⽤プロキシツール • ZAP = Zed Attack Proxy プロキシとして動作して、ブラウザとWebアプリケーショ ン間の通信の閲覧および改変が可能 • オープンソース(Apache License 2.0) • 商⽤・⾮商⽤問わず無償で利⽤可能 © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 8

Slide 8 text

OWASP ZAPの基本設定 nモード • セーフモード • プロテクトモード • 標準モード • 攻撃モード © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 9

Slide 9 text

OWASP ZAPの基本設定 【重要】プロテクトモード以外は使⽤禁⽌!! なぜなら 管理外のサイトへの診断を実⾏する危険性が⾼い © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 10

Slide 10 text

OWASP ZAPの基本設定 nオプション • ローカル・プロキシ • Address、ポート • スパイダー • 動的スキャン © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 11

Slide 11 text

OWASP ZAPの基本設定 nアドオン • インストール • アップデート nポリシー • スキャンポリシー © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 12

Slide 12 text

何故「思ってたの と違う」⾒積額が 提⽰されるのか © 2019 脆弱性診断研究会 Security Testing Workshop

Slide 13

Slide 13 text

⾒積額が想定外になる原因 対象画⾯数を基準に考察してみる © 2019 脆弱性診断研究会 Security Testing Workshop 13

Slide 14

Slide 14 text

⾒積額が想定外になる原因 © 2019 脆弱性診断研究会 Security Testing Workshop 14 対象画⾯数を基準に考察 発注者 受注者 脆弱性診断業務を依頼 脆弱性診断業務を受託

Slide 15

Slide 15 text

⾒積額が想定外になる原因 © 2019 脆弱性診断研究会 Security Testing Workshop 15 対象画⾯数を基準に考察 対象画⾯数の数え⽅が異なる 発注者 受注者

Slide 16

Slide 16 text

2. サイト調査とは • クローリング • ウェブサイトの画⾯を収集 • 診断対象選定 • 診断すべき画⾯を抽出 © 2019 脆弱性診断研究会 Security Testing Workshop 16

Slide 17

Slide 17 text

2-1. クローリング 診断時は原則として⼿動で実施 ※ クローリングツールを補助的に 使⽤する場合あり © 2019 脆弱性診断研究会 Security Testing Workshop 17

Slide 18

Slide 18 text

2-2. 診断対象選定 「診断すべき画⾯」 →パラメーターを伴うリクエスト により動的に⽣成された画⾯ © 2019 脆弱性診断研究会 Security Testing Workshop 18

Slide 19

Slide 19 text

3. 診断対象選定の考え⽅ 診断すべき画⾯(機能)の例 • パラメーターを使⽤して動的に⽣成 • 認証/認可⽤パラメーターを送受信 • 特定の権限保有者のみが閲覧可能 © 2019 脆弱性診断研究会 Security Testing Workshop 19

Slide 20

Slide 20 text

3-1. パラメーターとは プログラムの動作を決定する数値や⽂字 © 2019 脆弱性診断研究会 Security Testing Workshop 20

Slide 21

Slide 21 text

3-2. パラメーターの例 • 検索⽂字列 • ログイン時のIDとパスワード • 商品購⼊時の商品ID • セッションID、CSRF対策⽤トークン © 2019 脆弱性診断研究会 Security Testing Workshop 21

Slide 22

Slide 22 text

4. パラメーター送信⽅法 1. クエリー⽂字列(Query String) 2. HTTPリクエストヘッダー 3. HTTPリクエストボディ(POST) 4. URLの⼀部がパラメーター 5. ⾮同期通信 © 2019 脆弱性診断研究会 Security Testing Workshop 22

Slide 23

Slide 23 text

4. パラメーター送信⽅法 1. クエリー⽂字列(Query String) 2. HTTPリクエストヘッダー 3. HTTPリクエストボディ(POST) 4. URLの⼀部がパラメーター 5. ⾮同期通信 © 2019 脆弱性診断研究会 Security Testing Workshop 23

Slide 24

Slide 24 text

4-1. クエリー⽂字列 http://example.com/index.php?user=test&pswd=test 診断対象パラメーター • user • pswd © 2019 脆弱性診断研究会 Security Testing Workshop 24

Slide 25

Slide 25 text

4-1. クエリー⽂字列 例1 a. http://example.com/index.php? page=info.php&user=test&pswd=test b. http://example.com/index.php? next=info.php&user=test&pswd=test aとbは[page]と[next]が異なるため、⼀般的にはそれぞれ独⽴した診断対 象として数える © 2019 脆弱性診断研究会 Security Testing Workshop 25

Slide 26

Slide 26 text

4-1. クエリー⽂字列 例2 c. http://example.com/index.php? page=info.php&user=test&pswd=test d. http://example.com/index.php? user=test&pswd=test&page=info.php cとdは⼀⾒異なるパラメーター群に⾒えるが、並び順が異なるだけで含ま れているパラメーターは同⼀なため、ひとつの診断対象として数える © 2019 脆弱性診断研究会 Security Testing Workshop 26

Slide 27

Slide 27 text

4. パラメーター送信⽅法 1. クエリー⽂字列(Query String) 2. HTTPリクエストヘッダー 3. HTTPリクエストボディ(POST) 4. URLの⼀部がパラメーター 5. ⾮同期通信 © 2019 脆弱性診断研究会 Security Testing Workshop 27

Slide 28

Slide 28 text

4-2. HTTPリクエストヘッダー 例1 Cookieヘッダー • ログイン処理が存在する ⼀般に、Cookieにセッション情報を管理するための⽂字列(セッ ションID)が含まれるため診断対象となる • ログイン処理が存在しない(検索やお問い合わせなど) Cookieが発⾏されていてもサイト内部で使⽤していない可能性 があるため診断対象としない場合あり © 2019 脆弱性診断研究会 Security Testing Workshop 28

Slide 29

Slide 29 text

4-2. HTTPリクエストヘッダー 例2 User-Agentヘッダー サイトへアクセスしたブラウザを識別するために当ヘッダーを使⽤した 結果、画⾯のレイアウトやメニュー構成などが変化する場合は診断対象 識別対象の例 • パソコン • スマートフォン • フィーチャーフォン(ガラケー) © 2019 脆弱性診断研究会 Security Testing Workshop 29

Slide 30

Slide 30 text

4. パラメーター送信⽅法 1. クエリー⽂字列(Query String) 2. HTTPリクエストヘッダー 3. HTTPリクエストボディ(POST) 4. URLの⼀部がパラメーター 5. ⾮同期通信 © 2019 脆弱性診断研究会 Security Testing Workshop 30

Slide 31

Slide 31 text

4-3. HTTPリクエストボディ POST http://example.com/index.php?page=login.php HTTP/1.1 Host: example.com ... username=test&password=test&login-php-submit-button=Login © 2019 脆弱性診断研究会 Security Testing Workshop 31

Slide 32

Slide 32 text

4. パラメーター送信⽅法 1. クエリー⽂字列(Query String) 2. HTTPリクエストヘッダー 3. HTTPリクエストボディ(POST) 4. URLの⼀部がパラメーター 5. ⾮同期通信 © 2019 脆弱性診断研究会 Security Testing Workshop 32

Slide 33

Slide 33 text

4-4. URLの⼀部がパラメーター http://example.com/user/123456/detail/ URLに含まれている「123456」がユーザーID © 2019 脆弱性診断研究会 Security Testing Workshop 33

Slide 34

Slide 34 text

4-4. URLの⼀部 例1 a. http://example.com/user/123456/detail/ b. http://example.com/user/987654/detail/ aとbは、URLとしては異なるが、ユーザーIDが異なるだけでサイト 内部では同⼀の処理と推測されるため、ひとつの診断対象と⾒なす ただし、リクエストの結果、⼤幅にメニュー構成やレイアウトなど が異なる画⾯が表⽰される場合は、別の診断対象とする場合あり © 2019 脆弱性診断研究会 Security Testing Workshop 34

Slide 35

Slide 35 text

4-4. URLの⼀部 例2 c. http://example.com/user/123456/detail/ d. http://example.com/user/123456/edit/ cとdでは、[〜user/123456/]までは同⼀のURLだが、そ の後に続くURLが異なるため、それぞれ別の診断対象と する © 2019 脆弱性診断研究会 Security Testing Workshop 35

Slide 36

Slide 36 text

4. パラメーター送信⽅法 1. クエリー⽂字列(Query String) 2. HTTPリクエストヘッダー 3. HTTPリクエストボディ(POST) 4. URLの⼀部がパラメーター 5. ⾮同期通信 © 2019 脆弱性診断研究会 Security Testing Workshop 36

Slide 37

Slide 37 text

4-5. ⾮同期通信 ⾮同期にサーバーに接続してHTMLやJSONなどを取得 • 住所⾃動⼊⼒フォーム(郵便番号で検索) • プルダウンリスト群の項⽬を⾃動変更 © 2019 脆弱性診断研究会 Security Testing Workshop 37

Slide 38

Slide 38 text

2-2. 診断対象選定(再掲) 「診断すべき画⾯」 →パラメーターを伴うリクエスト により動的に⽣成された画⾯ © 2019 脆弱性診断研究会 Security Testing Workshop 38

Slide 39

Slide 39 text

5. まとめ • サイト調査とは、パラメーターを伴うリクエス トにより動的に⽣成された診断対象画⾯を数え 上げる作業 • 診断対象の「数え上げ⽅」を把握していれば、 セキュリティ業者が提⽰したページ単価により、 診断の概算費⽤をあらかじめ想定できる © 2019 脆弱性診断研究会 Security Testing Workshop 39