Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発者のためのWebセキュリティ診断入門

VAddy
June 22, 2017

 開発者のためのWebセキュリティ診断入門

2017年6月22日 VAddyユーザーミートアップ Vol.6 資料

開発者のためのWebセキュリティ診断入門
株式会社セキュアスカイ・テクノロジー
前平裕

VAddy

June 22, 2017
Tweet

More Decks by VAddy

Other Decks in Technology

Transcript

  1. 社外秘/Confidential Secure Sky Technology Inc. 2 社外秘/Confidential 自己紹介 • 前平

    裕 (まえひら ゆたか) • 株式会社セキュアスカイ・テクノロジー • Webアプリケーション脆弱性診断 • 脆弱性スキャンツールの開発 • 脆弱性検出手法の研究 • 社内Webアプリケーション開発
  2. 社外秘/Confidential Secure Sky Technology Inc. 6 社外秘/Confidential 今日話すこと • 脆弱性とは

    • 脆弱性検査の 種類・手法 • Webアプリケーションの脆弱性の見つけ方 • ローカルProxyツールの使い方 • 自動スキャンの注意点 • 自動では見つけにくい脆弱性
  3. 社外秘/Confidential Secure Sky Technology Inc. 8 社外秘/Confidential 脆弱性 = 悪用可能なバグ・設定不備

    • 個別のアプリケーション • 開発会社などで独自に実装された部分に存在する脆弱性 • SQLインジェクション、XSS、CSRF など • 基盤ソフト、ライブラリ、プロトコル • Apache、Nginx、PHP、Java、Tomcat、Struts OpenSSL(Heartbleed)、bash(Shellshock) SSLv3(POODLE)、SHA-1の危殆化 • 管理ツールなどの設定不備 • FTP、SSH、DB管理ツール、CMS管理画面 • パスワードがデフォルト値、管理画面にアクセス可能 など
  4. 社外秘/Confidential Secure Sky Technology Inc. 9 社外秘/Confidential 発生する被害 • 重要な情報の漏洩

    • なりすましによる、他ユーザの権限不正利用 • データ改ざん • Dos攻撃 • 踏み台 • など
  5. 社外秘/Confidential Secure Sky Technology Inc. 12 社外秘/Confidential • 個別のアプリケーション •

    開発会社などで独自に実装された部分のに存在する脆弱性 • SQLインジェクション、XSS、CSRF など • 基盤ソフト、ライブラリ、プロトコル • Apache、Nginx、PHP、Java、Tomcat、Struts OpenSSL(Heartbleed)、bash(Shellshock) SSLv3(POODLE)、SHA-1の危殆化 • 管理ツールなどの設定不備 • FTP、SSH、DB管理ツール、CMS管理画面 • パスワードがデフォルト値、管理画面にアクセス可能 など Webアプリケーションの脆弱性検査 プラットフォームの脆弱性検査 脆弱性検査の種類
  6. 社外秘/Confidential Secure Sky Technology Inc. 13 社外秘/Confidential 脆弱性検査の手法 • ホワイトボックス検査

    • サーバ内部の情報を直接見て検査 • ソースコード診断 (Fortifyなど) • ブラックボックス検査 • インターネット経由での検査 • アプリケーションを実際に動かして挙動を見る • 上記2つの組み合わせ
  7. 社外秘/Confidential Secure Sky Technology Inc. 14 社外秘/Confidential 脆弱性検査の手法 • 診断会社に依頼する

    • Webアプリケーションの脆弱性診断 • プラットフォーム(ネットワーク)の脆弱性診断 • 自分で検査する • OWASP ZAP • Burp • VAddy • Vuls • Walti (https://walti.io/) Web診断 プラット診断
  8. 社外秘/Confidential Secure Sky Technology Inc. 16 社外秘/Confidential Webアプリケーションの脆弱性 「安全なウェブサイトの作り方」 で取り上げられている脆弱性一覧

    (https://www.ipa.go.jp/files/000017316.pdf より用) 1) SQL インジェクション 2) OS コマンド・インジェクション 3) パス名パラメータの未チェック/ディレクトリ・トラバーサル 4) セッション管理の不備 5) クロスサイト・スクリプティング 6) CSRF(クロスサイト・リクエスト・フォージェリ) 7) HTTP ヘッダ・インジェクション 8) メールヘッダ・インジェクション 9) クリックジャッキング 10)バッファオーバーフロー 11)アクセス制御や認可制御の欠落
  9. 社外秘/Confidential Secure Sky Technology Inc. 17 社外秘/Confidential XSSの見つけ方 (ブラックボックス検査) <html>

    … <p>「<?php echo($word);?>」 の検索結果</p> … </html> • 外部からは、どのようなコードになっているかわからない • 様々なリクエストをサーバに送信し、反応を見てみる 商品一覧画面 「SST」の検索結果 ・・・・・ ・・・・・ SST 検索
  10. 社外秘/Confidential Secure Sky Technology Inc. 18 社外秘/Confidential word=SST 商品一覧画面 SST

    検索 XSSの見つけ方 (ブラックボックス検査) 商品一覧画面 「SST」の検索結果 ・・・・・ ・・・・・ SST 検索 <p>「SST」 の検索結果</p>
  11. 社外秘/Confidential Secure Sky Technology Inc. 19 社外秘/Confidential word=SST<script>alert(1)</script> 商品一覧画面 「SST」の検索結果

    ・・・・・ ・・・・・ SST 検索 XSSの見つけ方 (ブラックボックス検査) XSS 有りと判断 <p>「SST<script>alert(1)</script>」 の検索結果</p>
  12. 社外秘/Confidential Secure Sky Technology Inc. 20 社外秘/Confidential XSSの見つけ方 (ブラックボックス検査) <html>

    … <input type="text" value="<?php echo($word);?>"> … </html> 商品一覧画面 「SST」の検索結果 ・・・・・ ・・・・・ SST 検索 属性値内に出力されている
  13. 社外秘/Confidential Secure Sky Technology Inc. 21 社外秘/Confidential word=SST<script>alert(1)</script> 商品一覧画面 「SST」の検索結果

    ・・・・・ ・・・・・ SST 検索 XSSの見つけ方 (ブラックボックス検査) 商品一覧画面 「SST」の検索結果 ・・・・・ ・・・・・ SST<scri... 検索 <input type="text" value="SST<script>alert(1)</script>"> テキストボックスの値として表示される
  14. 社外秘/Confidential Secure Sky Technology Inc. 22 社外秘/Confidential word=SST"><script>alert(1)</script> 商品一覧画面 「SST」の検索結果

    ・・・・・ ・・・・・ SST 検索 XSSの見つけ方 (ブラックボックス検査) XSS 有りと判断 属性と要素を一旦閉じる <input type="text" value="">SST<script>alert(1)</script>">
  15. 社外秘/Confidential Secure Sky Technology Inc. 23 社外秘/Confidential SQLインジェクションの見つけ方 (ブラックボックス検査) <?php

    … $sql = "SELECT * FROM items WHERE name LIKE '%" . $word . "%'"; … ?> • 外部からは、どのようなコードになっているかわからない • 様々なリクエストをサーバに送信し、反応を見てみる 商品一覧画面 「SST」の検索結果 - 10件 ・・・・・ ・・・・・ SST 検索
  16. 社外秘/Confidential Secure Sky Technology Inc. 24 社外秘/Confidential SQLインジェクションの見つけ方 (ブラックボックス検査) word=SST'

    エラー 商品一覧画面 「SST」の検索結果 ・・・・・ ・・・・・ SST 検索 シングルクオートを入れてみる エラー画面 HTTP Status 500 Internal Server Error
  17. 社外秘/Confidential Secure Sky Technology Inc. 25 社外秘/Confidential SQLインジェクションの見つけ方 (ブラックボックス検査) 商品一覧画面

    「SST」の検索結果 - 10件 ・・・・・ ・・・・・ SST 検索 word=SST%' AND '%'=' 商品一覧画面 「SST」の検索結果 - 10件 ・・・・・ ・・・・・ SST 検索 SQL文っぽいものを入れてみる 元と同じレスポンス
  18. 社外秘/Confidential Secure Sky Technology Inc. 26 社外秘/Confidential SQLインジェクションの見つけ方 (ブラックボックス検査) 商品一覧画面

    「SST」の検索結果 - 10件 ・・・・・ ・・・・・ SST 検索 word=SST%' AND 'X'=' 商品一覧画面 「SST」の検索結果 - 0件 SST 検索 AND false になるように条件を指定 検索結果 0 件
  19. 社外秘/Confidential Secure Sky Technology Inc. 27 社外秘/Confidential SQLインジェクションの見つけ方 (ブラックボックス検査) <?php

    … $sql = "SELECT * FROM items WHERE name LIKE '%" . $word . "%'"; … ?> SELECT * FROM items WHERE name LIKE '%SST%'; SELECT * FROM items WHERE name LIKE '%SST%' AND '%'='%'; SELECT * FROM items WHERE name LIKE '%SST%' AND 'X'='%'; 検索結果 10件 SQLインジェクションの脆弱性有りと判断 検索結果 10件 検索結果 0件
  20. 社外秘/Confidential Secure Sky Technology Inc. 28 社外秘/Confidential 検出ロジック参考 • IPA

    - ウェブ健康診断仕様 • https://www.ipa.go.jp/security/vuln/websecurity.html • -> 別冊:「ウェブ健康診断仕様」 • OWASP ZAP - Java • https://github.com/zaproxy/zap-extensions • Arachni - Ruby • https://github.com/Arachni/arachni
  21. 社外秘/Confidential Secure Sky Technology Inc. 29 社外秘/Confidential • URL ◦

    ブラウザのアドレスバーに表示されるURL ◦ リダイレクト ◦ Ajax • パラメータ ◦ URLパラメータ ◦ フォームで入力するパラメータ ◦ hiddenパラメータ ◦ Cookie などのHTTPヘッダ どうやってこれらを検査するのか? ブラックボックス検査の対象
  22. 社外秘/Confidential Secure Sky Technology Inc. 31 社外秘/Confidential ローカルProxyツール PCローカル環境 ローカル

    Proxy localhost:8080 • 通信内容を閲覧可能 • ブラウザでは通常見えないリクエストも検査可能 • パラメータ値を任意に改ざん可能 example.com:80
  23. 社外秘/Confidential Secure Sky Technology Inc. 32 社外秘/Confidential ローカルProxyツール • Burp

    Suite • https://portswigger.net/burp/ • Fiddler • http://www.telerik.com/fiddler • OWASP ZAP • https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Pro ject
  24. 社外秘/Confidential Secure Sky Technology Inc. 33 社外秘/Confidential Burp Suite •

    ローカルProxyツール • Java製 • Webアプリケーションのセキュリティ診断ツール • Scanner (自動脆弱性スキャン機能) はプロフェッショナル 版のみ • 機能 • Proxy • Intruder • Repeater • Decoder • など • 日本語マニュアル • https://github.com/burpsuitejapan/startup
  25. 社外秘/Confidential Secure Sky Technology Inc. 35 社外秘/Confidential Burp レスポンス Burp

    GET /ja/ HTTP/1.1 Host: vaddy.net Connection: close Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (・・・ Accept: text/html,application/xhtml+xml,・・・ ・・・ HTTP/1.1 200 OK Date: Fri, 16 Jun 2017 09:54:44 GMT Server: Apache Accept-Ranges: bytes Content-Length: 28226 Cache-Control: max-age=180 Vary: Accept-Encoding,User-Agent Connection: close Content-Type: text/html; charset=UTF-8 <!doctype html> <html><!-- ・・・ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8">・・・ リクエスト
  26. 社外秘/Confidential Secure Sky Technology Inc. 36 社外秘/Confidential Burp - インターセプト機能

    リクエストを一旦保留 パラメータを書き換えて送信 Burp
  27. 社外秘/Confidential Secure Sky Technology Inc. 37 社外秘/Confidential Burp - リクエスト再送信機能

    パラメータを書き換えて再送信 様々なパターンを試行する Burp param=sst param=sst" param=sst' param=sst<script>alert()</script> param=sst"><script>alert()</script>
  28. 社外秘/Confidential Secure Sky Technology Inc. 40 社外秘/Confidential 検査すべき脆弱性 1) SQL

    インジェクション 2) OS コマンド・インジェクション 3) パス名パラメータの未チェック/ディレクトリ・トラバーサル 4) セッション管理の不備 5) クロスサイト・スクリプティング 6) CSRF(クロスサイト・リクエスト・フォージェリ) 7) HTTP ヘッダ・インジェクション 8) メールヘッダ・インジェクション 9) クリックジャッキング 10)バッファオーバーフロー 11)アクセス制御や認可制御の欠落
  29. 社外秘/Confidential Secure Sky Technology Inc. 41 社外秘/Confidential 検査パターンはたくさんある • 各種DB

    • 各種言語 • シングルクオートとダブルクオートの違い • コンテキストによる違い (要素、属性、href、javascript)
  30. 社外秘/Confidential Secure Sky Technology Inc. 44 社外秘/Confidential 対応している脆弱性 ✓ SQLインジェクション

    ✓ XSS(クロスサイト・スクリプティング) ✓ リモートファイルインクルージョン - Standardプラン以降 ✓ コマンドインジェクション - Standardプラン以降 ✓ ディレクトリトラバーサル - Standardプラン以降
  31. 社外秘/Confidential Secure Sky Technology Inc. 46 社外秘/Confidential • 検出漏れ •

    100% すべて見つかるわけではない • ツールによって差があることも
  32. 社外秘/Confidential Secure Sky Technology Inc. 47 社外秘/Confidential • 誤検知 •

    実際は脆弱性じゃない • 誤検知なのかどうかを自分で判断する必要がある
  33. 社外秘/Confidential Secure Sky Technology Inc. 48 社外秘/Confidential • 誤検知と検出漏れの関係 •

    誤検知 (偽陽性 : false positive) • 検出漏れ (偽陰性 :false negative) • 検出漏れをなくそうとすると、誤検知が増える • 誤検知をなくそうとすると、検出漏れが増える • 精度は、ツールやツールの設定によって異なる
  34. 社外秘/Confidential Secure Sky Technology Inc. 49 社外秘/Confidential • ツールで有効に検査できているか? •

    スキャンツールをただかけるだけではダメ • パラメータが実際に使われている箇所(プログラム)に 届いているかを意識する • 場合によっては、スキャンの意味がない
  35. 社外秘/Confidential Secure Sky Technology Inc. 50 社外秘/Confidential param=test'&flag=1 if (checkAuth()

    == false) { return false; } if (checkCSRF() == false) { return false; } if ($flag == 2) { $sql = "SELECT * FROM .." . $param . "..."; } 認証処理で弾かれている CSRFトークンチェックで 弾かれている 条件分岐で条件があわない 検査すべき箇所
  36. 社外秘/Confidential Secure Sky Technology Inc. 51 社外秘/Confidential GET /list?word=sst <html>

    … <a href=”<?php echo($url . ’/2’) ;?>”> 次のページ </a> ... </html> 商品一覧画面 「SST」の検索結果 ・・・・・ ・・・・・ 次のページ SST 検索 一定数以上の件数が表示されないと、 リンクが表示されない
  37. 社外秘/Confidential Secure Sky Technology Inc. 52 社外秘/Confidential POST /login 連続してログイン失敗したためのアカウントロックされた

    • ユーザIDに、存在しないIDを指定してスキャンするとロックされない • ログインリクエストの事前処理に、ログイン成功リクエストを送信する (連続で10回失敗しなければOK という条件であれば、ロックを回避できる)
  38. 社外秘/Confidential Secure Sky Technology Inc. 53 社外秘/Confidential • アカウント新規登録 (同データで再登録不可)

    • 100件まで商品を登録できるが、それ以降はエラー • データ削除処理で、2度目以降はエラー • パラメータの中にパラメータがある • param=aaa,bbb,ccc • param=aaa:bbb:ccc スキャン時に工夫するか、手動で診断する必要がある
  39. 社外秘/Confidential Secure Sky Technology Inc. 54 社外秘/Confidential • データに対する影響を考える •

    DBのデータが破壊される可能性がある (特に本番環境は気をつける) • データを破壊してしまうような検査文字列 • DELETE FROM items WHERE date < '2017-06-' . $day; • DELETE FROM items WHERE date < '2017-06-' OR 1=1;//';
  40. 社外秘/Confidential Secure Sky Technology Inc. 56 社外秘/Confidential CSRF (クロスサイト・リクエスト・フォージェリ) Burp

    POST /update HTTP/1.1 Host: example.com ・・・ Connection: close _csrf=xxxxxxxx&name=sst&address=東京 都&number=000-0000-0000 本来は _csrf の値が検証されるはずが、設定ミスにより素通りできた 正常に更新された
  41. 社外秘/Confidential Secure Sky Technology Inc. 58 社外秘/Confidential ルーム - ともだち

    GET /room?room_id=10000 HTTP/1.1 Host: example.com Cookie: sessionid=abcxyx... ・・・ Connection: close こんにちは こんにちは 権限のないデータ利用 Burp
  42. 社外秘/Confidential Secure Sky Technology Inc. 59 社外秘/Confidential GET /room?room_id=30000 HTTP/1.1

    Host: example.com Cookie: sessionid=abcxyx... ・・・ Connection: close ルーム - ひみつ 秘密のおはなし 適当な値に書き換え ◯◯◯△△△□□□□ room_id の値を書き換えると、本来閲覧できないルームの内容が見れた 権限のないデータ利用 Burp
  43. 社外秘/Confidential Secure Sky Technology Inc. 60 社外秘/Confidential 蓄積型のXSS Burp ルーム作成画面

    ルーム名: メンバー: ともだち [email protected] [email protected] [email protected] POST /room HTTP/1.1 Host: example.com ・・・ Connection: close name=ともだち <script>...</script>&member=... スクリプトを挿入
  44. 社外秘/Confidential Secure Sky Technology Inc. 61 社外秘/Confidential ルーム - ともだち

    ・・・ <p> ルーム - ともだち <script>...</script> </p> こんにちは こんにちは Burp 蓄積型のXSS スクリプトが出力される ルームにアクセスした時点で、アカウント乗っ取りなどの被害が発生 ツールスキャンで見つけることは困難
  45. 社外秘/Confidential Secure Sky Technology Inc. 62 社外秘/Confidential • セッション固定化 •

    Dom Based XSS • マスアサインメント脆弱性 • プロセス回避 (金額や上限の改ざんなど) • など
  46. 社外秘/Confidential Secure Sky Technology Inc. 64 社外秘/Confidential • Webアプリケーションの脆弱性の見つけ方 •

    XSS、SQLインジェクション • 自動スキャンの注意点 • 有効にスキャンできているかを意識する • 自動ではみつけにくい脆弱性 • CSRF、権限のないデータ利用、蓄積型XSS • 脆弱性検査は、自分が管理しているサイトのみ • 自動スキャンも手動も • クラウドの場合は事前申請が必要な場合も http://tigerszk.hatenablog.com/entry/2017/06/20/202335 • 完璧じゃなくてもいいので、 まずはできることから始めましょう!