見出し画像

GitHub ActionsでOwasp Zapによるアプリケーション診断を自動化してみた!

株式会社カンリー、エンジニア部の井上です。
私はインフラ・SREチームに所属しており、カンリーが提供する各プロダクトのインフラやセキュリティを担当しています。

クラウドはAWSを利用していますが、各レイヤーでセキュリティ対策を講じてセキュリティホールを無くすことやリスクを軽減することもミッションの1つです。
AWSでは「責任共有モデル」などと言いますが、自分たちの責任範囲は自分たちで安全を確保する必要があります。

セキュリティ対策、それはもう山ほど実施することがありますよね…
その中の1つ、アプリケーション診断についてカンリーでの取り組みをご紹介したいと思います!

アプリケーション診断、Owasp Zapとは

アプリケーション診断はその名のとおり、Webアプリケーションを診断して安全に作られているかを確認することを言います。
実施方法はツールを使う、専門家が手動で診断する、の2パターンが多いです。

ツールを使って実施する方法では「Owasp Zap(おわすぷ・ざっぷ)」が一番有名なのではないでしょうか!
公式も「最も使われている!」と言ってます!

The world’s most widly used web app scanner.

https://www.zaproxy.org/

Owasp ZapはCLIだけでなくコンテナイメージなども提供されており、自身の端末やサーバーを準備してその上で実行することも可能です。
またWebswingを利用しGUIでの操作も可能です。
様々な手法が取れるのは、ユーザーとしてはありがたいですね!

診断を自社で行うメリットとデメリット

自社でツールを用いて行うには、メリット・デメリットが当然あります。

メリット

  • 任意のタイミングで実行できる

    • 新機能追加時やバグ修正時に応じて診断できる

  • コストが割安

    • Owasp Zap はオープンソース

デメリット

  • 第三者による診断ではない

    • セキュリティ要件が厳しい場合、第三者による診断が必要なことがある

自社で実施できる環境があると、手軽に診断したいタイミングで実行できるのは強みかと思います。
またカンリーのようなスタートアップだとそこまでコストをかけずに診断できるのもありがたいですね!

GitHub Actions を利用して自動化してみた!

様々な実行方法がある中、今回はGitHub Actionsで自動化してみました。
この方法を取ることで、pushしたタイミングなどで自動的に診断を行うことが可能になります。

ということで実際にやってみました。
現時点では3つのスキャンが用意されています。
今回は一番基本的な「Baseline Scan」を試してみます。
詳細はGitHubのマーケットプレイスで「Owasp Zap」と検索してみてください。

ディレクトリ構成(GitHub Actionsのデフォルト)

.github/workflows/owasp_scan.yaml

記述内容

name: Owasp Zap Scan

on: 
  push: 
    branches: 
      - 'main'

jobs:
  zap_scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Owasp Zap Full Scan
        uses: zaproxy/action-baseline@v0.7.0
        with:
          target: 'https://test.hogehoge.canly.com/' #実在しません
          token: ${{ secrets.GITHUB_TOKEN }}
          docker_name: 'owasp/zap2docker-stable'
          cmd_options: >
            -a
            -j
            -z "-config alert.maxInstances=0"

必須項目としては”target”のみです。スキャン対象のURLを記載します。
またオプションを組み合わせることで、スキャン内容が変わってきます。
今回はα版でのスキャンのため”-a”とAjax Spiderを追加したいため”-j”としてます。
“-z”でzap optionが追加できますが、アラート最大件数を緩和する内容を追加してます。

Actionsでの実行が完了すると、リポジトリのIssuesにレポートが出力されます。

Issuesに表示されたレポート

またActionsのSummaryにて下の方にいくと結果がダウンロードできます。

実行結果のダウンロード

スキャン結果をダウンロードして実際の結果を見ると、いくつかアラートが出てますね…

スキャン結果のレポート

今回は検証用のサイトであるため問題はないものの、各アラートについて(特にリスクレベルの高いもの)は、早めの対応をオススメします。
レポート内にはアラート内容と解消方法の記述もあるので、こちらも参考にできますね!

これでGitHubでのトリガーにより、スキャンを自動化できるようになりました!
素晴らしい!!!

注意点

スキャンは実際の攻撃とみなされる場合もあるため、スキャン対象は自社で構築・運用したWebアプリケーションのみとするようご注意ください。

また記事投稿時点(2022/12/26)では、ログインが必要なサイトに対する手立ては無いようです。
ID・パスワードを入力するサイトに対しては前半で記述したWebswingなどで細かく設定をしてスキャンを行う必要があるようです。

さいごに

株式会社カンリーでは一緒に働く仲間を募集しています!
カンリーのバリューに共感できる方、ちょっと話を聞いてみたいという方、ぜひご応募ください!

この記事が気に入ったらサポートをしてみませんか?