
ETS5 Password Recovery Tool è una PoC per CVE-2021-36799
Hai dimenticato la password di uno dei tuoi progetti ETS5 e non riesci più ad accedere alla configurazione dell'impianto KNX? Il tool ETS5 Password Recovery ti permette di recuperare la password del progetto e altri segreti salvati nel project store dell'ETS5. Ciò è possibile perché l'ETS5 presenta un significativo difetto di progettazione: utilizza una password e un salt hard-coded per crittografare le informazioni del progetto (CVE-2021-36799).
Conservare segreti crittografici nel codice sorgente è sconsigliato perché possono essere recuperati tramite reverse engineering del software, offrendo così poca protezione in più rispetto a memorizzare le informazioni in chiaro. Ciò può rappresentare una minaccia per la sicurezza delle installazioni KNX. Se un attaccante riesce ad accedere ai file nel project store, può decifrarli pur non conoscendo la password del progetto. Le informazioni in essi contenute consentono di intercettare, impersonare e riconfigurare i dispositivi KNX. Questo è particolarmente problematico perché l'ETS5 dà agli utenti l'impressione che la password del progetto venga utilizzata per crittografare le informazioni del progetto, non solo per i progetti esportati. Di conseguenza, è probabile che molti utenti e integratori di sistema non abbiano preso ulteriori misure per garantire la riservatezza del project store. Se l'ETS5 implementasse correttamente la crittografia e venisse scelta una password forte per il progetto, sarebbe una sfida molto più ardua per un attaccante, anche se riuscisse ad ottenere accesso remoto al computer.
Le seguenti informazioni riservate sono crittografate in modo improprio:
ETS5 Password Recovery Tool è una prova di concetto che dimostra il problema decifrando e mostrando le informazioni sensibili. È stato sviluppato come parte della divulgazione coordinata delle vulnerabilità e viene rilasciato con il permesso della KNX Association. La pubblicazione del tool ha i seguenti scopi:
AVVERTENZA: Utilizza questo tool solo se sei legalmente autorizzato a visualizzare le informazioni del progetto. Aggirare le misure di sicurezza, anche quelle inefficaci, per ottenere l'accesso a informazioni che non ti è consentito vedere, potrebbe essere un reato nella tua giurisdizione.
L'eseguibile può essere scaricato dalla sezione release. Non necessita di installazione e può essere posizionato in qualsiasi directory a scelta.
In alternativa, se non desideri eseguire un binario non attendibile sul tuo sistema, puoi decifrare singoli attributi dai file XML del progetto sul sito CyberChef.
Il software dipende da .NET Framework 4.6 o successivo. Windows 10 include già una versione .NET adeguata per impostazione predefinita. Gli utenti di versioni precedenti di Windows dovranno installare una versione corrente di .NET Framework per eseguire il software.
Contrariamente a quanto suggerisce l'interfaccia utente, l'ETS5 non crittografa i file di progetto memorizzati localmente in C:\ProgramData\KNX\ETS5\ProjectStore con la password del progetto. Invece, utilizza la password hard-coded ETS5Password e il salt Ivan Medvedev per offuscare specifici attributi nei file XML del progetto. I segreti crittografici hard-coded sono contrari alle buone pratiche, come spiegato in CWE-798 e CWE-321.
Il processo per la deoffuscazione è:
Ivan Medvedev come stringa codificata ASCII o UTF-8.ETS5Password come password e la rappresentazione in byte di Ivan Medvedev come salt. I primi 32 byte dell'output della derivazione della chiave saranno usati come chiave e i successivi 16 byte come IV.Un'implementazione della deoffuscazione si trova nel file Deobfuscator.cs. Poiché la password e il salt sono costanti, sarebbe possibile precalcolare la chiave e l'IV per saltare la derivazione della chiave. Ciò non viene fatto nell'implementazione di questo software, poiché intende mostrare tutti i passaggi della deoffuscazione. Tuttavia, se hai bisogno della chiave e dell'IV, sono elencati di seguito.
| Hex | Base64 | |
|---|---|---|
| Chiave | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
I file di progetto esportati (.knxproj) non sono interessati da questo difetto di progettazione, quindi questo tool non può essere utilizzato per recuperare la password del progetto per essi. Il file .knxproj è un file ZIP che contiene un altro file ZIP con le informazioni sensibili. Quest'ultimo utilizza la compressione Deflate, la crittografia ZipCrypto / PKWARE e la password del progetto per la derivazione della chiave di crittografia.
Durante la preparazione della mia tesi "Security Analysis of the KNXnet/IP Secure Protocol", ho indagato su come l'ETS5 memorizza le informazioni di progetto. Poiché l'ETS genera e memorizza chiavi crittografiche e password utilizzate dai dispositivi KNX IP Secure per autenticarsi a vicenda, fornire riservatezza per la comunicazione multicast e proteggere la configurazione dei dispositivi, è importante mantenere segrete le informazioni. Se un attaccante riuscisse ad accedere alle informazioni di progetto memorizzate dall'ETS, comprometterebbe completamente la sicurezza dell'installazione KNX.
Per questo motivo, il project store dell'ETS5 è stato ispezionato per verificare se i dati sono memorizzati in modo da garantire la riservatezza. I file di progetto in C:\ProgramData\KNX\ETS5\ProjectStore sono leggibili da qualsiasi account utente, non sono necessari diritti di amministratore. Sono stati trovati i seguenti indicatori che hanno sollevato il sospetto che i dati non siano crittografati correttamente:
L'ultimo punto indicava chiaramente che la password del progetto non veniva utilizzata nell'algoritmo che modifica i valori degli attributi. Un esempio può essere visto di seguito, dove i codici di autenticazione dei dispositivi in due progetti P-02FB e P-0117 erano impostati su valori identici. Anche gli output offuscati sono gli stessi, nonostante l'uso di password di progetto diverse. Poiché non viene richiesto di inserire altro oltre alla password del progetto quando si apre il progetto nell'ETS5, ciò significava che la chiave doveva essere memorizzata da qualche parte o si trattava di semplici algoritmi di offuscazione che non richiedono alcuna chiave. Sembrava probabile che la soluzione non fosse ideale per garantire la riservatezza e potenzialmente mettere a rischio le installazioni KNX.
Poiché l'ETS5 si basa sul framework .NET, cosa immediatamente evidente dalle DLL utilizzate, il decompilazione poteva essere facilmente realizzata tramite ILSpy. Il binario era stato offuscato con Dotfuscator, presumibilmente per rendere più difficili gli sforzi di reverse engineering. Tuttavia, i nomi di classi e funzioni erano sorprendentemente rimasti per lo più intatti. Quindi, l'approccio scelto è stato quello di cercare classi e funzioni che sembravano correlate all'elaborazione dei file XML, alla crittografia, alla decrittografia, all'offuscamento, al deoffuscamento, alle chiavi o alle password. Questo ha portato alla scoperta di Knx.Ets.ObjectModel.Import.PasswordDescrambler.Scramble e Knx.Ets.ObjectModel.Import.Encryption.EncryptString, che vengono chiamati sui valori offuscati degli attributi memorizzati nei file XML. Non veniva passato alcun materiale chiave alle funzioni; utilizzavano solo valori costanti per derivare una chiave che veniva poi utilizzata per crittografare/decrittografare gli attributi utilizzando AES-256 in modalità CBC. Era evidente che venivano utilizzate credenziali hard-coded per derivare una chiave. Dotfuscator modificava il flusso di controllo e inseriva operazioni superflue, ma le chiamate alle funzioni del framework .NET non potevano essere nascoste. Pertanto, è stato possibile scrivere una specifica per il (de)offuscamento in questa fase per un approccio semi-clean-room. L'unica parte mancante era la stringa utilizzata nella derivazione della chiave, che era stata oscurata da Dotfuscator. De4dot è stato scelto per invertire l'offuscamento delle stringhe, rivelando la password ETS5Password. L'IV era già leggibile prima di applicare De4dot, poiché era stato definito come una sequenza di byte. Per curiosità personale, si è scoperto che non si trattava di byte casuali, ma in realtà della rappresentazione in byte ASCII / UTF-8 della stringa Ivan Medvedev.
Poiché il difetto di progettazione rappresenta un rischio per le installazioni KNX, il problema doveva essere segnalato alla KNX Association. Era necessaria un'implementazione proof of concept per garantire che il problema potesse essere dimostrato, se richiesto. Per evitare qualsiasi violazione del copyright, il proof of concept è stato implementato sulla base delle specifiche annotate. Ciò è stato fatto per evitare qualsiasi riutilizzo di codice dal software originale. L'applicazione di Dotfuscator ha anche fatto sì che il codice originale e persino quello non offuscato fossero comunque inutilizzabili per un'implementazione pulita, garantendo che anche la copia involontaria dell'originale fosse improbabile.
Per i dettagli sulla divulgazione coordinata successiva allo sviluppo del proof of concept, vedere la sezione Divulgazione coordinata della vulnerabilità.
Sfortunatamente, al 2021-07-18, non è disponibile una versione ETS con patch. Pertanto, sono necessarie misure aggiuntive al di fuori dell'ETS5 per affrontare i rischi. Le sottosezioni seguenti spiegano diversi approcci che possono essere adottati a seconda del modello di minaccia che si ipotizza e contro il quale ci si vuole proteggere.
C:\ProgramData\KNX\ETS5\ProjectStore e tutti i file in essa contenuti utilizzando il sistema di crittografia dei file (EFS) di Windows.C:\ProgramData\KNX\ETS5\ProjectStore.Secondo Joost Demarest, CTO e CFO della KNX Association, ETS5 non riceverà alcuna patch poiché lo sviluppo per quella versione è già stato concluso. Ha autorizzato la pubblicazione immediata del problema il 2021-07-12, rinunciando al ritardo di 90 giorni offerto per la divulgazione.
A causa di un malinteso, il README in precedenza affermava che la KNX Association prevede di risolvere il problema in ETS6. Questo non è il caso. La KNX Association ha chiarito il 2021-10-25 che non intende risolvere questo problema, in quanto non lo considera di responsabilità dell'ETS per la memorizzazione sicura del materiale crittografico delle chiavi quando non viene esportato.
La KNX Association mi ha contattato e spiegato che ha rivisto i suoi piani. Ora intendono documentare le carenze dell'attuale versione ETS e crittografare adeguatamente il repository dei progetti in una versione futura di ETS6.
Il progetto è distribuito sotto la licenza MIT.
Hash del commit:
Download:
Modifiche: