Microsoftは、ECC(Elliptic Curve Cryptography、楕円曲線暗号)認証に影響する重大な脆弱性を修正するため、Windows 10の各バージョンとWindows Server 2019、2016を対象としたパッチをリリースした。この脆弱性は、攻撃者による証明書チェーンの有効性と署名の検証の偽装を可能にするものであるため、迅速なパッチ適用が必要である。
脆弱性を発見したNSA(PDF)では、影響を受けるシステムに対して、可能な限り早急にパッチを適用するように警告している。
パッチを適用しないことによる影響は、重大かつ広範に渡るものになります。リモートの悪用ツールが近日中に開発され、広く使用されるようになると思われます。
この脆弱性はHTTP接続やメールやファイル、インターネットからの実行ファイルのダウンロードに関するシグネチャ認証に影響する。悪意のあるサイトやファイルや実行ファイルが、正当なエンティティによってサインされているように見える可能性があるのだ。
NSAはまた、システムへのパッチの方法や、certutil
やopenssl
を使って、システムにインストールされた可能性のある偽の証明書を識別する方法など、数多くの提言も行っている。
標準曲線に部分的にのみ一致する、明示的に定義された楕円曲線パラメータを含む証明書で、特にそれが信頼できる証明書の公開キーを含んでいる場合には、偽造されたものであることが疑われます。
Mircosoftの提供するパッチの適用が遅れて、システムが長期間放置されていたような場合には、特にこの点は重要である。このようなケースでは、NSAの提供する手順に従って、システムがパッチされていない期間中は、証明書キャッシュに新たな証明書が追加されないようにしておくことが有効だ。
Microsoftによると、現時点でエクスプロイトは確認されていないということだが、独立系のセキュリティ専門家の多くが、この脆弱性を悪用した攻撃の概念実証(POC, proofs of concept)を即座に発表している。
スイス企業Kudelski SecurityのセキュリティエンジニアであるYolan Romailler氏の説明によると、この脆弱性のエクスプロイトでは、"明示的パラメータ"で生成されたX.509証明書が使用されている。
ここで問題なのは、CryptAPIの使用するCA証明書キャッシュが、公開キーとシリアル番号がすでに証明書キャッシュにある証明書のものと一致しただけで、使用している曲線パラメータが同じものでないという事実を無視して、偽造されたルートCAをCA証明書ストアにあるものと誤って認識することです。
Twitterユーザ名Cem Payaによる、Crypto32.dllが"ユーザ定義(user-defined)"楕円曲線を"怠惰な"方法でのサポートを実装したのではないかとする推測も、問題を高レベルで説明するものとして有用だ。
すべての曲線パラメータが既知の曲線と同じである、ということがチェックできていないのです。結果として、攻撃者が生成ポイントを切り替えることで、被害者の公開キーと一致する署名を偽造可能な、別の曲線を作ることが可能になっています。
Crypto32のエクスプロイトに関する興味深い議論は、関連する数学的なバックグラウンドとともに、Trail of Bits Webサイトで見ることができる。
今回の脆弱性は、影響を受けるWindowsシステムすべてに対して早急なアップデートが望まれるものであるのは事実だが、この脆弱性が悪用され得る状況に関して、Kudelsky氏がより適切なフレーム化を試みている。
最後に理解して頂きたいのは、このような脆弱性には、単純なクラッキングやランサムウェアに悪用されるリスクはない、ということです。[...] 直面すべき敵は、あなたが運用するネットワークを所有する相手です。それは国民国家レベルの敵かも知れませんが、単純なクラッカである可能性は高くありません。
この事実はまた、今回の脆弱性についてNSAが、より分かりやすく公開するという決定を下した要因ともなっている。
attack surfaceattack surfaceこれはまた、NSAが自らの発見を武器にせず、公開することを選んだ理由でもあると思われます — 攻撃対象領域があまりにも巨大であるため、脆弱性が米国の国益に反する形で利用されるリスクを避けて、パッチが適用される方向を選ぶことが、彼らにとってベストなのです。
バグがあったWindows Crypto32.dllライブラリが導入されたのはWindows NT 4.0だが、上に説明したように、脆弱性が存在するのはさらに高度なECC機能である。Windows 7や8.1、その他のMicrosoftセキュリティアドバイザリに記載されていないWindowsバージョンでは、この機能はサポートされていないようだ。