
ETS5 パスワード回復ツールは CVE-2021-36799 の PoC です
ETS5プロジェクトのパスワードを忘れてしまい、KNXインストールの設定にアクセスできなくなりましたか? ETS5パスワードリカバリツールを使用すると、ETS5のプロジェクトストアに保存されたプロジェクトパスワードやその他の秘密情報を取得できます。これは、ETS5に重大な設計上の欠陥があり、プロジェクト情報を暗号化するためにハードコードされたパスワードとソルトを使用しているためです (CVE-2021-36799)。
暗号化の秘密をソースコードに保存することは推奨されません。ソフトウェアのリバースエンジニアリングにより取得される可能性があり、情報を平文で保存するのと大差ない保護しか提供しないためです。これはKNXインストールのセキュリティに対する脅威となる可能性があります。攻撃者がプロジェクトストアのファイルにアクセスできた場合、プロジェクトパスワードを知らなくても復号化できます。そこに含まれる情報により、KNXデバイスを盗聴、なりすまし、再設定することが可能になります。これは特に問題です。なぜならETS5は、エクスポートされたプロジェクトだけでなく、プロジェクト情報の暗号化にプロジェクトパスワードが使用されるという印象をユーザーに与えるからです。そのため、多くのユーザーやシステムインテグレーターがプロジェクトストアの機密性を確保するための追加の対策を講じていない可能性が高いです。ETS5が適切に暗号化を実装し、強力なプロジェクトパスワードが選択されていれば、たとえ攻撃者がコンピューターへのリモートアクセスを取得したとしても、より困難な課題を提供できたでしょう。
以下の機密情報が不適切に暗号化されています:
ETS5パスワードリカバリツールは、機密情報を復号化して表示することで問題を実証する概念実証です。これは協調的な脆弱性開示の一環として開発され、KNX協会の許可を得て公開されています。このツールを公開する目的は次のとおりです:
警告: このツールは、プロジェクト情報を表示する法的権限がある場合にのみ使用してください。セキュリティ対策(効果がないものであっても)を回避して、見ることが許可されていない情報にアクセスすることは、あなたの管轄区域では重罪となる可能性があります。
実行ファイルはリリースセクションからダウンロードできます。インストールは不要で、任意のディレクトリに配置できます。
あるいは、システム上で信頼できないバイナリを実行したくない場合は、CyberChef WebサイトでプロジェクトのXMLファイルから個々の属性を復号化できます。
このソフトウェアは.NET Framework 4.6以降に依存しています。Windows 10にはデフォルトで適切な.NETバージョンが含まれています。それ以前のWindowsバージョンのユーザーは、ソフトウェアを実行するために最新の.NET Frameworkバージョンをインストールする必要があります。
ユーザーインターフェースが示唆するのとは反対に、ETS5はC:\ProgramData\KNX\ETS5\ProjectStoreにあるローカルに保存されたプロジェクトファイルをプロジェクトパスワードで暗号化しません。代わりに、ハードコードされたパスワードETS5PasswordとソルトIvan Medvedevを使用して、プロジェクトのXMLファイル内の特定の属性を難読化します。ハードコードされた暗号化の秘密はベストプラクティスに反しており、CWE-798およびCWE-321で説明されています。
難読化解除のプロセスは次のとおりです:
Ivan Medvedevのバイト表現をASCIIまたはUTF-8エンコードされた文字列として取得します。ETS5Password、ソルトとしてIvan Medvedevのバイト表現を使用します。キー導出出力の最初の32バイトをキーとして使用し、続く16バイトをIVとして使用します。難読化解除の実装はDeobfuscator.csファイルにあります。パスワードとソルトは一定であるため、キーとIVを事前計算してキー導出をスキップすることも可能です。このソフトウェアの実装では、難読化解除の全手順を示すことを目的としているため、それは行われていません。ただし、キーとIVが必要な場合は、以下にリストされています。
| Hex | Base64 | |
|---|---|---|
| Key | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
エクスポートされたプロジェクトファイル(.knxproj)はこの設計上の欠陥の影響を受けないため、このツールを使用してそれらのプロジェクトパスワードを復元することはできません。.knxprojファイルはZIPファイルであり、その中に機密情報を含む別のZIPファイルが含まれています。後者はDeflate圧縮、ZipCrypto / PKWARE暗号化、および暗号化キーの導出にプロジェクトパスワードを使用しています。
私の論文"Security Analysis of the KNXnet/IP Secure Protocol"の準備中に、ETS5がプロジェクト情報をどのように保存するかを調査しました。ETSはKNX IP Secureデバイスが相互認証、マルチキャスト通信の機密性、およびデバイス設定のセキュリティを確保するために使用する暗号化キーとパスワードを生成および保存するため、情報を秘密に保つことが重要です。攻撃者がETSによって保存されたプロジェクト情報にアクセスできた場合、KNXインストールのセキュリティが完全に侵害されます。
このため、ETS5のプロジェクトストアが検査され、データが機密性を確保する方法で保存されているかどうかが確認されました。C:\ProgramData\KNX\ETS5\ProjectStore内のプロジェクトファイルはすべてのユーザーアカウントで読み取り可能であり、管理者権限は必要ありません。データが適切に暗号化されていない疑いを引き起こす以下の指標が見つかりました:
最後の点は、属性値を変更するアルゴリズムにプロジェクトパスワードが使用されていないことを明確に示していました。以下に例を示します。2つのプロジェクトP-02FBとP-0117のデバイス認証コードが同一の値に設定されていました。異なるプロジェクトパスワードが使用されているにもかかわらず、難読化された出力も同じです。ETS5でプロジェクトを開く際にプロジェクトパスワード以外の入力を促すものがないため、キーはどこかに保存されているか、キーを必要としない単純な難読化アルゴリズムである必要がありました。この解決策は機密性を確保するのに理想的ではなく、KNXインストールを危険にさらす可能性が高いと思われました。
ETS5は.NETフレームワークに基づいており、これはDLLからすぐに明らかだったため、ILSpyを使えば逆コンパイルは容易に実行できた。バイナリはDotfuscatorによって難読化されており、おそらくリバースエンジニアリングの努力を困難にするためだった。しかし、クラス名と関数名は驚くほどそのまま残っていた。そのため、選択したアプローチは、XMLファイルの処理、暗号化、復号化、難読化、難読化解除、鍵またはパスワードに関連していると思われるクラスと関数を検索することだった。これにより、Knx.Ets.ObjectModel.Import.PasswordDescrambler.ScrambleとKnx.Ets.ObjectModel.Import.Encryption.EncryptStringが発見された。これらはXMLファイルに格納された属性の難読化された値に対して呼び出されていた。関数には鍵素材は渡されておらず、定数値のみを使用して鍵を導出し、その鍵を使用してAES-256 CBCモードで属性を暗号化/復号化していた。ハードコードされた認証情報が鍵の導出に使用されていることは明らかだった。Dotfuscatorは制御フローを変更し、余分な操作を挿入したが、.NETフレームワークの関数呼び出しは隠せなかった。したがって、この段階でセミクリーンルームアプローチのための(難読化解除の)仕様を記述することが可能だった。欠けていたのは、key派生に使用される文字列だけで、それはdotfuscatorによって隠されていた。文字列難読化を解除するためにDe4dotを選択し、ETS5Passwordパスワードが明らかになった。IVはDe4dotを適用する前から読み取り可能で、バイトシーケンスとして定義されていた。個人的な好奇心から、これらはランダムなバイトではなく、実際には文字列Ivan MedvedevのASCII/UTF-8バイト表現であることが判明した。
この設計上の欠陥はKNX設備にリスクをもたらすため、問題をKNX協会に報告する必要があった。問題を実証できるよう、必要に応じて実証コードが必要だった。著作権侵害を避けるため、実証コードはメモした仕様に基づいて実装された。これは元のソフトウェアのコードを再利用しないためである。Dotfuscatorの適用により、元のコードや難読化解除されたコードでさえクリーンな実装には使用できないことが確実になり、偶発的なコピーも起こりにくくなった。
実証コードの開発後の協調的脆弱性開示の詳細については、協調的脆弱性開示のセクションを参照。
残念ながら、2021年7月18日時点では、パッチが適用されたETSバージョンは利用できない。そのため、ETS5以外の追加対策が必要である。以下のサブセクションでは、想定する脅威モデルと防御対象に応じて取れるさまざまなアプローチを説明する。
C:\ProgramData\KNX\ETS5\ProjectStoreディレクトリとその中のすべてのファイルを暗号化する。C:\ProgramData\KNX\ETS5\ProjectStoreの下に表示されるようにシンボリックリンクを作成する必要がある。KNX協会のCTO兼CFOであるJoost Demarestによると、ETS5は開発が終了しておりパッチは提供されない。彼は2021-07-12に問題の即時公開を許可し、提供された90日間の開示猶予を放棄した。
誤解のため、以前のREADMEではKNX協会がETS6で問題に対処する予定であると誤って記載していた。これは誤りである。KNX協会は2021-10-25に、暗号鍵素材をエクスポートしない場合に安全に保存する責任はETSにはないと考えているため、この問題を修正する予定はないと明らかにした。
KNX協会から連絡があり、計画を修正したと説明された。現在は、現在のETSバージョンの欠点を文書化し、ETS6の将来のバージョンでプロジェクトストアを適切に暗号化する意向である。
このプロジェクトはMITライセンスの下で配布されている。
コミットハッシュ:
ダウンロード:
変更点: