Windows logo surrounded by fire

10 年前に発生した Windows の脆弱性は、実行可能ファイルが正当に署名されているように見せかける攻撃で今も悪用されており、Microsoft の修正プログラムは何年も経った今でも「オプトイン」されています。さらに悪いことに、Windows 11 にアップグレードした後、修正プログラムは削除されます。

水曜日の夜、VoIP 通信会社3CX が侵害され、大規模なサプライ チェーン攻撃で Windows デスクトップ アプリケーションのトロイの木馬バージョンを配布したというニュースが流れました。

このサプライ チェーン攻撃の一環として、Windows デスクトップ アプリケーションで使用される 2 つの DLL が、情報を盗むトロイの木馬などの追加のマルウェアをコンピュータにダウンロードする悪意のあるバージョンに置き換えられました。

攻撃で使用される悪意のある DLL の 1 つは、通常、d3dcompiler_47.dll という名前の Microsoft によって署名された正当な DLL です。ただし、攻撃者は DLL を変更して、ファイルの末尾に暗号化された悪意のあるペイロードを含めました。

昨日最初に指摘したように、ファイルが変更されたにもかかわらず、Windows は依然として Microsoft によって正しく署名されているものとして表示されました。

修正された DLL が有効な署名を持つと見なされる
修正された DLL が有効な署名を持つと見なされる
ソース:

DLL や EXE ファイルなどの実行可能ファイルに署名するコードは、ファイルが本物であり、悪意のあるコードを含むように変更されていないことを Windows ユーザーに保証することを目的としています。

署名された実行可能ファイルが変更されると、Windows は「オブジェクトのデジタル署名が検証されませんでした」というメッセージを表示します。ただし、d3dcompiler_47.dll DLL が変更されたことがわかっていても、Windows でサインインしていると表示されます。

ANALYGENCE の上級脆弱性アナリストであるWill Dormann 氏にこの動作について連絡を取り、DLL を共有したところ、DLL が CVE-2013-3900 の欠陥である「WinVerifyTrust 署名検証の脆弱性」を悪用しているとのことでした。

Microsoft は、2013 年 12 月 10 日にこの脆弱性を最初に公開し、署名された実行可能ファイルの EXE の Authenticode 署名セクション (WIN_CERTIFICATE 構造) にコンテンツを追加することは、署名を無効にすることなく可能であると説明しました。

たとえば、Dormann 氏はツイートで、Google Chrome インストーラーが Authenticode 構造にデータを追加して、ユーザーが「使用統計とクラッシュ レポートを Google に送信する」ことを選択したかどうかを判断すると説明しました。 Google Chrome をインストールすると、このデータの Authenticode 署名がチェックされ、診断レポートを有効にする必要があるかどうかが判断されます。

Microsoft は最終的に修正をオプションにすることを決定しました。これはおそらく、実行可能ファイルの署名ブロックにデータを格納した正当な署名付き実行可能ファイルが無効になるためです。

「2013 年 12 月 10 日、Microsoft は、Windows Authenticode 署名形式で署名されたバイナリの署名を検証する方法を変更する、Microsoft Windows のサポートされているすべてのリリースの更新プログラムをリリースしました」と、CVE-2013-3900 に関する Microsoft の開示を説明しています。

「この変更は、オプトイン ベースで有効にすることができます。」

「有効にすると、Windows Authenticode 署名検証の新しい動作により、WIN_CERTIFICATE 構造に不要な情報が許可されなくなり、Windows は準拠していないバイナリを署名済みとして認識しなくなります。」

それから 10 年近くが経過しましたが、この脆弱性は多数の攻撃者によって悪用されることが知られています。ただし、Windows レジストリを手動で編集することによってのみ有効にできるオプトイン修正のままです。

修正を有効にするために、64 ビット システムの Windows ユーザーは、次のレジストリ変更を行うことができます。

Windows レジストリ エディタ バージョン 5.00
[HKEY_LOCAL_MACHINESoftwareMicrosoftCryptographyWintrustConfig]
“EnableCertPaddingCheck”=”1”

[HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftCryptographyWintrustConfig]
“EnableCertPaddingCheck”=”1”

これらのレジストリ キーが有効になると、Microsoft が 3CX サプライ チェーン攻撃で使用された悪意のある d3dcompiler_47.dll DLL の署名を異なる方法で検証することがわかります。

悪意のある DLL が署名されたプレフィックスとして表示
修正後、悪意のある DLL が署名されていないと表示される
修正後、悪意のある DLL が署名されていないと表示される

さらに悪いことに、レジストリ キーを追加して修正を適用しても、Windows 11 にアップグレードするとレジストリ キーが削除され、デバイスが再び脆弱になります。

マティのツイート

この脆弱性は、3CX サプライ チェーンや 1 月のZloader マルウェア配布キャンペーンなどの最近の攻撃で使用されているため、開発者が不便を感じたとしても、修正する必要があることが明らかになりました。

残念ながら、ほとんどの人はこの欠陥について知らず、悪意のあるファイルを見て、Windows がそうであると報告するので、信頼できると思い込みます。

「しかし、修正がオプションの場合、大衆は保護されません」とドーマン氏は警告しました.

オプションの修正プログラムを有効にし、コンピューターを 1 日を通して通常どおり使用しましたが、決定を後悔するような問題は発生しませんでした。

これにより、Google Chrome などの一部のインストーラーで署名済みとして表示されないという問題が発生する可能性がありますが、追加された保護機能は不便に値します。

は、この欠陥の継続的な悪用について Microsoft に連絡しました。これはオプトインによる修正にすぎませんが、返信を受け取っていません。