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.
I nije ono standardno:
AI će da nas pobije.
Nuklearni rat.
Haker u mračnoj sobi lupa po tastaturi dok preko monitora leti zeleni Matrix tekst.
Mada je fascinantno koliko ljudi i dalje zamišlja cyber napade baš tako. Kao da sve mora da izgleda spektakularno da bi bilo opasno.
A onda se ispostavi da možda najopasnija stvar koja se desila internetu poslednjih godina počinje sa 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 internet preuveličavanje tipa:
“ovo menja sve”.
Ljudi koji se stvarno bave bezbednošću bili su ozbiljno uznemireni kad je cela priča izašla napolje. Upravo zato što je napad bio tih, strpljiv i jezivo dobro osmišljen.
I naravno, 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 gde sve radi kao sat.
A realnost ume da bude mnogo čudnija.
Mnogo bliža situaciji:
“Brate . . . je l’ možeš ti ovo da održavaš neko vreme? Ja stvarno više ne mogu.”
I š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 ljudi 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 preko dana radi regularan posao, a noću odgovara na GitHub issue-jeve dok jede hladnu večeru i pokušava da ne prsne psihički.
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 ona kolektivna iluzija:
“neko to već održava”.
Stallman, idealizam i trenutak kada je nastao moderni internet
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 bilo mnogo idealističnije.
Osamdesetih 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.
Kad to prepričaš danas zvuči skoro komično.
“Lik napravio filozofski pokret zbog štampača.”
Ali problem nikada nije bio samo štampač.
Više je bilo pitanje kontrole 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 stalno mešaju.
Nego slobodnog u smislu:
možeš da proučavaš, menjaš, deliš i popravljaš kod.
Posle dolazi Linus Torvalds sa Linux kernelom i stvari eksplodiraju mnogo dalje nego što je iko tada mogao da zamisli.
I zanimljivo je što je ceo moderni internet velikim delom izrastao iz kulture poverenja između ljudi koji se uglavnom nikada nisu ni upoznali.
A onda shvatiš da je možda baš poverenje 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 softverski ekvivalent vodovodnih cevi.
Ne razmišljaš o njemu dok radi.
Kad pukne . . . odjednom svi paniče.
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 . . . kad to pročitaš ovako izolovano možda ne deluje dramatično.
Ali open source ekosistem je pun upravo takvih projekata:
stvari koje koristi pola sveta, a iza njih stoji jedna iscrpljena osoba.
Realno, jedan od najvećih security problema interneta možda je maintainer koji tri meseca nije spavao kako treba i otvara issue tracker sa izrazom lica čoveka koji bi radije kopao kanale.
Jer ljudi često zamišljaju security kao:
kriptografiju,
firewalle,
zero-day exploite,
NSA prezentacije.
A mnogo ređe kao psihološko stanje čoveka koji je burnout-ovao još pre četiri godine, ali i dalje održava projekat jer zna da nema ko drugi.
Internet ume da bude veoma 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 od toga može normalno da živi.
Negde tu nastaje prostor za manipulaciju.
Ne tehničku odmah.
Nego ljudsku.
Jer kad 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 filmski način.
Više na onaj tihi način zbog kog ti bude neprijatno tek kasnije, kad premotavaš celu priču u glavi i shvatiš 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.
I iskreno, taj deo je 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 manje liči na tipičan cyber kriminal.
A sve više na neku hladnu obaveštajnu operaciju sa GitHub avatarima i anime profilnim slikama.
Na kraju je upalilo.
Trenutak kada je dobio ključeve
Mic po mic, Jia Tan dobija veće privilegije.
Sve više pristupa.
Sve više odgovornosti.
I u jednom trenutku praktično kontrolu nad release procesom.
A release proces je ovde bio ključni detalj koji prosečnom korisniku verovatno ne znači mnogo 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 najpametnijih i najjezivijih delova cele operacije.
Git repo je uglavnom izgledao čisto.
Ako površno pogledaš source kod . . . ne vidiš ništa naročito sumnjivo.
Ali release tarball koji maintainers distribucija skidaju i koriste za build?
Tu je bio payload.
I to veoma pametno izveden.
Kao da ti neko pokaže potpuno čist recept, a onda otrov sakrije tek u finalnom pakovanju proizvoda koje ide u prodaju.
A problem je što ogromna većina ljudi nikada detaljno ne proverava razliku između repo sadržaja i release arhive.
Postoji implicitno poverenje da je to praktično ista stvar.
U normalnim okolnostima . . . uglavnom i jeste.
Samo što ovo nisu bile normalne okolnosti.
Kako je backdoor zapravo radio
Ovde stvari postaju tehnički baš 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 veoma 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.
“Kakve veze biblioteka za kompresiju ima 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.
Server više nije tvoj.
Ćao.
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.
Možda 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 kad 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.
Retrogradni Merkur.
Bilo šta.
Ali neki developeri imaju gotovo bolesnu sposobnost da primete kad 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.
I to je baš neprijatna misao kad malo zastaneš i razmisliš.
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.
