LinkPro Linux Rootkit
Nedavno kompromitiranje Amazon Web Services (AWS) okruženja otkrilo je prethodno nedokumentirani GNU/Linux rootkit, praćen kao LinkPro. Ovaj backdoor je poznat po svojoj dvostrukoj upotrebi eBPF modula: jedan set za skrivanje artefakata i drugi koji djeluje kao prikriveni okidač - 'kucanje' koje budi funkcionalnost udaljene naredbe tek nakon što se vidi posebno izrađen TCP paket. Lanac napada i mehanizmi rootkita ilustriraju sofisticiranog operatera koji kombinira zlouporabu kontejnera, prikrivanje na razini jezgre i fleksibilnu aktivaciju mreže kako bi onemogućio otkrivanje i forenzičku korelaciju.
Sadržaj
Vektor infekcije i početno raspoređivanje
Upad je započeo iskorištavanjem izložene Jenkins instance ranjive na CVE‑2024‑23897 (CVSS 9.8). S tog uporišta, napadači su u više Kubernetes klastera ubacili zlonamjernu Docker sliku (kvlnt/vv, koja je uklonjena iz Docker Huba). Slika je koristila Kali Linux bazu i sadržavala je malu mapu aplikacije namijenjenu uspostavljanju perzistencije, udaljenog pristupa i postupnog preuzimanja stražnjih vrata.
Unutar zlonamjerne Docker slike
Mapa aplikacije slike sadržavala je tri ključne datoteke s različitim ulogama:
start.sh — shell skripta koja pokreće SSH uslugu i izvršava ostale dvije komponente.
link — program otvorenog koda (vnt) kompiliran/zapakiran da djeluje kao VPN/proxy klijent, koji se povezuje prema van na vnt.wherewego[.]top:29872. To omogućuje napadaču da dođe do kompromitiranog hosta s bilo kojeg mjesta i da se kroz njega prebaci na druge ciljeve.
aplikacija — program za preuzimanje temeljen na Rustu (poznat kao vGet) koji dohvaća šifrirani vShell korisni teret iz S3 spremnika, a zatim uspostavlja WebSocket vezu sa svojim C2 (command-and-control) poslužiteljem na 56.155.98[.]37.
Dodatni korisni tereti isporučeni na Kubernetes čvorove
Uz zlonamjernu sliku, operateri su na čvorove postavili i dvije druge komponente: dropper koji instalira još jedan vShell backdoor i LinkPro, rootkit napisan u Golangu. LinkPro je dizajniran za rad u jednom od dva načina rada - pasivnom (obrnuto) ili aktivnom (naprijed) - ovisno o konfiguraciji. U pasivnom načinu rada čeka da ga aktivira poseban mrežni paket; u aktivnom načinu rada inicira kontakt sa samim C2. Način rada naprijed podržava pet transportnih protokola (HTTP, WebSocket, UDP, TCP, DNS), dok obrnuti način rada ograničava komunikaciju na HTTP.
Kako LinkPro opstaje
Ukupno izvršavanje i postojanost zlonamjernog softvera slijede jasan slijed:
- Instalirajte modul Hide eBPF. Ovaj modul uključuje programe Tracepoint i Kretprobe eBPF koji se koriste za prikrivanje LinkProovih procesa i mrežne aktivnosti.
- Ako instaliranje modula Hide eBPF ne uspije — ili ako je onemogućen — instalirajte dijeljenu biblioteku na /etc/libld.so i dodajte tu putanju u /etc/ld.so.preload kao rezervni mehanizam skrivanja.
- Za obrnuti (pasivni) rad, instalirajte Knock eBPF modul. Knock sadrži XDP program i TC program, tako da C2 kanal postaje aktivan tek nakon primanja određenog 'magičnog paketa'.
- Uspostavite perzistentnost stvaranjem systemd servisa.
- Izvrši naredbe primljene od C2.
- Prilikom gašenja ili kada se to signalizira (SIGHUP, SIGINT, SIGTERM), deinstalirajte eBPF module i uklonite/vratite modifikaciju /etc/libld.so preload kako bi se sustav vratio u prethodno stanje.
Čarobni paket i mehanizam za aktivaciju Knockom
LinkProova pasivna aktivacija ovisi o preciznom TCP paketu: svaki TCP paket čija je veličina prozora jednaka 54321 tretira se kao 'magični paket'. Kada Knock otkrije taj paket, pohranjuje izvornu IP adresu i označava je istekom od jednog sata. Naknadni TCP paketi iz tog izvora se prate i, kada je to prikladno, Knock prepisuje zaglavlja tako da se promet operatera preusmjerava na LinkProov port za slušanje (2333). Odlazni paketi se prilagođavaju kako bi se izvorni port prikazao natrag mreži (izvorni port prepisan na 2233). Namjera je jednostavna, ali učinkovita: omogućiti napadaču da dođe do LinkProa putem bilo kojeg porta koji dopušta prednji vatrozid, a istovremeno otežati povezivanje vanjskih zapisnika vatrozida s internom mrežnom aktivnošću hosta.
Kako se LinkPro skriva
LinkPro koristi dvoslojnu strategiju skrivanja:
Skrivanje kernela/eBPF-a : Modul Hide eBPF instalira programe Tracepoint i Kretprobe koji presreću sistemske pozive kao što su getdents (za skrivanje datoteka/direktorija) i sys_bpf (za skrivanje vlastitih BPF programa). Ovaj pristup zahtijeva kernel izgrađen s omogućenom opcijom CONFIG_BPF_KPROBE_OVERRIDE.
Rezervni način rada LD_PRELOAD u korisničkom prostoru : Ako nema mogućnosti kernela, LinkPro piše dijeljenu biblioteku (libld.so) i smješta njezinu putanju u /etc/ld.so.preload. Budući da /etc/ld.so.preload uzrokuje učitavanje navedene biblioteke u svaki dinamički povezani proces (one koji koriste /lib/ld-linux.so i glibc), implantirani libld.so rano hvata libc funkcije (prije samog ponašanja glibc-a) i mijenja povratne vrijednosti iz libc poziva kako bi sakrio artefakte koji bi inače otkrili njegovu prisutnost.
Mogućnosti rootkita i skup naredbi
LinkPro podržava i interaktivne i automatizirane udaljene radnje. Njegove implementirane značajke uključuju:
- Pokretanje pseudo-terminala /bin/bash i pokretanje interaktivnih sesija ljuske.
- Izvršavanje proizvoljnih shell naredbi.
- Nabrajanje datoteka i direktorija te izvođenje operacija s datotekama.
- Preuzimanje i zapisivanje datoteka na disk.
- Uspostavljanje SOCKS5 proxy tunela za pivoting i living-off-the-land proxying.
Podrška mrežnog protokola i ponašanje C2
U aktivnom (naprijed) načinu rada, LinkPro je fleksibilan: može komunicirati putem HTTP, WebSocket, UDP, TCP ili DNS transporta. U pasivnom (obrnutom) načinu rada njegova je komunikacija ograničena na HTTP, ali ima koristi od prikrivenosti jer sluša tek nakon što je Knock magic paket otvorio privremeni jednosatni naredbeni prozor.
Ponašanje prilikom čišćenja i deinstalacije
Ako proces primi signale za prekid, LinkPro nastoji ukloniti tragove: deinstalira instalirane eBPF module i briše ili vraća /etc/libld, grupirajući ga u prethodno stanje tako da sustav izgleda nepromijenjen. Ova namjerna rutina čišćenja ukazuje na operatera koji je zabrinut zbog izbjegavanja i minimiziranja dugoročnih forenzičkih tragova.
Operativni kontekst i atribucija
Kampanja je koristila Jenkinsov exploit visoke ozbiljnosti, slike zlonamjernih spremnika, više varijanti stražnjih vrata i prikrivenost na razini kernela - kombinaciju koja ukazuje na motiviranog i sposobnog operatera. Definitivna atribucija nije javno objavljena; međutim, skup alata i očita upotreba kompromitiranog sustava za proxying i trajni udaljeni pristup snažno sugeriraju financijski motiviranu aktivnost (okretanje, proxying za dodatne upade ili preprodaja pristupa).
Ovisnost o kernelu i ponašanje u slučaju nužde
Budući da se LinkPro oslanja na značajke nadjačavanja BPF kprobe za svoje prikriveno presretanje u kernelu, primjenjuje tehniku skrivanja na razini kernela samo kada kernel domaćina izlaže CONFIG_BPF_KPROBE_OVERRIDE. Tamo gdje ta mogućnost kernela nedostaje, LinkPro se namjerno vraća metodi dijeljene biblioteke LD_PRELOAD kako bi se sakrio u korisničkom prostoru, osiguravajući skrivenost u širokom rasponu okruženja.
Završna napomena
LinkPro pokazuje kako moderni upadi mogu kombinirati kompromitiranje kontejnera, postupne učitavače, instrumentaciju kernela (eBPF) i pametne mrežne trikove (aktivacija magičnih paketa i prepisivanje portova) kako bi se održala prikrivenost i fleksibilnost. Otkrivanje i sanacija zahtijevaju pažljivu inspekciju neovlaštenih eBPF programa, neočekivanih unosa u /etc/ld.so.preload, neobičnih systemd usluga i mrežnih veza s naznačenom infrastrukturom (forenzički indikatori uključuju IP 56.155.98[.]37, portove 29872, 2333, 2233 i uklonjeni naziv Docker slike kvlnt/vv).