web-dev-qa-db-ja.com

短期間に大量のログイン試行が成功したユーザーについてはどうしたらよいですか?

ユーザーが短期間に何千回もログイン試行を成功させたとしたらどうでしょうか。そのような行動の危険は何であり、どのようにそれらから保護するのですか?

私の頭の中を飛び跳ねる危険のいくつかの例:

  • これは、DDOSの試みで、短期間に大量のコストのかかる操作を実行しようとして、無用のログを大量に作成する可能性があります。
  • 取得された各セッショントークン(ログインがJWTトークンを生成する場合)は、署名の計算に使用されるシークレットに関する情報を提供し、ハッカーが任意のアカウント/ロールのJWTトークンを作成できるようにします。
2
Heschoon

セキュリティの面では、あなた自身を保護することができますで:

  1. Fail2banのようなレート制限ツールでDDoSやその他の自動化されたノイズをブロック
  2. 総当たり攻撃を阻止するための再捕
  3. ステートフルなファイアウォール、侵入検知、または侵入防止により、アプライアンスが既知の攻撃方法をブロックする

(このサイトは製品の推奨事項を禁止していますが、これらの各カテゴリのパッケージ化/サポートされている有料製品と、好みに応じたオープンソースオプションがあります。)

これらの基本を超えて何を考えるべきかを伝えることはできませんこのタイプの質問は、公開フォーラムで公開したくないデータに依存しているためです。具体的には:

  1. ログインが成功した場合、クライアントは有効な資格情報を持っています。動作を調査するか、ユーザーに連絡して、アクティビティが正当であるかどうかを判断する必要があります。調査には、関連するログの注意深いレビューが含まれます。 アクティビティが無許可の場合は、資格情報をリセット/取り消す必要があります。
  2. 自動化されたプロセスは、毎秒数百、数千、または数百万の固有のアクションを簡単に実行できます。これは次の結果である可能性があります:(a)未承認のツール、(b)正常に機能している承認済みのツール、(c)何らかの理由で不正な動作をしている承認済みのツール。私たちは知るか調査する方法がありません、または(d)誤用されている認可されたツール。 動作に応じて、動作をホワイトリストに登録し、ツールを再構成し、アクセスを取り消し、またはアクセスをブロックする必要があります。
  3. 認証の試みはJWTに対する攻撃のように見えますか? 悪い俳優をブロックする必要があります。できればIPSが自動的に処理しますが、必要に応じてfail2banまたはファイアウォールにルールを追加できます。

セキュリティアナリストであれば、これを調査するためのツールが必要です。そうでない場合、組織は経営陣が認識しなければならない赤字を抱えています。セキュリティアナリストではなく、会社にもセキュリティアナリストがいない場合は、調査に役立つセキュリティコンサルタントがいます。

2
DoubleD

何か臭い臭いがする場合は、セキュリティ監査でこれを行う場合があります。あなたが言った両方の理由でそうしました。

  • サービス拒否:リクエストが多すぎて、開いているファイルハンドルが多すぎるためにバグが発生するシステムを見てきました。セッションシステムは、ディスク上に開いたままのファイルを持っている可能性があるため、さらに脆弱になると思います。または、並べ替えが適切に実装されていない場合(フルテーブルスキャンがO(n)の場合)、適切なセッションファイル(数千の場合)の検索に時間がかかる可能性があるため、システムが遅くなるかどうかを確認するために多くのセッションを作成します。 、fat32ファイルのリストはO(n)です...人々はあらゆる種類のクレイジーなセットアップを実行しています)。

  • 何万ものトークンを生成して、セッショントークンのランダム性を分析する。

ただし、これらはランダムに生成されるのではなく署名されているため、JWTの場合には意味がありません。重要な点は、サーバー側の状態がないため、ファイルが多すぎてはいけないということです。リフレッシュトークンがない場合は、DoSを試行する可能性のあるサーバー側の状態がまだ残っているためです。

私が知っているさらに3つのオプションがあります。

  • アカウント共有スキームでもこれを行うことができます。 1つの例はGoogle Playストアアカウントで、一部のオープンソースフロントエンドはサーバーからログインセッションをフェッチします(そのため、サーバーにはパスワードがあり、ログインしてセッションを作成します)。これらのログインセッションは、このオープンソースクライアントを実行しているユーザーに送信され、Playストアを使用できますが、管理者アカウントのアクセス権は付与されません(そのためのアカウントパスワードが必要なため)。これにより、人々はアカウントを共有し、お互いを信頼することなく匿名でAPKファイルをダウンロードできます。

    誰もがスヌープし、人々がスヌーピングを回避しようとしているようなサービスを実行している場合、おそらくこれが理由であることにすでに気づいているためです。

  • 下手なボットはこれを行うかもしれません。何かのステータスを確認したり、何らかのアクションを実行したりする場合は、(古いセッションを再利用する代わりに)毎回ログインするだけで、現在アクティブなセッションを管理する必要がなくなります。所有者が非常に頻繁に実行するように設定すると、何千回ものログインが発生する可能性があります。

  • それほど極端ではないケースでは、人間の「新しいデバイス」からの比較的多数のログインが表示される場合もあります。数千ではなく、おそらく1日あたり数十。

    Httpsを実装するまで、stackoverflowでこれを行いました。これは、Cookieがhttp経由でリークすることを望まないためです。私は信頼できるネットワークにログインしてログアウトするので、誰かが安全でないネットワークのhttpページにstackoverflowリクエストを挿入した場合、私のブラウザーはログインしている場所にCookieを送信しません。

    今でも私はTwitterのようなものを使ってこれをやっており、彼らが私をWebで追跡させたくないので、彼らのCookieを削除し(自動的に、アドオンを使用)、簡単にログインするだけです(私のパスワードマネージャーを使用して、時々)ツイートを好きになるようなことをしたいとき。

システムは、セッションが多すぎて速度が低下することはありません。それ以外の場合、多数の正当なユーザーが同時にアクティブになると、速度が低下(またはクラッシュ)します。したがって、悪意のある動作の解決策は、システムがそれを処理できるようにすることです。ルックアップが O(log n) (データベースベースのスキームを使用する場合は、セッションID列にインデックスを追加するなど)、ランダムに生成されたトークンを使用する場合は、エントロピーが十分にある(とにかくそれを行う必要があります) )。 JWT(リフレッシュトークンなし)の場合、どちらも適用されません。

システムが非常に小規模で、同時に多数のユーザーを処理できない場合は、ユーザーがすでにアクティブなセッションを持っているかどうかをログイン時に確認し、5つ以上(またはそれ以上)ある場合は、それらの最も古いものを削除します-使用されたセッション。

1
Luc