前回で環境の構築と初期設定までを行いました。 今回は実際に脆弱性の検査を実施します。
さて、前回少し記述しましたがZAP自体はその名の通りProxyです。いわゆる「man-in-the-middle Proxy」という考え方のようです。
そのため、ブラウザをインタフェイスとして設定し、その後スタンドアローンで利用できます。デーモン利用も可能なようですがそれは後述します。
まずはクイックに脆弱検査してみる
起動後、アプリの更新などを終えるとこの画面になります。
この状態では当然何も設定されていない状態になります。
テスト段階ではまず 左上 「ファイル」メニューの下の選択メニューで「プロテクトモード」となっているメニューをクリックします。
すると下記のようなメニュー項目が表示されると思います。
- セーフモード :
- 安全-潜在的に危険な操作は許可されていません ドライランというほどではないのですが破壊的なスキャン動作しないと考えればよいかと思います。
- 筆者は検査すべきサイトのスコープリストを作成する際にするものかな?と考えています。
- プロテクトモード
- スコープ内のURLに対してのみ(潜在的に)危険なアクションを実行できます。
- このモードもスコープサイトの選定を行う際に利用していました。
- スコープ外のサイトに対してスパイダーを飛ばさないためスコープ除外サイトに対して攻撃をかけず色々と試せます。
- 標準モード
- 以前のリリースと同様に、何でもできます。
- 自サイトのみであれば問題ないのですが、厳密にスコープ除外の設定を行ったのちに標準モードで検査実施をする必要があります。
- 何も考えずこのモードを利用するとサイト・サービス破壊行為になります
- 攻撃モード
ここで出てくるスコープ(ヘルプでスコープと記載されている)はZAP内では「コンテキスト群」というような用語で表現されています。
スコープ内:複数個のコンテキストに含まれる調査対象
スコープ外:コンテキストに含まれていないURLなどのサイト・またコンテキスト除外に明確に設定されているサイト
大まかですがこのように理解しています。
では実際に最初の脆弱性のテストを行ってみます。 今回はサービスの脆弱性テスト環境を用意し、その環境に対してテストを実行します。
脆弱性の検査方法はまず大まかに二種類あり
- Autometed Scan
- ManualExplore
があります。
最初のサイトの登録時はセーフ/プロテクトモードで行いたいので、AutometedScan は行なえません(標準モード以上でのみ選択可能)
まずはManualExplore で試していくことになります。
Manual Exploreのボタンを選択した場合の画面
URL to explore の欄に対象のURLを入力し
日本語化していれば Explore your application の 最後のカラムをChromeもしくはFireFox希望のブラウザを選択した状態で、ブラウザの起動(Launch Browser)のボタンを押すと
ZAPにより制御されたブラウザが起動します。
JMater等と同様に、このブラウザはZAP側でトラッキングされており、このブラウザ内での挙動を元に、操作状態がZAP側のコンテキストとして記録されることになります。
一通り、テストを行いたいサイトを上記のブラウザ上で周回しZAP側のコンソール画面に戻ってくると下記のように、サイトのツリーカラム内にこのサイトに関連したサイトが一覧で羅列されます。
CSSやheader、内包するリンクもピックアップして抽出した状態となります。
ここからコンテキストを作成します。
コンテキストはサイト内から検査対象を追加することで可能となります。
まずは、対象にしたいサイトを右クリックして
コンテキストに追加します
コンテキストのプロパティを確認すると 内包するサイトが確認できます
コンテキストに追加したサイトの中で
テストから除外したいサイトが有る場合は、コンテキストから除外で対象のコンテキストを選択すれば一部のコンテンツのみテストサイトから除外することが可能です。
また、ログインページなどはログインのページを Flag as Context で対象のコンテキストにログイン時にリクエストで送信する形式を選択して追加し
正しいパラメータの受け渡し方を認証のプロパティに設定することで認証が可能です。
この状態でスキャンをかけると
上記のように簡単にOWASP基準に抵触する アラートが検知されます。
真っ赤な旗印が頭についたアラート項目が入ってくると危険ですね。
レポートへの出力
一律スキャンを掛け終わったら提出用?のレポートも作成可能です。
最上段のメニューから Generate Reportを選択し
- ファイルの保存場所
- レポートの名称(わかり易い名前でよい)
- Context : 検査対象としたコンテキスト
- Sites :整理をしていない場合不要なサイトもレポート内に含まれてしまうため、必要なサイトのみ選択するとレポートがきれいになります
最後に最下部の GenerateReport のボタンを押すと
html形式でレポートが吐き出されます
そのまま社内であれば提出できるレベルで使い物になりそうですね。
下の方にはちゃんと 脆弱性に関してのリファレンスなども記載されています。
脆弱性検査を第三者に依頼した場合は、これよりもう少し対応策・推奨方針なども含んだ形のレポートが出てくる印象なので、内部の脆弱性検査結果としては十分じゃないでしょうか?
ここまでが基本的なテストの内容になります。
ZAPの起動からこの程度のスキャン設定内容であれば小一時間もあればセキュリティエンジニアでなくとも簡単な検査はできるようになるためとても良いツールだと感じます。更にここであげたのは本当に簡易的な基本脆弱性テストで更に細やかな検査設定、定常的な自動テストも可能そうです。流石に公式機関が開発したツールといったところでしょうか。
おわりに
二回にわたりOWAPS ZAPを利用した脆弱性検査のさわりの部分を紹介しました。 画像多めのため、記事の通りに設定していくと誰にでも脆弱性のチェックができる記事になっているかと思います。
次回、機会があれば、Ajaxでのスキャン 各言語別を対象とした脆弱性の検査方法を試してみたいと考えています。
ここまでお読みいただきありがとうございました。
Emotion Techではメインシステムの開発だけではなく、エンジニアの開発環境の見直しを一緒に考えていくメンバーも募集中です。この記事や他の記事を見て弊社に興味をもっていただけましたら、ご応募お待ちしております。