広告

【OWASP ZAP】CSRF対策ページに脆弱性診断

ツール他

当サイトではアフィリエイト広告を利用しています。

広告

はじめに

今回は、CSRFの対策を行っているサイトに対して、OWASP ZAPを利用して脆弱性診断を行います。
そのための設定や、実際に攻撃を行い動作確認を行いました。

OWASP ZAPのインストール方法や、基本的な使い方は以下にまとめましたのでご覧ください。

【OWASP ZAP】インストールと基本的な使い方【Web脆弱性診断】
OWASP ZAPを使用して、Webの脆弱性診断を行ってみます。オープンソースで無料で使うことができます。

脆弱性の危険性を試した記事を以前まとめましたので、あわせてご覧ください。

【Laravel】敢えて試すSQLインジェクション【仕組みを知るには実装】
敢えてSQLインジェクションの脆弱性を含んだシステムを作成します。対策や仕組みを知るには実際に試してみましょう。人気のあるLaravelというフレームワークで試します。

Mac版のOWASP ZAPについては以下の記事をご覧ください。
本記事ではWindows版で解説していますが、使い方はMac版でも同様です。

【OWASP ZAP】インストールと使い方【M1 Mac】
Mac版のOWASP ZAPを使用して、Webの脆弱性診断を行ってみます。オープンソースで無料で使うことができます。
動作環境
  • ホスト端末:Windows 10
  • OWASP ZAP 2.11.0

他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。

CSRFとは

CSRFとはクロスサイトリクエストフォージェリの略で、脆弱性の一種です。
例えば、利用者が悪意のあるサイトにアクセスし、外部サイトに意図しないリクエストを送信されてしまう場合があります。

利用者が掲示板に、意図しない投稿をさせられた事件がありました。
サイト側がCSRFの対策が行われていないためでした。
(「ぼくはまちちゃん」 騒動など)

パソコン遠隔操作事件 – Wikipedia

CSRFの詳細については、IPAのサイトをご覧ください。
仕組みなどが理解できると思います。

安全なウェブサイトの作り方 – 1.6 CSRF(クロスサイト・リクエスト・フォージェリ) | 情報セキュリティ | IPA 独立行政法人 情報処理推進機構
情報処理推進機構(IPA)の「安全なウェブサイトの作り方 – 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)」に関する情報です。

この対策が行われているサイトに対しては、都度生成されるトークンを利用し正規の送信か判断しており、OWASP ZAPで脆弱性診断を行う場合、設定を行う必要があります。

広告

OWASP ZAPの設定

対象サイト

今回は、Laravelで簡単なフォームを作成しました。
以下の記事で作成したフォームを利用します。

【Laravel】敢えて試すSQLインジェクション【仕組みを知るには実装】
敢えてSQLインジェクションの脆弱性を含んだシステムを作成します。対策や仕組みを知るには実際に試してみましょう。人気のあるLaravelというフレームワークで試します。

テンプレートファイルにフォームを用意します。

<html>
<body>
    <form method="POST" action="{{ route('login-result') }}">
        @csrf
        <input type="text" name="id" placeholder="ID"><br>
        <input type="text" name="password" placeholder="PASSWORD"><br>
        <input type="submit" value="ログイン">
    </form>
</body>
</html>

実際にブラウザでアクセスして、HTMLタグを確認します。
Laravelは自動でCSRFのトークンをフォームに挿入します。(_tokenという隠しパラメータ)

<html>
<body>
    <form method="POST" action="http://192.168.0.14:8000/login">
        <input type="hidden" name="_token" value="ZGpBv7i2MakcH82xqR9Nz5d6HPkO1NWjOOIpv6yl">
        <input type="text" name="login_id" placeholder="ID"><br>
        <input type="text" name="password" placeholder="PASSWORD"><br>
        <input type="submit" value="ログイン">
    </form>
</body>
</html>

画面を開いてSubmitボタンをクリックすれば、問題なくリクエストを送信できます。

もし不正なトークンを送信した場合は、LaravelのCSRF対策に弾かれ、レスポンスコード:419が返却されます。

設定

OWASP ZAPのオプションを開きます。

アンチCSRFトークンを開きます。
対象サイトでは、「_token」という名前のパラメータでしたので、トークンを追加します。
デフォルトで追加されていました。もし一覧にトークンがない場合は、追加しましょう。

設定画面に「現在はフォーム(FORM)パラメータトークンのみがサポート対象です」と記載がありました。
フォームの中のトークンについては対応してくれると思いますが、おそらくヘッダーに埋め込んだトークンなどは対応していないという意味だと思います。(例えばAjaxでカスタムヘッダーにX-CSRF-TOKENを追加してCSRF対策を行うなど)
どうしてもうまく行かない場合は、一時的にCSRF対策を無効にして、脆弱性診断を行うしか無いと思います。

次に動的スキャンを開きます。
「Handle anti-CSRF tokens.」にチェックが入っていることを確認します。

ちなみに、v2.10.0では「アンチCSRFトークン利用(テスト実装)」となっていました。
新しいバージョンでは実装が正式に採用されたようですね。

CSRF対策ページに攻撃

それでは攻撃を行ってみましょう。
CSRF対策されているPOSTリクエストに対して動的スキャンを行いました。

GETリクエストと、POSTリクエストが交互に呼ばれていました。
POSTリクエストのステータスコードが、「200 OK」で返って来ていますので成功しています。

GETリクエストのレスポンスを確認します。
一度GETでレスポンスを受け取り、新しいトークンを取得しているのが分かります。

今度は、POSTデータのリクエストの中身を確認しましょう。
送信データに含まれるトークンが、新しいトークンに書き換えて送信されていました。

念の為、アンチCSRFの設定を無効にして実施してみました。

GETリクエストは送信されず、POSTリクエストのみ送信され、CSRF対策に弾かれているのが分かります。
(Laravelはステータスコード:419を返却します)

スキャン時に登録された古いトークンがそのまま使われており、サーバーサイドで弾かれてしまいます。

さいごに

CSRFの対策がされているサイトに対して、脆弱性診断を行いました。
是非OWASP ZAPを利用して、脆弱性のないサイトを構築しましょう。

他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。

MacOSWindowsツールツール他
広告

個人開発

千草 @chigusaweb

現役のITエンジニア。 気ままにコードを書いたり技術情報を発信しています。 Webアプリ/Windows・Macアプリ/モバイルアプリなど。 (Java, PHP, Javascript, Swift, Python, C#, 他) 個人開発:Clibor, Quipha, TXT-Crypter, 符計算特訓, チグサツール Kindle本: Laravel9 実践入門, 他

クリップボード履歴

Clibor

Windows

Cliborはシンプルで高機能なクリップボード履歴ソフトです。 また普段よく使うワードを定型文として登録し、いつでもクリップボードに保存することができます。高度なテキスト整形・FIFOモード・ホットキーに対応。

クリップボード履歴

Windows版Cliborの利便性を、そのままMacでも。 定型文登録、高度なテキスト整形、FIFOモードなど、便利なクリップボード履歴機能を利用できます。macOS最新のTahoeにも対応。

テキスト暗号化

テキストを暗号化してURLで共有・保存できる無料サービスです。 パスフレーズを知る人だけが復号できます。登録不要、データはサーバーに保存されません。 Notionでも利用できます。

学習

Quipha

Web / iOS

自分だけの問題集や問題を作成し、クイズを行い、学習に活用することができるアプリです。 例えば、学校の授業、語学学習、IT資格やその他の資格など多彩な分野での学習を支援します。 いつでも、どこでも、あなたの学習をサポート。

ツール

日常の「ちょっとした効率化」をサポートするWeb便利ツール集。 テキスト・データ処理から最新のAI連携まで、日々のちょっとした手間でググりがちなユーティリティを1つの場所に集約。

麻雀

麻雀の符計算をひたすら特訓しマスターしましょう。 初心者の方はもちろん、もっと速く計算したい方にも役立ちます。 5万対局以上の実践から問題を収録。

コメント

タイトルとURLをコピーしました