
ETS5 Password Recovery Tool - это PoC для CVE-2021-36799
Вы забыли пароль от одного из ваших проектов ETS5 и не можете получить доступ к конфигурации KNX установки? Инструмент восстановления паролей ETS5 позволяет вам извлечь пароль проекта и другие секреты, сохранённые в хранилище проектов ETS5. Это возможно из-за существенного недостатка в проектировании ETS5: он использует жёстко заданные пароль и соль для шифрования информации проекта (CVE-2021-36799).
Хранение криптографических секретов в исходном коде не рекомендуется, поскольку их можно восстановить с помощью реверс-инжиниринга программного обеспечения, что обеспечивает лишь немногим большую защиту, чем хранение информации в открытом виде. Это может представлять угрозу безопасности KNX установок. Если злоумышленник получит доступ к файлам в хранилище проектов, он сможет их расшифровать, даже не зная пароля проекта. Содержащаяся в них информация позволяет подслушивать, имитировать и перенастраивать KNX устройства. Это особенно проблематично, потому что ETS5 создаёт у пользователей впечатление, будто пароль проекта используется для шифрования информации проекта, а не только для экспортированных проектов. Следовательно, многие пользователи и системные интеграторы, вероятно, не предприняли дополнительных шагов для обеспечения конфиденциальности хранилища проектов. Если бы ETS5 правильно реализовал шифрование и был выбран надёжный пароль проекта, это создало бы для злоумышленника гораздо более сложную задачу, даже если бы он получил удалённый доступ к компьютеру.
Следующая конфиденциальная информация неправильно зашифрована:
Инструмент восстановления паролей ETS5 — это proof of concept, демонстрирующий проблему путём расшифровки и отображения чувствительной информации. Он был разработан в рамках координированного раскрытия уязвимости и опубликован с разрешения KNX Association. Публикация инструмента служит следующим целям:
ПРЕДУПРЕЖДЕНИЕ: Используйте этот инструмент только в том случае, если у вас есть законное разрешение на просмотр информации проекта. Обход мер безопасности, даже неэффективных, для получения доступа к информации, к которой вам запрещено обращаться, может являться уголовным преступлением в вашей юрисдикции.
Исполняемый файл можно загрузить из раздела релизов. Он не требует установки и может быть помещён в любой каталог по вашему выбору.
Кроме того, если вы не хотите запускать непроверенный бинарник на своей системе, вы можете расшифровать отдельные атрибуты из XML-файлов проекта на сайте CyberChef.
Программное обеспечение зависит от .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 доступны для чтения каждой учётной записи пользователя, права администратора не требуются. Были найдены следующие признаки, вызвавшие подозрение, что данные неправильно зашифрованы:
Последний пункт чётко указывал, что пароль проекта не использовался в алгоритме, изменяющем значения атрибутов. Пример можно увидеть ниже, где коды аутентификации устройств в двух проектах 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-фреймворка не могли быть скрыты. Таким образом, на этом этапе стало возможным написать спецификацию (де-)обфускации для получистого подхода. Единственной отсутствующей частью была строка, используемая в выводе ключа, которая была скрыта Dotfuscator. Для деобфускации строк был выбран De4dot, который раскрыл пароль ETS5Password. IV был читаемым ещё до применения De4dot, поскольку был определён как последовательность байтов. Из личного любопытства было обнаружено, что это не случайные байты, а на самом деле ASCII/UTF-8 байтовое представление строки Ivan Medvedev.
Поскольку конструктивный недостаток представляет риск для инсталляций KNX, необходимо было сообщить о проблеме в KNX Association. Для подтверждения проблемы требовалась реализация proof of concept, чтобы при необходимости её можно было продемонстрировать. Во избежание нарушений авторских прав proof of concept был реализован на основе составленной спецификации. Это было сделано, чтобы избежать повторного использования кода из оригинального программного обеспечения. Применение Dotfuscator также гарантировало, что исходный и даже деобфусцированный код в любом случае непригодны для чистой реализации, что исключало даже случайное копирование оригинала.
Подробности о скоординированном раскрытии после разработки proof of concept см. в разделе Coordinated Vulnerability Disclosure.
К сожалению, по состоянию на 2021-07-18 исправленной версии ETS не существует. Поэтому для устранения рисков необходимы дополнительные меры за пределами ETS5. В подразделах ниже описаны различные подходы, которые можно применить в зависимости от предполагаемой модели угрозы и защиты.
C:\ProgramData\KNX\ETS5\ProjectStore и все файлы внутри него с помощью шифрованной файловой системы Windows (EFS).C:\ProgramData\KNX\ETS5\ProjectStore.По словам Йоста Демарста (Joost Demarest), технического и финансового директора KNX Association, ETS5 не получит исправлений, поскольку разработка этой версии уже завершена. Он разрешил немедленную публикацию проблемы 2021-07-12, отказавшись от предлагаемой 90-дневной задержки раскрытия.
Из-за недопонимания в README ранее утверждалось, что KNX Association планирует решить проблему в ETS6. Это не так. KNX Association разъяснил 2021-10-25, что не планирует исправлять эту проблему, поскольку не считает обязанностью ETS безопасно хранить криптографический ключевой материал, когда он не экспортируется.
KNX Association связался со мной и объяснил, что пересмотрел свои планы. Теперь они намерены задокументировать недостатки текущей версии ETS и надлежащим образом зашифровать хранилище проектов в будущей версии ETS6.
Проект распространяется под лицензией MIT.
Хэш коммита:
Скачать:
Изменения: