Double Submit Cookies メカニズムは [〜#〜] xss [〜#〜] および サブドメイン攻撃 ?
すべてのCSRF保護メカニズムはXSSに対して脆弱であるため、新しいことは何もありません。すべてのサブドメインを確実に制御している限り、このメカニズムに安全に依存できるかどうか疑問に思っています。
注:この質問は、 ログインCSRFから保護する方法のスピンオフです
Blackhat 2013で公開された paper によると、独自のサブドメイン(secure.Host.com
など)にDouble-Submit Cookieを実装するだけでは不十分です。あなたは本当にallサブドメインを制御する必要があります:
2.1.1ナイーブダブルサブミット
二重送信CookieのCSRF緩和策は一般的であり、実装はさまざまです。スケーラブルで実装が簡単なソリューションは魅力的です。最も一般的なバリエーションの1つはナイーブです。
if (cookievalue != postvalue)
throw CSRFCheckError
ナイーブダブルサブミットを使用すると、攻撃者がCookieを作成できる場合、明らかに保護を無効にすることができます。繰り返しになりますが、Cookieの書き込みは読み取りよりもはるかに簡単です。
Cookieを書き込むことができるという事実は、多くの人が理解するのは困難です。結局のところ、同じOriginポリシーでは、あるドメインが別のドメインのCookieにアクセスできないように指定していませんか?ただし、ドメイン間でCookieを書き込むことが可能な一般的なシナリオが2つあります。
1)同じOriginポリシーのために、hellokitty.marketing.example.comがcookieを読み取ったり、secure.example.comからDOMにアクセスしたりできないのは事実ですが、hellokitty.marketing.example.comは親ドメイン(例。 com)、そしてこれらのcookieは、secure.example.comによって消費されます(secure.example.comには、cookieを設定したサイトを区別する良い方法がありません)。
さらに、secure.example.comが常に最初にcookieを受け入れるように強制する方法があります。つまり、hellokitty.marketing.example.comのXSSは、secure.example.comのCookieを上書きできます。
次に、このアプローチは中間者攻撃に対して脆弱です。
2)攻撃者が中間にいる場合、通常、HTTPを介して同じドメインにリクエストを強制できます。アプリケーションが https://secure.example.com でホストされている場合、cookieにセキュアフラグが設定されていても、中間の人が http:/に強制的に接続できます。 /secure.example.com そして、任意のCookieを設定(上書き)します(セキュアフラグが攻撃者によるこれらのCookieの読み取りを防ぐ場合でも)。
HSTSヘッダーがサーバーに設定されていて、サイトにアクセスするブラウザーがHSTSをサポートしている場合でも(これにより、中間にいる人がプレーンテキストのHTTPリクエストを強制するのを防ぐことができます)、HSTSヘッダーがすべてのサブドメインを含む方法で設定されていない限り、真ん中は、リクエストを別のサブドメインに強制し、1と同様のCookieを上書きすることができます。つまり、 http://hellokitty.marketing.example.com がhttpsを強制しない限り、攻撃者は、example.comサブドメインのCookieを上書きできます。
要約すれば:
Secure
フラグを設定する必要があります。値を生成するために必要なトークンの長さとRNGのタイプについては、 https://security.stackexchange.com/a/61041/5002 を参照してください。
すべてのXSS攻撃はCSRF保護よりも優先されますが、攻撃者とは異なる取り組みが必要です。トークンなどの単純な保護は、攻撃者がDOMからトークン値を読み取るだけで、後続のフォーム送信でそれを使用できるため、XSS攻撃を介して簡単に取得できます。パスワードまたはOTP再認証を必要とする機密フォームは、ユーザー資格情報またはOTPを何らかの方法で取得するために攻撃を仕掛ける必要があるため、攻撃するのが難しくなります。ただし、DOMを完全に制御することで、ログインページを模倣して、ユーザーをだましてログアウトしたと思わせ、ユーザーが資格情報を入力するのを待つことができます。この場合、被害者として直接ログインできます。 CSRF攻撃のみを実行する代わりに。また、この攻撃はサイトに目に見える混乱を引き起こします。つまり、エキスパートユーザーは何かが間違っていると疑い、攻撃者のフォームへのログインを拒否する可能性があります。
サブドメインでは、Cookieの二重送信には2つのリスクがあります。 Cookie値を読み取るサブドメインの攻撃者。例えば Host-only cookie 以外がexample.com
レベルで設定されている場合、foo.example.com
を制御する攻撃者がCookieの値を読み取ることができます。ホストオンリーCookieを設定すると、この攻撃に対抗できます。
攻撃者がCookieを作成する際のもう1つのリスク。 Same Origin Policy は、他のDOMよりもCookieの方が緩いです。これは、foo.example.com
を制御する攻撃者が、被害者がexample.com
またはbar.example.com
にアクセスしたときに読み取られるCookieを設定できることを意味します。彼らは単にexample.com
レベルでのみ非ホストを設定します。サイトが攻撃を受けている場合でも、bar.example.com
はHTTPSを介してホストのみのCookieを設定し、 secure flag を設定してプレーンHTTP経由での漏洩を防ぎます。攻撃者がプレーンHTTP Cookieを設定すると、 Cookieをbar.example.com
で読み取るように設定できます。その理由は、サーバーが実際のドメインにそれを設定したことを通知できず、安全なフラグ自体を照会できないためです。
Cookieの二重送信は HTTPSトラフィック以外のすべてを傍受して変更できる中間者攻撃 に対しても脆弱です。ターゲットサイトexample.com
がプレーンhttp(つまり、ポート443はTLSに対してのみオープン)でリッスンしない場合でも、攻撃者はanyプレーンHTTPリクエストをHTTP 3xxでリダイレクトできます(例:http://example.com
)、次にその要求をインターセプトし、example.com
に設定された汚染されたCSRF Cookieを使用して応答を送信します。サーバーはセキュアフラグを持つCookieではないことを確認する方法がないため、サーバーはその値を取得します。これも、Cookieの同じ発信元ポリシーが緩いためです。
これに対するすべての解決策は HTTP Strict Transport Security を実装し、すべてのサブドメインを制御することです。サポートされているブラウザーでは、これにより、HSTSレコードの存続期間中(おそらく数年)にブラウザーによるプレーンなHTTP接続がまったく行われなくなり、Cookieが攻撃者によって設定されるのを防ぎます。 HSTSエントリは、ビルドに含めるためにブラウザーベンダーに送信することもできます。これは、HSTSレコードを設定するために、ユーザーが少なくとも一度はサイトにアクセスする必要がないことを意味します。 HSTS Preload を参照してください。