sslstrip
とbettercap
は、Chrome Facebook、Google、AOLなどのプリロードHSTSを使用する他のサイトのブラウザーで「ときどき」機能します。なぜそれができるのですか?まったく機能しないはずなのに時々機能しますか?
documentation によると、これはHTTPSリンクを別のサブドメインのHTTPリンクに書き換えることで機能します。これらのサイトはincludeSubDomains
ディレクティブを使用していないため、ブラウザはこれらの書き換えられたリンクにHSTSを使用しません。 includeSubDomains
ディレクティブを使用すると、特定のサブドメインだけでなく、サイトのすべてのサブドメインに対してHTTPSの使用をブラウザーに強制させることにより、この攻撃を防止できます。
preload list ではincludeSubDomains
を指定する必要があるため、通常、これはプリロードされたサイトでは機能しませんが、リストは特にGoogleおよびフェイスブック。 Googleには、accounts.google.com、docs.google.com、encrypted.gogole.comなどのプリロードされたサブドメインの長いリストがありますが、google.comはプリロードされていません。同様に、Facebookにはwww.facebook.com、m.facebook.com、secure.facebook.com、およびその他のいくつかがプリロードされていますが、facebook.comはプリロードされていません。したがって、すでにHTTPサイトにアクセスしている場合、sslstrip2はリンクをwww.facebook.comからwwww.facebook.comに書き換えてHSTSを回避できます。
これをテストしているときに、FirefoxのプリロードリストがChromeのプリロードリストと異なることも発見しました。前述のように here 、FirefoxのリストはChromeのリストに基づいていますが、Firefoxは独自にリストの検証を行います。これにより、touch.facebook.comのようなケースが発生します。ここでChromeはincludeSubdomains
がプリロードリストでtrueに設定されていますが、Firefoxはfalseに設定されています(実際、テストしたばかりの場合私が得たヘッダーはstrict-transport-security max-age=15552000; preload
)。