Jenkins と OWASP ZAP で自動診断
OWASP Evening Okinawa #2
目次
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
注意
本資料で紹介した内容について
他者が管理しているサービスでは
試さないようにお願いします。
自己紹介
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
自己紹介
名前 桃原 裕太 / とうばる ゆうた
所属 株式会社 シーエー・アドバンス 技術統括本部
経歴 前職 ・ECサイト等の開発株式会社 シーエー・アドバンス ・社内ツールの開発 ・脆弱性診断の業務に携わって約4年
業務 Webアプリケーション脆弱性診断 ・PCブラウザ向けアプリ ・SPブラウザ向けアプリ ・Androidアプリ ・iOSアプリ
脆弱性診断とは
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
脆弱性診断とは
Webサイトに脆弱性がないか、
擬似攻撃を行って調査しています。
脆弱性診断とは
例)商品購入(正常なパターン)
itemId name price
1 アイテム1 100円
2 アイテム2 200円
購入(itemId=1,price=100)
アイテム1入手
脆弱性診断とは
例)商品購入(不正なパターン)
itemId name price
1 アイテム1 100円
2 アイテム2 200円
購入(itemId=1,price= 50)
アイテム1入手
脆弱性診断とは
調査した結果、脆弱性だと判断した場合は開発者へ報告します。
タイトル 商品を任意の価格で購入することが可能
危険度 High
説明 パラメータpriceを操作することで、
任意の価格で商品を購入することが可能。
影響 売上の減少など
脆弱性診断とは
診断観点
❏ OSコマンドインジェクション
❏ SQLインジェクション
❏ クロスサイトスクリプティング(XSS)
❏ クロスサイトリクエストフォージェリ
❏ 不適切な認証及びパスワードリセット機能
❏ オープンリダイレクタ
❏ ヘッダインジェクション
❏ オートコンプリート機能の有効
❏ アプリケーションエラーの開示
❏ X-Content-Type-Optionsヘッダの未設定
❏ セッション固定攻撃
❏ セッション管理
❏ アクセスコントロールの不備
❏ エラー処理の不備
❏ アプリケーションロジックの不備
❏ パストラバーサル
❏ クリックジャッキング
❏ チート行為
❏ HttpOnly属性が付与されていないCookieの利用
❏ その他
脆弱性診断とは
通常はリリース前に
診断していますが
脆弱性診断とは
報告数が多い場合は
修正が大変です
脆弱性診断とは
※こういう状況は稀ですが、実際にあります
脆弱性診断とは
もっと円滑に
効率よく
診断するには?
脆弱性診断とは
開発中に
自動で診断しよう!
自動診断について
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
自動診断について
Q. 脆弱性診断の自動化って
どうやるの?
自動診断について
Q. 脆弱性診断の自動化って
どうやるの?
A. OWASP ZAP で出来ます!
自動診断について
Q. OWASP ZAPとは?
自動診断について
Q. OWASP ZAPとは?
A. オープンソースの
脆弱性診断ツールです。
GUI や API 操作で診断できます。
脆弱性診断とは
OWASP ZAPの診断項目について。Webサイトにおいて主要な脆弱性を見つけることができます。
❏ Code Injection
❏ Command Injection
❏ Client Browser Cache
❏ Cross Site Scripting (reflected)
❏ Cross Site Scripting (persistent)
❏ CRLF Injection
❏ Directory Browsing
❏ External Redirect
❏ Format String Error
❏ Parameter Tampering
❏ Path Traversal
❏ Remote File Include
❏ Server Side Include
❏ SQL Injection
❏ Other
※なお、アプリ側の”アクセス権の侵害”等の脆弱性は自動診断で見つけられません。
全ての脆弱性が取り除けるわけではないので注意が必要です。
参考リンク:https://github.com/zaproxy/zap-core-help/wiki/HelpAddonsAscanrulesAscanrules
自動診断について
Q. 開発中に自動診断するなら
どのタイミング?
自動診断について
Q. 開発中に自動診断するなら
どのタイミング?
A. デプロイが成功した時
自動診断について
下記のツールを使いました
❏ Jenkins
❏ OWASP ZAP
❏ infobyte/faraday
※それぞれ Docker Hub に公式イメージがあります
※ infobyte/faraday は診断結果閲覧用です
自動診断のイメージについて説明します
自動診断について
Jenkins でデプロイを実行
自動診断について
Jenkins でデプロイを実行(成功)
自動診断について
デプロイ成功後、自動診断スクリプトを実行
自動診断について
OWASP ZAP の API で、サイトクロール&脆弱性診断
自動診断について
診断終了後、レポートを取得(XML形式)
自動診断について
レポートを Faraday にアップロード
自動診断について
自動診断について
あとはレポートを
確認するだけです!
自動診断について
実際の流れについて
説明していきます
動かしてみた
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
動かしてみた
投稿後、赤枠内でXSSが発生するデモサイトを準備しました。
動かしてみた
それでは本題に
入っていきます
[jenkins] ジョブを2つ登録
動かしてみた
weak-app デプロイ
weak-app-auto-secaudit デプロイ後に自動診断スクリプトを実行
[jenkins] デプロイ(weak-app)のジョブ詳細
動かしてみた
[jenkins] 自動診断(weak-app-auto-secaudit)のジョブ詳細
動かしてみた
動かしてみた
[jenkins] デプロイ(weak-app)ビルドの実行
動かしてみた
[デモサイト] データがOWASP ZAPで登録されている様子
動かしてみた
[jenkins] XMLレポートを作成して診断完了
動かしてみた
[Faraday] レポート画像(ダッシュボード)
動かしてみた
[Faraday] レポート画像
XSSを検出 !!
動かしてみた
[Faraday] レポート画像
発生箇所
動かしてみた
[デモサイト] クロスサイト・スクリプト(XSS)発生箇所
まとめ
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
まとめ
❏ 脆弱性診断時の報告数を減らしたい
❏ 開発中に脆弱性に気付ける環境を作る
❏ 今回使ったツール
❏ Jenkins
❏ OWASP ZAP
❏ infobyte/faraday
まとめ
今回検証したソースはGitHubにアップしています。
https://github.com/toubaru/auto-secaudit
参考リンク
OWASP ZAP API + hubot/slackで作る脆弱性スキャンボット
https://speakerdeck.com/owaspjapan/owasp-zap-api-number-owasp-night-21th