はじめに
開発エンジニアのamdaba_sk(ペンネーム未定)です。前回は「ソフトウェアテストについて簡単にまとめてみた」という記事を書きましたが、その流れで今回はセキュリティテストツール「OWASP ZAP」について少し調べてみました。
※以下は個人的にネットで調べてみた情報をまとめたものであり、実際に開発過程で運用するなどしたものではありません。また日本語サイトを中心に調べているため、機能等の情報は古い可能性があります。
セキュリティテスト
昨今は個人情報の漏えいや顧客情報流出などのニュースをよく耳にします。怖いですね…。
ラクスでも個人情報の漏えいや顧客情報流出などは深刻な問題としてとらえていまして1、その発生を未然に防ぐために開発者には年1度セキュリティ学習と修了テストが課されていたりしています。
またリリース前にはとあるWebアプリケーション検査ツールを使った脆弱性検査を実施し、検出された脆弱性を修正するようにしています。
しかしながら今のツールによる検査は、はたから見ているだけの感想ですが
- 設定がややこしそう
- リリース前に修正箇所全体に対して行うため、たくさんあったときに修正が大変
- ツールの稼働サーバーがチーム間で共有なため、柔軟には使用できない
といった不便さを抱えているように感じます。
OWASP ZAP
そこで上記の不便さに対し、
- もっと簡単な設定で自動チェックをしてくれるツールはないか
- もっとこまめに、例えば単体テストの一環としてチェックできないか
- もっと柔軟に、チームごとに専用の環境を用意できないか
といった要望を満たすツールとして私が目を付けたのが「OWASP ZAP」でした。
OWASPとは
OWASP ZAPではじめる2016年のウェブアプリケーションセキュリティでは
ウェブアプリケーションを作成する開発者や,ウェブアプリケーションに関わる意思決定を行う方々に対し,セキュリティに関する十分な情報を行き渡らせることを目的とし活動をしているのがOWASPです。OWASPは「The Open Web Application Security Project」の略称で,グローバルにチャプター(支部)を展開するオープンコミュニティです。
と説明されています。Webアプリケーションセキュリティの啓蒙団体といったところでしょうか。
OWASP ZAPの概要
OWASPにはWebアプリケーションセキュリティの啓蒙に関して大小さまざまなプロジェクトを展開しています。OWASP Zed Attack Proxy(OWASP ZAP)はその中でも最重要として位置づけられたプロジェクトの一つであり、その成果物としてのツールです。
IPAテクニカルウォッチ「ウェブサイトにおける脆弱性検査手法の紹介」でも取り上げられて、使いやすく、検知制度が高く、効率性が非常に高い初級者向けのツールという評価を受けています。またありがたいことに無料で使えるオープンソースのウェブアプリケーション脆弱性診断ツールで、Github上にソースコードが公開されています。
用途としては「開発者が開発時に簡易的なウェブアプリケーション脆弱性診断を実施する」ことを特に意識して作られており、セキュリティの専任ではない開発者でも簡単に利用できるようになっています。
なお、OWASP ZAPが検査可能な主な脆弱性は以下のとおりです。
- クロスサイトスクリプティング
- SQLインジェクション
- パストラバーサル
- オープンリダイレクタ
- ヘッダインジェクション
- オートコンプリート機能の有効
- アプリケーションエラーの開示
- X-Content-Type-Optionsヘッダの未設定
- X-Frame-Optionsヘッダの未設定
- HttpOnly属性が付与されていないCookieの利用 等
OWASP ZAPの機能
表1はOWASP ZAPの主要な機能をまとめたものです。
表1 OWASP ZAPの主要機能(OWASP ZAPではじめる2016年のウェブアプリケーションセキュリティより引用)
項番 | 機能名 | 概要 |
---|---|---|
1 | スパイダー機能 | 指定のURLを起点とし,オートクローリング(自動で脆弱性診断対象のリンクを辿り,存在するURLを洗い出す。)を行います。 |
2 | 動的スキャン機能 | クローリングして明らかになった任意のURLに対し,ツールが準備している脆弱性診断用の検査文字列を用いて自動で脆弱性診断を行います。 |
3 | ローカルプロキシ機能 | ローカルプロキシとしてOWASP ZAPを動作させ,手動で脆弱性診断を行います。やや玄人向けです。 |
4 | ディレクトリ探査機能 | 指定のURL配下に不要なディレクトリが存在しないかを確認します。 |
5 | アラート機能 | 脆弱性診断結果に関する簡易の報告書を作成します。 |
6 | ZAP Script機能 | OWASP ZAPの機能を拡張し,OWASP ZAPをより自分好みにカスタマイズできます。Javascript,Python,Rubyなどのさまざまな言語に対応しています。情報源としては,OWASP ZAP ScriptsというGroupがあります。 |
OWASP ZAPはJavaで作られており、クロスプラットフォームで動作します。またwindows 環境では特にありがたいのですが、利用しやすいようにグラフィカルインターフェースを備えています。
詳しい手順はその他の記事や公式のドキュメントを参照していただきたいと思いますが、項番1(スパイダー)の実行後に項番2(動的スキャン)を実行する自動脆弱性診断を行うだけなら
- 検査対象URLの入力
- 実行ボタンクリック
という非常に簡潔な手順で実施できます。
一方でRESTfulなAPIによる操作もできるようで、curl
などでコマンドラインからリクエストを投げれば上の手順をスクリプト化できます。さらにデーモンモードで起動しておけば、JenkinsなどのCIツールと連携して最初から最後まで自動で実施することもできます(e.g.JenkinsとOWASP ZAPで自動診断 - Qiita)。
またJenkinsと連携した上の例ではOWASP ZAPのAPIをスクリプトで直接呼び出していますが、 公式のZAP Jenkins pluginというものもあるようで、そちらを利用するという手もあるでしょう。
その他、手動の単体テスト実施時にローカルプロキシ機能を使用してチェックするとか、いろいろ設定をいじって使ってみるとか、使い方の幅も広そうです。
おわりに
以上簡単ながら「OWASP ZAP」について調べたことをまとめました。
設定も簡単、精度もよく、自動化も可能と、とっても便利そうです。ただあくまで簡易チェックツールということで、
- 開発中は「OWASP ZAP」で簡易検査
- リリース前は精密チェックができる別のツールで本検査
という風な使い分けをしたらいいんじゃないかと今の段階では思っています。
参考
- OWASP Zed Attack Proxy Project
- IPAテクニカルウォッチ「ウェブサイトにおける脆弱性検査手法の紹介」
- OWASP ZAPではじめる2016年のウェブアプリケーションセキュリティ
- JenkinsとOWASP ZAPで自動診断 - Qiita
- zap plugin - Jenkins - Jenkin Wiki
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com
-
本ブログで「意図しない処理が実行されるCSRFとは?概要と対策」や「要注意!新人エンジニアが発生させた2大脆弱性」といった記事があるように、個人レベルでも関心の高い話題です。↩