コンテンツにスキップ

クレデンシャルスタッフィング検知

クレデンシャルスタッフィングは、攻撃者が漏えいしたユーザー認証情報のリストを用いて、複数のWebサイト上のユーザーアカウントへ不正アクセスするサイバー攻撃です。この記事では、WallarmのCredential Stuffing Detectionを使用してこの種の脅威を検知する方法について説明します。

クレデンシャルスタッフィング攻撃は、複数のサービスで同一のユーザー名とパスワードを使い回す慣行が広く存在し、さらに推測されやすい(弱い)パスワードを選びがちであることから、特に危険です。成功に必要な試行回数が少ないため、攻撃者はリクエストの送信頻度を大幅に下げられ、このためブルートフォース防御のような標準的な対策が効果を発揮しにくくなります。

Wallarmによるクレデンシャルスタッフィングへの対処

WallarmのCredential Stuffing Detectionは、漏えいまたは弱い認証情報を使ってお客様のアプリケーションへアクセスしようとする試行に関するリアルタイム情報を収集・表示します。また、これらの試行に関する即時通知を有効化できるほか、お客様のアプリケーションへのアクセスに使用されたすべての漏えいまたは弱い認証情報のダウンロード可能な一覧を作成します。

漏えいおよび弱いパスワードの特定には、公開されているHIBPの漏えい認証情報データベースから収集した、8億5,000万件以上の包括的データベースを使用します。

クレデンシャルスタッフィング - スキーマ

WallarmのCredential Stuffing Detectionは、以下の手順により認証情報データの安全性を保ちます。

  1. リクエストがノードに到達すると、パスワードからSHA-1を生成し、そのうちの数文字をCloudに送信します。

  2. Cloudは既知の漏えいパスワードのデータベースを、受信した文字列で始まるものがないか確認します。該当があれば、SHA-1で暗号化された形式でノードに送信され、ノードはそれらをリクエストのパスワードと照合します。

  3. 一致した場合、ノードはCloudにクレデンシャルスタッフィング攻撃として報告し、リクエストから取得したログインを攻撃情報に含めます。

  4. ノードはリクエストをアプリケーションに転送します。

したがって、Wallarmノードを搭載したマシンからWallarm Cloudへパスワードが暗号化されない状態で送信されることはありません。認証情報は同時に送信されないため、お客様のネットワーク内でクライアントの認可データが安全に保たれます。

大量試行と単発試行

Credential Stuffing Detectionは、ボットによる大量の漏えい認証情報使用試行と、他の手段では検知できない単発の試行の両方を記録できます。

緩和策

盗まれた、または弱いパスワードを持つアカウントを把握することで、アカウント所有者への連絡や一時的なアクセス停止など、これらのアカウントのデータを保護するための措置を開始できます。

パスワードが弱い、または漏えいしている場合でも正当なユーザーを誤ってブロックしないよう、Wallarmは漏えい認証情報を含むリクエストをブロックしません。ただし、次の場合にはクレデンシャルスタッフィングの試行をブロックできる点にご注意ください。

  • 悪意のあるボット活動として検出された一連の行為に含まれており、API Abuse Preventionモジュールを有効にしている場合。

  • 他の攻撃兆候を伴うリクエストの一部である場合。

有効化

WallarmのCredential Stuffing Detectionを有効にするには、次の手順に従います。

  1. ご利用のサブスクリプションプランCredential Stuffing Detectionが含まれていることを確認します。サブスクリプションプランを変更するには、sales@wallarm.comにリクエストを送信します。

  2. Wallarmノードがバージョン4.10以上であり、以下のいずれかのアーティファクトでデプロイされていることを確認します。

  3. ご利用のユーザーロールCredential Stuffing Detectionの設定権限があることを確認します。

  4. Wallarm Console → Credential Stuffingで、この機能を有効にします(初期状態では無効です)。

Credential Stuffing Detectionを有効化したら、動作を開始するために設定が必要です。

Configuring

漏えいした認証情報の使用試行を検査する対象となる認証エンドポイントの一覧を作成する必要があります。一覧を作成するには、Wallarm Console → Credential Stuffingに移動します。

Wallarm Console - Credential Stuffing

エンドポイントを一覧に追加する方法は2通りあります。

  • Recommended endpoints一覧から追加する方法です。この一覧には次の2種類の要素が含まれます。

    • 一般的に使用される認証エンドポイントと、その中でパスワードとログインを格納するパラメータを指定するための正規表現を用いた、Wallarmの事前定義ルール。
    • API Discoveryモジュールによって検出され、実際にトラフィックを受信したと記録された認証に使用されるエンドポイント。
  • 手動で追加する方法です。独自の認証エンドポイントを含めることで、すべてを網羅して保護できます。手動で追加する場合は、URIと、認証パラメータの検索方法を設定します。

    • By Exact location of parameters - パスワードとログインが存在する正確なエンドポイントのリクエストポイントを指定します。
    • By Regular expression - パスワードとログインを含むエンドポイントのパラメータを正規表現で検索します。

      Credential Stuffing - Add authentication endpoint - Regular expression

漏えい認証情報の使用試行の表示

過去7日間における漏えい認証情報の使用試行の回数は、Credential Stuffingセクションに表示されます。カウンターをクリックすると、Attacksセクションに移動し、過去7日間のすべてのcredential_stuffing攻撃が表示されます。

いずれかの攻撃を展開すると、パスワードが漏えいしているログインの一覧を確認できます。

Attacks - クレデンシャルスタッフィング

漏えい認証情報のCSVリストの取得

漏えい認証情報の総数はCredential Stuffingセクションに表示されます。カウンターをクリックすると、ブラウザーが漏えい認証情報の一覧を含むCSVファイルをダウンロードします。

通知の受信

漏えい認証情報の使用試行に関する即時通知を、メール、メッセンジャー、または統合済みシステムのいずれかで受け取れます。このような通知を有効にするには、Wallarm ConsoleのTriggersセクションで、条件Compromised user accountを使用するトリガーを1つ以上構成します。

監視対象のアプリケーションやホスト、応答タイプで通知を絞り込むこともできます。

トリガー例: Slackでの漏えい認証情報使用試行の通知

この例では、漏えい認証情報の新たな使用試行が検出された場合、設定済みのSlackチャンネルに通知が送信されます。

クレデンシャルスタッフィングのトリガー

トリガーをテストするには:

  1. Wallarm Console → Integrationsで、USまたはEUクラウドにアクセスし、Slackとの連携を設定します。

  2. Credential Stuffingセクションで、Credential Stuffingが有効になっていること、また、以下のWallarmの事前定義ルールがRecommended endpointsから有効なAuthentication endpointsに追加されていることを確認します。

    Request is:

    /**/{{login|auth}}.*
    

    Password is located here:

    ([^/](|((api|current|new|old|plain)(|\.|-|_)))(pass(|word|wd))|^pass(|wd|word))$
    

    Login is located here:

    ^((w+.)|_|.|)(login|user|auth)(|_|-.)(user|client|auth|id|name|)(|[\d])$
    
  3. Triggersセクションで、上記のとおりトリガーを作成し、ご自身のSlack連携にマッピングします。

  4. 漏えい認証情報を含むリクエストをノードのlocalhost/loginエンドポイントに送信します。

    curl -X POST http://localhost/login -d '{"password": "123456", "user": "user-01@company.com"}'
    

  5. Attacksセクションで、リクエストがcredential_stuffingタイプのイベント(漏えい認証情報の使用試行)として登録されていることを確認します。

  6. 攻撃を展開し、漏えいしたログイン情報が含まれていることを確認します。

  7. Slackチャンネルのメッセージを確認します。新しいメッセージは次のようになります:

    [wallarm] Stolen credentials detected
    
    Notification type: compromised_logins
    
    Stolen credentials have been detected in your incoming traffic:
    
    Compromised accounts: user-01@company.com
    Associated URL: localhost/login
    Link: https://my.wallarm.com/attacks/?q=attacks+d%3Alocalhost+u%3A%2Flogin+statuscode%3A404+application%3Adefault+credential_stuffing+2024%2F01%2F22
    
    Client: YourCompany
    Cloud: EU
    

制限事項

現在、AWS向けTerraformモジュールでデプロイされたWallarmノードでは、Credential Stuffing Detectionモジュールはサポートされていません。