Lento con forza

大学生気分のIT系エンジニアが色々書いてく何か。ブログ名決めました。

.appという画期的でセキュアなgTLDについて

.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への登録はこちらから行うことができます。

hstspreload.org

この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の場合はここで管理されています。 

chromium.googlesource.com

appドメイン以外にも10種類ほど登録されているのが分かると思います。
また、もうすぐ一般募集が開始になる .dev ドメインも登録されていますね。
こちらもGoogleが管理しています。

get.dev

また、HSTSもHSTS Preloadもブラウザに実装されている仕組みのため、curl等でHTTPにアクセスすることは可能です。また、古いブラウザでも有効になっていない場合があります。appドメインでのHSTS PreloadははChrome62で有効になっています。
また、ネイティブアプリからのアクセスも自動的にHTTPSに変換されない場合があります。iOSの場合こちらはATSという似たような仕組みがあるので、こちらで対処しましょう。(Androidの場合はわからなくてごめんなさい)

今すぐgTLDをHSTS Preload リストに登録しよう!!

先程のHSTS Preloadのページには、TLDを登録したい場合はお問い合わせくださいと説明されています。

hstspreload.org

gTLDは申請・維持に数千万円ほどかかるとのことで、僕はあいにく所持していないのですが、gTLDをお持ちの方は今すぐ申し込みを検討しましょう!

HTTPで運用されているページが多くなれば多くなるほど申し込みが難しくなります。最初からHTTPSに強制することで解決できますし、セキュリティ対策にもなります。今はLet's encryptがあるので、HTTPSで提供するための最低限な証明書を利用することを無料でできる時代です!セキュアなドメインを作ってセキュアなインターネットを目指していきましょう!!

*1:ちなみに.jpのようなドメインはccTLDと呼ばれ、gTLDとは違います。ccはCountry Codeの略で、国に紐付いたトップレベルドメインです。

*2:URLをリンクにしない方法がわからなかったのでhとttpsの間に/を置いています。誰か教えて・・・

*3:実際はブラウザで設定することによりHSTSを無効化できますが、操作は難しいものなので、実質的にはHTTPに切り替えることは不可能に近いです。