こんにちは。
geolonia.com のドメインに対して HSTS プリロードの設定を行いました。これにより Geolonia のサービスがより安全に利用できるようになりました。
このポストでは、HSTS の概要と導入手順について解説します。なお、導入手順については 2023年8月現在のものになります。
HSTS (HTTP Strict Transport Security) とはインターネットを安全に利用するめに HTTPS プロトコルでのアクセスをウェブブラウザに強制するための仕組みです。この設定が有効化されているドメインに対しては全ての HTTP 接続が自動的に HTTPS に変更されるようになります。
HSTS を導入する主な利点は中間者攻撃のリスクを軽減することです。中間者攻撃とは、攻撃者がユーザーとウェブサーバーの間に割り込んで通信を傍受または改ざんする手法です。 HTTP を使っていると条件によってはこのような攻撃が可能になってしまいますが、HSTS が有効になっていた場合、HTTP での接続の機会が減少し攻撃を防ぐことができる可能性が大きくなります。
HSTS が有効になっていないケースで攻撃が成功するのは、例えば以下のようなシナリオがあるかと思います。
ウェブサイトから次の HTTP セキュリティヘッダーをクライアントに対して返却するように設定することで、ブラウザは HSTS を認識して次回以降のアクセスを HTTPS で行うようになります。 max-age
ディレクティブとして HSTS の有効期限を設定できます。また、 includeSubDomains
ディレクティブを設定すると、サブドメインを含む全てのサイトに対して HSTS が有効になります。
Strict-Transport-Security: max-age=<expire-time> # 秒単位で指定。必須
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains # サブドメインを含めて全てのドメインに対して有効化する設定
HSTS では初回の HTTP プロトコルでのアクセスを防ぐことができません。ブラウザが初回のアクセスの際にセキュリティヘッダーを認識し、その後 HSTS が有効化されるからです。この場合、初回のアクセスにおいてユーザーは攻撃者の攻撃に晒されるリスクがあります。この課題を解決するのが HSTS プリロードです。
HSTS プリロードが有効化されていると、初回から HTTP でアクセスしようとした場合でもウェブブラウザが HTTPS にプロトコルを変更するようになります。 初回から HTTPS でアクセスすることにより、非暗号化通信に由来する中間者攻撃の被害を完全に防ぐことができるようになります。
HSTS プリロードは、その名の通り HSTS 設定をあらかじめ読み込んでおく(= preload)ための設定になります。事前にプリロードリストにドメインを追加しておくことで、ブラウザはあらかじめそのドメインを認識して初回から HTTPS でアクセスするようになります。設定の手順は以下の通りです。
max-age
ディレクティブは値を 1 年 (31536000) 以上に設定includeSubDomains
ディレクティブが必要preload
というディレクティブが必要Geolonia の HSTS 設定は以下になります。
strict-transport-security: max-age=63072000; includeSubDomains; preload
この状態でリストに申請したところ、 Pending Submission と表示されるようになりました。この状態からしばらく待つと HSTS プリロードリストにドメインが追加されます。 Geolonia の場合は 2023年6月に設定を行い8月にリストに追加されていたことが確認できました。どうやらリストへの追加は2ヶ月くらいかかるか、あるいは2ヶ月以上の周期でリストの更新が行われているようです。
この間、 hstspreload.org のウェブサイトは以下のように変化しました。
提出後 | リスト追加後 |
---|---|
HSTS 導入による Geolonia のセキュリティ改善と、その一般的な手順の解説をお届けしました。HSTS に興味のある方はご自身のウェブサイトなどに導入してみると良いかもしれません。
それでは!