Security Index

セキュリティやソフトウェアについてのあれこれ

HTTPセキュリティヘッダーを検証する Webツール、CLIツール Mozilla Observatory, Observatory-cli, testssl

HTTPセキュリティヘッダーを簡単に検証できるWebツール、CLIツールを調べて見ました。

ブラウザのデベロッパーツールでも確認することは可能ですが、より詳細に、より簡単に検証するためにはやはりWebツール、CLIツールを利用することがおすすめです。

 

既に公開しているWebサイトを簡単に調べたいのであれば、Webツール

コマンドライン上で調べたい、開発段階のものを調べたい、という場合であればCLIツールを利用するのが良さそうです。

 

f:id:security_index:20191110123602p:plain

 

 

前提知識

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 がとても有名で、これで確認すれば間違いない、くらいのものになっています。

 

f:id:security_index:20191110095001p:plain

SSL Server Test (Powered by Qualys SSL Labs)

 

HTTPセキュリティヘッダーに関しても同様のサービスを扱っているものがいくつかあります。

 

Mozilla Observatory

Mozilla Observatory

 

f:id:security_index:20191110100643p:plain

 

WebツールとしてHTTPセキュリティヘッダーを確認したい場合はMozillaのObservatoryが一番おすすめです。

 

Github(https://github.com) にこのツールを使った結果、以下のように表示されます。

(こちらのリンクからもスキャン結果が確認できます)

 

f:id:security_index:20191110101056p:plain

 

Qualysと同じようにランクが表示され、その下に詳細な情報が表示されます。

 

f:id:security_index:20191110101333p:plain

 

Content Security Policy (CSP) の項目では、style-src にunsafe-inlineが使われていること、Cookiesの項目ではSecure属性が使われていないことなどがすぐにわかります。

 

「Test Scores」の下には更に詳細な記述もあり、各項目にMozillaのセキュリティガイドラインへのリンクや「Info」で簡単な説明がありわかりやすいです。

 

f:id:security_index:20191110121032p:plain

f:id:security_index:20191110121106p:plain

 

Mozillaのセキュリティガイドラインには各設定を行なった場合のメリット(Benefit)と実装面などのデメリット(Difficulty)もまとめられておりとても参考になります。 

 

f:id:security_index:20191110102625p:plain

 

例えば、Public Key Pinningはメリット少なく、実装するのがとても大変である、

Strict Transport Security (HSTS)はメリットが高く、実装コストも低い、など

まずどれをやるべきかの優先順位付けが簡単にできます。

 

また、「Third-party Tests」のタブに切り替えることで、Qualysのスキャン結果や後ほど説明するSecurity Headersのスキャン結果なども確認することもできます。

 

f:id:security_index:20191110103206p:plain

f:id:security_index:20191110103247p:plain

 

Mozilla ObservatoryでHTTPセキュリティヘッダーだけでなく、QualysのSSL/TLSの結果や他のWebツールでの結果まで参照できるのでとても便利です。

 

Security Headers

Analyse your HTTP response headers

f:id:security_index:20191110103540p:plain

 

Security HeadersでもHTTPセキュリティヘッダーの確認ができます。

こちらではスキャン結果の統計情報(Grand Totals)もあり、どれくらいを目指すべきなのかの参考になります。

 

こちらでGithubをスキャンした結果、以下のような情報が出力されます。

(こちらのリンクからもスキャン結果が確認できます)

 

f:id:security_index:20191110103900p:plain

 

Summaryの下にはRaw Headers、Missing Headers、Warnings、Additional Information
があります。

 

f:id:security_index:20191110104342p:plain

 

Additonal Informationに付いているリンクからこのツールの作者(Scott Helme)の各セキュリティヘッダーの詳細な説明ページに飛ぶことができます。

 

f:id:security_index:20191110104747p:plain

HSTS - The missing link in Transport Layer Security

 

図などが使われていてわかりやすく書かれているように思われます。

 

Mozillaなどのブラウザベンダーの影響を受けていないスキャンツールを使いたいという人には良いかもしれません。

 

CLI ツール

Webツールの場合、簡単にスキャンすることができますが、対象としては既に公開されているもの、外部からアクセス可能なものに対してのみになります。

 

また、会社によってはあまり外部からのスキャンをかけたくない、自分の環境下で行いたい、定期的にスキャンしたいなどの場合には、Webツールではなく、CLIツールの方が便利な時もあると思います。

 

Observatory-cli

GitHub - mozilla/observatory-cli

f:id:security_index:20191110113430p:plain

 

先ほど紹介したMozilla Observatoryのコマンドラインで利用できるものになります。

インストールも簡単で、npm install -g observatory-cli をするだけです。

 

Githubをスキャンする場合は、observatory github.com でスキャンできます。

その出力は以下のようになります。

 

f:id:security_index:20191110113807p:plain

f:id:security_index:20191110113853p:plain

f:id:security_index:20191110113950p:plain

 

上記のように、json形式でWebツールと同様の内容が出力されます。

scoreに関する情報も出力されます。

綺麗に整っているためjsonの出力結果を機械的に処理して2次利用する場合にも有効だと思います。

 

また、オプションもいくつか用意されており、出力形式をcsvに変更したり、簡単なレポートのみを出力するなどもできます。

 

observatory github.com --format report の実行結果、以下のように出力されます。

 

f:id:security_index:20191110114353p:plain

 

会社などでこのツールを自動化させ、「Score ~点以上にすること」、「x-frame-optionは必ず付けること(Score が5になること)」のような簡単なチェックツールとして利用することもできそうです。

 

たまに確認するだけであればChromeなどブラウザに付いている「デベロッパーツール」でも良いのですが、頻繁に確認する機会のある方はこういったツールを利用する方が楽かもしれません。

 

testssl

GitHub - drwetter/testssl.sh: Testing TLS/SSL encryption anywhere on any port

 

f:id:security_index:20191110105657p:plain

 

こちらは、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が初めは表示されます。

また、結果の表示まで時間も少しかかります。

 

f:id:security_index:20191110110418p:plain

 

出力の中程にHTTPヘッダーに関する結果があります。

HSTSやKey Pining、CookieのSecure属性、HttpOnly属性、X-XSS-Protectionなども確認することができます。

 

f:id:security_index:20191110111014p:plain

 

オプションも多く提供されているため、HTTPヘッダーの出力のみに絞って、かつjson形式で出力させることも可能です。

 

./testssl.sh -h --json https://github.com

 

f:id:security_index:20191110111417p:plain

f:id:security_index:20191110111532p:plain

 

jsonで出力されるので、出力結果をパースして自由に扱えるのはとても便利だと感じます。

 

自動化のツールとしてこのツールを組み込んで利用することもできそうです。

 

参考

OWASP Secure Headers Project

OWASP Secure Headers Project - OWASP

f:id:security_index:20191110115403p:plain

 

OWASP Secure Headers ProjectのTechnical Resourcesでは、今回紹介したツール以外の情報がいくつか紹介されています。

 

また、セキュリティヘッダーのブラウザのサポート状況、Best Practice (Apacheやnginxなどでの設定方法など) も紹介されています。

 

メンテナンスはまだされているようです。

 

また、SecureHeadersではHTTPセキュリティヘッダーが世の中的にどれくらい利用されているかの統計情報を確認することができます。

 

f:id:security_index:20191110122144p:plain

  

Real World HTTP

Webを支える技術 ―― HTTP,URI,HTML,そしてREST

 

 

Twitter アカウント

Security Index (@security_index) | Twitter