ログインフォームにはCSRF攻撃に対するトークンが必要ですか?


161

これまでに学んだことから、トークンの目的は、攻撃者がフォームの送信を偽造するのを防ぐことです。

たとえば、Webサイトに追加アイテムをショッピングカートに入力するフォームがあり、攻撃者が不要なアイテムでショッピングカートをスパムする可能性があります。

ショッピングカートフォームには複数の有効な入力がある可能性があるため、これは理にかなっています。攻撃者が行う必要があるのは、Webサイトが販売しているアイテムを知っていることだけです。

この場合、トークンがどのように機能し、セキュリティが追加されるかを理解しています。これは、カートに追加された各アイテムのフォームの「送信」ボタンをユーザーが実際に入力して押したためです。

ただし、トークンはユーザーのログインフォームにセキュリティを追加しますか?これにはユーザー名とパスワードが必要ですか?

ユーザー名とパスワードは非常に一意であるため、攻撃者はログインフォージェリが機能するために(トークンが設定されていなくても)両方を知っている必要があり、攻撃者がすでにそれを知っている場合は、Webサイトにサインオンするだけです彼自身。言うまでもなく、ユーザーを自分でログインさせるCSRF攻撃は、いずれにしても実用的な目的はありません。

CSRF攻撃とトークンに対する私の理解は正しいですか?そして、私が疑っているように、それらはユーザーログインフォームには役に立たないのですか?


おそらくデフォルトのパスワードを使用しており、ログイン時にCSRFで保護されていないため、ルーターが乗っ取られる可能性があります。
AbiusX

はい、他のウェブサイトはあなたのログインフォームを模倣できません。彼らはそれを行うことによって何を達成できますか?まず、それを許可したくない。2番目:正しくないパスワードによるユーザーのブロックなど、非常に簡単な失敗のケースnいいえ。の場合、回避することができます。
mayankcpdixit

回答:


126

はい。一般に、ログインフォームは他と同じようにCSRF攻撃から保護する必要があります。

それ以外の場合、サイトは一種の「信頼されたドメインフィッシング」攻撃に対して脆弱です。つまり、CSRFに脆弱なログインページにより、攻撃者はユーザーアカウントを被害者と共有できます。

この脆弱性は次のように発生します。

  1. 攻撃者は信頼されたドメインにホストアカウントを作成します
  2. 攻撃者は、このホストアカウントの資格情報を使用して、被害者のブラウザでログイン要求を偽造します
  3. 攻撃者は被害者をだまして信頼できるサイトを使用させ、ホストアカウントを介してログインしていることに気付かれないようにします。
  4. 攻撃者は、ブラウザがホストアカウントでログインしている間、被害者が(意図的または非意図的に)「作成」したデータまたはメタデータにアクセスできます。

適切な例として、YouTubeを検討してください。YouTubeではユーザーが「自分の」視聴履歴の記録を見ることができ、ログインフォームにはCSRFの脆弱性がありました。その結果、攻撃者は自分が知っているパスワード使用してアカウントを設定し、そのアカウントを使用し被害者をYouTubeにログインさせ、被害者が見ている動画をストーキングする可能性があります。

このコメントスレッドには、そのようなプライバシー違反に「のみ」使用される可能性があることを示唆する議論がいくつかあります。おそらく、しかしウィキペディアのCSRF記事のセクションを引用すると:

ログインCSRFは、さまざまな新しい攻撃を可能にします。たとえば、攻撃者は正当な認証情報を使用して後でサイトにログインし、アカウントに保存されているアクティビティ履歴などの個人情報を表示できます。

「新しい攻撃」に重点を置きます。ユーザーに対するフィッシング攻撃の影響を想像してみてください。そのフィッシング攻撃がユーザー独自の信頼できるブックマークを介してサイトに作用すると想像してください。前述のコメントスレッドでリンクされている論文は、単純なプライバシー攻撃を超えるいくつかの例を示しています。


6
CSRF保護はどのように役立ちますか?攻撃者が自分のCSRFトークンを要求してそれを送信するのを妨げる何かがありますか?認証されたセッションが存在しないため、Webサーバーが別のトークンよりも1つのトークンを優先する理由はありません。
A.ウィルソン

2
「攻撃者が自分のCSRFトークンを要求し、それを送信するのを妨げるものはありますか?」- はい!これがCSRF防止ロジックの背後にあるすべての前提です。ブラウザは別のオリジンをターゲットとするフォーム送信を許可しました/しませんが、現在オプトインCORSを除いて、JSがサイト間でデータを読み取ることを[意図的に]許可していません。CORSを間違って設定しない限り、攻撃者はフォームの送信をトリガーできます(Cookieに既存のCSRFトークンが含まれる場合があります)、必要な2番目のコピーを送信するためのトークンを知る方法はありません(例:本文/ヘッダー)。したがって、CSRFコードは拒否されます。
natevw 14年

7
あなたの最後のコメントは間違っていると思います(A.ウィルソンが言っていたことを誤解していました)。攻撃者はhttp://good.com/login.html1つのクライアントに読み込み、ネストされたCSRFトークンを解析し、被害者が何を入力したかに関係なくユーザー名、パスワード、およびトークンhttp://bad.com/login.htmlを送信する変更されたフォームを含むパブリッシュを実行できると言います。CORSは適用されません。 veには、攻撃者と被害者の2つの別々のクライアントがあります。質問を繰り返しますが、CSRF保護はログインフォームで本当に機能しますか?
Gili

8
はい。CSRFは、ログインフォームをクロスサイトリクエストフォージェリから保護します。適切なCSRFトークンは、生成されるたびに暗号的に一意です。確かに、攻撃者は自分でトークンを取得できますが、被害者のブラウザにある[設定されていない可能性のある] Cookieにはまだ一致しません。攻撃者は、適切なドメインのページを危険にさらすことなく、このCookieを設定する方法はありません。(ただし、あなたの例は、CSRFとある種の奇妙なフィッシング攻撃との間で少し混乱しているようです。ですから、私が実際の質問に答えているかどうかは
わかりませ

3
私は間違っているかもしれませんが、ユーザーがアイテムの購入に関連する何かを誤って行うと、重大な脅威があるようです。たとえば、攻撃者がユーザーをだましてWebサイトにログインさせ、ユーザーが商品を別のアカウント(Amazonなど)にあることに気付かずに購入します。これで、攻撃者は保存された支払い情報にアクセスしたり、購入をリダイレクトしたりできます
you786

14

あなたの理解は正しいです。CSRFの要点は、攻撃者が事前に正当に見えるリクエストを偽造できることです。ただし、攻撃者が被害者のユーザー名とパスワードを知らない限り、ログインフォームを使用してこれを行うことはできません。その場合、より効率的な方法で攻撃(ログイン)できます。

最終的に攻撃者ができることは、セキュリティシステムが一定期間ユーザーをロックアウトする可能性がある場合に、失敗したログインをスパムすることによってユーザーに不便をかけることだけです。


2
すごい超高速返信!どうもありがとう!これで自信を持ってウェブサイトを構築し続けることができます。
php_learner

21
ログインCSRFは引き続き、ユーザーのプライバシーに対する攻撃に使用できます。seclab.stanford.edu
websec / csrf /

6
@squiddle:リンクをありがとう、それは非常に興味深い論文です。しかし、それは攻撃者の管理下にアカウントを持つユーザーのログインにかかっおよびユーザーは何かが右ではありません実現しないであろうことを想定して、ユーザは、サーバ上に格納されようとしている機密情報を生成しようとしていることを前提としています。つまり、私見は「古典的な」CSRFよりもそれほど深刻ではありません。
Jon

6
@ジョンはい、それほど深刻ではない可能性がありますが、最終的にはプライバシーの侵害という単なる不便以上のものになる可能性があります。すべてのサービスは脅威モデルを独自に定義し、それに応じて処理する必要があります。そのためには、少なくとも起こり得る脅威に注意する必要があります。だから私は私の2セントを追加しました。
12

1
「最終的に攻撃者ができることは、セキュリティシステムが一定期間ユーザーをロックアウトする可能性がある場合に、失敗したログインをスパムすることによってユーザーに不便をかけることだけです。」
samthebest 2014

0

はい、そのため、他のWebサイトはログインフォームを模倣できません!それと同じくらい簡単です。

彼らはそれを行うことによって何を達成できますか?

  • 最初に、あなたはそれを許可したくありません。
  • 2番目:次のような非常に単純な失敗の場合でも
    • パスワードが正しくないため、ユーザーをブロックしていますn。の場合、回避することができます。
    • フレーズハッキングアラートを防止できます。などなど

これらの点のほとんどは正しくありません。攻撃者はログインフォームを作成し、ユーザーの資格情報を取得して(csrfトークンを使用して)ログインフォームをロードし、3つの情報をターゲットに送信できます。CSRFはこれを防止しません。
Snapey

@Snapeyブラウザーは通常、JSがCSRFデータを読み取ることを許可しません。JSを使用すると、本物のフォーム送信リクエストを模倣することはできません。
mayankcpdixit

csrfトークンは、多くの場合、JavaScriptで使用するためにクライアントに渡されます。私は、攻撃者がログインフォームを要求し、資格情報を詰め込むことについて取り上げているcorsについて話しているのではありません。@mayankcpdxit。あなたはcsrfが資格情報の詰め込みを防ぐことを暗示しているようですが、そうではありません。
Snapey、

理論的には、それを防ぐことはできません。ただし、CSRFフォームのiframeへの読み込みを停止し、クロスオリジン要求の許可を停止した場合、CSRFの後に認証情報の詰め込みを自動化することはできません。
mayankcpdixit

-1

CSRF検証の事前ログインは、私見ではあまり意味がありません。

リンクの@squiddleのおかげで:seclab.stanford.edu/websec/csrf/csrf.pdf、最初のページで読むことができます:

The most popular CSRF defense is to include a secret
token with each request and to validate that the received
token is correctly bound to the users session,
preventing CSRF by forcing the attacker to guess the
sessions token.

ログイン前にCSRF検証を試みると、潜在的な攻撃者にWebサイトの有効なコードをこする機会が与えられます。その後、彼/彼女は目的を打ち破ってトークンを再投稿することができます。

おそらく、攻撃者はサイトのユーザー名を推測しようとする可能性があります。私がやったこと、IPアドレスが成功せずに10人のユーザー名を推測しようとした場合、私は単にそれをブラックリストに載せます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.