リスト型攻撃(credential stuffing)とは、他のサイトから漏えいしたメールアドレスとパスワードの組を、あなたのログインに対して試す攻撃です。人はパスワードを使い回すため、漏えいしたリストのごく一部はほぼどこでも通用します。攻撃者はシステムを破る必要はありません。必要なのは数と、すばやく応答するログインフォームだけです。
ログにどう現れるか
- 失敗率の急上昇。通常のログインはほとんど成功します。リスト型攻撃では 20 回に 19 回が失敗します。
- 多数のアカウント、それぞれ少ない試行。総当たり攻撃と違って各アカウントは 1、2 回しか試されないため、アカウント単位のロックは発動しません。
- 多数のアドレス。試行は住宅用プロキシプールを経由してくるため、上位の IP をブロックしてもほとんど効果がありません。
- ページを経由しないログイン。ログインページを一度も読み込んでいないクライアントが、ログインのエンドポイントを直接呼び出します。
- 機械的なタイミング。顧客が寝ている時間帯に、一定の間隔でリクエストが届きます。
一般的な防御が不十分な理由
IP ごとのレート制限は、何千もの出口を持つプロキシプールに破られます。アカウントのロックは攻撃者よりも顧客を苦しめ、意図的に人を締め出す手段に転用されることもあります。CAPTCHA は、有料サービスによって 1 セント未満で解かれてしまいます。どれも、本当の人には手間を、bot にはわずかなコストを加えるだけです。
リクエストだけでなくクライアントを判定する
リスト型攻撃のツールは、リクエストごとに IP や User-Agent を変えられます。偽装が難しいのは、ページを読み込み、スクリプトを実行し、セッション全体を通して人のように振る舞う、一貫したブラウザ全体です。
- ページから発行される署名付き token が、存在しないか、多数のセッションで共有されている。
- 自動化のフラグやブラウザのフィンガープリントがつじつまが合わない。
- 1 台のデバイスや 1 つの token が、多数の異なるアカウントを試している。
- エラーが出てもそのまま再試行を続ける。人はそうしません。
チェックをどこに置くか
パスワードを検証する前に問い合わせてください。そうすれば、bot は組み合わせが正しいかどうかを知ることができません。
- bot high:パスワードが間違っていた場合と同じように応答します。ツールは何も学べず、顧客が巻き込まれることもありません。
- bot:セッションを通す前に、第 2 要素かメールで送ったコードを求めます。
- それ以外:通常のログインです。
bot にも、人が見るのと同じ「パスワードが違います」を返すことが重要です。専用のブロックページを出すと、攻撃者に手口を変えるよう教えてしまいます。
ログインの後
その後に何が起きたかを bot チェックに伝えてください。後に本当の注文をしたログインや、その逆を証明するチャージバックは、どんなリクエストヘッダーでも偽装できない証拠であり、同じ訪問者についての次の判定をより正確にします。