Pull to refresh

Бэкдор в xz нашли из-за замедления работы sshd в полсекунды

Reading time5 min
Views35K
Уязвимость в xz Utils была построена по схеме supply chain attack, атака на цепочку поставок. Для её реализации злоумышленнику (или их группе) пришлось два года втираться в доверие к сообществу открытого программного обеспечения, чтобы получить права мейнтейнера и внедрить нужный код. Бэкдор обнаружила не лаборатория безопасности в результате тщательного анализа, а разработчик, который заметил замедление работы компьютера.

Пакет xz Utils — набор утилит для сжатия данных для Unix-подобных операционных систем и, начиная с пятой ветки, Microsoft Windows. Разработку ведёт коллектив Tukaani Project.

Утилита известна. Одни из наиболее популярных дистрибутивов Linux — Debian и Ubuntu, Fedora, Slackware, Arch Linux — использовали или до сих пор включают в себя xz Utils.

Однако это не значит, что разработка xz Utils щедро финансируется крупными компаниями или вынуждена отбиваться от толп готовых помочь энтузиастов. Понять это легко по переписке с разработчиками.

К примеру, в мае 2022 года пользователь пожаловался на нерасторопность ответов. Некто Деннис Энс [Dennis Ens] спросил, почему никто не отвечает на его сообщения больше недели. При этом в логе Git обновлений проекта xz Java, ответвления основной xz Utils, не было уже больше года.

Is XZ for Java still maintained? I asked a question here a week ago and have not heard back. When I view the git log I can see it has not updated in over a year.

В ответ мейнтейнер признал, что у него много сообщений без ответа и что это нехорошо. Сопровождающий проект xz Utils с 2009 года Лассе Коллин [Lasse Collin] указал, что разработка в каком-то смысле этого слова идёт: если кто-то пришлёт багрепорт, то ошибку закроют. В сообщении угадывается просьба о помощи хоть в чём-нибудь. Коллин явно подавлен тем, что новых функций активно не пишут:

Yes, by some definition at least, like if someone reports a bug it will get fixed. Development of new features definitely isn't very active. :-(

В ответ переписке мейнтейнеру порекомендовали сложить с себя полномочия, обвинив его в том, что интерес к проекту он потерял. Хода проекта не будет, пока за дело не возьмётся новый мейнтейнер, резко писал некто Джигар Кумар [Jigar Kumar].

Коллин объяснял, что интерес не утратил, просто мешают проблемы с психическим здоровьем. В следующем и других сообщениях он упоминал желание назначить сомейнтейнера и упоминал некоего Цзя Тана [Jia Tan], который помогал с xz Utils вне списка рассылки. Коллин выразил надежду, что в будущем Тан возьмёт на себя более крупную роль в проекте.

На тот момент Цзя Тан уже проявил активность в xz Utils небольшим патчем. Сегодня, когда всё уже известно, даже самая ранняя сетевая активность Цзя немедленно вызывает глубокие подозрения.

Аккаунт JiaT75 зарегистрирован на GitHub в 2021 году. С самого начала этот человек вёл себя странно. В пулл-реквесте в libarchive, библиотеке C для записи потоковых архивов, он предложил поменять safe_fprintf на менее безопасный вариант fprintf. В ноябре 2021 года изменение Тана приняли и несколько лет не видели проблемы. Лишь несколько часов назад этот момент исправили.

В апреле 2022 года Цзя Тан присылает патч в xz. Первый коммит от Цзя в проект принят 10 июня — через три дня после этой перепалки, когда Лассе Коллина просили добавить ещё одного мейнтейнера.

В следующие месяцы Тан входит в доверие. Первый мёрдж коммита от Цзя происходит в январе 2023 года. В марте того же года в проекте меняется контактный адрес электронной почты с lasse.collin@tukaani.org на jiat0218@gmail.com.

Любопытно, что как Деннис Энс, так и Джигар Кумар писали только в период весны и в июне 2022 года (1, 2) и никогда больше не проявляли никакой активности. Здесь и далее во всех случаях подозрительные аккаунты имеют похожую структуру почтовых адресов: это ящики на бесплатных сервисах веб-почты, образованные от имени, фамилии и нескольких цифр.

23 июня 2023 года ещё один похожий аккаунт-однодневка hansjans162 прислал пулл-реквест с тестовой инфраструктурой бэкдора. Код заменял конструктор crc64_fast на ifunc, нужный для работы будущего эксплойта. Чтобы сильнее запутать следы, коммит от 27 июня с кодом Ханса Янсена [Hans Jansen] упоминает в качестве автора Лассе Коллина.

В июле 2023 года, в следующий после принятия кода от Янсена месяц, Цзя Тан активничал в сторонних репозиториях. В частности, он попросил у разработчиков OSS-Fuzz не проверять ifunc из-за несовместимости с -fsanitize=address, а также жаловался в проекте LLVM на предупреждения при обработке ifunc.

Контроль Цзя над проектом лишь рос. В начале февраля 2024 года в OSS-Fuzz Тан сообщил, что адрес проекта меняется с tukaani.org/xz/ на xz.tukaani.org/xz-utils/. tukaani.org указывает на сервер в Финляндии, в то время как поддомен xz адресует на GitHub Pages. В конце февраля Цзя добавил финальные штрихи бэкдора (1, 2).

Кульминация задумки случилась в этом месяце, когда аккаунты-однодневки начали кампанию по включению новой версии в дистрибутивы Linux. К примеру, называющий себя Хансом Янсеном человек был замечен в том, что просил включить xz версии 5.6.1 в Debian. Предварительно он набил свой аккаунт GitLab мусорной активностью в других подпроектах Debian (1, 2, 3, 4, 5, 6).

Аналогичную активность развивал сам Цзя Тан в Ubuntu. Как рассказывает участник проекта Fedora, Цзя просил включить новую версию, поскольку она содержит «отличные новые функции».

Бэкдор нашли 29 марта. Об уязвимости сообщил разработчик PostgreSQL из Microsoft Андрес Фройнд [Andres Freund]. Быстро составленное краткое описание объясняло суть «дыры».

Бэкдор встроен в пакеты xz или liblzma (содержит xz) версий 5.6.0 и 5.6.1. Чтобы ifunc работал, бэкдор проверяет архитектуру системы и наличие в системе библиотеки glibc. Полезная нагрузка активируется тогда, когда запущена программа с именем процесса /usr/sbin/sshd. Впрочем, не до конца исследовано, какие ещё сценарии предусмотрены в бэкдоре. Возможно, что атакующие были заинтересованы в компрометации не только SSH.

Как выявил анализ, после сверки подписи с ключом злоумышленника код из сообщения удалённо выполняется на уязвимой системе. Если подпись от ключа злоумышленника некорректна, sshd работает в обычном режиме.

Механизм внедрения в sshd полагается на патч sd_notify. Подобная связка с systemd-notify присутствует в Red Hat, Fedora, OpenSUSE и Debian для загрузки других сервисов при запуске sshd. При этом libsystemd включает в себя liblzma. В свою очередь, последний компонент содержит xz — проект открытого ПО, мейнтейнер которого, как оказалось, из-за недостатка времени и проблем со здоровьем был вынужден выдать права релиз-менеджера первому попавшемуся энтузиасту.


Веб-комикс «Зависимость», xkcd

Наиболее интересно, что весь двухлетний план злоумышленников провалился из-за плохой оптимизации бэкдора. Один из наблюдаемых эффектов — это замедление логина в SSH, если в системе присутствует бэкдор. В сообщении от 29 марта Андрес Фройнд указал, что на его старом компьютере sshd стала медленнее на полсекунды.

В комментариях на LWN.net сотрудник Microsoft объяснил детали. Фройнд занимался микробенчмаркингом и настройкой компьютера, когда обратил внимание на необычно высокую нагрузку на процессор от sshd даже в тех случаях, когда, например, пароль не подходил. Подозрения Андрес связал с прошлыми результатами автоматизированных тестов от Valgrind, поэтому провёл более детальный анализ. Как говорит Фройнд, обнаружение бэкдора — это результат череды случайных совпадений.

Сервис GitHub забанил аккаунты подозреваемых (то есть и JiaT75, и учётную запись Лассе Коллина Larhzu) и закрыл доступ к репозиториям xz, xz-java и xz-embedded. На сайте tukaani.org Лассе Коллин опубликовал и периодически обновляет отчёт о произошедшем. Уязвимости присвоен идентификатор CVE-2024-3094.

Пользователям рекомендуется понизить версию xz на 5.4.6 или 5.4.2. Бэкдор присутствует во многих дистрибутивах, включая Fedora 40 и Rawhide, установках Kali Linux с 26 по 29 марта и тестовых сборках Debian. Понятно, что FreeBSD не затронута.

Кто скрывается за именем Цзя Тан, доподлинно неизвестно. Обнаруженный по активности в IRC сингапурский IP-адрес принадлежит VPN-сервису Witopia. Само написание имени Jia Cheong Tan в разных своих частях совмещает в себе разные стандарты романизации китайских имён, поэтому это скорее всего наспех придуманный псевдоним.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 82: ↑81.5 and ↓0.5+81
Comments92

Other news