
ETS5 Password Recovery Tool é uma PoC para CVE-2021-36799
Você esqueceu a senha de um dos seus projetos ETS5 e não consegue mais acessar a configuração da instalação KNX? A Ferramenta de Recuperação de Senha do ETS5 permite que você recupere a senha do projeto e outros segredos salvos no armazenamento de projetos do ETS5. Isso é possível porque o ETS5 tem uma falha de design significativa: ele usa uma senha e um sal fixos no código para criptografar as informações do projeto (CVE-2021-36799).
Armazenar segredos criptográficos no código-fonte é desaconselhável porque eles podem ser recuperados por engenharia reversa do software, oferecendo assim pouco mais proteção do que armazenar as informações como texto claro. Isso pode representar uma ameaça à segurança das instalações KNX. Se um invasor conseguir obter acesso aos arquivos no armazenamento de projetos, ele poderá descriptografá-los mesmo sem conhecer a senha do projeto. As informações contidas nesses arquivos permitem espionar, personificar e reconfigurar dispositivos KNX. Isso é particularmente problemático porque o ETS5 dá aos usuários a impressão de que a senha do projeto seria usada para criptografar as informações do projeto, não apenas para projetos exportados. Portanto, é provável que muitos usuários e integradores de sistemas não tenham tomado medidas adicionais para garantir a confidencialidade do armazenamento de projetos. Se o ETS5 implementasse a criptografia corretamente e uma senha de projeto forte fosse escolhida, isso representaria um desafio muito maior para um invasor, mesmo que ele conseguisse obter acesso remoto ao computador.
As seguintes informações confidenciais são criptografadas de forma inadequada:
A Ferramenta de Recuperação de Senha do ETS5 é uma prova de conceito que demonstra o problema descriptografando e exibindo as informações confidenciais. Ela foi desenvolvida como parte da divulgação coordenada de vulnerabilidades e é lançada com permissão da Associação KNX. A publicação da ferramenta serve aos seguintes propósitos:
AVISO: Use esta ferramenta somente se você estiver legalmente autorizado a visualizar as informações do projeto. Contornar medidas de segurança, mesmo as ineficazes, para obter acesso a informações que você não tem permissão para ver, pode ser crime em sua jurisdição.
O executável pode ser baixado da seção de releases. Ele não precisa ser instalado e pode ser colocado em qualquer diretório de sua escolha.
Alternativamente, se você não quiser executar um binário não confiável em seu sistema, pode descriptografar atributos individuais dos arquivos XML do projeto no site CyberChef website.
O software depende do .NET Framework 4.6 ou posterior. O Windows 10 já inclui uma versão adequada do .NET por padrão. Usuários de versões anteriores do Windows terão que instalar uma versão atual do .NET Framework para executar o software.
Ao contrário do que a interface do usuário sugere, o ETS5 não criptografa seus arquivos de projeto armazenados localmente em C:\ProgramData\KNX\ETS5\ProjectStore com a senha do projeto. Em vez disso, ele usa a senha fixa no código ETS5Password e o sal Ivan Medvedev para ofuscar atributos específicos nos arquivos XML do projeto. Segredos criptográficos fixos no código são contra as boas práticas, conforme explicado em CWE-798 e CWE-321.
O processo para a desofuscação é:
Ivan Medvedev como string ASCII ou UTF-8.ETS5Password como senha e a representação em bytes de Ivan Medvedev como sal. Os primeiros 32 bytes da saída da derivação de chave serão usados como chave e os 16 bytes seguintes como IV.Uma implementação da desofuscação pode ser encontrada no arquivo Deobfuscator.cs. Como a senha e o sal são constantes, seria possível pré-calcular a chave e o IV para pular a derivação de chave. Isso não é feito na implementação deste software, pois a intenção é mostrar todas as etapas da desofuscação. No entanto, se você precisar da chave e do IV, eles estão listados abaixo.
| Hex | Base64 | |
|---|---|---|
| Chave | 22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371 | Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E= |
| IV | 8E977BB3FEFADD88E6AE6CBEAE3E7CAF | jpd7s/763Yjmrmy+rj58rw== |
Os arquivos de projeto exportados (.knxproj) não são afetados por essa falha de design e, portanto, esta ferramenta não pode ser usada para recuperar a senha do projeto nesses arquivos. O arquivo .knxproj é um arquivo ZIP que contém outro arquivo ZIP com as informações confidenciais. Este último usa compactação Deflate, criptografia ZipCrypto / PKWARE e a senha do projeto para a derivação da chave de criptografia.
Durante a preparação da minha tese "Security Analysis of the KNXnet/IP Secure Protocol", investiguei como o ETS5 armazena as informações do projeto. Como o ETS gera e armazena chaves criptográficas e senhas que são usadas pelos dispositivos KNX IP Secure para autenticar uns aos outros, fornecer confidencialidade para comunicações multicast e proteger a configuração dos dispositivos, é importante manter essas informações em segredo. Se um invasor obtivesse acesso às informações do projeto armazenadas pelo ETS, isso comprometeria totalmente a segurança da instalação KNX.
Por esse motivo, o armazenamento de projetos do ETS5 foi inspecionado para verificar se os dados são armazenados de uma forma que garanta a confidencialidade. Os arquivos de projeto em C:\ProgramData\KNX\ETS5\ProjectStore são legíveis por qualquer conta de usuário, sem necessidade de direitos de administrador. Os seguintes indicadores foram encontrados e levantaram a suspeita de que os dados não estão devidamente criptografados:
O último ponto indicou claramente que a senha do projeto não era usada no algoritmo que modifica os valores dos atributos. Um exemplo pode ser visto abaixo, onde os códigos de autenticação de dispositivos em dois projetos P-02FB e P-0117 foram definidos com valores idênticos. As saídas ofuscadas também são as mesmas, apesar de senhas de projeto diferentes serem usadas. Como não há solicitação para inserir nada além da senha do projeto ao abrir o projeto no ETS5, isso significava que a chave tinha que estar armazenada em algum lugar ou que seria um algoritmo de ofuscação simples que não exige nenhuma chave. Parecia provável que a solução não fosse ideal para garantir a confidencialidade e potencialmente colocasse as instalações KNX em risco.
Como o ETS5 é baseado no framework .NET, o que ficou imediatamente evidente pelas DLLs utilizadas, a descompilação pôde ser facilmente realizada por meio do ILSpy. O binário havia sido ofuscado com Dotfuscator, presumivelmente para dificultar os esforços de engenharia reversa. No entanto, os nomes de classes e funções foram surpreendentemente mantidos em sua maioria intactos. Portanto, a abordagem escolhida foi procurar por classes e funções que parecessem relacionadas ao processamento dos arquivos XML, criptografia, descriptografia, ofuscação, desofuscação, chaves ou senhas. Isso levou à descoberta de Knx.Ets.ObjectModel.Import.PasswordDescrambler.Scramble e Knx.Ets.ObjectModel.Import.Encryption.EncryptString, que são chamadas nos valores ofuscados dos atributos armazenados nos arquivos XML. Nenhum material de chave era passado para as funções; elas apenas usavam valores constantes para derivar uma chave que então era utilizada para criptografar/descriptografar os atributos usando AES-256 no modo CBC. Era evidente que credenciais embutidas no código eram usadas para derivar uma chave. O Dotfuscator alterou o fluxo de controle e inseriu operações supérfluas, mas as chamadas às funções do framework .NET não puderam ser ocultadas. Assim, foi possível escrever uma especificação para a (des)ofuscação nesta fase, para uma abordagem semi-clean-room. A única parte que faltava era a string utilizada na derivação da chave, que havia sido obscurecida pelo dotfuscator. O De4dot foi escolhido para reverter a ofuscação da string, o que revelou a senha ETS5Password. O IV já era legível antes da aplicação do De4dot, pois havia sido definido como uma sequência de bytes. Por curiosidade pessoal, descobriu-se que esses bytes não eram aleatórios, mas na verdade a representação em bytes ASCII / UTF-8 da string Ivan Medvedev.
Como a falha de projeto representa um risco para as instalações KNX, o problema teve que ser relatado à KNX Association. Era necessária uma implementação de prova de conceito para garantir que o problema pudesse ser demonstrado, se solicitado. Para evitar quaisquer violações de direitos autorais, a prova de conceito foi implementada com base na especificação que havia sido anotada. Isso foi feito para evitar qualquer reutilização de código do software original. A aplicação do Dotfuscator também garantiu que o código original, e até mesmo o código não ofuscado, fosse inutilizável para uma implementação limpa, o que assegurava que mesmo uma cópia não intencional do original fosse improvável.
Para detalhes sobre a divulgação coordenada após o desenvolvimento da prova de conceito, consulte a seção Divulgação Coordenada de Vulnerabilidades.
Infelizmente, até 2021-07-18, não há uma versão corrigida do ETS disponível. Portanto, medidas adicionais fora do ETS5 são necessárias para lidar com os riscos. As subseções abaixo explicam diferentes abordagens que podem ser adotadas dependendo do modelo de ameaça que você está considerando e contra o qual tenta se proteger.
C:\ProgramData\KNX\ETS5\ProjectStore e todos os arquivos contidos nele usando o Sistema de Arquivos Criptografados (EFS) do Windows.C:\ProgramData\KNX\ETS5\ProjectStore.De acordo com Joost Demarest, CTO e CFO da KNX Association, o ETS5 não receberá nenhuma correção, pois o desenvolvimento dessa versão já foi concluído. Ele permitiu a publicação imediata do problema em 2021-07-12, abrindo mão do atraso de 90 dias oferecido para a divulgação.
Devido a um mal-entendido, o README anteriormente afirmava que a KNX Association planejava resolver o problema no ETS6. Não é esse o caso. A KNX Association esclareceu em 2021-10-25 que não planeja corrigir este problema, pois não considera responsabilidade do ETS armazenar com segurança o material de chave criptográfica quando ele não está sendo exportado.
A KNX Association entrou em contato comigo e explicou que revisou seus planos. Eles agora pretendem documentar as deficiências da versão atual do ETS e criptografar adequadamente o armazenamento de projetos em uma versão futura do ETS6.
O projeto é distribuído sob a licença MIT.
Hash do commit:
Download:
Alterações: