Page 1
Jenkins と OWASP ZAP で自動診断
OWASP Evening Okinawa #2
Page 2
目次
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
Page 3
注意
本資料で紹介した内容について
他者が管理しているサービスでは
試さないようにお願いします。
Page 4
自己紹介
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
Page 5
自己紹介
名前 桃原 裕太 / とうばる ゆうた
所属 株式会社 シーエー・アドバンス 技術統括本部
経歴 前職 ・ECサイト等の開発株式会社 シーエー・アドバンス ・社内ツールの開発 ・脆弱性診断の業務に携わって約4年
業務 Webアプリケーション脆弱性診断 ・PCブラウザ向けアプリ ・SPブラウザ向けアプリ ・Androidアプリ ・iOSアプリ
Page 6
脆弱性診断とは
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
Page 7
脆弱性診断とは
Webサイトに脆弱性がないか、
擬似攻撃を行って調査しています。
Page 8
脆弱性診断とは
例)商品購入(正常なパターン)
itemId name price
1 アイテム1 100円
2 アイテム2 200円
購入(itemId=1,price=100)
アイテム1入手
Page 9
脆弱性診断とは
例)商品購入(不正なパターン)
itemId name price
1 アイテム1 100円
2 アイテム2 200円
購入(itemId=1,price= 50)
アイテム1入手
Page 10
脆弱性診断とは
調査した結果、脆弱性だと判断した場合は開発者へ報告します。
タイトル 商品を任意の価格で購入することが可能
危険度 High
説明 パラメータpriceを操作することで、
任意の価格で商品を購入することが可能。
影響 売上の減少など
Page 11
脆弱性診断とは
診断観点
❏ OSコマンドインジェクション
❏ SQLインジェクション
❏ クロスサイトスクリプティング(XSS)
❏ クロスサイトリクエストフォージェリ
❏ 不適切な認証及びパスワードリセット機能
❏ オープンリダイレクタ
❏ ヘッダインジェクション
❏ オートコンプリート機能の有効
❏ アプリケーションエラーの開示
❏ X-Content-Type-Optionsヘッダの未設定
❏ セッション固定攻撃
❏ セッション管理
❏ アクセスコントロールの不備
❏ エラー処理の不備
❏ アプリケーションロジックの不備
❏ パストラバーサル
❏ クリックジャッキング
❏ チート行為
❏ HttpOnly属性が付与されていないCookieの利用
❏ その他
Page 13
脆弱性診断とは
通常はリリース前に
診断していますが
Page 14
脆弱性診断とは
報告数が多い場合は
修正が大変です
Page 15
脆弱性診断とは
※こういう状況は稀ですが、実際にあります
Page 16
脆弱性診断とは
もっと円滑に
効率よく
診断するには?
Page 17
脆弱性診断とは
開発中に
自動で診断しよう!
Page 18
自動診断について
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
Page 19
自動診断について
Q. 脆弱性診断の自動化って
どうやるの?
Page 20
自動診断について
Q. 脆弱性診断の自動化って
どうやるの?
A. OWASP ZAP で出来ます!
Page 21
自動診断について
Q. OWASP ZAPとは?
Page 22
自動診断について
Q. OWASP ZAPとは?
A. オープンソースの
脆弱性診断ツールです。
GUI や API 操作で診断できます。
Page 23
脆弱性診断とは
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
Page 24
自動診断について
Q. 開発中に自動診断するなら
どのタイミング?
Page 25
自動診断について
Q. 開発中に自動診断するなら
どのタイミング?
A. デプロイが成功した時
Page 26
自動診断について
下記のツールを使いました
❏ Jenkins
❏ OWASP ZAP
❏ infobyte/faraday
※それぞれ Docker Hub に公式イメージがあります
※ infobyte/faraday は診断結果閲覧用です
Page 27
自動診断のイメージについて説明します
自動診断について
Page 28
Jenkins でデプロイを実行
自動診断について
Page 29
Jenkins でデプロイを実行(成功)
自動診断について
Page 30
デプロイ成功後、自動診断スクリプトを実行
自動診断について
Page 31
OWASP ZAP の API で、サイトクロール&脆弱性診断
自動診断について
Page 32
診断終了後、レポートを取得(XML形式)
自動診断について
Page 33
レポートを Faraday にアップロード
自動診断について
Page 34
自動診断について
あとはレポートを
確認するだけです!
Page 35
自動診断について
実際の流れについて
説明していきます
Page 36
動かしてみた
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
Page 38
動かしてみた
投稿後、赤枠内でXSSが発生するデモサイトを準備しました。
Page 39
動かしてみた
それでは本題に
入っていきます
Page 40
[jenkins] ジョブを2つ登録
動かしてみた
weak-app デプロイ
weak-app-auto-secaudit デプロイ後に自動診断スクリプトを実行
Page 41
[jenkins] デプロイ(weak-app)のジョブ詳細
動かしてみた
Page 42
[jenkins] 自動診断(weak-app-auto-secaudit)のジョブ詳細
動かしてみた
Page 43
動かしてみた
[jenkins] デプロイ(weak-app)ビルドの実行
Page 44
動かしてみた
[デモサイト] データがOWASP ZAPで登録されている様子
Page 45
動かしてみた
[jenkins] XMLレポートを作成して診断完了
Page 46
動かしてみた
[Faraday] レポート画像(ダッシュボード)
Page 47
動かしてみた
[Faraday] レポート画像
XSSを検出 !!
Page 48
動かしてみた
[Faraday] レポート画像
発生箇所
Page 49
動かしてみた
[デモサイト] クロスサイト・スクリプト(XSS)発生箇所
Page 50
まとめ
❏ 自己紹介
❏ 脆弱性診断とは
❏ 自動診断について
❏ 動かしてみた
❏ まとめ
Page 51
まとめ
❏ 脆弱性診断時の報告数を減らしたい
❏ 開発中に脆弱性に気付ける環境を作る
❏ 今回使ったツール
❏ Jenkins
❏ OWASP ZAP
❏ infobyte/faraday
Page 52
まとめ
今回検証したソースはGitHubにアップしています。
https://github.com/toubaru/auto-secaudit
参考リンク
OWASP ZAP API + hubot/slackで作る脆弱性スキャンボット
https://speakerdeck.com/owaspjapan/owasp-zap-api-number-owasp-night-21th