OWASP ZAPでWebアプリケーションの脆弱性診断


はじめに

webアプリケーションのセキュリティ強度を高めるため、OWASP ZAPというツールを使って見ました。
※診断するwebアプリケーションはLaravel 5.5を使っています。

OWASP ZAPとは

OWASPというセキュリティの専門家が集まったコミュニティが作ったツールで、IPAも推奨しているようです。
参考:About The Open Web Application Security Project
参考:IPA テクニカルウォッチ「ウェブサイトにおける脆弱性検査手法(ウェブアプリケーション検査編)」

診断する

ツールの使い方はいたって簡単でした。
参考:OWASP ZAPというWebアプリの脆弱性診断ツールの使い方(入門編)

設定項目

・スパイダー

カテゴリ テスト名 しきい値 強 度 
インジェクション CRLFインジェクション Low Low
インジェクション Server Side Code Injection Low Low
インジェクション Server Side Include Low Low
インジェクション SQLインジェクション Low Low
インジェクション クロスサイト・スクリプティング(持続型) Low Low
インジェクション クロスサイト・スクリプティング(持続型)-Prime Midium Low
インジェクション クロスサイト・スクリプティング(持続型)-スパイダー Midium Low
インジェクション クロスサイト・スクリプティング(反射型) Low Low
インジェクション バッファオーバーフロー Low Low
インジェクション パラメータ改ざん Low Low
インジェクション リモートOSコマンドインジェクション Low Low
インジェクション 書式文字列エラー Low Low
サーバセキュリティ パストラバーサル Low Low
サーバセキュリティ リモートファイル インクルージョン Low Low
一般 Script Active Scan Rules Low Low
一般 外部リダイレクト Low Low
情報収集 ディレクトリブラウンジング Low Low

結果と対策

5つもアラートが上がりました。1つずつ対策します。

  • X-Frame-Optionsヘッダーの欠如

クリックジャッキングをうける脆弱性のようです。iframeを使っていないので、一括でX-Frame-Optionsを設定しました。
参考:LaravelでX-Frame-Optionsを設定する

リスク:Medium
説明:「クリックジャッキング」攻撃を防止するためのX-Frame-OptionsヘッダーがHTTPレスポンスに含まれていません。

  • CookieのHttpOnly属性が未設定

LaravelのCSRFトークンはデフォルトでfalseのようです。CSRFトークンはセッション管理用ではないので問題なしです。
参考:LaravelのCSRFトークンのhttpOnly属性がfalseとなっている事によるセキュリティリスクの有無

リスク:Low
説明:cookieにHttpOnly属性が設定されていないため、JavaScriptによるcookieへのアクセスが可能です。
悪意のあるスクリプトが本ページで実行可能な場合、cookieにアクセスして別のサイトへcookieを送信することができます。
もしスクリプトがアクセス可能なcookieがセッション管理用である場合、セッションハイジャック攻撃が成立する可能性があります。

  • WebブラウザのXSS防止機能が有効になっていません。

上記でX-Frame-Optionsを設定したときのように行を追加しました。
$response->header('X-XSS-Protection', '1; mode=block');

リスク:Low
説明:Web ブラウザのXSS防止機能が有効になっていない、またはWebサーバからのHTTPレスポンスヘッダ 'X-XSS-Protection' が無効になっています。

  • X-Content-Type-Optionsヘッダの設定ミス

上記と同様に行を追加します。
$response->header("X-Content-Type-Options: nosniff");

リスク:Low
説明:The Anti-MIME-Sniffing header X-Content-Type-Options was not set to 'nosniff'. This allows older versions of Internet Explorer and Chrome to perform MIME-sniffing on the response body, potentially causing the response body to be interpreted and displayed as a content type other than the declared content type. Current (early 2014) and legacy versions of Firefox will use the declared content type (if one is set), rather than performing MIME-sniffing.

  • ブラウザによるパスワードのオートコンプリート

これは便利なので無視しました。。

リスク:Low
説明:パスワード型入力を含む HTML フォーム入力要素でオートコンプリート属性が無効になっていません。パスワードはブラウザーに格納され、取得される可能性があります。