Инциденты

Инцидент с XZ Utils: как дошли до жизни такой

Использование социальной инженерии в атаке на цепочку поставок программного обеспечения с открытым исходным кодом

Часть 1. История с бэкдором в XZ — первоначальный анализ
Часть 2. Инцидент с XZ Utils: как дошли до жизни такой (социальная инженерия в инциденте с проектом XZ)
Часть 3. Бэкдор в XZ: анализ перехватчика

Передовые APT-группировки проводят довольно интересные кампании социальной инженерии, чтобы добраться до хорошо защищенных целей. Например, в инцидентах на Ближнем Востоке тщательно продуманные ответы прицельно выбранным жертвам на профильных форумах и последующие обсуждения ПО для моделирования подземных железнодорожных систем на сторонних ресурсах, позволили внедрить импланты Green Lambert. В инциденте с XZ Utils тоже чувствуются многолетняя подготовка и большое терпение со стороны злоумышленников. Атака была заранее спланирована, хотя и несколько неуклюже реализована.

В ходе этой недавно раскрытой кампании в XZ Utils, проект с открытым кодом с более чем десятилетней историей, постепенно вводили удаленных пользователей и определенные посылы в коммуникации с мейнтейнером Лассе Коллином (Lasse Collin), чтобы в конечном итоге внедрить вредоносный код. Сам бэкдор был добавлен в феврале и марте 2024 года, в основном пользователем по имени Цзя Чон Тан (Jia Cheong Tan, скорее всего, это вымышленное имя). Конечной целью было скрытное развертывание бэкдора, доступного исключительно атакующим, в sshd путем вмешательства в процесс сборки XZ Utils и последующего внедрения вредоносного кода, содержащего бэкдор, в популярные дистрибутивы Linux в рамках масштабной атаки на цепочки поставок.

Хотя такой целенаправленный и интерактивный подход к социальной инженерии в целом не нов, конкретный его вариант можно назвать неординарным. Особого внимания также заслуживает то обстоятельство, что вредоносный код добавлялся в процесс сборки ПО буквально у всех на виду. Из более ранних примеров подобных крупномасштабных атак на цепочку поставок с вмешательством в процесс сборки взлом XZ Utils напоминает разве что о компрометацию группой CozyDuke/DarkHalo/APT29/NOBELIUM инфраструктуры компании Solarwinds, где закрепившийся в системе имплант SUNSPOT отслеживал сборку ПО Solarwinds и внедрял вредоносный код при каждом ее выполнении. Только в нашем случае вредоносные изменения вносились в исходный код проекта вручную.

Ключевым отличием инцидента с Solarwinds от предыдущих атак на цепочку поставок был скрытый и продолжительный доступ злоумышленника к исходному коду и среде разработки. В инциденте с XZ Utils такой длительный доступ был получен посредством социальной инженерии и сохранялся благодаря действиям вымышленных личностей, происходившим у всех на виду.

Одно из лучших общедоступных хронологических описаний инцидента с XZ Utils в разрезе социальной инженерии опубликовал Расс Кокс (Russ Cox), исследователь Google. Мы настоятельно рекомендуем ознакомиться с его статьей, о которой сам Кокс пишет: «В этой публикации я проследил подробную хронологию этой атаки, которая берет начало в конце 2021 года, с точки зрения социальной инженерии».

Сингапурец, индиец и немец заходят в билд…

Летом 2022 года три личности — Цзя Тан / Цзя Чон Тан, Деннис Энс (Dennis Ens) и Джигар Кумар (Jigar Kumar) — оказывали давление на создателя и мейнтейнера XZ Utils Лассе Коллина, чтобы заставить его передать под их контроль свой проект. У этих пользователей есть аккаунты GitHub, IRC и электронной почты с похожими схемами именования, они вели переписку по электронной почте в рассылках для разработчиков проекта XZ Utils и последующих мейнтейнеров и писали программный код. Целью этих личностей было предоставить полный доступ к исходникам XZ Utils пользователю по имени Цзя Тан и незаметно внедрить в этот инструментарий вредоносный код. Личности даже переписывались друг с другом в почтовых тредах о том, что нужно заменить Лассе Колина как мейнтейнера XZ Utils на другого человека.

Обратите внимание, что все трое являются представителями максимально удаленных друг от друга регионов: житель Сингапура или Малайзии (возможно, носитель диалекта хок-кьень), европеец и индиец. Вероятно, такой выбор национальностей нужен, чтобы действия этих личностей не выглядели скоординированными. Тем не менее, в их переписке встречаются схожие опечатки и грамматические ошибки. На то, что Цзя Тан — фиктивная персона, также может косвенно указывать следующее обстоятельство: единственные общедоступные данные о его местоположении — это сингапурский выходной узел VPN, который эта личность могла использовать 29 марта для доступа к IRC-чату XZ Utils на платформе Libera.Chat. Этот выходной узел выглядит как наиболее очевидный выбор для создания вымышленной личности.

Наши данные pDNS подтверждают, что этот IP-адрес соответствует выходному узлу VPN-сервиса Witopia. Хотя мы скорее ожидали бы, что имя пользователя Цзя Тана будет содержать число и выглядеть как jiat75 или jiatan018, вполне можно предположить, что аккаунт на скриншоте выше использовался 29 марта 2024 года злоумышленником JiaT75.

Еще один пользователь, Ханс Янсен (Hans Jansen), предложил в июне 2023 года код для оптимизации производительности XZ Utils. Код был принят Коллином, однако позже им воспользовался бэкдор. Цзя Тан с радостью принял предлагаемые дополнения с использованием механизма IFUNC: Thanks for the PR and the helpful links! Overall this seems like a nice improvement to our function picking strategy for CRC64. It will likely be useful when we implement CRC32 CLMUL too 🙂 («Спасибо за предложение и полезные ссылки! Выглядит как неплохое улучшение для нашей стратегии выбора функции для CRC64. Скорее всего, оно также пригодится при реализации CRC32 для CLMUL :)»).

Этот запрос на включение (pull request) является единственным случаем взаимодействия Янсена с собственно проектом XZ Utils. В отличие от двух других личностей, аккаунт Янсена не использовался для того, чтобы вынудить Коллина передать права мейнтейнера XZ Utils другому человеку. Вместо этого Ханс Янсен временно исчез из нашей истории, чтобы девять месяцев спустя предложить крупному поставщику Linux срочно внедрить код XZ Utils, уже содержащий бэкдор, в предлагаемый этим поставщиком дистрибутив. Новое появление этой личности было связано с сообщением ошибке в Debian от 24 марта 2024 года, которое стало для Янсена поводом поставить вопрос о срочном внедрении кода с бэкдором в дистрибутив Debian.

Личность Цзя Тан и ее активность

GitHub-аккаунт Цзя Чон Тана (JiaT75), который постепенно стал сомейнтейнером XZ Utils и внедрил код бэкдора, был создан 26 января 2021 года. JiaT75 занимался не только XZ Utils. С начала 2022 года он стал автором более 500 патчей для нескольких проектов на GitHub:

  • oss-fuzz;
  • cpp-docs;
  • wasmtime;
  • xz.

Эти безобидные исправления помогли создать репутацию JiaT75 как легитимного участника сообщества разработчиков ПО с открытым исходным кодом и потенциального сомейнтейнера проекта XZ Utils. Кроме того, его вклад в создание патчей способствовал установлению доверительных отношений с Лассе Коллином.

Впервые JiaT75 предложил свой код для проекта XZ Utils 29 октября 2021 года, отправив его на рассылку xz-devel. Суть обновления была в добавлении простого файла конфигурации редактора. В следующие два года после этого безобидного дополнения JiaT75 предложил несколько сотен изменений для проекта XZ.

JiaT75 добавлял код и в выходные, и в рабочие дни. Однако интересно заметить, что вредоносные коммиты 2024 года произошли «вне графика», если сравнивать их с предыдущими коммитами. Исследователь Huntress Labs (компании, как они сами пишут о себе, основанной бывшими сотрудниками АНБ, ныне борцами с хакерами) под ником Alden опубликовал визуализацию вредоносных коммитов Цзя Тана для проекта XZ Utils. Время суток, когда JiaT75 добавлял вредоносный код 23–26 февраля, а также 8 и 9 марта 2024 года, не соответствовало его предположительным предыдущим рабочим часам.

«Неурочное» время вредоносных коммитов нельзя не заметить. Что может означать эта аномалия? Есть несколько возможных объяснений:

  • Аккаунт JiaT75 использовался другим человеком для внедрения вредоносного кода; этот человек мог быть известен или не известен изначальному владельцу аккаунта.
  • Владельцу аккаунта JiaT75 пришлось публиковать коммит кода вредоносного бэкдора в спешке.
  • Аккаунт JiaT75 использовался группой лиц, и кому-то из этой группы понадобилось работать без перерыва по нестандартному графику.

Нельзя не обратить внимание на расчетливое коварство, с которым JiaT75 внедрял обфусцированный код бэкдора в виде нескольких отдельных частей. Даже несмотря на открытый исходный код, основная часть бэкдора не отображается в дереве исходного кода XZ, и человек не может прочитать ее без специальных программных средств, поэтому сообщество, отслеживающее изменения, не распознало ее.

Лето 2022 года: призывы добавить мейнтейнера

Летом 2022 года несколько пользователей оказывали давление на Лассе Коллина, призывая его добавить еще одного мейнтейнера. Степень давления со стороны разных аккаунтов различалась, но все они так или иначе взаимодействовали с ним, пытаясь принудить к выгодным им действиям.

Имя Аккаунт GitHub Адрес электронной почты Дата создания
Цзя Тан / Цзя Чон Тан (Jia Tan / Jia Cheong Tan) JiaT75 jiat0218@gmail.com 26 января 2021 г.
Деннис Энс (Dennis Ens) dennis3ns@gmail.com
Джигар Кумар (Jigar Kumar) jigarkumar17@protonmail.com

Если началом кампании считать первое появление наших персонажей в списке рассылки xz-devel, то это будет 29 сентября 2021 года, когда Цзя Тан отправил свое предложение добавить конфигурационный файл редактора в XZ Utils. Это было спустя восемь месяцев после создания аккаунта Цзя Тана на GitHub. Дополнение было безвредным, но позволило пользователю закрепиться в качестве участника этого опенсорсного проекта.

Год спустя, весной и летом 2022 года, в шести комментариях в двух разных ветках Джигар Кумар выражал свое недовольство ведением проекта и призывал Лассе Коллина передать доступ Цзя Тану.

Ср., 27 апреля 2022 11:42:57 -0700 Re: [xz-devel] [ПАТЧ] Преобразование строки в фильтр и фильтра в строку
Your efforts are good but based on the slow release schedule it will unfortunatly be years until the community actually gets this quality of life feature.

(Вы делаете хорошее дело, но график релизов слишком медленный. К сожалению, пройдут годы, пока сообщество получит эту важную функцию).

Чт.., 28 апреля 2022 10:10:48 -0700 Re: [xz-devel] [ПАТЧ] Преобразование строки в фильтр и фильтра в строку
Patches spend years on this mailing list. 5.2.0 release was 7 years ago. There
is no reason to think anything is coming soon.

(В этой рассылке патчи висят годами. Релиз 5.2.0 был 7 лет назад. Нет оснований надеяться, что новая версия выйдет скоро).

Пт., 27 мая 2022 10:49:47 -0700 Re: [xz-devel] [ПАТЧ] Преобразование строки в фильтр и фильтра в строку
Over 1 month and no closer to being merged. Not a suprise.

(Прошло больше месяца, а мерджа все еще не произошло. Неудивительно).

Вт., 07 июня 2022 09:00:18 -0700 Re: [xz-devel] XZ для Java
Progress will not happen until there is new maintainer. XZ for C has sparse
commit log too. Dennis you are better off waiting until new maintainer happens
or fork yourself. Submitting patches here has no purpose these days. The
current maintainer lost interest or doesn’t care to maintain anymore. It is sad
to see for a repo like this.

(Проект не будет развиваться, пока не появится новый мейнтейнер. У XZ для C тоже скудный журнал коммитов. Деннис, вам лучше подождать, когда появится новый мейнтейнер, или создать форк самому. Отправлять патчи сюда сейчас не имеет смысла. Нынешний мейнтейнер потерял интерес или больше не заботится о поддержке проекта. Жалко, что это случилось с таким репозиторием).

Вт., 14 июня 2022 11:16:07 -0700 Re: [xz-devel] XZ для Java
With your current rate, I very doubt to see 5.4.0 release this year. The only
progress since april has been small changes to test code. You ignore the many
patches bit rotting away on this mailing list. Right now you choke your repo.
Why wait until 5.4.0 to change maintainer? Why delay what your repo needs?

(С нынешними темпами я очень сомневаюсь, что версия 5.4.0 выйдет в этом году. Все, что было сделано с начала апреля, — это лишь небольшие изменения в тестовом коде. Вы игнорируете многие патчи, которые давно уже ждут вашего внимания в этой рассылке. Сейчас вы просто «душите» свой репозиторий. Зачем ждать версии 5.4.0, чтобы сменить мейнтейнера? Зачем задерживать то, что нужно вашему репозиторию?)

Ср., 22 июня 2022 10:05:06 -0700 Re: [xz-devel] [ПАТЧ] Преобразование строки в фильтр и фильтра в строку
Is there any progress on this? Jia I see you have recent commits. Why can’t you
commit this yourself?

(Есть ли здесь какой-то прогресс? Цзя, я вижу, что вы недавно сделали несколько коммитов. Почему вы не можете сделать коммит сами?)

Деннис Энс создает свою собственную ветку, а затем оказывает давление на мейнтейнера Коллина, проявляя настойчивость и даже позволяя себя нападки в его адрес в одном из сообщений. Эта личность использует персональные проблемы, о которых Коллин рассказал в этой ветке. Джигар Кумар отвечает ему дважды, жалуясь на мейнтейнера: «Деннис, вам лучше подождать, когда появится новый мейнтейнер, или сделать форк самому».

Чт., 19 мая 2022 12:26:03 -0700 XZ для Java
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. I am looking for things like multithreaded
encoding / decoding and a few updates that Brett Okken had submitted
(but are still waiting for merge). Should I add these things to only
my local version, or is there a plan for these things in the future?

(XZ для Java еще поддерживается? Я задавал здесь вопрос неделю назад и до сих пор не получил ответа. Когда я смотрю журнал, я вижу, что он не обновлялся больше года. Мне нужны такие вещи, как многопоточное кодирование/декодирование и несколько обновлений, которые прислал Бретт Оккен (но они все еще ждут мерджа). Следует ли мне добавить это только в мою локальную версию или есть какой-то план на будущее относительно этих моментов?)

Вт., 21 июня 2022 13:24:47 -0700 Re: [xz-devel] XZ для Java
I am sorry about your mental health issues, but its important to be
aware of your own limits. I get that this is a hobby project for all
contributors, but the community desires more. Why not pass on
maintainership for XZ for C so you can give XZ for Java more
attention? Or pass on XZ for Java to someone else to focus on XZ for
C? Trying to maintain both means that neither are maintained well.

(Я сожалею по поводу ваших проблем с психическим здоровьем, но каждому важно понимать свои ограничения. Я понимаю, что этот проект — хобби для всех участников, но сообщество желает большего. Почему бы вам не передать права мейнтейнера для XZ для C, чтобы вы могли уделять XZ для Java больше внимания? Или передать права мейнтейнера для XZ для Java кому-то еще, чтобы сосредоточиться на XZ для C? Когда вы пытаетесь поддерживать оба проекта, они простаивают оба).

Сопоставляя все эти данные, мы не можем делать однозначные выводы. До тех пор пока не будет опубликовано больше подробностей, нам остается лишь догадываться, по какому варианту на самом деле развивались события:

  • Оказывая планомерное давление на мейнтейнера в течение трех лет, небольшая команда получила доступ к базе кода XZ Utils. Один из злоумышленников смог завоевать доверие автора проекта и стать сомейнтейнером. После этого они предприняли попытки ускорить процесс распространения вредоносного кода, эксплуатирующего sshd, за счет его внедрения в крупные дистрибутивы Linux.
  • Оказывая планомерное давление на мейнтейнера в течение трех лет, злоумышленник-одиночка получил доступ к базе кода XZ Utils. Этот человек один управлял несколькими фиктивными персонами, чтобы завоевать доверие мейнтейнера и стать сомейнтейнером проекта с открытым исходным кодом. После этого он предпринял попытки ускорить процесс распространения вредоносного кода, эксплуатирующего sshd, за счет его внедрения в крупные дистрибутивы Linux.
  • В течение короткого периода в начале 2024 года небольшая команда успешно манипулировала пользователем по имени Цзя Тан, который законно получил доступ к интересному проекту с открытым исходным кодом в качестве мейнтейнера. То, что два других пользователя (Джигар Кумар и Деннис Энс) жаловались на Коллина и просили его передать другому человеку роль мейнтейнера, могло быть простым совпадением. Пользователь, который подвергся манипуляциям, внедрял вредоносный код в проект в течение примерно двух недель.

Весна 2024 года: давление с целью импортировать код с бэкдором в Debian

В марте 2024 года несколько пользователей пытались оказывать давление на мейнтейнеров Debian с целью импортировать код XZ Utils с бэкдором в их дистрибутив.

Имя Адрес электронной почты
Hans Jansen hansjansen162@outlook.com
krygorin4545 krygorin4545@proton.me
misoeater91@tutamail.com misoeater91@tutamail.com

25 марта 2024 года Ханс Янсен создал баг-репорт в системе Debian, где поставил вопрос о включении содержащего бэкдор кода в дистрибутив: Dear mentors, I am looking for a sponsor for my package «xz-utils» («Уважаемые кураторы, я ищу спонсора для своего пакета xz-utils»).

В течение дня в ветке ответили несколько других личностей, которые использовали следующую структуру адреса электронной почты: name-number@freeservice[.]com.

Дата: Вт., 26 марта 2024 19:27:47 +0000 From: krygorin4545 <krygorin4545@proton.me>
Тема: Re: RFS: xz-utils/5.6.1-0.1 [NMU] — Утилиты сжатия для формата XZ
Also seeing this bug. Extra valgrind output causes some failed tests for me. Looks like the new version will resolve it. Would like this new version so I can continue work

(Тоже столкнулся с этой ошибкой. Из-за лишних данных, выводимых valgrind, мне не удается успешно выполнить некоторые тесты. Похоже, что решить проблему может новая версия. Мне нужна эта новая версия, чтобы продолжить работать).

Дата: Tue, 26 Mar 2024 22:50:54 +0100 (CET) From: misoeater91@tutamail.com
Тема: Re: RFS: xz-utils/5.6.1-0.1 [NMU] — Сжатие в формате XZ
I noticed this last week and almost made a valgrind bug. Glad to see it being fixed. Thanks Hans!

(Я заметил это на прошлой неделе и уже собирался написать об этом баге в valgrind. Рад видеть, что ошибка исправлена. Спасибо, Ханс!)

Участники сообщества Debian негативно отреагировали на предложение:

Дата: Tue, 26 Mar 2024 22:11:19 +0000 (UTC) From: Thorsten Glaser <tg@debian.org>
Тема: Новые версии от непонятных людей против доверенных мантейнеров
Very much *not* a fan of NMUs doing large changes such as
new upstream versions.
But this does give us the question, what’s up with the
maintenance of xz-utils? Same as with the lack of security
uploads of git, which you also maintain, are you active?
Are you well?

(Очень *не* люблю, когда разработчики, не являющиеся мейнтейнерами, вносят крупные изменения, такие как обновление основных версий.
Но это заставляет задаться вопросом: что с поддержкой xz-utils? Как и с отсутствием обновлений безопасности git, который вы тоже поддерживаете: вы еще активны? Все в порядке?)

В свою очередь, пользователь из «группы поддержки» продолжил настаивать на включении исправления в код дистрибутива:

Дата: Wed, 27 Mar 2024 12:46:32 +0000 From: krygorin4545 <krygorin4545@proton.me>
Тема: Re: Bug#1067708: Новые версии от непонятных людей против доверенных мантейнеров
Instead of having a policy debate over who is proper to do this upload, can this just be fixed? The named maintainer hasn’t done an upload in 5 years. Fedora considered this a serious bug and fixed it weeks ago (<https://bugzilla.redhat.com/show_bug.cgi?id=2267598>). Fixing a valgrind break across many apps throughout Debian is the priority here.

(Вместо того чтобы обсуждать, у кого есть на это право, может, просто внести это исправление? Мейнтейнер, о котором идет речь, не сделал ни одной загрузки за последние 5 лет. В Fedora посчитали эту ошибку серьезной и исправили ее несколько недель назад (<https://bugzilla.redhat.com/show_bug.cgi?id=2267598>). Главное — исправить ошибку в valgrind, которая воспроизводится во многих приложениях в Debian).

Что дальше?

Очевидно, что методы социальной инженерии имеют гораздо более низкие технические требования для получения полного доступа к средам разработки, чем те, которые мы наблюдали в предыдущих атаках на цепочки поставок, таких как инцидент с Solarwinds, внедрение зловреда ExPetya в ПО M.E.Doc и атака ShadowHammer на ПО ASUS. Мы анализировали эти атаки на цепочку поставок, их сложность и техники на одном из прошедших Security Analyst Summit (SAS) [презентация на английском, требуется регистрация], где представили данные в форме удобной таблицы.

К сожалению, мы ожидаем, что в ближайшие месяцы станет известно о других инцидентах, связанных с проектами с открытым исходным кодом. Организация Open Source Security Foundation (OSSF) уже выявила похожие инциденты с использованием методов социальной инженерии в других проектах открытого программного обеспечения и заявила, что случай с XZ Utils не является единичным.

Инцидент с XZ Utils: как дошли до жизни такой

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты

CloudSorcerer: новая APT-угроза, нацеленная на российские государственные организации

«Лаборатория Касперского» обнаружила новую APT-угрозу CloudSorcerer, нацеленную на российские государственные организации и использующую облачные службы в качестве командных серверов аналогично APT CloudWizard.

StripedFly: двуликий и незаметный

Разбираем фреймворк StripedFly для целевых атак, использовавший собственную версию эксплойта EternalBlue и успешно прикрывавшийся майнером.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике