Nedavno smo imali priliku vidjeti jedan od najzanimljivijih napada u svijetu računalne sigurnosti, a taj napad nije bio nimalo bezazlen. Priča počinje kad programer iz Microsofta primijeti nešto čudno s jednim od popularnih Unix paketa. Ispostavilo se da je napad usmjeren na SSH naredbu kroz kompromitaciju alata poznatog kao "XZ Utils".
Ovaj incident brzo je postao glavna tema razgovora unutar zajednice otvorenog koda. Unatoč šoku, napad je na sreću otkriven na vrijeme, ali gotovo slučajno. To nas ostavlja s puno pitanja. Koliko smo daleko od toga da neki napadi prođu potpuno neopaženo? Kako se možemo bolje braniti od ovakvih i sličnih prijetnji u budućnosti?
O meti
XZ Utils predstavlja skup alata dizajniranih za kompresiju i dekompresiju podataka bez gubitaka, među kojima se ističu "xz" i "liblzma" kao najpoznatiji alati unutar ovog paketa. Ova kolekcija alata bila je idealna meta za napadače zbog nekoliko ključnih faktora: projekt je bio otvorenog koda, imao je široku primjenu u različitim okruženjima i razvijan je od strane tima programera koji su tijekom godina postali preopterećeni održavanjem.
Kada govorimo o otvorenom kodu, mislimo na to da je izvorni kod aplikacije javno dostupan, obično putem repozitorija poput GitHuba. Ova dostupnost omogućava bilo kome da pregleda, klonira, mijenja i distribuira kod, sve u skladu s određenom softverskom licencom koja regulira te aktivnosti. Međutim, unatoč otvorenosti, pravila licence osiguravaju da se promjene ne mogu jednostavno implementirati bez odobrenja originalnih autora.
Ova otvorenost i potreba za kontinuiranim održavanjem stvara potencijalne sigurnosne rizike, posebice ako programeri nemaju dovoljno resursa, vremena ili vanjske podrške. Upravo takva situacija postavila je XZ Utils kao savršenu metu za napad, koji će kasnije istaknuti potrebu za boljim mehanizmima sigurnosti i održavanja unutar projekata otvorenog koda.
Otkrivanje napada
Andres Freund, programer zaposlen u Microsoftu koji je proveo istraživanje nad PostgreSQL bazom podataka, uočio je neobično ponašanje u radu sshd (SSH daemon) procesa. SSH daemon je proces zadužen za osluškivanje prometa na određenom portu, obično portu 22, omogućavajući na taj način sigurnu udaljenu komunikaciju između dva računala preko otvorene mreže. Secure Shell (SSH) predstavlja protokol namijenjen sigurnoj udaljenoj komunikaciji i prijenosu podataka, dok je sshd server koji se izvodi na udaljenom računalu, omogućujući pristup istom.
Prema Freundovim riječima, otkriće napada bilo je rezultat čiste sreće. Tijekom provođenja usporedbe performansi, primijetio je da sshd proces konzumira značajnu količinu procesorskih ciklusa, što je odudaralo od očekivanog ponašanja. Naknadna detaljnija analiza ukazala je na to da je većina procesorskog vremena bila usmjerena prema "liblzma" paketu, što je Freundu dalo dodatni poticaj za daljnje istraživanje situacije.
Cilj napada
Iako je glavna meta napada bila SSH naredba, strategija napadača uključivala je napad na jedan od alata od kojih SSH ovisi, poznat kao zavisnost. Specifično, liblzma, ključna komponenta potrebna SSH alatu, kompromitirana je ugradnjom skrivenog ulaza (backdoor) koji je bio poznat samo napadaču i njegovim suradnicima. Ovaj skriveni ulaz im je omogućio dobivanje značajnih privilegija na brojnim serverima.
Napadač je postao aktivni sudionik u razvoju XZ Utils projekta od 2021. godine, gdje je metodično radio na kreiranju sveobuhvatnog plana napada. Ovaj napad odlikuje se visokom razinom sofisticiranosti, jer je skriveni ulaz pozicioniran na mjestima koja standardni alati za detekciju malvera obično ne provjeravaju. Maliciozni kod bio je podijeljen na više segmenata i distribuiran kroz različite dijelove koda, a kako bi se otežalo otkrivanje, dodani su i nebitni podaci. Dodatno, skriveni ulaz bio je konfiguriran tako da se aktivira samo ako se liblzma kompajlira za amd64 arhitekturu na Debian operacijskom sustavu.
Takav skriveni ulaz bi omogućio pristup većini sistema koji koriste Debian i Red Hat operacijske sustave putem maliciozne naredbe koja bi morala biti autorizirana napadačevim ključem. Ovo bi napadaču, a ne nikome drugom, dalo ekskluzivan pristup svim ranjivim serverima, osim u slučaju da bi se odlučio podijeliti malicioznu naredbu s drugima. Važno je naglasiti da napadač, jednom kada izvede uspješan napad, može izvršavati bilo koju naredbu s najvišim privilegijama, što mu omogućava krađu podataka sa servera ili čak instalaciju dodatnog malvera, čime postaje još veća prijetnja.
Zaštita
Ranjive verzije xz paketa su 5.6.0 i 5.6.1 te ukoliko želite provjeriti da li je vaš sustav ranjiv na ovaj napad, dobro je provjeriti verziju xz naredbe:
strings `which xz` | grep '5\.6\.[01]'
Ukoliko nemate izlazni tekst, to znači da ranjiva verzija paketa nije nađena na putanji s alatima na vašem sustavu.
Korisno je provjeriti verziju liblzma biblioteke:
lsof -p $(ps -aux | grep 'sshd' | grep 'listener' | awk '{print $2}') | grep '\.so' | grep 'liblzma'
Ukoliko u ispisu možete vidjeti ranjivu verziju paketa, bilo bi dobro napraviti ažuriranje sshd paketa.
Pojavila su se i druga rješenja od strane zajednice te na sljedećoj stranici možete provjeriti da li je neka od biblioteka koju koristite ranjiva na ovaj napad.
Loše namjere kombinirane sa široko korištenim paketom bile su recept za pravu katastrofu. Srećom, izbjegli smo ju u zadnji čas, ali to će sigurno potaknuti mnoge programere i sigurnosne stručnjake na razmišljanje. Sa sve složenijim sustavima danas, rijetko tko zna sve što se događa unutar paketa koje ne održava, a ipak moramo vjerovati određenim paketima da ne bismo izmišljali toplu vodu iznova. Teško je pronaći pravu ravnotežu između sigurnosti i efikasnosti, ali moramo se truditi pronaći prikladna rješenja kako bismo, iako ne možemo u potpunosti izbjeći ovakve situacije, barem otežali njihovo ponavljanje u budućnosti.
#RačunalnaSigurnost #XZUtilsNapad #SSHVulnerability #OpenSourceSigurnost #KompromitiraniPaketi #CyberSecurityAwareness #SigurnosniPropust #MalwareOtkrivanje #ProgramerskaZajednica #SigurnosnaAzuriranja
Literatura
Technica, D.G., Ars (2024). _The XZ Backdoor: Everything You Need to Know_. [online] Wired. Available at: https://www.wired.com/story/xz-backdoor-everything-you-need-to-know/.
www.openwall.com. (2024). _oss-security - backdoor in upstream xz/liblzma leading to ssh server compromise_. [online] Available at: https://www.openwall.com/lists/oss-security/2024/03/29/4.
Goodin, D. (2024). _What we know about the xz Utils backdoor that almost infected the world_. [online] Ars Technica. Available at: https://arstechnica.com/security/2024/04/what-we-know-about-the-xz-utils-backdoor-that-almost-infected-the-world/.
Banach, Z. (2024). _The Xz-Utils Backdoor: The Supply Chain RCE That Got Caught_. [online] Invicti. Available at: https://www.invicti.com/blog/web-security/xz-utils-backdoor-supply-chain-rce-that-got-caught/ [Accessed 11 Apr. 2024].