HTTPセキュリティヘッダーを簡単に検証できるWebツール、CLIツールを調べて見ました。
ブラウザのデベロッパーツールでも確認することは可能ですが、より詳細に、より簡単に検証するためにはやはりWebツール、CLIツールを利用することがおすすめです。
既に公開しているWebサイトを簡単に調べたいのであれば、Webツール
コマンドライン上で調べたい、開発段階のものを調べたい、という場合であればCLIツールを利用するのが良さそうです。
前提知識
HTTPセキュリティヘッダー
HTTPレスポンスヘッダーに「X-XSS-Protection: 1; mode=block」のように記述を追加することでXSSの軽減できたり、他の設定ではHTTPSの強制やCookieの保護、クリックジャッキング対策など、クライアントサイドでのセキュリティの強化を行うことができるものです。
以下のサイトなどでどんなものがあるのかまとめられています。
指定すべきHTTPセキュリティヘッダーTop7と、そのデプロイ方法
大規模サービスのセキュリティ対策用HTTPヘッダーまとめ - Qiita
注意点としては、1年程前の記事(2018年頃)のものなので最新の状況とは異なる部分もあります。
HTTPセキュリティヘッダーはブラウザ側の対策のため、最新の状況はMozillaの公式サイトで確認する必要があります。
Webツール
SSL/TLS のWebツールではSSL Labs Qualys SSL Server Test がとても有名で、これで確認すれば間違いない、くらいのものになっています。
SSL Server Test (Powered by Qualys SSL Labs)
HTTPセキュリティヘッダーに関しても同様のサービスを扱っているものがいくつかあります。
Mozilla Observatory
WebツールとしてHTTPセキュリティヘッダーを確認したい場合はMozillaのObservatoryが一番おすすめです。
Github(https://github.com) にこのツールを使った結果、以下のように表示されます。
(こちらのリンクからもスキャン結果が確認できます)
Qualysと同じようにランクが表示され、その下に詳細な情報が表示されます。
Content Security Policy (CSP) の項目では、style-src にunsafe-inlineが使われていること、Cookiesの項目ではSecure属性が使われていないことなどがすぐにわかります。
「Test Scores」の下には更に詳細な記述もあり、各項目にMozillaのセキュリティガイドラインへのリンクや「Info」で簡単な説明がありわかりやすいです。
Mozillaのセキュリティガイドラインには各設定を行なった場合のメリット(Benefit)と実装面などのデメリット(Difficulty)もまとめられておりとても参考になります。
例えば、Public Key Pinningはメリット少なく、実装するのがとても大変である、
Strict Transport Security (HSTS)はメリットが高く、実装コストも低い、など
まずどれをやるべきかの優先順位付けが簡単にできます。
また、「Third-party Tests」のタブに切り替えることで、Qualysのスキャン結果や後ほど説明するSecurity Headersのスキャン結果なども確認することもできます。
Mozilla ObservatoryでHTTPセキュリティヘッダーだけでなく、QualysのSSL/TLSの結果や他のWebツールでの結果まで参照できるのでとても便利です。
Security Headers
Analyse your HTTP response headers
Security HeadersでもHTTPセキュリティヘッダーの確認ができます。
こちらではスキャン結果の統計情報(Grand Totals)もあり、どれくらいを目指すべきなのかの参考になります。
こちらでGithubをスキャンした結果、以下のような情報が出力されます。
(こちらのリンクからもスキャン結果が確認できます)
Summaryの下にはRaw Headers、Missing Headers、Warnings、Additional Information
があります。
Additonal Informationに付いているリンクからこのツールの作者(Scott Helme)の各セキュリティヘッダーの詳細な説明ページに飛ぶことができます。
HSTS - The missing link in Transport Layer Security
図などが使われていてわかりやすく書かれているように思われます。
Mozillaなどのブラウザベンダーの影響を受けていないスキャンツールを使いたいという人には良いかもしれません。
CLI ツール
Webツールの場合、簡単にスキャンすることができますが、対象としては既に公開されているもの、外部からアクセス可能なものに対してのみになります。
また、会社によってはあまり外部からのスキャンをかけたくない、自分の環境下で行いたい、定期的にスキャンしたいなどの場合には、Webツールではなく、CLIツールの方が便利な時もあると思います。
Observatory-cli
GitHub - mozilla/observatory-cli
先ほど紹介したMozilla Observatoryのコマンドラインで利用できるものになります。
インストールも簡単で、npm install -g observatory-cli をするだけです。
Githubをスキャンする場合は、observatory github.com でスキャンできます。
その出力は以下のようになります。
上記のように、json形式でWebツールと同様の内容が出力されます。
scoreに関する情報も出力されます。
綺麗に整っているためjsonの出力結果を機械的に処理して2次利用する場合にも有効だと思います。
また、オプションもいくつか用意されており、出力形式をcsvに変更したり、簡単なレポートのみを出力するなどもできます。
observatory github.com --format report の実行結果、以下のように出力されます。
会社などでこのツールを自動化させ、「Score ~点以上にすること」、「x-frame-optionは必ず付けること(Score が5になること)」のような簡単なチェックツールとして利用することもできそうです。
たまに確認するだけであればChromeなどブラウザに付いている「デベロッパーツール」でも良いのですが、頻繁に確認する機会のある方はこういったツールを利用する方が楽かもしれません。
testssl
GitHub - drwetter/testssl.sh: Testing TLS/SSL encryption anywhere on any port
こちらは、SSL/TLS cipher protocolの検証ツールですが、HTTPセキュリティヘッダーも同時に確認することができます。
インストールもとても簡単にでき、以下のコマンドでインストールからGithubのスキャンまでできます。
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh https://github.com
以下が実行した出力の一部です。
SSL/TLSの検証がメインのため、protocolやcipherが初めは表示されます。
また、結果の表示まで時間も少しかかります。
出力の中程にHTTPヘッダーに関する結果があります。
HSTSやKey Pining、CookieのSecure属性、HttpOnly属性、X-XSS-Protectionなども確認することができます。
オプションも多く提供されているため、HTTPヘッダーの出力のみに絞って、かつjson形式で出力させることも可能です。
./testssl.sh -h --json https://github.com
jsonで出力されるので、出力結果をパースして自由に扱えるのはとても便利だと感じます。
自動化のツールとしてこのツールを組み込んで利用することもできそうです。
参考
OWASP Secure Headers Project
OWASP Secure Headers Project - OWASP
OWASP Secure Headers ProjectのTechnical Resourcesでは、今回紹介したツール以外の情報がいくつか紹介されています。
また、セキュリティヘッダーのブラウザのサポート状況、Best Practice (Apacheやnginxなどでの設定方法など) も紹介されています。
メンテナンスはまだされているようです。
また、SecureHeadersではHTTPセキュリティヘッダーが世の中的にどれくらい利用されているかの統計情報を確認することができます。
Webを支える技術 ―― HTTP,URI,HTML,そしてREST
Twitter アカウント