web-dev-qa-db-ja.com

Web管理者認証のようなIP制限付きOTPは安全かどうか

次のセキュリティ実装を使用してWeb管理パネルを作成しました。

  1. これはWebのサブディレクトリにあり、アクセスしようとすると404エラーがトリガーされます(リンクが壊れているか存在しないのと同じように)。
  2. これは(正しいサブディレクトリが開かれている場合のみ)、トークンを含むURLを含む電子メールを管理者に送信します。
  3. トークンは2つの部分で構成され、1つは5つのランダムな5桁の数字のランダムなmd5であり、もう1つはmd5(strrev(md5(IP_ADDR)))です。トークンは、他のすべてのセッションを無効にすることでデータベースに保存されます。
  4. これらのトークンは_記号で区切られます。
  5. 管理者(または誰か)がURLにアクセスしようとすると、同じIPがURLにアクセスしているかどうかに関係なく、最初にIPトークンが照合されます。そうでない場合は、404ページが表示されます。
  6. はいの場合、データベースに保存されたランダムトークンは、メールで送信されたものと照合されます。これも成功すると、管理パネルが開きます。
  7. 無効な試行は404エラーを表示します。
  8. このトークンは、cronジョブのおかげで、20分ごとに自動的に無効になります。

ただし、メールはウェブサイトの管理者のみが開くことができます。

この実装の欠陥は何でしょうか?これをどのように改善できますか?

3
Sibidharan

それぞれが異なる欠陥をカバーしている可能性があるため、この質問に対する単一の回答はありそうにありません。ここにいくつかありますトークンの導出と404の使用に関してのみ

トークンの2番目の部分は、攻撃者が自分のIPアドレスを知っているため、直接計算できます。したがって、セキュリティを低下させることなく削除できます。

トークンの最初の部分でハッシュを使用しても、セキュリティ値は追加されませんが、オーバーヘッドが増加します(無視できる可能性がありますが、それでも意味がありません)。ワンタイムパスワードのポイントは、攻撃者がランダムに生成された値を推測するのが難しいということです。攻撃者は5つの元の数値を推測する必要があるため、値をハッシュしても難易度は上がりませんまたはハッシュ。

前者の推測空間は、すべての数値を単純に連結できるため、1e25の値です。これは、log(1e25)/ log(2)= 83.05ビットと同等です。魔法のようにMD5の128を取得することはありません。

これを増やす必要がありますか?私の推測では、ブルートフォース攻撃はより早くDOSを実行しますが、より多くのスペースを使用しても害はほとんどないので、それを選択してください。

404エラーの使用は 隠すことによるセキュリティ これはセキュリティではありません。

2

5桁の乱数の品質とは関係なく、「ただし、電子メールはWebサイトの管理者のみが開くことができます」という主張について詳しく説明したいと思います。

管理者の電子メールアカウントはパスワードのみで保護されていると想定しています。このようにして、1つのパスワード(電子メールパスワード)をおそらくWeb管理インターフェイスのパスワードと組み合わせます。同様の方法で攻撃される可能性のある2つのパスワードが生成されます。攻撃者は、「どれほど不便で、2つのパスワードを取得する必要がある」と考えるかもしれません。しかし、彼はパスワードを攻撃するのが得意です!彼がそれを1回または2回行っても関係ありません。

したがって、攻撃者が得意ではないものを追加することを検討する必要があります。ハードウェアトークンやyubikeyのような本当の2番目の要素。たぶん、くだらないGoogle Authenticatorでさえ(​​彼がスマートフォンにマルウェアを取り込むのが苦手だと仮定して)。ちなみに、これらはすべてオープンソースでサポートされています privacyidea

1
cornelinux