.appというgTLDをご存知でしょうか。gTLDはgeneric top-level domainの略後で、ICANNが管理しているトップレベルドメインのことです。 有名どころでは.comや.net等があります。このブログのURLは https://kouki.hatenadiary.com ですが、この.comの部分がトップレベルドメインです。*1
このトップレベルドメインはICANNという組織が管理しています。2012年までは限られたトップレベルドメインしか存在しませんでしたが、2012年の公募では基準を定め、その基準を満たした団体は自由にgTLDを作ることができるようになりました。これ以降大量のトップレベルドメインが登録され、今では様々なドメインを利用することができます。
その中の一つ、appドメインが去年話題を呼びました。
appドメインはセキュアなドメイン
そんなappドメインですが、2018年5月にドメイン取得が可能になると、セキュアなドメインであるということで話題を呼びました。appドメインを使うと自動的にHTTPS接続に変換されアクセスされます。ではどのような仕組みでHTTPSアクセスされるのでしょうか。
HSTSについて
HSTS(HTTP Strict Transport Security)というセキュリティ機構があります。appドメインがHTTPSで接続される仕組みを説明するにはHSTSの説明が必要なので、ここで少し説明しておきます。
HSTSは、HTTPSで接続した時のセキュリティリスクを軽減するための仕組みです。
HTTPSでサービスを提供しているサイトでも、ユーザーが直接URLを入力したり、リンクをクリックした時にHTTPのURLにアクセスしてしまう可能性があります。このために、サービス提供者はHTTPSのみでサービスを提供している場合でも、HTTPSのURLにリダイレクトをしていることが多いです。これはこのブログにHTTPでアクセスした時の様子です。
$ curl -D - http://kouki.hatenadiary.com/ HTTP/1.1 301 Moved Permanently ...(省略)... Location: https://kouki.hatenadiary.com/ ...(省略)...
このように、https://kouki.hatenadiary.com/ へとリダイレクトしています。
ちゃんとリダイレクトされてHTTPSアクセスされるなら安心だ、と思うかもしれません。確かにHTTPのアクセスに対して盗聴を行っても実際のデータはHTTPSで接続が行われているため、情報が盗まれるリスクはないように思えます。しかし、依然としてリダイレクト使用としているレスポンスに対して改ざんのリスクが残っています。例えば悪意のある攻撃者が以下のようなレスポンスに改ざんした場合はどうでしょう。
$ curl -D - http://kouki.hatenadiary.com/ HTTP/1.1 200 OK ...(省略)... はてなのログインページのHTMLを表示する(パスワードの送信先は攻撃者のサーバーになっている) ...(省略)...
このようにすることで、ユーザーにパスワードを入力させようとすることができます。他にも、h/ttps://kouki.hatenadiery.com/*2 にリダイレクトを行い、フィッシングを誘ったりすることもできます。
このような攻撃に対処するため、HSTSという機構が考え出され、ブラウザに実装されるようになりました。
HTTPSでのレスポンスヘッダに、以下の行を追加することでこの機構が有効になります。
Strict-Transport-Security:max-age=有効期間の秒数;
このヘッダーをブラウザが発見すると、対象のドメインに対してHTTPSにリダイレクトするべきということをブラウザが認識します。これ以降max-ageよりも短い期間で再度同じドメインにHTTPでアクセスした時にブラウザが直接HTTPSに書き換えます。これによりHTTPでのリダイレクトレスポンスが改竄されるという問題がなくなり、より安全にWebサイトにアクセスすることが可能になります。
この機構を使うことでより安全になりますが、一度HSTSが有効になると対象のドメインにHTTPでアクセスすることができなくなります。*3 HTTPSで問題なくサービスを提供できると確信してからHSTSを有効にすることを考え、また、いきなり1年のような長い有効期間を設定するのではなく、段階的に大きくしていくことが推奨されています。
HSTS Preloadについて
そんなHSTSですが、まだブラウザがHSTSが有効になっていないドメインに対しては効力を示さないということが知られています。ブラウザをインストールした直後はHSTSが有効になっているリストが存在しないため、ブラウザはどのドメインをHTTPSに変換すればよいか知ることができません。また、有効期間に一度も対象のドメインにアクセスしなかった場合はどうなるでしょうか。こちらもHSTSのリストから対象のドメインが削除されています。HSTSのリストに存在しない状態でhttpから始まるURLを入力すると、このアクセスは改竄可能になってしまいます。もちろん最初のアクセスがhttpsで行われれば問題ないのですが、これを決定するのはユーザーでありサービス側ではありません。完全にこの改竄を防ぐ仕組みをサービス側が実装可能なことが期待されています。これを実現する仕組みがHSTS Preloadです。
HSTS Preloadは名前の通り、ブラウザに予めHSTSのリストを所持しておく仕組みです。HSTSを有効にしたいドメインを事前に登録しておくことが可能です。このリストに登録するためにはある条件を満たしている必要がありますが、条件というのはHTTPSへのリダイレクトが設定されていることや、HSTSヘッダーが有効にされて、有効期限が1年以上に設定してあることなどで、誤ったHSTS Preloadへの登録を防止するものです。HSTS Preloadはブラウザに組み込まれるため、気軽に削除したりできません。きちんとHSTSで運用されているかということを確認してからHSTS Preloadに登録することを確認しています。
HSTS Preloadの条件の確認や、HSTS Preloadへの登録はこちらから行うことができます。
このHSTS Preloadの仕組みを使うことで、完全にセキュアなドメインを作ることができます。
appドメインの仕組み
だいぶ遠回りをしてしまいました。ここまで読んできた読者の方はもうお気づきかもしれませんが、appドメインはここで説明したHSTS Preloadに.appというgTLDを登録することで実現しています。
これを知った時、トップレベルドメイン以下すべてをHSTS Preloadに登録するのはとても画期的だと思いました。初めてgTLDをHTTPS Preloadに登録を行ったのは2015年の.googleドメインです。googleドメインはGoogleが管理しているため、すべてのドメインをHTTPSで管理することを統制することも難しくなかったと思われます。しかし、それを.comのようなgTLDで有効にしてしまうと、既存のHTTPで提供しているサービスが接続することができなくなり、また、それらすべてをHTTPSで提供することは非現実的です。 appドメインは新しいgTLDを最初からHTTPSでしか使えないドメインとして売り出すことでこの問題を解消しました。
HSTS Preloadのリストはこれ以降増え続けるでしょう。トップレベルドメインを登録すると、一つ登録することで大量のドメインに対して有効にすることができます。増え続けるリスト問題も解決できますし、HSTS Preloadに登録する手間も減らすことができる画期的なドメインがappドメインです。
Googleが管理している安心感、セキュアなドメインと認知されていること、などの理由から、積極的にappドメインを利用していきましょう!
HSTS Preloadのリストについて
そんなHSTS Preloadのリストですが、Chromeの場合はここで管理されています。
appドメイン以外にも10種類ほど登録されているのが分かると思います。
また、もうすぐ一般募集が開始になる .dev ドメインも登録されていますね。
こちらもGoogleが管理しています。
また、HSTSもHSTS Preloadもブラウザに実装されている仕組みのため、curl等でHTTPにアクセスすることは可能です。また、古いブラウザでも有効になっていない場合があります。appドメインでのHSTS PreloadははChrome62で有効になっています。
また、ネイティブアプリからのアクセスも自動的にHTTPSに変換されない場合があります。iOSの場合こちらはATSという似たような仕組みがあるので、こちらで対処しましょう。(Androidの場合はわからなくてごめんなさい)
今すぐgTLDをHSTS Preload リストに登録しよう!!
先程のHSTS Preloadのページには、TLDを登録したい場合はお問い合わせくださいと説明されています。
gTLDは申請・維持に数千万円ほどかかるとのことで、僕はあいにく所持していないのですが、gTLDをお持ちの方は今すぐ申し込みを検討しましょう!
HTTPで運用されているページが多くなれば多くなるほど申し込みが難しくなります。最初からHTTPSに強制することで解決できますし、セキュリティ対策にもなります。今はLet's encryptがあるので、HTTPSで提供するための最低限な証明書を利用することを無料でできる時代です!セキュアなドメインを作ってセキュアなインターネットを目指していきましょう!!