Rootkit-ul LinkPro Linux

O compromitere recentă a unui mediu Amazon Web Services (AWS) a dezvăluit un rootkit GNU/Linux nedocumentat anterior, identificat ca LinkPro. Acest backdoor este remarcabil pentru utilizarea duală a modulelor eBPF: unul setat pentru ascunderea artefactelor și altul care acționează ca un declanșator ascuns - o „bătaie” care activează funcționalitatea comenzii de la distanță numai după ce este văzut un pachet TCP special conceput. Lanțul de atac și mecanismele rootkit-ului ilustrează un operator sofisticat care combină abuzul de containere, ascunderea la nivel de kernel și activarea flexibilă a rețelei pentru a frustra detectarea și corelarea criminalistică.

Vector de infecție și implementare inițială

Intruziunea a început cu exploatarea unei instanțe Jenkins expuse, vulnerabile la CVE-2024-23897 (CVSS 9.8). Pornind de acolo, atacatorii au introdus o imagine Docker malițioasă (kvlnt/vv, eliminată ulterior din Docker Hub) în mai multe clustere Kubernetes. Imaginea folosea o bază Kali Linux și conținea un mic folder de aplicație menit să stabilească persistența, accesul la distanță și o descărcare backdoor etapizată.

În interiorul imaginii Malicious Docker

Folderul aplicației din imagine conținea trei fișiere cheie cu roluri distincte:

start.sh — un script shell care lansează un serviciu SSH și execută celelalte două componente.

link — un program open-source (vnt) compilat/împachetat pentru a acționa ca un client VPN/proxy, conectându-se în exterior la vnt.wherewego[.]top:29872. Acest lucru permite atacatorului să ajungă la gazda compromisă de oriunde și să se orienteze către alte ținte prin intermediul acesteia.

aplicație — un program de descărcare bazat pe Rust (denumit vGet) care preia o utilă vShell criptată dintr-un bucket S3, apoi stabilește o legătură WebSocket către serverul său de comandă și control (C2) la adresa 56.155.98[.]37.

Sarcini suplimentare livrate către nodurile Kubernetes

Pe lângă imaginea malițioasă, operatorii au instalat și alte două componente pe noduri: un dropper care instalează un alt backdoor vShell și LinkPro, un rootkit scris de Golang. LinkPro este conceput să ruleze într-unul din două moduri - pasiv (invers) sau activ (forward) - în funcție de configurația sa. În modul pasiv, așteaptă să fie activat de un pachet special de rețea; în modul activ, inițiază contactul cu C2-ul însuși. Modul forward acceptă cinci protocoale de transport (HTTP, WebSocket, UDP, TCP, DNS), în timp ce modul invers limitează comunicațiile la HTTP.

Cum persistă LinkPro

Execuția generală și comportamentul de persistență al malware-ului urmează o secvență clară:

  • Instalați modulul Hide eBPF. Acest modul include programele Tracepoint și Kretprobe eBPF utilizate pentru a ascunde procesele și activitatea de rețea LinkPro.
  • Dacă instalarea modulului Hide eBPF eșuează — sau dacă a fost dezactivat — instalați o bibliotecă partajată la /etc/libld.so și adăugați acea cale la /etc/ld.so.preload ca mecanism de ascundere de rezervă.
  • Pentru operare inversă (pasivă), instalați modulul Knock eBPF. Knock conține un program XDP și un program TC, astfel încât canalul C2 devine activ doar după primirea unui anumit „pachet magic”.
  • Stabiliți persistența prin crearea unui serviciu systemd.
  • Execută comenzile primite de la C2.
  • La oprire sau când este semnalizat (SIGHUP, SIGINT, SIGTERM), dezinstalați modulele eBPF și eliminați/restaurați modificarea preîncărcată /etc/libld.so astfel încât sistemul să revină la starea anterioară.

Pachetul magic și mecanismul de activare a loviturii

Activarea pasivă a LinkPro depinde de un pachet TCP precis: orice pachet TCP a cărui dimensiune a ferestrei este egală cu 54321 este tratat ca „pachet magic”. Când Knock detectează acel pachet, stochează adresa IP sursă și îl etichetează cu o expirare de o oră. Pachetele TCP ulterioare de la acea sursă sunt monitorizate și, atunci când este cazul, Knock rescrie anteturile astfel încât traficul operatorului să fie redirecționat către portul de ascultare al LinkPro (2333). Pachetele de ieșire sunt ajustate pentru a prezenta portul original înapoi rețelei (portul sursă rescris la 2233). Intenția este simplă, dar eficientă: permite atacatorului să ajungă la LinkPro prin orice port permis de firewall-ul front-end, îngreunând în același timp corelarea jurnalelor firewall-ului extern cu activitatea rețelei interne a gazdei.

Cum se ascunde LinkPro

LinkPro folosește o strategie de ascundere pe două niveluri:

Ascundere kernel/eBPF : Modulul „Ascundere eBPF” instalează programe Tracepoint și Kretprobe care interceptează apeluri de sistem precum getdents (pentru a ascunde fișiere/directoare) și sys_bpf (pentru a ascunde propriile programe BPF). Această abordare necesită un kernel construit cu CONFIG_BPF_KPROBE_OVERRIDE activat.

Rezervă LD_PRELOAD în spațiul utilizatorului : Dacă funcționalitatea kernelului nu este prezentă, LinkPro scrie o bibliotecă partajată (libld.so) și plasează calea sa în /etc/ld.so.preload. Deoarece /etc/ld.so.preload face ca biblioteca specificată să fie încărcată în fiecare proces legat dinamic (cele care utilizează /lib/ld-linux.so și glibc), libld.so implantat conectează funcțiile libc devreme (înainte de propriul comportament al glibc) și modifică returnările apelurilor libc pentru a ascunde artefactele care altfel i-ar expune prezența.

Capacități și seturi de comenzi ale rootkit-ului

LinkPro acceptă atât acțiuni interactive, cât și automate la distanță. Caracteristicile sale implementate includ:

  • Pornirea unui pseudo-terminal /bin/bash și rularea sesiunilor interactive de shell.
  • Executarea comenzilor arbitrare din shell.
  • Enumerarea fișierelor și directoarelor și efectuarea operațiunilor asupra fișierelor.
  • Descărcarea și scrierea fișierelor pe disc.
  • Stabilirea unui tunel proxy SOCKS5 pentru pivotare și proxy-ul pentru viața în afara mediului.

Suport pentru protocolul de rețea și comportamentul C2

În modul activ (direct), LinkPro este flexibil: poate comunica folosind transporturi HTTP, WebSocket, UDP, TCP sau DNS. În modul pasiv (revers), comunicarea sa este restricționată la HTTP, dar beneficiază de stealth, deoarece ascultă doar după ce pachetul magic Knock a deschis o fereastră de comandă temporară de o oră.

Comportamentul de curățare și dezinstalare

Dacă procesul primește semnale de terminare, LinkPro își propune să elimine urmele: dezinstalează modulele eBPF instalate și șterge sau restaurează fișierul /etc/libld, readucându-l la starea anterioară, astfel încât sistemul să pară neschimbat. Această rutină de curățare deliberată indică un operator preocupat de evitarea erorilor și de minimizarea amprentelor criminalistice pe termen lung.

Context operațional și atribuire

Campania a folosit o vulnerabilitate Jenkins de înaltă severitate, imagini de containere malițioase, variante multiple de backdoor și stealth la nivel de kernel - o combinație care indică un operator motivat și capabil. Nu a fost făcută publică nicio atribuire definitivă; cu toate acestea, setul de instrumente și utilizarea aparentă a compromisului pentru proxying și acces persistent la distanță sugerează puternic o activitate motivată financiar (pivoting, proxying pentru intruziuni suplimentare sau revânzarea accesului).

Dependența de kernel și comportamentul de rezervă

Deoarece LinkPro se bazează pe funcțiile de suprascriere kprobe ale BPF pentru interceptarea ascunsă a kernelului, acesta aplică tehnica de ascundere la nivel de kernel doar atunci când kernelul gazdă expune CONFIG_BPF_KPROBE_OVERRIDE. În cazul în care această capacitate a kernelului lipsește, LinkPro apelează în mod deliberat la metoda bibliotecii partajate LD_PRELOAD pentru a se ascunde în spațiul utilizatorului, asigurând ascunderea într-o gamă largă de medii.

Notă de încheiere

LinkPro demonstrează cum intruziunile moderne pot combina compromiterea containerelor, încărcătoare în etape, instrumentația kernelului (eBPF) și trucuri inteligente de rețea (activarea magică a pachetelor și rescrierea porturilor) pentru a menține discreția și flexibilitatea. Detectarea și remedierea necesită o inspecție atentă pentru programele eBPF neautorizate, intrările neașteptate în /etc/ld.so.preload, serviciile systemd neobișnuite și conexiunile de rețea la infrastructura indicată (indicatorii forensici includ adresa IP 56.155.98[.]37, porturile 29872, 2333, 2233 și numele de imagine Docker eliminat kvlnt/vv).

Trending

Cele mai văzute

Se încarcă...