
ETS5 Password Recovery Tool ist ein PoC für CVE-2021-36799
Haben Sie das Passwort für eines Ihrer ETS5-Projekte vergessen und können nicht mehr auf die Konfiguration der KNX-Installation zugreifen? Das ETS5 Password Recovery Tool ermöglicht es Ihnen, das Projektpasswort und andere im Projektverzeichnis der ETS5 gespeicherte Geheimnisse wiederherzustellen. Dies ist möglich, weil die ETS5 einen erheblichen Designfehler aufweist: Sie verwendet ein fest codiertes Passwort und einen fest codierten Salt, um die Projektinformationen zu verschlüsseln (CVE-2021-36799).
Das Speichern kryptografischer Geheimnisse im Quellcode ist nicht empfehlenswert, da sie durch Reverse Engineering der Software wiederhergestellt werden können und somit kaum mehr Schutz bieten, als die Informationen im Klartext zu speichern. Dies kann eine Gefahr für die Sicherheit der KNX-Installationen darstellen. Wenn ein Angreifer Zugriff auf die Dateien im Projektverzeichnis erlangt, kann er diese entschlüsseln, ohne das Projektpasswort zu kennen. Die darin enthaltenen Informationen ermöglichen es, KNX-Geräte abzuhören, sich als solche auszugeben und neu zu konfigurieren. Dies ist besonders problematisch, da die ETS5 den Benutzern den Eindruck vermittelt, das Projektpasswort würde zur Verschlüsselung der Projektinformationen verwendet, nicht nur für exportierte Projekte. Daher haben viele Benutzer und Systemintegratoren wahrscheinlich keine zusätzlichen Maßnahmen ergriffen, um die Vertraulichkeit des Projektverzeichnisses zu gewährleisten. Wenn die ETS5 die Verschlüsselung korrekt implementieren würde und ein starkes Projektpasswort gewählt würde, wäre es für einen Angreifer deutlich schwieriger, selbst wenn er Fernzugriff auf den Computer erlangt hätte.
Die folgenden vertraulichen Informationen werden nicht ordnungsgemäß verschlüsselt:
Das ETS5 Password Recovery Tool ist ein Machbarkeitsnachweis, der das Problem demonstriert, indem es die sensiblen Informationen entschlüsselt und anzeigt. Es wurde im Rahmen der koordinierten Offenlegung von Sicherheitslücken entwickelt und mit Genehmigung der KNX Association veröffentlicht. Die Veröffentlichung des Tools dient den folgenden Zwecken:
WARNUNG: Verwenden Sie dieses Tool nur, wenn Sie rechtlich dazu befugt sind, die Projektinformationen einzusehen. Das Umgehen von Sicherheitsmaßnahmen, selbst von ineffektiven, um Zugang zu Informationen zu erhalten, die Sie nicht sehen dürfen, kann in Ihrem Rechtsgebiet eine Straftat darstellen.
Die ausführbare Datei kann aus dem Release-Bereich heruntergeladen werden. Sie muss nicht installiert werden und kann in einem beliebigen Verzeichnis abgelegt werden.
Alternativ, wenn Sie keine nicht vertrauenswürdige Binärdatei auf Ihrem System ausführen möchten, können Sie einzelne Attribute aus den Projekt-XML-Dateien auf der CyberChef Website entschlüsseln.
Die Software benötigt .NET Framework 4.6 oder höher. Windows 10 enthält standardmäßig bereits eine geeignete .NET-Version. Benutzer älterer Windows-Versionen müssen eine aktuelle .NET Framework-Version installieren, um die Software auszuführen.
Entgegen der Darstellung in der Benutzeroberfläche verschlüsselt die ETS5 Ihre lokal gespeicherten Projektdateien in C:\ProgramData\KNX\ETS5\ProjectStore nicht mit dem Projektpasswort. Stattdessen verwendet sie das fest codierte Passwort ETS5Password und den Salt Ivan Medvedev, um bestimmte Attribute in den Projekt-XML-Dateien zu verschleiern. Fest codierte kryptografische Geheimnisse widersprechen den Best Practices, wie in CWE-798 und CWE-321 erläutert.
Der Prozess für die Entschleierung ist:
Ivan Medvedev als ASCII- oder UTF-8-kodierten String.ETS5Password als Passwort und der Byterepräsentation von Ivan Medvedev als Salt verwendet. Die ersten 32 Bytes der Schlüsselableitungsausgabe werden als Schlüssel und die folgenden 16 Bytes als IV verwendet.Eine Implementierung der Entschleierung befindet sich in der Datei Deobfuscator.cs. Da Passwort und Salt konstant sind, wäre es möglich, den Schlüssel und die IV vorab zu berechnen, um die Schlüsselableitung zu überspringen. Dies wird in der Implementierung dieser Software nicht getan, da sie alle Schritte der Entschleierung zeigen soll. Falls Sie jedoch den Schlüssel und die IV benötigen, sind diese unten aufgeführt.
| Hex | Base64 | |
|---|---|---|
| Key | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
Exportierte Projektdateien (.knxproj) sind von diesem Designfehler nicht betroffen, daher kann dieses Tool nicht verwendet werden, um das Projektpasswort für diese wiederherzustellen. Die .knxproj-Datei ist eine ZIP-Datei, die eine weitere ZIP-Datei mit den sensiblen Informationen enthält. Letztere verwendet Deflate-Kompression, ZipCrypto/PKWARE-Verschlüsselung und das Projektpasswort für die Ableitung des Verschlüsselungsschlüssels.
Während der Vorbereitung meiner Abschlussarbeit "Security Analysis of the KNXnet/IP Secure Protocol" habe ich untersucht, wie die ETS5 Projektinformationen speichert. Da die ETS kryptografische Schlüssel und Passwörter generiert und speichert, die von den KNX-IP-Secure-Geräten verwendet werden, um sich gegenseitig zu authentifizieren, Vertraulichkeit für Multicast-Kommunikation zu gewährleisten und die Konfiguration der Geräte zu sichern, ist es wichtig, die Informationen geheim zu halten. Wenn ein Angreifer Zugriff auf die von der ETS gespeicherten Projektinformationen erlangen würde, wäre die Sicherheit der KNX-Installation vollständig gefährdet.
Aus diesem Grund wurde das Projektverzeichnis der ETS5 überprüft, um festzustellen, ob die Daten auf eine Weise gespeichert werden, die Vertraulichkeit gewährleistet. Die Projektdateien in C:\ProgramData\KNX\ETS5\ProjectStore sind für jedes Benutzerkonto lesbar, es sind keine Administratorrechte erforderlich. Es wurden die folgenden Hinweise gefunden, die den Verdacht aufkommen ließen, dass die Daten nicht ordnungsgemäß verschlüsselt sind:
Der letzte Punkt zeigte deutlich, dass das Projektpasswort nicht im Algorithmus verwendet wurde, der die Attributwerte modifiziert. Ein Beispiel ist unten zu sehen, wo die Geräteauthentifizierungscodes in zwei Projekten P-02FB und P-0117 auf identische Werte gesetzt wurden. Die verschleierten Ausgaben sind ebenfalls gleich, obwohl unterschiedliche Projektpasswörter verwendet wurden. Da beim Öffnen des Projekts in der ETS5 keine andere Eingabe als das Projektpasswort erforderlich ist, bedeutete dies, dass der Schlüssel entweder irgendwo gespeichert sein musste oder es sich um einen einfachen Verschleierungsalgorithmus handelte, der keinen Schlüssel benötigt. Es schien wahrscheinlich, dass die Lösung nicht ideal war, um die Vertraulichkeit zu gewährleisten, und möglicherweise KNX-Installationen gefährdete.
Da der ETS5 auf dem .NET-Framework basiert, was sofort anhand der verwendeten DLLs ersichtlich war, konnte das Decompilieren leicht mit ILSpy durchgeführt werden. Die Binärdatei war mit Dotfuscator obfuskiert worden, vermutlich um Reverse-Engineering-Bemühungen zu erschweren. Allerdings blieben Klassen- und Funktionsnamen überraschenderweise größtenteils intakt. Daher wurde der Ansatz gewählt, nach Klassen und Funktionen zu suchen, die mit der Verarbeitung der XML-Dateien, Verschlüsselung, Entschlüsselung, Obfuskierung, Deobfuskierung, Schlüsseln oder Passwörtern zu tun hatten. Dies führte zur Entdeckung von Knx.Ets.ObjectModel.Import.PasswordDescrambler.Scramble und Knx.Ets.ObjectModel.Import.Encryption.EncryptString, die auf die obfuskierten Werte von Attributen in den XML-Dateien aufgerufen werden. Es wurden keine Schlüsselmaterialien an die Funktionen übergeben, es wurden nur konstante Werte verwendet, um einen Schlüssel abzuleiten, der dann zur Ver-/Entschlüsselung der Attribute mit AES-256 im CBC-Modus verwendet wurde. Es war offensichtlich, dass hartcodierte Anmeldeinformationen verwendet wurden, um einen Schlüssel abzuleiten. Der Dotfuscator änderte den Kontrollfluss und fügte überflüssige Operationen ein, aber die Aufrufe der Funktionen aus dem .NET-Framework konnten nicht verborgen werden. Daher war es möglich, zu diesem Zeitpunkt eine Spezifikation für die (De-)Obfuskierung für einen semi-clean-room-Ansatz zu schreiben. Der einzige fehlende Teil war der bei der Schlüsselableitung verwendete String, der durch Dotfuscator verschleiert worden war. De4dot wurde gewählt, um die String-Obfuskierung rückgängig zu machen, was das Passwort ETS5Password enthüllte. Der IV war bereits vor der Anwendung von De4dot lesbar, da er als Byte-Sequenz definiert war. Aus persönlicher Neugier wurde festgestellt, dass es sich nicht um zufällige Bytes handelte, sondern um die ASCII-/UTF-8-Byte-Darstellung des Strings Ivan Medvedev.
Da der Designfehler ein Risiko für KNX-Installationen darstellt, musste das Problem der KNX Association gemeldet werden. Eine Proof-of-Concept-Implementierung war erforderlich, um sicherzustellen, dass das Problem auf Anfrage demonstriert werden kann. Um Urheberrechtsverletzungen zu vermeiden, wurde der Proof of Concept basierend auf der notierten Spezifikation implementiert. Dies geschah, um eine Wiederverwendung von Code aus der Originalsoftware zu vermeiden. Die Anwendung von Dotfuscator stellte zudem sicher, dass der originale und selbst der nicht obfuskierte Code für eine saubere Implementierung ohnehin unbrauchbar waren, was sicherstellte, dass selbst ein unbeabsichtigtes Kopieren des Originals unwahrscheinlich war.
Einzelheiten zur koordinierten Offenlegung nach der Entwicklung des Proof of Concept finden Sie im Abschnitt Koordinierte Offenlegung von Sicherheitslücken.
Leider gibt es zum 2021-07-18 keine gepatchte ETS-Version. Daher sind zusätzliche Maßnahmen außerhalb des ETS5 erforderlich, um die Risiken zu adressieren. Die folgenden Unterabschnitte erläutern verschiedene Ansätze, je nachdem, welches Bedrohungsmodell Sie annehmen und gegen das Sie sich schützen möchten.
C:\ProgramData\KNX\ETS5\ProjectStore und alle darin enthaltenen Dateien mit dem Windows Encrypted File System (EFS).C:\ProgramData\KNX\ETS5\ProjectStore erscheint.Laut Joost Demarest, CTO und CFO der KNX Association, wird ETS5 keine Patches erhalten, da die Entwicklung für diese Version bereits abgeschlossen ist. Er erlaubte die sofortige Veröffentlichung des Problems am 2021-07-12 und verzichtete auf die angebotene 90-tägige Verzögerung für die Offenlegung.
Aufgrund eines Missverständnisses behauptete die README zuvor, dass die KNX Association plane, das Problem in ETS6 zu beheben. Dies ist nicht der Fall. Die KNX Association hat am 2021-10-25 klargestellt, dass sie nicht beabsichtigt, dieses Problem zu beheben, da sie es nicht als Verantwortung des ETS ansehen, kryptografisches Schlüsselmaterial sicher zu speichern, wenn es nicht exportiert wird.
Die KNX Association hat mich kontaktiert und erklärt, dass sie ihre Pläne überarbeitet haben. Sie beabsichtigen nun, die Mängel der aktuellen ETS-Version zu dokumentieren und den Projekt-Speicher in einer zukünftigen Version von ETS6 ordnungsgemäß zu verschlüsseln.
Das Projekt wird unter der MIT-Lizenz vertrieben.
Commit-Hash:
Download:
Änderungen: