新年明けましておめでとうございます。昨年は年金機構への標的型攻撃による個人情報の漏えいを筆頭に、セキュリティに関する報道が毎日のように世間を騒がしていました。特にウェブにおいてはHTTP.sysの脆弱性やFlashの脆弱性などが発見されたり、継続して標的型攻撃やパスワードリスト攻撃などの攻撃も繰り返されています。
ウェブの普及に伴い、攻撃を受ける可能性のあるインタフェースが増加し、その攻撃対象も企業から個人まで幅広くなりつつあります。これらの攻撃による情報漏えいやインシデント等の発生から身を守る術、すなわち情報セキュリティを身につけ、自らの情報を自らの手で守り抜くことが求められています。全ての人にとって情報セキュリティへの理解を深めることは課題であると言えます。
OWASPとは
このような背景の下、ウェブアプリケーションを作成する開発者や、ウェブアプリケーションに関わる意思決定を行う方々に対し、セキュリティに関する十分な情報を行き渡らせることを目的とし活動をしているのがOWASPです。OWASPは「The Open Web Application Security Project」の略称で、グローバルにチャプター(支部)を展開するオープンコミュニティです。具体的には各チャプターにおけるローカルチャプターミーティング(勉強会)やAppSecConference(グローバルカンファレンス)の開催、セキュリティに関わるドキュメントやツールの作成・公開などを行っています。
日本においては、本稿執筆時点でOWASP Kansai(大阪、京都、神戸) 、OWASP Kyushu(福岡) 、OWASP Sendai(仙台) 、そして主に首都圏から全国をサポートするOWASP Japan という4つのローカルチャプターが設立されています。各チャプターでは、3ヵ月に1回程度のローカルチャプターミーティングというカジュアルな勉強会を開催しています。また、2014年には日本初のAppSecConferenceを開催し、各国のセキュリティ有識者が東京に集いコミュニケーションをとりました。さらに、英語ドキュメントの翻訳や日本独自のドキュメント作成を行っています。これらの活動を通じて、幅広い層の方々のウェブアプリケーションセキュリティに関する理解を深化し、知識の底上げを図っています。
OWASPプロジェクトとは
OWASPプロジェクトは、ウェブアプリケーションセキュリティに関連するドキュメントやツールの作成に関する活動です。OWASPプロジェクトを通じて、ウェブアプリケーションのライフサイクルの各工程において活用可能なドキュメントやツールが成果物としてリリースされています。これらの成果物を活用することで、セキュリティ専任者に加え開発者、ITアーキテクト、プロジェクトマネジャーなどさまざまな立場の方々が効果的・効率的にウェブアプリケーションのセキュリティを高めることができます。OWASPプロジェクトは、その内容がウェブアプリケーションセキュリティから逸脱していない限り、誰もが自由に立ち上げることができます。また、遂行しているどのプロジェクトにも自由に参加することができます。このようにOWASPコミュニティにおける活動のほとんどは、さまざまな方のコラボレーションで成り立っており、多種多様な知見が結集されています。もちろん本稿も多くの方のコラボレーションにより作成しました。
OWASP ZAPの概要
OWASPプロジェクトには大小さまざまなプロジェクトが存在していますが、OWASPコミュニティからフラッグシッププロジェクト(最も重要なプロジェクト群)として位置付けられているのが、OWASP Zed Attack Proxy (以降「OWASP ZAP」 )です。OWASP ZAPは、IPAテクニカルウォッチ「ウェブサイトにおける脆弱性検査手法の紹介 」において、使いやすく検知制度が高く効率性が非常に高い初級者向けのツールという評価を受けています。OWASP ZAPは無料で使えるオープンソースのウェブアプリケーション脆弱性診断ツールでありGithub上 にソースコードが公開されています。そのためプロジェクトに参加しなくてもPull Requestで要望を伝えることができますし、もちろんプロジェクトに参加して開発に貢献することもできます。
OWASP ZAPの特徴としてZAP Evangelist という制度が挙げられます。ZAP Evangelistは、OWASP ZAPを普及させ、ひいては、「 ウェブをたしかなもの」にするという大きな目標の達成を目的に活動しています。具体的には、OWASP ZAPの更新情報の発信や、OWASP ZAPの使い方に関するハンズオン・トレーニングの提供を行っています。OWASP ZAPのプロジェクトリーダーであるSimon Bennetts さんに申請、要件を満たしている場合にZAP Evangelistの認定を受けることができます。日本では、境さん、亀田さん(本稿に執筆協力していただきました)がZAP Evangelistとして認定されています。ハンズオン・トレーニングの提供や、OWASP ZAPのツールの日本語化、また日本語の運用マニュアル の執筆など、日本におけるOWASP ZAPの認知度や馴染みやすさを向上させる活動を率先しておられます。
OWASP ZAPの利用用途
OWASP ZAPの利用用途は大きく以下の2点に分けられますが、特に2の開発者に利用していただくことを意識して作られています。
セキュリティ専任者がウェブアプリケーション脆弱性診断を実施する
開発者が開発時に簡易的なウェブアプリケーション脆弱性診断を実施する
ITの普及に伴いビジネスのスピードは加速する中で、システム開発においてもプロトタイピングやアジャイルなどのスピード感を意識した開発モデルが流行しています。このような状況下で、セキュリティのチェックに時間を要してしまうことはビジネスチャンスを逃すことにも繋がりかねません。そのため、要件定義や設計・開発工程からセキュリティを意識しておき、セキュアなシステムを構築することが重要視されています。
また、特に大規模なシステムにおいてはウォーターフォールモデルが依然として採用されていることが多く、システムリリース直前の脆弱性診断工程において、広範囲に亘る改修が必要な脆弱性が検出されることも残念ながらあります。その際には、大きな手戻りによるスケジュール遅延やコスト超過が発生してしまいます。そのため、手戻りを未然に防ぐために、開発工程においていかに脆弱性を排除するかが重要です。
開発工程において脆弱性を排除する方法論はセキュアコーディングをはじめさまざまあり、OWASPコミュニティからも成果物として公開されています。その中でOWASP ZAPを用いると、開発者が作ってしまった脆弱性を自ら発見し改修することを通じて、後工程に脆弱性を持ち越さずに済みます。
このような背景により、OWASP ZAPは必ずしもセキュリティ専任者ではない開発者の方でも簡単に利用できるように、日本語への対応やアイコン表示など馴染みやすく、理解しやすいインタフェースを有しています。もちろんセキュリティ専任者においても利用できるように玄人好みにカスタマイズ可能な機能も有しています。
OWASP ZAPの機能
OWASP ZAPの主要な機能を表1 に示します。OWASP ZAPによるウェブアプリケーションの脆弱性診断は、基本的には項番1を実施した上で項番2を実施するという手順で行いますが、より簡単に実施するために項番1と項番2を同時に実行する機能も有しています。その機能を用いると対象のURLの入力と1回のクリックのみで簡易な自動脆弱性診断を実行できます。
表1 OWASP ZAPの主要機能
項番 機能名 概要
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による自動脆弱性診断で検査可能な主な脆弱性は以下のとおりです。権限設定の不備など自動脆弱性診断ツールでは検出できない脆弱性を除き、ウェブアプリケーションにおける主要な脆弱性を網羅的に検査できます。
クロスサイトスクリプティング
SQLインジェクション
パストラバーサル
オープンリダイレクタ
ヘッダインジェクション
オートコンプリート機能の有効
アプリケーションエラーの開示
X-Content-Type-Optionsヘッダの未設定
X-Frame-Optionsヘッダの未設定
HttpOnly属性が付与されていないCookieの利用 等
OWASP ZAPの使い方
本稿では項番1のスパイダーを実行した上で項番2の動的スキャンを実行する自動脆弱性診断の手法を説明します。より玄人向けのローカルプロキシによる脆弱性診断については、ZAP Evangelistが開催しているハンズオン・トレーニングに参加いただく、または、ZAP Evangelist亀田さんが公開しておられる資料 をご参照ください。
[注意] 本稿に記載されている脆弱性診断の手法は、技術情報を共有する目的でのみ記載されています。脆弱性診断で実際に用いられる手法の中には、攻撃行為と判断されるものがあり、自身の管理下にないサーバ等に対して行った場合、最悪の場合、法的措置を取られる可能性もあります。試行にあたっては、必ず自身の管理下にあるサーバ等に対してのみ実施してください。
動的スキャンによる自動脆弱性診断のイメージ図は以下のとおりです。
図1 動的スキャンによる自動脆弱性診断のイメージ
OWASP ZAPが自動で脆弱性診断用の検査文字列をリクエスト、脆弱性診断対象からのレスポンスの内容により、脆弱性の有無を自動で判定します。以上より、脆弱性の検査方法に関する深い知見がなくても脆弱性の有無を検査することができます。
それでは、図1 で示した動的スキャンによる自動脆弱性診断をOWASP ZAPで実行するための具体的な手順を示しましょう。
まずは図2 、図3 に示すスパイダー機能を用いて脆弱性診断対象に存在するURLを洗い出します。なお、図2~図5は2015年12月時点でリリースされているOWASP ZAP 2.4.3をもとに作成しています。
図2 スパイダー機能を選択(赤枠のようにURL→攻撃→スパイダーと遷移)
図3 スパイダー機能を実行し、URLを洗い出す(赤枠のように「スキャンを開始」をクリック)
次に、スパイダー機能で洗いだした各URLに対し、図4 、図5 に示す動的スキャンを実行します。
図4 動的スキャン機能を選択(赤枠のようにURL→攻撃→動的スキャンと遷移)
図5 動的スキャン機能を実行し、脆弱性を検出(赤枠のように検出された脆弱性一覧、検出根拠を確認可能)
以上の手順を踏むだけで自動脆弱性診断を実行することができます。脆弱性があると判定された根拠についてもOWASP ZAPで確認することができるため、その内容を見てご自身でプログラムを改修する箇所を推測、すぐに改修することができます。たったこれだけの手順でかなりの程度の脆弱性を後工程に引き継ぐことから食い止めることができます。OWASP ZAPによる脆弱性診断を実行しなかった時と比べて、手戻りリスクを低減することができるのは明らかです。
OWASP ZAPの今後の展望
OWASP ZAPは機能の改善や追加が頻繁に行われており、その活動はとても活発です。2015年12月にはOWASP ZAP 2.4.3がリリースされました。今後もこの取り組みは続けられていくでしょう。新しい機能や使い方について疑問点等必要があれば、コミュニティ・グループで質問したり、ZAP Evangelistの方々などの経験者の皆さんに積極的にコンタクトを取っていただくことをお勧めします。
本稿執筆時点で公開されているOWASP ZAPはクライアントにインストールするデスクトップ型のツールですが、Zap as a Service (ZaaS)というクラウドベースのサーバ型のサービス提供が期待されています。本サービスにより、自動的に検査文字列が最新化される、自動的に脆弱性診断が実行されるなど、利用者がツールを利用していることを意識することなく脆弱性診断を実行可能な未来が実現できるかもしれません。
まとめ
本稿ではOWASP ZAPの概要を説明し、簡単に利用できることを示しました。ただ、本稿でご紹介できたOWASP ZAPの機能はほんの一部に過ぎません。さらに使い込むことによってOWASP ZAPに愛着が湧くことでしょう。また、OWASP ZAPによる脆弱性診断のみで必ずしも全ての脆弱性を根絶することはできないことに留意する必要があります。すでに述べたとおり、自動脆弱性診断では検出できない脆弱性が存在します。そのため、開発したウェブアプリケーションのリリース前には、セキュリティ専門会社や専門部門等の脆弱性診断を必ず受診してください。
さて、OWASP ZAPプロジェクトでは他のプロジェクトと同様に、さまざまな知見を取り入れるために共に開発に携わってくれる仲間を募集しています。セキュリティ専任者であれば検査文字列の更新に貢献できますし、開発者であればZaaSの開発に携われることでしょう。ぜひOWASP ZAP Development Group や、OWASP ZAP Japan Group にご参加ください。
また、OWASP ZAPについてより深く学びたい場合には是非ハンズオン・トレーニングに参加してみてください。OWASP ZAPの利用者が増えることで、「 ウェブをたしかなものに」することができれば幸いです。