攻撃者がSSLハンドシェイク(RSA一方向)のすべてのメッセージを記録し、リプレイ攻撃を開始するとします。サーバーはいつ(どのメッセージの後に)攻撃を検出できるのでしょうか?
次に、攻撃者が戦略を変更し、最初の3つのフェーズ(セッションキー交換まで)を送信し、このシーケンスを何度も送信するとします。なぜ攻撃者はこれを行うのですか?サーバーにどのような影響がありますか?
攻撃者が古いハンドシェイクメッセージを再生する場合、以前に記録されたメッセージは暗号化され、異なるキーでMAC処理され、その内容は次のいずれとも一致しないため、攻撃者からのFinished
メッセージでトリックが明らかになります。
マスターシークレット(RSAなどのキー交換メカニズムの結果)から対称暗号化およびMACキーへの派生には、client_random
およびserver_random
2つの「hello」メッセージから。攻撃者はこれらの値の1つを再生しました(例:client_random
攻撃者がclientメッセージを再生しているが、もう1つはピアからのものであり、記録されたものとは異なる場合。
Finished
メッセージの内容は、2つの「hello」メッセージを含む、以前のすべてのハンドシェイクメッセージに対して計算されたハッシュであるため、「ランダム」の1つが変更され、ハッシュは一致しません。
注:サーバーが証明書ベースのクライアント認証を必要とし、攻撃者が交換のクライアント部分を再生している場合、再生はより早く検出されます、 CertificateVerify
メッセージで:記録されたハンドシェイクメッセージは、2つの「ランダム」を含む以前のすべてのハンドシェイクメッセージのハッシュに対して計算された(正規のクライアントによる)署名です。ただし、クライアント証明書を要求するSSLサーバーは比較的まれです。
ハンドシェイクを開始したが終了しない攻撃者は Denial-of-Service attack を実行しており、サーバーにリソースを割り当てさせ、CPUサイクルを無駄に使わせています。通常、攻撃者はClientHello
を送信して、「DHE」暗号スイートのみのサポートを要求します。次に、サーバーは、新しく計算された署名を必ず含むServerKeyExchange
メッセージを含む一連のメッセージで応答する必要があります。攻撃者のCPUコストは最小限ですが(TCP接続を開いて数バイトを送信するだけの労力))サーバーは暗号化を行う必要があります。
この種のDoSでは実際にTCP接続を行う必要があるため、攻撃者のIPアドレスが明らかにされます。また、シグネチャは高価ではありません:PC 1秒あたり数千の署名を実行できるため、通常、SSLベースのDoSはボットネットによって行われます。