Jump to content

XZ Utils: priča o backdoor-u koji je zamalo kompromitovao Linux


Postoje trenuci kada shvatiš da je ceo moderni svet zapravo zalepljen selotejpom, kafom i živcima nekoliko ljudi

koji nisu spavali kako treba još od 2017.  Ovo je priča baš o tome. 
Ovo je Veritasium video o XZ Utils backdoor-u (CVE-2024-3094) jednom od najozbiljnijih napada na Linux ikad

Ne o AI-u koji će da nas pobije, niti o nuklearnom ratu, niti o onoj holivudskoj slici hakera koji sede u mračnoj sobi i lupaju po tastaturi dok po ekranu leti zeleni Matrix tekst. Mada je zanimljivo koliko ljudi i dalje zamišlja cyber napade upravo tako, kao da svaki ozbiljan incident mora da izgleda spektakularno da bi bio opasan.

A onda se ispostavi da možda najopasnija stvar koja se desila internetu poslednjih godina počinje sa jednim prilično dosadnim Linux alatom za kompresiju fajlova i čovekom koji je samo pokušavao da održi projekat u životu.

I drugim čovekom koji je primetio da mu SSH login traje možda pola sekunde duže nego inače.

Između te dve stvari nalazi se nešto što je vrlo lako moglo da preraste u najveći supply-chain kompromis koji je moderna infrastruktura videla. I nije ono standardno preuveličavanje tipa „ovo menja sve“ koje internet voli da lepi na svaki incident. Ljudi koji se stvarno bave bezbednošću bili su ozbiljno uznemireni kada je cela priča izašla napolje, upravo zato što je napad bio tih, strpljiv i neverovatno dobro osmišljen.

I najbolji deo je što većina ljudi nikada nije ni čula za XZ Utils.

Linux: sistem koji drže ljudi koje niko ne vidi

Ljudi zamišljaju Linux kao neku ogromnu organizaciju iza koje stoje milijarde dolara, beskrajni timovi inženjera i sterilni data centri

u kojima sve funkcioniše kao sat.

A realnost ume da bude mnogo čudnija i mnogo haotičnija.

Često je bliža situaciji:
„Brate, je l’ možeš ti ovo da održavaš neko vreme? Ja stvarno više ne mogu.“

Što je najgore, nije ni netačno. Dobar deo interneta zaista funkcioniše zahvaljujući ljudima koji rade praktično nevidljiv posao. Open source danas drži skoro celu infrastrukturu modernog sveta, samo što to većina korisnika nikad ne vidi direktno. Cloud platforme, banke, hosting firme, Android telefoni, Docker, Kubernetes, CI sistemi, mrežna infrastruktura, serveri po bolnicama, pola enterprise softvera , sve to sedi na ogromnoj gomili biblioteka i alata koje često održava nekoliko ljudi.

Nekad jedan.

Nekad čovek koji ima regularan posao preko dana pa noću odgovara na GitHub issue-jeve. Nekad neko ko je pregoreo pre četiri godine ali i dalje nastavlja jer zna da nema ko drugi. I onda internet razvije veoma čudan odnos prema tim ljudima: svi zavise od njih, ali ih praktično niko ne primećuje dok nešto ne pukne.

Tek tada nastaje panika.

Do tada postoji neka kolektivna pretpostavka da će „neko već održavati to“.

Stallman, idealizam i trenutak kada je nastao moderni svet

Da bi cela priča oko XZ backdoor-a imala smisla, moraš malo da se vratiš unazad, jer internet kakav danas postoji zapravo nije nastao iz ideje da se napravi mašina za štampanje novca. To dolazi kasnije.

U početku je sve to bilo mnogo idealističnije.

Osamdesetih godina Richard Stallman sedi u MIT-u i nervira se jer Xerox štampač baguje, a kompanija odbija da podeli source code drajvera kako bi mogao da ga popravi. Kada to prepričaš danas, zvuči skoro komično, kao neka anegdota iz IT folklora.

„Lik napravio filozofski pokret zbog štampača.“

Ali problem nikada nije bio samo štampač. Više je bilo pitanje kontrole i vlasništva nad tehnologijom koju koristiš svakog dana. Ako ne možeš da vidiš kako nešto radi i nemaš pravo da to menjaš, onda zapravo zavisiš od dobre volje kompanije koja ti je to prodala.

Iz toga nastaju GNU projekat, GPL licenca i cela ideja slobodnog softvera. Ne „besplatnog“, što ljudi često mešaju, nego slobodnog u smislu da možeš da ga proučavaš, menjaš, deliš, popravljaš.

Posle dolazi Linus Torvalds sa Linux kernelom i stvari eksplodiraju mnogo dalje nego što je iko tada mogao da zamisli. I to je zanimljivo: ceo moderni internet je velikim delom izrastao iz kulture poverenja i saradnje između ljudi koji se uglavnom nikada nisu ni upoznali.

Ispostavlja se da je poverenje možda i najveća rupa u celoj priči.

XZ Utils: najdosadniji projekat na planeti

XZ Utils nije projekat koji privlači pažnju.

Nije AI startup.
Nije blockchain.
Nema konferencije sa LED ekranima i keynote prezentacijama.

To je alat za kompresiju fajlova.

Bukvalno ona vrsta softvera o kojoj ne razmišljaš osim ako ti baš zatreba. Kao vodovodne cevi ili trafostanica. Nije glamurozno, ali kada nestane ili pukne, odjednom svi shvate koliko zavise od toga.

XZ i njegova biblioteka liblzma bili su prisutni u ogromnom broju Linux distribucija i server okruženja. Godinama ih je održavao Lasse Collin, praktično sam. I sad, kada čitaš to ovako izolovano, možda ne deluje dramatično, ali open source ekosistem je pun upravo takvih projekata: stvari koje koriste milioni sistema, a iza njih stoji jedna iscrpljena osoba.

Burnout je verovatno jedan od najvećih problema open source sveta o kom niko ne priča dovoljno.

Jer ljudi često zamišljaju security kao kriptografiju, exploite i firewalle, a mnogo ređe kao psihološko stanje maintainer-a koji već mesecima otvara issue tracker sa osećajem fizičkog umora. A internet ume da bude neverovatno zahtevan prema open source developerima.

„Kad će fix?“
„Zašto ovo još nije rešeno?“
„Meni ovo hitno treba.“
„Je l’ može feature?“
„Zašto ne odgovaraš?“

I sve to često ide ka čoveku koji za taj rad nije plaćen dovoljno da bi od njega mogao normalno da živi.

Negde tu nastaje prostor za manipulaciju. Ne tehničku odmah, nego ljudsku.

Jer kada si iscrpljen dovoljno dugo, pomoć počinje da zvuči kao spas.

Jia Tan: čovek koji nije hakovao kod nego ljude

Tu priča postaje stvarno jeziva, mada ne na onaj filmski način. Više na onaj tihi način zbog kog ti kasnije bude neprijatno kada razmisliš koliko je sve delovalo normalno.

Tokom 2021. pojavljuje se nalog JiaT75, kasnije poznat kao Jia Tan.

U početku ništa alarmantno. Sitni patch-evi, korisni doprinosi, dobra komunikacija, sasvim razuman contributor. Takvih ljudi open source projekti vide stalno i uglavnom su dobrodošli jer maintaineri jedva čekaju nekoga ko može da preuzme deo posla.

Ali vremenom kreće nešto drugo.

Pritisak.

Pojavljuju se drugi nalozi koji počinju da kukaju kako projekat ide sporo, kako maintainer ne odgovara dovoljno brzo, kako treba više developera i aktivniji release ciklus. I danas postoji ozbiljna sumnja da su neki od tih naloga zapravo bili sockpuppeti — lažni identiteti korišćeni da se stvori osećaj pritiska i hitnosti.

To je deo koji je iskreno mnogo jeziviji od klasičnog hakovanja.

Nema brute force-a, nema spektakularnog probijanja zaštite. Samo neko ko godinama strpljivo glumi pouzdanog člana zajednice dok polako gura umornog maintainer-a ka tome da mu prepusti sve više kontrole.

I što duže razmišljaš o tome, sve više liči na obaveštajnu operaciju, a sve manje na tipičan cyber kriminal.

Na kraju je upalilo.

Trenutak kada je dobio ključeve

Mic po mic, Jia Tan dobija veće privilegije.

Dobijao je sve više pristupa i odgovornosti, malo po malo. U jednom trenutku i praktičnu kontrolu nad release procesom.

A release proces je ovde bio ključan detalj koji prosečnom korisniku verovatno ništa ne znači dok ne shvati implikacije.

Mnoge Linux distribucije ne uzimaju direktno Git repo kada prave pakete. Koriste release tarball — zvanično spakovano izdanje projekta.

I tu dolazi jedan od najgenijalnijih, ali i najjezivijih delova cele operacije.

Git repo je uglavnom izgledao čisto.

Ako pogledaš source kod površno, ne vidiš ništa naročito sumnjivo.

Ali release tarball koji maintainers distribucija skidaju i koriste za build? Tu je bio payload.

Što je najgore, veoma je pametno izvedeno. Kao da ti neko pokaže potpuno čist recept, a onda otrov sakrije tek u finalnom pakovanju proizvoda koje ide u prodaju. I problem je što ogromna većina ljudi nikada ne proverava detaljno razliku između repo sadržaja i release arhive jer postoji implicitno poverenje da je to praktično ista stvar.

U normalnim okolnostima to i jeste tačno.

Samo što ovo nisu bile normalne okolnosti.

Kako je backdoor zapravo radio

Ovde stvari postaju tehnički prilično lude.

I zanimljivo je što je napad bio toliko specifičan da mnogi sistemi nikada ne bi ni aktivirali payload. Nije to bio malware napravljen da divlja svuda redom. Naprotiv, ponašao se skoro paranoično oprezno.

Ciljani su konkretni sistemi:

  • x86-64 Linux

  • glibc

  • GCC buildovi

  • određeni build lanci preko dpkg/rpm

  • systemd okruženja

Ako okruženje nije odgovaralo veoma preciznim uslovima, ništa se nije dešavalo. Što je zapravo pametno ako pokušavaš da ostaneš neprimećen što duže.

Payload je bio sakriven kroz „test“ fajlove, dodatno kompresovan i maskiran tako da build skripte tokom procesa izvlače i ubacuju zlonamerni kod u liblzma. Posebno modifikovan build-to-host.m4 igrao je veliku ulogu u tome.

A onda dolazi deo zbog kog ljudima iz bezbednosti postaje jasno koliko je stvar ozbiljna. 

Backdoor nije direktno napadao OpenSSH.

Koristio je činjenicu da sshd, preko određenih systemd integracija i lanca zavisnosti, indirektno učitava liblzma.

Ako nisi navikao na Linux internals, ovo zvuči potpuno suludo:
„Kako biblioteka za kompresiju ima veze sa SSH autentifikacijom?“

I upravo je poenta bila u tome da niko ne očekuje takvu vezu.

Korišćenjem glibc IFUNC mehanizma menjani su delovi toka povezanog sa RSA autentifikacijom. A onda, pod veoma specifičnim uslovima, specijalno oblikovan payload mogao je da omogući remote code execution pre autentifikacije.

Praktično root pristup.

I gotova priča.

Server više nije tvoj.

Kad se ovakve stvari objasne previše kratko, ljudi nekad pomisle da je u pitanju „samo još jedna ranjivost“, ali ovde je zastrašujući deo bio nivo planiranja. Neko je veoma dugo razmišljao kako da ostane nevidljiv unutar infrastrukture koju koriste milioni sistema.

I sad zamisli šta je moglo da se desi

Mislim da dosta ljudi i dalje ne kapira koliko je ovo bilo blizu ozbiljne katastrofe.

Jer kompromitovane verzije jesu završile u nekim rolling i testing distribucijama, ali nisu stigle dovoljno duboko u stabilna enterprise izdanja pre nego što je sve otkriveno. Da jesu, posledice bi bile veoma ružne.

Data centri.
Cloud provajderi.
CI/CD infrastrukture.
Hosting kompanije.
VPN mreže.
Korporativni Linux serveri.
Potencijalno i državni sistemi.

I sad, naravno, nije garantovano da bi svaki od tih sistema bio kompromitovan automatski. Važno je ne skliznuti u totalni apokaliptični narativ. Ali mogućnost da postoji tih i veoma sofisticiran pristup ogromnom delu globalne infrastrukture bila je dovoljno realna da ljudi ozbiljno paniče kada su shvatili šta gledaju.

Najgori malware nije onaj koji briše diskove i pali alarme.

Najgori je onaj koji ćuti.

Koji sedi unutra i čeka.

A onda se pojavio jedan čovek kome je SSH bio spor

Ovo je deo koji bi u filmu verovatno delovao nerealno napisano.

Andres Freund primećuje da mu SSH login traje malo duže nego inače. Ne drastično. Ne ono „server umire“. Govorimo o otprilike pola sekunde.

Većina ljudi bi to ignorisala bez razmišljanja. Krivili bi mrežu, systemd, random Linux haos, bilo šta.

Ali neki developeri imaju gotovo bolesnu sposobnost da primete kada performanse „mirišu pogrešno“. Posebno ljudi koji stalno gledaju perf metrike i niske nivoe sistema.

Andres počinje da debugguje problem.

Valgrind pokazuje čudna ponašanja.
CPU usage deluje neobično.
Neke stvari jednostavno ne deluju kako bi trebalo.

I malo po malo kreće da odmotava nešto što je na početku verovatno izgledalo kao bizaran performance bug, a završilo se otkrivanjem jednog od najsuptilnijih supply-chain napada koje je open source svet video.

Dana 29. marta 2024. objavljuje upozorenje na oss-security mailing listi.

I tada internet kolektivno shvata koliko je cela stvar ozbiljna.

Postoji još jedan skoro apsurdan detalj: izgleda da je sam backdoor imao određene bugove i nuspojave koje su dodatno pomogle da bude primećen. Što znači da postoji veoma realna mogućnost da je svet imao sreće ne zato što je sistem review-a bio savršen, nego zato što je malware pravio dovoljno čudno ponašanje da privuče pažnju pravoj osobi.

To je baš neprijatna misao kada malo zastaneš i razmisliš.

Najstrašnija lekcija cele priče

Ljudi često misle da je najveći problem cyber bezbednosti nedostatak dobre enkripcije ili lozinke koje su previše slabe.

Ali priča oko XZ backdoor-a mnogo više liči na problem ljudske iscrpljenosti nego na problem matematike.

Cela moderna infrastruktura oslanja se na emocionalni i mentalni rad ljudi koji su često već odavno pregoreli.

To je verovatno najneprijatniji deo cele priče.

Ne „Linux ima rupu“, nego činjenica da kritične komponente interneta održavaju ljudi koji ponekad nemaju ni dovoljno vremena ni energije da pravilno pregledaju sve što prolazi kroz projekat. A kompanije vredne milijarde dolara na tome grade sopstveni biznis.

Amazon.
Google.
Microsoft.
Oracle.

Svi koriste ogromne količine open source softvera da pokreću infrastrukturu od koje zarađuju ozbiljan novac. I opet se često dešava da ključni maintainer nekog projekta odgovara na bug report u dva ujutru potpuno besplatno.

Nije ni čudo što sistem počinje da puca po šavovima.

„Digitalni feudalizam“ možda zvuči kao previše dramatičan izraz, ali iskreno, ponekad nije toliko daleko od realnosti.

„Ali open source ima mnogo očiju“

Postoji ta stara open source mantra:

„Given enough eyeballs, all bugs are shallow.“

I ideja iza toga nije glupa. Ako dovoljno ljudi gleda kod, veća je šansa da će neko primetiti problem.

Samo što praksa ume da izgleda mnogo manje romantično.

Niko ne sedi dobrovoljno i čita build skripte od 800 linija u opskurnom compression projektu osim ako baš mora. Ogroman deo open source ekosistema funkcioniše na implicitnom poverenju, automatizovanim pipeline-ovima i pretpostavci da neko drugi proverava stvari dovoljno detaljno.

A često ih zapravo niko ne proverava.

Ljudi vole da zamišljaju open source kao savršenu demokratiju koda, ali realnost ume da bude mnogo haotičnija:

  • maintainers koji su iscrpljeni

  • gomila zavisnosti koje niko ne razume potpuno

  • CI sistemi koji gutaju update-ove automatski

  • trust-based modeli razvoja

  • kompanije koje očekuju enterprise kvalitet za praktično nula dinara

XZ backdoor nije „razbio“ taj sistem.

Više ga je na trenutak osvetlio dovoljno jako da svi vide koliko je krhak.

Šta sada?

Posle incidenta krenuli su razgovori o svemu i svačemu:

  • reproducible builds

  • strožim review procesima

  • verifikaciji release tarballova

  • boljim funding modelima za maintainere

  • nezavisnim auditima

  • hardeningu build chaina

  • smanjivanju nepotrebnih zavisnosti

I da, verovatno će deo toga stvarno poboljšati situaciju. Open source zajednica ume veoma brzo da reaguje kada shvati da je nešto ozbiljno.

Ali iskreno, teško je oteti se utisku da problem nije samo tehnički.

Možeš da zakrpiš biblioteku.
Možeš da promeniš pipeline.
Možeš da uvedeš još provera.

Mnogo je teže rešiti činjenicu da se ogromni delovi interneta i dalje oslanjaju na ljude koji rade na ivici burnout-a jer osećaju odgovornost prema projektima koje niko drugi neće održavati.

I to nije problem koji rešava jedan git commit.

Linux nije zamalo pao zbog koda

Nego zbog poverenja.

I mislim da je baš zato cela priča toliko uznemirujuća čak i ljudima koji nisu tehnički potkovani.

Nije probijen firewall nekim magičnim exploitom iz filma.
Nije razbijena enkripcija.
Nije neko „hakovao Linux“ u klasičnom smislu.

Nego je neko godinama strpljivo postajao deo zajednice.

To je mnogo opasniji model napada nego što ljudi vole da priznaju, jer pokazuje da budućnost cyber ratovanja verovatno neće izgledati kao direktan napad na tvrđavu.

Mnogo češće će neko jednostavno godinama graditi poverenje pa tek onda uraditi nešto ovako.

Problem je što ovde napad ne dolazi spolja na očigledan način. Ulazi kroz svakodnevne procese, održavanje, update-ove i ljudske odnose. Kao vodoinstalater koji godinama uredno dolazi na posao dok jednog dana ne odluči da zavrne pogrešan ventil.

I možda je najneprijatnije to što je ovaj napad bio toliko strpljiv. Nije jurio haos odmah. Delovalo je kao nešto napravljeno da sedi tiho veoma dugo.

I možda najvažnija stvar

Da nije bilo jednog čoveka koji je rekao:

„Hm, nešto mi je spor SSH.“

…moguće je da danas ne bismo pričali o incidentu koji je sprečen, nego o jednoj od najvećih kompromitacija infrastrukture u istoriji interneta.

I to je možda najbolji podsetnik koliko je moderna tehnologija istovremeno fascinantna i jezivo krhka.

Jer ispod svih tih cloud platformi, AI sistema, aplikacija i beskrajnih buzzword-a i dalje postoje mali, dosadni, nevidljivi delovi infrastrukture koje održavaju stvarni ljudi. Umorni ljudi. Ljudi koji nekad odgovaraju na bug report dok jedu hladnu večeru ili pokušavaju da završe još jedan release posle posla.

I možda bi cela industrija trebalo malo ozbiljnije da razmisli šta znači oslanjati se na takav sistem dok se istovremeno ponaša kao da je open source beskonačan resurs koji će sam sebe održavati zauvek.

Jer kada pukne nešto ovako, ne pada samo Linux.

Pada mnogo više od toga.

1 Comment


Preporučeni Komentari

Kreiraj nalog ili se prijavi da daš komentar

Potrebno je da budeš član DiyAudio.rs-a da bi ostavio komentar

Kreiraj nalog

Prijavite se za novi nalog na DiyAudio.rs zajednici. Jednostavno je!

Registruj novi nalog

Prijavi se

Već imaš nalog? Prijavi se ovde

Prijavi se odmah
  • Članovi koji sada čitaju   0 članova

    • Nema registrovanih članova koji gledaju ovu stranicu
  • Podeli ovaj blog

    Podeli na Facebook-u ili X-u :

×
×
  • Kreiraj novo...