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

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

Avatar for VAddy VAddy
June 22, 2017

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

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

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

Avatar for VAddy

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 • 完璧じゃなくてもいいので、 まずはできることから始めましょう!