LinkPro Linux Rootkit
En nyligen genomförd intrång i en Amazon Web Services (AWS)-miljö avslöjade ett tidigare odokumenterat GNU/Linux-rootkit, spårat som LinkPro. Denna bakdörr är känd för sin dubbla användning av eBPF-moduler: en uppsättning för att dölja artefakter och en annan som fungerar som en smygande utlösare – en "knackning" som väcker fjärrkommandofunktionalitet först efter att ett specialutformat TCP-paket har setts. Attackkedjan och rootkits mekanismer illustrerar en sofistikerad operatör som kombinerar containermissbruk, döljning på kärnnivå och flexibel nätverksaktivering för att omintetgöra upptäckt och forensisk korrelation.
Innehållsförteckning
Infektionsvektor och initial implementering
Intrånget började med utnyttjandet av en exponerad Jenkins-instans som var sårbar för CVE-2024-23897 (CVSS 9.8). Från det fotfästet skickade angriparna in en skadlig Docker-avbildning (kvlnt/vv, numera borttagen från Docker Hub) i flera Kubernetes-kluster. Avbildningen använde en Kali Linux-bas och innehöll en liten programmapp avsedd att etablera persistens, fjärråtkomst och en stegvis bakdörrsnedladdning.
Inuti den skadliga Docker-bilden
Bildens appmapp innehöll tre nyckelfiler med olika roller:
start.sh — ett skalskript som startar en SSH-tjänst och kör de andra två komponenterna.
länk — ett program med öppen källkod (vnt) kompilerat/paketerat för att fungera som en VPN/proxyklient, som ansluter utgående till vnt.wherewego[.]top:29872. Detta låter angriparen nå den komprometterade värden var som helst och rikta sig mot andra mål genom den.
app — en Rust-baserad nedladdare (kallad vGet) som hämtar en krypterad vShell-nyttolast från en S3-bucket och sedan upprättar en WebSocket-länk till sin kommando-och-kontrollserver (C2) på 56.155.98[.]37.
Ytterligare nyttolaster levererade till Kubernetes-noder
Vid sidan av den skadliga bilden placerade operatörerna även två andra komponenter på noderna: en dropper som installerar ytterligare en vShell-bakdörr, och LinkPro, ett Golang-skrivet rootkit. LinkPro är utformat för att köras i ett av två lägen – passivt (bakåt) eller aktivt (framåt) – beroende på dess konfiguration. I passivt läge väntar det på att aktiveras av ett speciellt nätverkspaket; i aktivt läge initierar det kontakt med själva C2:an. Framåtläget stöder fem transportprotokoll (HTTP, WebSocket, UDP, TCP, DNS), medan omvänt läge begränsar kommunikationen till HTTP.
Hur LinkPro fortsätter
Den skadliga programvarans övergripande exekvering och ihållande beteende följer en tydlig sekvens:
- Installera modulen Hide eBPF. Den här modulen innehåller program som Tracepoint och Kretprobe eBPF och används för att dölja LinkPros processer och nätverksaktivitet.
- Om installationen av modulen Hide eBPF misslyckas – eller om den har inaktiverats – installera ett delat bibliotek på /etc/libld.so och lägg till sökvägen till /etc/ld.so.preload som en reservmekanism för att dölja biblioteket.
- För omvänd (passiv) drift, installera Knock eBPF-modulen. Knock innehåller ett XDP-program och ett TC-program, så C2-kanalen blir endast aktiv efter att ha mottagit ett specifikt "magiskt paket".
- Etablera persistens genom att skapa en systemd-tjänst.
- Utför kommandon mottagna från C2.
- Vid avstängning eller när signal ges (SIGHUP, SIGINT, SIGTERM), avinstallera eBPF-modulerna och ta bort/återställ den förinstallerade modifieringen /etc/libld.so så att systemet återgår till sitt tidigare tillstånd.
Det magiska paketet och knackningsaktiveringsmekanismen
LinkPros passiva aktivering är beroende av ett exakt TCP-paket: alla TCP-paket vars fönsterstorlek är lika med 54321 behandlas som det "magiska paketet". När Knock upptäcker det paketet lagrar det käll-IP:n och märker det med en timmes utgångsdatum. Efterföljande TCP-paket från den källan övervakas och, när det är lämpligt, skriver Knock om rubrikerna så att operatörens trafik omdirigeras till LinkPros lyssningsport (2333). Utgående paket justeras för att presentera den ursprungliga porten tillbaka till nätverket (källporten skrivs om till 2233). Avsikten är enkel men effektiv: tillåta angriparen att nå LinkPro via vilken port som helst som frontend-brandväggen tillåter, samtidigt som det blir svårt att korrelera externa brandväggsloggar med värdens interna nätverksaktivitet.
Hur LinkPro döljer sig själv
LinkPro använder en tvåstegsstrategi för döljning:
Kärna/eBPF-döljning : Modulen Hide eBPF installerar Tracepoint- och Kretprobe-program som avlyssnar systemanrop som getdents (för att dölja filer/kataloger) och sys_bpf (för att dölja sina egna BPF-program). Denna metod kräver en kärna byggd med CONFIG_BPF_KPROBE_OVERRIDE aktiverat.
Användarutrymmes LD_PRELOAD reservfunktion : Om kärnkapaciteten inte finns, skriver LinkPro ett delat bibliotek (libld.so) och placerar dess sökväg i /etc/ld.so.preload. Eftersom /etc/ld.so.preload gör att det angivna biblioteket laddas in i varje dynamiskt länkad process (de som använder /lib/ld-linux.so och glibc), kopplar den implanterade libld.so libc-funktioner tidigt (före glibc:s eget beteende) och ändrar returer från libc-anrop för att dölja artefakter som annars skulle avslöja dess närvaro.
Rootkit-funktioner och kommandouppsättning
LinkPro stöder både interaktiva och automatiserade fjärråtgärder. Dess implementerade funktioner inkluderar:
- Starta en /bin/bash pseudoterminal och köra interaktiva skalsessioner.
- Kör godtyckliga shell-kommandon.
- Räkna upp filer och kataloger och utföra filoperationer.
- Ladda ner och skriva filer till disk.
- Etablera en SOCKS5-proxytunnel för pivoting och live-off-the-land-proxying.
Stöd för nätverksprotokoll och C2-beteende
I aktivt läge (framåt) är LinkPro flexibelt: det kan kommunicera med hjälp av HTTP-, WebSocket-, UDP-, TCP- eller DNS-transporter. I passivt läge (omvänt) är kommunikationen begränsad till HTTP men drar nytta av stealth-funktionen eftersom den bara lyssnar efter att Knock-magipaketet har öppnat ett tillfälligt kommandofönster på en timme.
Rensnings- och avinstallationsbeteende
Om processen tar emot avslutningssignaler strävar LinkPro efter att ta bort spår: den avinstallerar installerade eBPF-moduler och tar bort eller återställer /etc/libld, och grupperar den till sitt tidigare tillstånd så att systemet verkar oförändrat. Denna avsiktliga rensningsrutin indikerar att en operatör är orolig för att undvika fel och minimera långsiktiga forensiska fotavtryck.
Operativ kontext och attribution
Kampanjen använde sig av ett allvarligt Jenkins-angrepp, skadliga containeravbildningar, flera bakdörrsvarianter och stealth på kärnnivå – en kombination som pekar på en motiverad och kapabel operatör. Ingen definitiv tillskrivning har offentliggjorts; verktygsuppsättningen och den uppenbara användningen av kompromissen för proxy och ihållande fjärråtkomst tyder dock starkt på ekonomiskt motiverad aktivitet (pivoting, proxy för ytterligare intrång eller vidareförsäljning av åtkomst).
Kärnberoende och reservbeteende
Eftersom LinkPro förlitar sig på BPF kprobe-override-funktioner för sin smygande kärnavlyssning, tillämpar den bara döljningstekniken på kärnnivå när värdkärnan exponerar CONFIG_BPF_KPROBE_OVERRIDE. Där den kärnfunktionen saknas, faller LinkPro medvetet tillbaka till den delade biblioteksmetoden LD_PRELOAD för att dölja sig i användarutrymmet, vilket säkerställer dolning i en mängd olika miljöer.
Avslutande anmärkning
LinkPro demonstrerar hur moderna intrång kan kombinera containerkompromettering, stegvisa laddare, kärninstrumentation (eBPF) och smarta nätverksknep (magisk paketaktivering och portomskrivning) för att bibehålla stealth och flexibilitet. Detektering och åtgärd kräver noggrann inspektion av obehöriga eBPF-program, oväntade poster i /etc/ld.so.preload, ovanliga systemd-tjänster och nätverksanslutningar till den angivna infrastrukturen (forensiska indikatorer inkluderar IP 56.155.98[.]37, portar 29872, 2333, 2233 och det borttagna Docker-avbildningsnamnet kvlnt/vv).