Использование социальной инженерии в атаке на цепочку поставок программного обеспечения с открытым исходным кодом
Передовые 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


Этот запрос на включение (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 29 октября 2021 года, отправив его на рассылку xz-devel. Суть обновления была в добавлении простого файла конфигурации редактора. В следующие два года после этого безобидного дополнения JiaT75 предложил несколько сотен изменений для проекта XZ.
JiaT75 добавлял код и в выходные, и в рабочие дни. Однако интересно заметить, что вредоносные коммиты 2024 года произошли «вне графика», если сравнивать их с предыдущими коммитами. Исследователь Huntress Labs (компании, как они сами пишут о себе, основанной бывшими сотрудниками АНБ, ныне борцами с хакерами) под ником Alden опубликовал визуализацию вредоносных коммитов Цзя Тана для проекта XZ Utils. Время суток, когда JiaT75 добавлял вредоносный код 23–26 февраля, а также 8 и 9 марта 2024 года, не соответствовало его предположительным предыдущим рабочим часам.
«Неурочное» время вредоносных коммитов нельзя не заметить. Что может означать эта аномалия? Есть несколько возможных объяснений:
- Аккаунт JiaT75 использовался другим человеком для внедрения вредоносного кода; этот человек мог быть известен или не известен изначальному владельцу аккаунта.
- Владельцу аккаунта JiaT75 пришлось публиковать коммит кода вредоносного бэкдора в спешке.
- Аккаунт JiaT75 использовался группой лиц, и кому-то из этой группы понадобилось работать без перерыва по нестандартному графику.
Лето 2022 года: призывы добавить мейнтейнера
Летом 2022 года несколько пользователей оказывали давление на Лассе Коллина, призывая его добавить еще одного мейнтейнера. Степень давления со стороны разных аккаунтов различалась, но все они так или иначе взаимодействовали с ним, пытаясь принудить к выгодным им действиям.Имя | Аккаунт GitHub | Адрес электронной почты | Дата создания |
Цзя Тан / Цзя Чон Тан (Jia Tan / Jia Cheong Tan) | JiaT75 | jiat0218@gmail.com | 26 января 2021 г. |
Деннис Энс (Dennis Ens) | — | dennis3ns@gmail.com | — |
Джигар Кумар (Jigar Kumar) | — | jigarkumar17@protonmail.com | — |
Год спустя, весной и летом 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 |
В течение дня в ветке ответили несколько других личностей, которые использовали следующую структуру адреса электронной почты: 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. Рад видеть, что ошибка исправлена. Спасибо, Ханс!) |
Дата: 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 (<2267598 – Invalid writes regression in liblzma.so>). Fixing a valgrind break across many apps throughout Debian is the priority here. | (Вместо того чтобы обсуждать, у кого есть на это право, может, просто внести это исправление? Мейнтейнер, о котором идет речь, не сделал ни одной загрузки за последние 5 лет. В Fedora посчитали эту ошибку серьезной и исправили ее несколько недель назад (<2267598 – Invalid writes regression in liblzma.so>). Главное — исправить ошибку в valgrind, которая воспроизводится во многих приложениях в Debian). |
Источник