
Учебная лаборатория, воспроизводящая бэкдор в XZ Utils (CVE-2024-3094) с собственной парой ключей Ed448. Включает пропатченную liblzma, systemd-сервис и клиент эксплойта для авторизованных исследований в области безопасности.
Только для образовательных целей и авторизованных исследований в области безопасности.
CVE-2024-3094 — это бэкдор, внедрённый в версии 5.6.0 и 5.6.1 XZ Utils (liblzma), обнаруженный 29 марта 2024 года исследователем безопасности Андресом Фройндом. Ему присвоена оценка CVSS 10.0 (Critical).
Это атака на цепочку поставок, осуществлявшаяся на протяжении более двух лет злоумышленником, известным как «Jia Tan» (JiaT75), который завоевал доверие в проекте, пока не получил статус со-мейнтейнера, и внёс бэкдор непосредственно в дистрибутивные tarball-архивы.
Бэкдор работает следующим образом:
liblzma.so перехватывает функцию RSA_public_decrypt() в OpenSSH через механизм IFUNC в glibc, вмешиваясь в процесс аутентификации SSH.system() с привилегиями sshd (root).Эта лабораторная среда воспроизводит механизм бэкдора с использованием собственных ключей Ed448 вместо ключей исходного злоумышленника (которые так и не были опубликованы).
В реально затронутых системах chroot не использовался. Бэкдор действовал напрямую через системный sshd, который загружал вредоносный liblzma.so как любую другую разделяемую библиотеку — совершенно незаметно для системы и её администраторов.
В этой лабораторной среде мы используем chroot исключительно из практических соображений: нам нужно запустить sshd с конкретной версией liblzma.so, не заменяя библиотеки хост-системы. Это проектное решение для исследовательской среды, а не отражение того, как бэкдор работал в продакшене.
| Компонент | Описание |
|---|---|
env_fs/ | Минимальная файловая система Ubuntu 22.04, используемая как chroot |
env_fs/usr/lib/x86_64-linux-gnu/liblzma.so.5 | liblzma 5.6.1, пропатченный собственным ключом Ed448 |
/etc/systemd/system/xzback.service | systemd-сервис, запускающий уязвимый sshd на порту 2024 |
/xzbot/xzbot | Эксплойт-клиент, скомпилированный из исходников |
Оригинальный бэкдор требует очень специфических условий, которые автоматически не выполняются в лабораторной среде. Потребовались следующие модификации:
liblzma.so.5 из исходного репозитория MagpieRYL использует неизвестный ключ Ed448, который не согласуется с включённым бинарником xzbot. Оригинальная и аутентичная liblzma.so.5.6.1 была загружена из снапшота Debian (sha256 проверен) и пропатчена с помощью patch.py из amlweems/xzbot с seed=0:
original sha256: 605861f833fc181c7cdcabd5577ddb8989bea332648a8f498b4eef89b8f85ad4
patched sha256: ea7206ab4b0c3479ff1b478c8803adc9e7aeba243254a9f601b626ef8aa80e3d
patched offset: 0x24470
Оригинальный открытый ключ Ed448 злоумышленника был заменён на:
5b 3a fe 03 87 8a 49 b2 82 32 d4 f1 a4 42 ae bd
e1 09 f8 07 ac ef 7d fd 9a 7f 65 b9 62 fe 52 d6
54 73 12 ca ce cf f0 43 37 50 8f 9d 25 29 a8 f1
66 91 69 b2 1c 32 c4 80 00
Исходный сервис использует Type=notify, что требует от sshd отправки уведомления о запуске в systemd. sshd внутри chroot не отправляет его, что приводит к тайм-аутам. Изменено на Type=simple.
sshd требует /run/sshd для разделения привилегий. Этой директории нет в chroot, и она очищается при каждой перезагрузке, поскольку run/ является tmpfs. Решено с помощью ExecStartPre, который автоматически пересоздаёт её перед каждым запуском сервиса.
./xzbot -addr 127.0.0.1:2024 -cmd 'echo pwned > /tmp/result'
cat /home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/result
./xzbot -addr <TARGET_IP>:2024 -cmd 'echo pwned > /tmp/result'
Команда выполняется внутри chroot, поэтому любой файл, созданный в /tmp/ в контексте бэкдора, сохраняется по адресу:
/home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/
То есть, если команда — echo pwned > /tmp/result, файл будет находиться по адресу:
/home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/result
Чтобы найти любой файл, созданный эксплойтом:
find /home/user/CVE-2024-3094-backdoor-env-container/env_fs/tmp/ -type f
Сообщение ssh: handshake failed: EOF — это ожидаемое и корректное поведение. Бэкдор выполняет команду и закрывает соединение, не устанавливая SSH-сессию. Оно не указывает на ошибку.
Эта лабораторная среда использует собственную криптографическую пару ключей (seed=0). Пропатченный liblzma.so принимает только полезные нагрузки, подписанные соответствующим закрытым ключом — тем самым, который использует xzbot, скомпилированный в этом окружении. Любой другой клиент получит EOF без выполнения.
Этот инструмент предоставляется только для образовательных целей и авторизованного тестирования безопасности. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, незаконно. Автор не несёт ответственности за любое неправомерное использование.