2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

テストをしてみよう(セキュリティーテスト)

Last updated at Posted at 2022-10-20

この記事は、「架空プロジェクトを通してシステム開発とドキュメント作成を体験してみる(2022 Late)」の記事の一部です。

概要

Webシステムは外部に公開されることが多いため、公開前にセキュリティーテストを実施することが一般的です。
ここでは代表的なフリーセキュリティーチェックツールであるOWASP ZAPを使って、公開したwebサイトのフォームとAPIの脆弱性テストを行ってみます。

なお、実施する内容は「セキュリティーテスト」の実務を体験してもらうことを重視するので、細かな設定や対応はしません。
OWASP ZAPに限らず、セキュリティーチェックツールはSPAやCSR系のWebの診断は苦手です(細かくいろいろ手動でやる必要がある)。

今回の診断手順

今回の診断手順は以下の作業となります。

  • インストール
  • 起動(初期設定)
  • 手動探索
    • 自動でスキャンする方法などありますが、今回は手動探索で診断するページを探索します。
  • コンテキストの設定
    • コンテキストを設定することで、診断対象のURLをまとめることができます(今回はwebサイトとapiをまとめます)。
  • 動的スキャン
    • 設定したコンテキストに対し攻撃を仕掛け脆弱性をテストします。
  • レポート
    • テスト結果のレポートを出力します。

OWASP ZAPのインストール

Windows環境など、Javaのインストールが必要になる場合があります。その場合はJavaのインストールを実行してください。
Javaダウンロード

公式サイトにアクセスし「Download」をクリックします。
環境に合わせてインストーラをダウンロードしてインストールを実行し完了させます。
000001.jpg

自分の環境にあったものをダウンロード。

000010.jpg

OWASP ZAPの起動(初期設定)

OWASP ZAPを起動します。
セッション保存方法を設定するダイアログがでるので「継続的に保存せず、必要に応じてセッションを保存」を選択し、「開始」をクリックします。

000020.jpg

アドオンのアップデートを聞かれたら全て更新でアップデートしておきましょう。

左上にあるモード選択で「プロテクトモード」を選択します。

プロテクトモードに設定すると、指定した範囲以外のURLに対するスキャンをブロックし、他サイトへの誤った攻撃を防止します。
000030.jpg

アドオンは「アドオンの管理」からも随時アップデート可能です(必要に応じて実行してください)。

000040.jpg

手動探索(テスト対象の設定)

「クイックスタート」タブの「Manual Explore」をクリックします。
000050.jpg

各項目入力したら、Explore your applicationの「ブラウザ起動」をクリックします。

  • URL to explore
    <テスト対象のWebアプリケーションのURL>
  • Enable HUD
    チェックOFF
  • Explore your application(ブラウザ)
    <インストールされている任意のブラウザを選択>

000060.jpg

起動したブラウザで問合わせの操作を行います。
一連の操作ができたらブラウザを閉じます。(以下一連の動作)

  • Contactページに移動
  • フォーム入力
  • 送信ボタンクリック
  • アラート確認

コンテキスト設定

コンテキストの設定をします。

コンテキストとはOWASP ZAP用語で、対象となるURL(や設定のセット)のことです。

今回のwebサイトはJavaScriptからAPIを呼び出している仕組みを採用しているのでwebsite側とAPI側の両方のコンテキストの設定を行う必要があります(ZAPが標準だとJavaScriptを解釈・実行できないため)。

website側

「サイト」ツリーを展開すると、先ほどの手動探索でアクセスしたURLが記録されています。
テストのURLを右クリックで、「コンテキストに含める」>「既定コンテキスト」をクリックします。

000070.jpg

テスト対象のURLが正規表現でコンテキストに含まれていることを確認したら、「OK」をクリックします。

000080.jpg

API側

先程と同じ手順で、APIもコンテキストに含めます。

基本的には既定コンテキストに含めてしまえばいいのですが、本コース上、website側のアラートとAPI側のアラートと表示を分けて見やすくしたいので今回は「新規コンテキスト」を選択しています。

APIのURLをたどって設定します。「https://script.google.com 」>「macros」>「s」>「xxxxxxxxxxx」を右クリックで、「コンテキストに含める」>「新規コンテキスト」をクリックします。

000090.jpg

「1.既定のコンテキスト」の下に「2.xxxxxx」と表示されているのでクリックしてコンテキスト名をわかりやすく変更します。
新規で作るコンテキストにテスト対象のURLが正規表現でコンテキストに含まれていることを確認したら、「OK」をクリックします。

000100.jpg

コンテキストに2つ表示されているのがわかります。

000110.jpg

サイトに表示されている、webとapi以外のその他テスト対象外のものは選択して右クリックで削除をします。

000120.jpg

動的スキャン

website側

サイトURLを選択して右クリックで「攻撃」>「動的スキャン」をクリックします。
000130.jpg

「スキャンを開始」をクリックします。
000140.jpg

スキャンを開始し 進行状況が確認できます。100%になっていればスキャンが終了しています。
000150.jpg

アラート確認

アラートタブをクリックして確認します。
「Show only URLs in scope」をクリックして赤になっていることを確認します。
すると、スコープ内のURLに対してのアラートのみが表示されます。

000160.jpg

ですが現在、このスコープにはAPIも含まれているのでAPIコンテキストをスコープから一旦削除してみます。

000170.jpg

website側のアラートのみになりました。
それぞれのアラートをクリックすると、右側に説明が記述されています。

000180.jpg

API側

同様に、APIのURLでも「攻撃」>「動的スキャン」をクリックし、「スキャンを開始」をクリックして実行します。

アラート確認

終了後、アラートを確認すると、脆弱性を確認できます。
今のままでは、スコープに既定コンテキストのみ入っているのでアラートはwebsite側の情報しか表示されていません。
APIコンテキストをスコープに追加して、

000190.jpg

既定コンテキストをスコープから削除します。

000200.jpg

この状態になります。

000210.jpg

アラートを確認すると、API側に対するアラートのみが表示され見やすくなりました。
000220.jpg

また、APIのテストを行うと、スプレッドシートには攻撃によって送られたデータが大量に入っていることが確認できます。

000230.jpg

レポート作成

レポートを作成していきます。
「レポート」>「Generate Report」をクリックしてレポートを作成できます。

000240.jpg

「スコープ」を確認して、website/api側両方入っていることを確認します。
000250.jpg

レポートの形式は「template」から選択できます。

000260.jpg

テンプレートを選択したら「Generate Report」をクリックしてレポートを生成します。
Traditional HTML Reportを選択した場合、このようなレポートが出力されます。

検出されるエラーはバージョンによって変わってきますので常に最新にするようにします。
000270.jpg

アラートの内容について

リスクレベル「高」と診断されたものはありませんでした。
リスクレベル 「中」や「低」「インフォメーション」に関しては場合に応じで内容を精査し対応していくことが必要です。

本来ならば中や低についても可能な限り対応するのですが、今回はGoogle環境やDrive To Web環境の設定に起因し、こちらでは設定できないものがほとんどのため対応はしません。通常はWebサーバなどの設定を変更・修正してなるべくリスク要素を減らします。

まとめ

  • Webの場合はセキュリティーテストをする場合が多い
  • セキュリティーテストはツールを使って行うことが多い(外部に委託する場合も多い)
  • サーバレス環境では検出されたリスクに対応できない場合もある
    • それが脅威ではないことを理解・提示する必要がある
  • 今回のテストでは網羅できてない部分がある。どこか?

ドキュメント作成視点での考察

  • セキュリティテスト実施の有無、方法等をどこにどう記述するのか?

関連コンテンツ

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?