はじめに
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 フォーム入力要素でオートコンプリート属性が無効になっていません。パスワードはブラウザーに格納され、取得される可能性があります。