Първото отвличане в интернет: Един доброволец почти свали Linux

Петстотин милисекунди.

Половин секунда.

Границата, с която интернет не беше хакнат.

Март, 2024 г. San Francisco.

Тридесет и осемгодишен инженер от Microsoft на име Andres Freund прави бенчмарк на PostgreSQL в система за разработка на Debian. Това е рутинна задача. Freund е committer по проекта PostgreSQL. Той тества производителността на база данни спрямо предварителни версии на Linux дистрибуции като редовна част от работата си.

Нещо не е наред с тестовата среда.

Неуспешните опити за влизане в SSH — от типа, които постоянно удрят всеки публично достъпен сървър, автоматизирани ботове, опитващи произволни комбинации от потребителски имена и пароли — използват много повече CPU, отколкото би трябвало. Неуспешното влизане трябва да приключи бързо. Тези не приключват бързо.

Freund забелязва.

Той разследва по-нататък. Успешните влизания в SSH, на неговата собствена локална машина, отнемат петстотин милисекунди повече от базовата линия от приблизително сто милисекунди.

Половин секунда.

Freund стартира връзката под Valgrind, инструмент за отстраняване на грешки в паметта. Valgrind извежда грешки, сочещи към liblzma — компресионна библиотека, която SSH демона няма легитимна причина да извиква.

Това е моментът, когато разследването става спешно.

През следващите няколко дни Freund проследява грешките. Той открива, че процесът sshd на неговата тестова машина изпълнява код от liblzma по време на удостоверяване. Той анализира източника на xz-utils в хранилището git. Източникът е чист. Но архивът за изданието tarball — компресираният изходен архив, който Debian всъщност изтегля и изгражда — съдържа файл, наречен build-to-host.m4, който не присъства в git източника.

Този файл съдържа обфускиран скрипт. Скриптът декодира bash скрипт, скрит във тестов файл, наречен bad-3-corrupt_lzma2.xz — файл, който е маскиран като повреден тестов вход за обработката на грешки на компресионната библиотека. bash скриптът декодира втори файл, good-large_compressed.lzma, използвайки персонализирана обфускация, комбинирана с RC4 декриптиране.

Това, което излиза в края на веригата, е компилиран споделен обект.

Споделеният обект е задна врата.

Вечерта на двадесет и девети март 2024 г. — докато, по собствените му думи, слуша подкаст за сигурност по време на почивка за готвене — Andres Freund публикува своите открития в пощенския списък oss-security на Openwall.

В рамките на 24 часа Red Hat му е присвоил номер CVE. Оценката за сериозност е десет точка нула. Най-високата възможна. CISA издава спешно предупреждение. Debian, SUSE, Fedora, Arch и Kali отменят засегнатите пакети. GitHub спира акаунта на поддържащия, който е извършил промените, добавящи задната врата.

Оказа се, че задната врата е трябвало да бъде разпространена със стабилни Linux дистрибуции в рамките на приблизително две седмици.

Freund я хваща случайно.

Това е досието по случая за случилото се. За това, което почти се е случило. И за това, каква е била операцията.

Целта на атаката беше xz-utils.

xz-utils е комплект инструменти за компресиране. Неговият основен инструмент, командата xz, произвежда .xz файлове — еквивалентът на .zip файловете в Unix, с по-високи коефициенти на компресия. Под инструмента от командния ред стои библиотека, наречена liblzma, която предоставя алгоритъма за компресия на други програми, които се нуждаят от него.

liblzma се зарежда, пряко или косвено, от огромно количество системен софтуер на Linux. Мениджърите на пакети се свързват с нея. Системните помощни програми се свързват с нея. И — чрез верига, която атакуващите специално са конструирали — демона OpenSSH се свързва с нея.

Веригата протича така. В повечето основни Linux дистрибуции, sshd е пачнат, за да поддържа механизма за известяване за услуги на systemd, наречен sd_notify. Този пач кара sshd да зарежда библиотека, наречена libsystemd. И libsystemd, на свой ред, зарежда liblzma.

Резултатът: на повечето производствени Linux сървъри, SSH демонът — процесът, който приема отдалечени влизания — зарежда компресионна библиотека при стартиране, въпреки че SSH не компресира автентикационния трафик.

Компрометирайте компресионната библиотека и компрометирате демона, който контролира отдалечения достъп до всеки Linux сървър в интернет.

В момента на почти инсталирането на задната врата, Linux работеше на приблизително деветдесет и шест процента от един милион най-добри уеб сървъри в света. Всички петстотин от най-мощните суперкомпютри в света. Приблизително деветдесет и два процента от виртуалните машини в Amazon Web Services, Google Cloud и Microsoft Azure. Android, който захранва около осемдесет и пет процента от смартфоните в света, е изграден върху Linux ядрото.

Задната врата в xz-utils, ако беше достигнала до стабилните дистрибуции, щеше да присъства в значителна част от всичко изброено по-горе.

Alex Stamos, бившият главен директор по сигурността във Facebook, описа предвидения резултат с една фраза: главен ключ за всеки SSH сървър на Земята.

Ето защо CVE беше оценен с десет точка нула.

Техническият дизайн на задната врата си струва да бъде разбран прецизно.

Атакуващият експлоатира факта, че архивите tarballs за издания съдържат автоматично генерирани файлове, които не съществуват в контролирания от версии git източник. Конкретно, файлът build-to-host.m4 в tarball съдържаше един ред, който е бил променен, за да инжектира обфускиран скрипт в стъпката на конфигуриране на процеса на изграждане.

Това означаваше, че всеки, който чете изходния код на git, не може да види задната врата. Всеки, който изгражда от git, не може да я задейства. Само Linux дистрибуциите, които изграждат от публикуваните tarballs — което е практически всички от тях — биха изпълнили инжекцията.

Веригата за инжектиране беше от три етапа. Първият етап извлече bash скрипт от файл, маскиран като повреден вход за тест за компресия. Вторият етап използва този bash скрипт за декодиране на втори тестов файл в компилиран споделен обект. Третият етап свърза споделения обект с компилирания бинарен файл liblzma.

Споделеният обект използва легитимна функция на glibc, наречена IFUNC — резолвери на индиректни функции — за да поеме контрола над специфична функция на OpenSSH, наречена RSA_public_decrypt.

RSA_public_decrypt е функцията на OpenSSH, която валидира RSA подписи по време на удостоверяване на сертификат. Всеки път, когато клиент се опита да се свърже с помощта на RSA сертификат, sshd извиква тази функция, за да провери подписа.

Когато задната врата беше активна, sshd извикваше кода на атакуващия вместо оригиналния.

Кодът на атакуващия проверяваше публичния модул на RSA — голямата целочислена стойност, предадена в сертификата на клиента. Обикновено тази стойност се използва при стандартна RSA верификация. В задната врата тя всъщност беше контейнер за полезен товар. Кодът декриптира полезния товар, използвайки хардкодиран симетричен ключ ChaCha20. След това той провери подписа на декриптирания полезен товар, използвайки хардкодиран публичен ключ Ed448.

Ако подписът беше потвърден – което означава, че полезният товар е бил подписан с частния ключ на атакуващия – кодът изпълняваше вградените shell команди като root.

Това е, което изследователите по сигурността наричат "gated remote code execution" (ограничено отдалечено изпълнение на код). Задната врата се активира само когато атакуващият представи валиден криптографски подпис. Обикновен атакуващ, който случайно попадне на задната врата, не би могъл да я експлоатира. Само притежателят на частния ключ Ed448 можеше да я задейства.

Този детайл е важен. Престъпен актьор, който изгражда уязвимост за продажба, я прави използваема от всеки, който я купи. Държавен актьор, който изгражда възможност за постоянен достъп, я прави изключителна. Само те, и всеки, когото изрично упълномощят, могат да използват ключа.

Задната врата в xz-utils е проектирана за изключителна употреба. Тя не беше уязвимост. Тя беше стратегически актив.

Операцията, която произведе задната врата, започна на двадесет и шести януари 2021 г.

На тази дата беше създаден акаунт в GitHub под потребителското име JiaT75. Показаното име беше Jia Tan. Акаунтът нямаше предишен цифров отпечатък. Нямаше присъствие в социалните медии под това име. Нямаше доклади от конференции. Нямаше предишни приноси към отворен код. Нямаше появи в пробиви на данни. Името изглежда е псевдоним.

Първият публичен принос на JiaT75 към xz-utils се състоя на двадесет и девети октомври 2021 г. — девет месеца след създаването на акаунта. Това беше малък пач за конфигурационен файл на редактор. Безвреден. Незначителен. Вид принос, който установява присъствие, без да привлича внимание.

През следващите две години и пет месеца JiaT75 направи повече от петстотин commits към проекти с отворен код. По-голямата част бяха легитимни подобрения — прегледи на код, преводи, поддръжка на непрекъсната интеграция, корекции на грешки. Полезна работа. Истински полезна.

Приблизително осем от тези commits бяха злонамерени.

Съотношението е важно. Шестдесет към едно. За всеки злонамерен commit, операторът е произвел шестдесет парчета реална, полезна работа. Това направи модела невъзможен за откриване чрез статистически анализ на аномалии. Атакуващият е прекарал две години и половина на целенасочени усилия, създавайки наистина ценни приноси, единствено за да натрупа доверието, необходимо за извършване на осемте промени, които в крайна сметка имаха значение.

Операцията не работеше сама.

Започвайки през април 2022 г., потребител, наричащ себе си Jigar Kumar, се появи в пощенския списък xz-devel. Kumar нямаше история в списъка преди април 2022 г. Цялото му присъствие се състоеше от имейли с натиск до главния поддържащ проекта, оплаквайки се от бавни времена за отговор и настоявайки да бъде добавен нов поддържащ.

През май 2022 г. се появи втори акаунт — Dennis Ens — който питаше за състоянието на поддръжката на Java версията на xz-utils и последва с допълнителни съобщения за натиск.

И двата акаунта имаха един и същ профил. Няма цифрово присъствие преди 2022 г. Няма активност извън пощенския списък xz-devel. Няма участие в друг проект преди или след кампанията за натиск.

През февруари 2024 г. — седмици преди задната врата да бъде добавена — се появи трети акаунт. Hans Jansen. Ролята на Jansen беше да оказва натиск върху поддържащите на Debian да приемат компрометираната версия на xz-utils възможно най-скоро. На двадесет и пети март 2024 г. Hans Jansen подаде доклад за грешка в Debian, изрично изисквайки надстройката.

Четири дни по-късно Andres Freund публикува своите открития в oss-security.

Два допълнителни подкрепящи акаунта — krygorin4545 и misoeater91 — осигуриха фонов натиск в различни теми, следвайки същия модел. Без присъствие преди операцията. Участие само по време на конкретни периоди на натиск. Изчезване след постигане на целите.

Анализът на Kaspersky след инцидента отбеляза, че географският стил на имената на "sock-puppet" акаунтите е бил непоследователен — Singaporean, European, Indian — което предполага, че операторът умишлено е разпръснал прикриващите самоличности, за да избегне впечатлението за координация. Но поведенческият модел — времето на поява, синхронизираните точки на натиск, колективното изчезване след всяка цел — предполага един оператор или тясно координиран екип.

Натискът проработи.

На двадесет и девети юни 2022 г. главният поддържащ на xz-utils — финландски софтуерен разработчик на име Lasse Collin — отговори на пощенския списък и заяви, че Jia Tan ще има по-голяма роля в проекта занапред и на практика вече функционира като съ-поддържащ.

Това беше предаването.

За да разберем какво току-що се е случило, е необходимо да разберем каква е била позицията на Lasse Collin.

Collin поддържаше xz-utils, сам, от 2009 г. Проектът беше неплатен. Той работеше по него в свободното си време. По-рано същия месец, в отговор в пощенски списък от юни 2022 г., Collin публично призна, че се справя с дългосрочни проблеми с психичното здраве. Той определи проекта, по собствените си думи, като неплатен хоби проект.

Lasse Collin не е отговорен за случилото се. Общността по сигурността е единодушна по този въпрос. Collin извършваше неплатена хоби работа. Той се справяше с документирани здравословни проблеми. Той беше подложен на постоянен, координиран натиск от това, което се оказа разузнавателна операция на държавно ниво. Системата, която го постави в това положение, го провали. Той не провали системата.

Това, което операцията експлоатира, не беше компетентността на Collin. Беше неговата структурна позиция — сам, неплатен, справящ се с реални стресови фактори, отговорен за поддържането на инфраструктура, използвана от милиарди хора, без институционална подкрепа.

Професионалният атакуващ идентифицира тази структура и я атакува.

След като предаването приключи, започна подготовката на инфраструктурата.

През октомври 2022 г. Jia Tan беше добавен към организацията Tukaani в GitHub. През декември 2022 г. той създаде организационната структура на хранилището и направи първото си издание. През март 2023 г. той промени основния имейл за контакт по сигурността в OSS-Fuzz на Google — автоматизираната платформа за сканиране на уязвимости — от адреса на Lasse Collin на своя собствен. От този момент нататък всеки доклад за грешка, свързан със сигурността, щеше да достига до Jia Tan преди да достигне до някой друг.

През юни 2023 г. Jia Tan въведе IFUNC резолверна инфраструктура в liblzma. Commits изглеждаха като легитимна работа по оптимизация на производителността. В ретроспекция, те бяха куките, чрез които в крайна сметка щеше да бъде инжектирана задната врата.

През юли 2023 г. Jia Tan отвори pull request в OSS-Fuzz за деактивиране на IFUNC fuzzing за xz. Промяната имаше за цел да предотврати откриването на аномалии в базираната на IFUNC задна врата от конвейера за fuzz-тестване, когато тя в крайна сметка бъде разпространена.

През февруари 2024 г. отделен commit прекъсна откриването от системата за изграждане на Landlock — функция за сигурност на ядрото на Linux, която ограничава привилегиите на процесите. Commit деактивира собствения sandbox на xz на системи, които иначе биха го приложили.

На двадесет и трети февруари и девети март 2024 г. самата задна врата беше добавена в два етапа, пакетирана като част от изданията xz-utils 5.6.0 и 5.6.1.

Деветнадесет дни по-късно Andres Freund забеляза 500-милисекундно забавяне на SSH.

Изследователи, анализиращи метаданните за commits, оставени от операцията, забелязаха модел.

Времевите клейма на commits на Jia Tan се групираха предимно в часовите зони на Central European или Eastern European. Работното време съответстваше на приблизително девет сутринта до пет следобед Central European Time. Активността продължаваше по време на големи китайски официални празници и спираше по време на няколко европейски.

Името и заявената оперативна география бяха East Asian. Действителният работен модел беше European.

Това е, което анализаторите по разузнаване наричат изтичане на подпис. Един оператор е прекарал над тридесет месеца, поддържайки прикрита самоличност. Но автоматичните времеви клейма, вградени във всеки git commit, периодично разкриваха действителното местоположение на машината, която е правила commit.

Три възможни приписвания се появиха в публичен анализ от изследователи по сигурността със съответен експертен опит.

Американският изследовател по сигурността Dave Aitel, бивш компютърен учен от NSA, публично оцени, че операцията отговаря на модела, приписван на APT29 — напредналата постоянна заплаха, приписвана от правителствата на United States и United Kingdom на Russia's Foreign Intelligence Service. APT29 е известна с дълготрайни шпионски кампании, включително компрометирането на веригата за доставки SolarWinds, разкрито през 2020 г. Работното време, съобразено с часовата зона Moscow, съответства на модела на Jia Tan.

Costin Raiu — бившият директор на Global Research and Analysis Team на Kaspersky, с три десетилетия опит в приписването на сложни операции — идентифицира три правдоподобни кандидата в подкаст интервю от февруари 2026 г. APT29 на Russia беше един. APT41 на China, свързана с Ministry of State Security, беше втори. Lazarus Group на North Korea, вече представена в по-ранно покритие на Fragment Zero, беше трети.

Към април 2026 г. нито една разузнавателна служба не е приписала публично операцията. Не са повдигнати обвинения. Не са извършени арести. Истинската самоличност на Jia Tan остава неизвестна.

Това, което не подлежи на спор сред изследователите със съответен експертен опит, е, че търпението, оперативната сигурност, криптографската сложност и ангажираността с ресурси на операцията са в съответствие с разузнавателна служба на национална държава — или близък функционален еквивалент — и не са в съответствие с индивидуална престъпна или хактивистка дейност.

Това не беше работа на сам хакер.

Операцията с xz-utils стана възможна поради структурна особеност на това как съвременната технологична цивилизация изгражда своята критична инфраструктура.

Софтуерът, който управлява интернет, беше изграден, в значителна степен, от доброволци, работещи в свободното си време. Компаниите, които печелят от този софтуер, са допринесли обратно малка част от неговата икономическа стойност.

xz-utils беше включен във всяка голяма Linux дистрибуция и работеше на огромна част от глобалните сървъри. Неговият поддържащ беше неплатен. OpenSSL, библиотеката, която предоставя криптография на по-голямата част от интернет, беше печално известен с недостига на персонал преди уязвимостта Heartbleed през 2014 г. Log4j, библиотеката за логиране на Java зад уязвимостта Log4Shell през 2021 г., беше поддържана от шепа доброволци — зад корпоративната инфраструктура в световен мащаб.

Във всеки случай, библиотека, третирана като критична инфраструктура от многомилиардни компании, се поддържаше с ресурси за хоби проекти.

Операцията xz-utils не е измислила тази структурна уязвимост. Тя я е експлоатирала.

На единадесети април 2024 г. — две седмици след разкритието на Freund — U.S. Cybersecurity and Infrastructure Security Agency публикува официално изявление, признаващо структурния проблем. Позицията на CISA: тежестта по осигуряването на инфраструктурата с отворен код не може да пада върху отделни неплатени поддържащи, а компаниите, които използват софтуер с отворен код, трябва да допринасят обратно, било то финансово или чрез време на разработчици, за да създадат устойчива екосистема.

Препоръките не бяха обвързващи. Те бяха най-добри практики. Те зависеха от доброволното приемане от компании, чиято структура на стимули не е възнаграждавала исторически инвестициите.

В рамките на месец Linux Foundation и Open Source Security Foundation публикуваха съвместно предупреждение, че подобни опити за превземане чрез социално инженерство вече са в ход срещу множество други проекти с отворен код. OpenJS Foundation — която поддържа Node.js, jQuery и свързана JavaScript инфраструктура — публично разкри, че е получила координирана кампания за натиск, следваща същия модел като xz-utils, и я е отблъснала само защото разкритието за xz-utils е научило общността какво да търси.

Доклад на Linux Foundation от 2026 г. документира по-широкия модел в екосистемата. Основното откритие на доклада: случилото се с xz-utils не е единичен инцидент. Това е метод. Методът се изпробва в голям мащаб. Повечето успешни открития се случват, защото случаят с xz-utils предостави подпис, по който да се търси съвпадение.

Колко неуспешни открития има — операции, които вече са в ход и все още не са хванати — е по конструкция невъзможно да се преброи от публични източници.

Два епизода по-рано във Fragment Zero, досието по хипотезата за Dark Forest приключи с наблюдение. Доктрината, която Liu Cixin формализира през 2008 г. — мълчанието като оцеляване, прикриването като стратегическа необходимост, разкриването като екзистенциална опасност — е най-старият принцип за оперативна сигурност в историята на човешките конфликти.

Всяка сила, която някога е оперирала при условия на несигурна заплаха и асиметрични възможности, е стигнала до едно и също заключение.

Бъдете тихи. Движете се внимателно. Приемайте, че сте наблюдавани.

Операцията xz-utils е Dark Forest, изпълнена в рамките на човешки отношения на доверие.

Атакуващият не е пробил защитна стена. Атакуващият не е експлоатирал уязвимост от нулев ден. Атакуващият не е заобиколил никаква криптографска защита. Атакуващият е направил нещо много по-просто. Атакуващият се е криел на видно място в продължение на три години, произвеждайки полезна работа, изграждайки истински авторитет, държейки се точно като всеки друг полезен сътрудник, докато е подготвял — мълчаливо, търпеливо, със стратегическо търпение, невъобразимо за повечето технически организации — момента, в който подготвената инфраструктура ще бъде използвана.

Атаката успя почти изцяло, защото беше тиха. Тя не беше открита от никакъв инструмент за сигурност, от никакъв одит, от никаква институционална защита, а от случайното наблюдение на един инженер на петстотин милисекунди необяснимо закъснение.

Изявлението на Andres Freund относно собственото му откритие, публикувано в Mastodon седмици след разкритието, трябва да затвори досието.

Разчитането на късмет в бъдеще е лоша стратегия.

Задната врата в xz-utils беше хваната.

Версията на операцията Dark Forest — тази, която е насочена към отношения на доверие, а не към компютърни системи — се опитва в момента, точно сега, срещу неопределен брой други критични проекти с отворен код. Моделът работи. Икономическите стимули, които го правят да работи, не са се променили съществено. Институционалните отговори са реални, но недостатъчни.

Инженерът, който намери следващата, също ще има нужда от късмет. Те ще трябва да разглеждат правилния бенчмарк в правилното време на правилната система. Те ще трябва да се погрижат достатъчно, за да проследят аномалията до нейния източник. Те ще трябва да публикуват своите открития, преди ръководителят на операцията вече да е изпратил полезния товар до стабилни версии.

Те ще се нуждаят, по-специално, от петстотинте милисекунди.

Този интервал е това, което стоеше между интернет през март 2024 г. и единствен криптографски ключ, държан от неизвестен актьор, който би отключил всеки Linux сървър, работещ с SSH на Земята.

Fragment Zero ще проследява досието по случая.

Досието не се затваря. То чака.