失敗した VPN ハンドシェイクは本当にダウングレード攻撃なのか
ダウングレード攻撃は実在するが、失敗したハンドシェイクの多くは提案の不一致、誤った経路、期限切れのプロファイルだ。まず何が交渉されたかを確認する。
エラーで終わるハンドシェイクは、メッセージを見るまでは攻撃のように感じられる。多くの場合それは算術で、共通の提案がない、証明書の期限が切れている、パケットが届かなかった、のいずれかだ。ダウングレード攻撃はもっと具体的で、攻撃者が双方を自分たちなら選ばない弱い動作へ押しやり、残る証拠も異なる。失敗をすべて悪意と見なすと存在しない被害者を探すことになり、実際のダウングレードを設定ミスと見なすと弱い結果がそのまま残る。二つの誤りのコストは違い、安く直せるのは片方だけだ。
ダウングレード攻撃が実際に変えるもの
目的は暗号を破ることでも鍵を推測することでもない。交渉に影響を与え、双方を攻撃者が扱える古いバージョンや弱いアルゴリズムに落とし込むか、片方にもう片方がそれしか支持しないと信じさせることだ。
変わるのは合意であって、認証ではない。攻撃者が検知されずに提案を書き換えられれば、両者はハンドシェイクを完了し、互いを認証したまま、攻撃者の好むパラメータを使う。だからこそ、交渉そのものが完全性保護の対象かどうかが重要な問いになる。
交渉そのものを認証しなければならない理由
TLS 1.3 はその保護を明示する。新しいバージョンを提示したクライアントは、黙って後退したサーバーを検出できる。サーバーのランダム値は 1.2 以下で交渉すると固定パターンを持ち、クライアントはそれを見たら中断しなければならない。完全なトランスクリプトも終了メッセージで覆われるので、交渉のどこかへの改変は後で失敗し、静かに通ることはない。
古いプロトコル版の説明は弱く、フォールバック規則が重要なのはまさにそのためだ。同じ設定の TLS 1.0 エンドポイントはダウングレード攻撃ではない。あなたが許可を選んだ、許された結果だ。区別は、弱い結果が保護された判断から来たのか、仲介者が影響できた保護されていない経路から来たのかにある。こう言い換えると、ほとんどのインシデントは設定の問いに還元される。
IKEv2 は違う振る舞いをするが同じ考えに立つ。提案は後に双方を認証する交換で運ばれるため、アルゴリズムを書き換える中間装置は認証を操るのではなく壊す。OpenVPN の制御チャネルは TLS で交渉を守り、そのチャネルでデータチャネルの暗号を合意する。だから制御チャネルのログ行が興味深いのだ。
設定された互換性は攻撃ではない
管理者は文書化されたクライアントを支えるため、古い選択肢を意図的に許可できる。その判断は設定に現れる。攻撃者はその設定を作れず、提案に影響できる経路を悪用するしかない。
危険な修理は、違いの証拠を消すものだ。レガシー選択肢をすべて有効にし、証明書検証を切り、エラーを消すために任意の暗号を受け入れると、エンドポイントが同意する範囲が広がり、弱い結果を報告したはずの検査が消える。
古い選択肢を一つ残す必要があるなら、設定コメントに理由とクライアント名を書き、そのオプションを必要とするプロファイルに限定する。一つのリスナーに限定した互換例外は監査できるが、全体に適用したものは誰も選んだ覚えのない弱い既定値にすぎない。
原因を名付ける前に失敗を読む
変更する前に、正確なエラー文字列、クライアントとサーバーのバージョン、時刻を保存する。それから分類する。提案で不一致だったのか、パケット経路が失敗したのか、かつて受け入れていたパラメータを片方が拒否したのか。
提案の不一致は通常、問題のバージョンやアルゴリズムを名指しし、毎回同じ地点で失敗する。ルーティングや MTU の問題は停止するかタイムアウトし、ネットワークによって変わりやすい。期限切れの証明書は交渉ではなく検証のエラーを出す。
どれも攻撃者の証拠ではない。最初の失敗で悪意ある原因を割り当てるのが誤りで、明日また失敗する決定論的なバグを隠してしまう。
実際に何が選ばれたかを確認する
修正したら、接続が上がったと信じるのではなく、交渉された結果を読む。検証を外したために成功した接続は、避けたかった結果そのものだ。次の二つのコマンドは、TLS を前面に置いたエンドポイントで選ばれたバージョンと暗号、そして OpenVPN サーバーログの制御チャネル行を示す。
openssl s_client -connect 198.51.100.30:443 -servername vpn.example.net -brief </dev/null
grep -iE 'Control Channel|Data Channel' /var/log/openvpn.log | tail -5結果は意図した設定と比べる。今つながるものと比べてはいけない。選ばれたバージョンが許容最小より古いなら、プロファイルかフォールバック一覧を見るべきで、答えはその一覧を直すことであって、攻撃を宣言して周囲を作り直すことではない。