1

アカウントの総当りを特定する効率的な方法を探しています。ログ データベースに認証ログ エントリが含まれています。各エントリには次のものがあります。

  • タイムスタンプ
  • ユーザー名
  • IPアドレス
  • ログイン試行の結果 (成功 / 失敗)

どのログインが攻撃されたかを示すレポートを作成したいと考えています。攻撃とは、同じ IP アドレスから N 分 (たとえば 10) 以内に成功したログイン試行が続かず、失敗したログイン試行として定義されます。テストケースは次のとおりです。

  • ユーザー/IP コンボが 2 回ログインに失敗し、3 回目に成功しました (攻撃なし)
  • ユーザー/IP の組み合わせが 2 回ログインに失敗し、3 回目に成功しましたが、同じユーザーで別の IP がログインに失敗しました (2 番目のユーザー/IP の組み合わせに対する攻撃)。

O(n*log(N)) ソリューションを使用した 1 つのソリューションを想像できます。カーソルが各レコードを移動し、別のカーソルを使用して後のレコードを検索して、アクティビティを判断します。かなり非効率的です。

DB は問題ではありません。データは簡単に変換できるため、SQL、MySQL、nosql などです。

4

2 に答える 2

2

ログ項目を 5 分間隔でグループ化します。アラームしきい値の半分を超えるすべてのグループに対して、よりコストがかかるが完全に正しいチェックを実行します。

これにより、実際の攻撃ではないほぼすべてのログ項目が除外される可能性があります。また、グループ化操作は簡単にプログラムでき、すばやく実行できます。

于 2012-11-23T19:29:11.547 に答える
0

この複雑なイベント処理にどれだけの作業を費やすかによっては、オプションになる可能性があります。Java を行う場合は、 Esperなどのフレームワークがあります。

アイデアは、サーバー ログ (または SQL 結果) に基づいてイベント ストリームを作成し、Esper に相関関係をチェックさせることです。クエリの例を参照してください

于 2012-11-26T14:18:41.130 に答える