LinkPro Linux Rootkit
En nylig kompromittering af et Amazon Web Services (AWS)-miljø afslørede et tidligere udokumenteret GNU/Linux-rootkit, sporet som LinkPro. Denne bagdør er kendt for sin dobbelte brug af eBPF-moduler: et sæt til at skjule artefakter, og et andet, der fungerer som en skjult trigger - et 'bank', der kun vækker fjernkommandofunktionalitet, efter at en specielt udformet TCP-pakke er set. Angrebskæden og rootkittets mekanismer illustrerer en sofistikeret operatør, der blander containermisbrug, skjulning på kernelniveau og fleksibel netværksaktivering for at frustrere detektion og retsmedicinsk korrelation.
Indholdsfortegnelse
Infektionsvektor og initial implementering
Indtrængen begyndte med udnyttelsen af en eksponeret Jenkins-instans, der var sårbar over for CVE-2024-23897 (CVSS 9.8). Fra dette fodfæste skubbede angriberne et ondsindet Docker-billede (kvlnt/vv, siden fjernet fra Docker Hub) ind i flere Kubernetes-klynger. Billedet brugte en Kali Linux-base og indeholdt en lille programmappe, der var beregnet til at etablere persistens, fjernadgang og en trinvis bagdørsdownload.
Inde i det ondsindede Docker-billede
Billedets app-mappe indeholdt tre nøglefiler med forskellige roller:
start.sh — et shell-script, der starter en SSH-tjeneste og udfører de to andre komponenter.
link — et open source-program (vnt) kompileret/pakket til at fungere som en VPN/proxy-klient, der forbinder udgående til vnt.wherewego[.]top:29872. Dette giver angriberen mulighed for at nå den kompromitterede vært hvor som helst fra og rotere til andre mål gennem den.
app — en Rust-baseret downloader (kaldet vGet), der henter en krypteret vShell-nyttelast fra en S3-bucket og derefter etablerer et WebSocket-link til sin kommando-og-kontrol (C2)-server på 56.155.98[.]37.
Yderligere nyttelast leveret til Kubernetes-noder
Udover det ondsindede billede installerede operatørerne også to andre komponenter på noderne: en dropper, der installerer en anden vShell-bagdør, og LinkPro, et Golang-skrevet rootkit. LinkPro er designet til at køre i en af to tilstande - passiv (omvendt) eller aktiv (fremadrettet) - afhængigt af dens konfiguration. I passiv tilstand venter den på at blive aktiveret af en speciel netværkspakke; i aktiv tilstand initierer den kontakt til selve C2'eren. Fremadrettet tilstand understøtter fem transportprotokoller (HTTP, WebSocket, UDP, TCP, DNS), hvorimod omvendt tilstand begrænser kommunikationen til HTTP.
Hvordan LinkPro fortsætter
Malwarens overordnede udførelse og vedholdenhedsadfærd følger en klar rækkefølge:
- Installer modulet Hide eBPF. Dette modul indeholder Tracepoint- og Kretprobe eBPF-programmer, der bruges til at skjule LinkPros processer og netværksaktivitet.
- Hvis installationen af Hide eBPF-modulet mislykkes – eller hvis det er blevet deaktiveret, skal du installere et delt bibliotek på /etc/libld.so og tilføje stien til /etc/ld.so.preload som en alternativ skjulningsmekanisme.
- For omvendt (passiv) drift skal du installere Knock eBPF-modulet. Knock indeholder et XDP-program og et TC-program, så C2-kanalen bliver først aktiv efter at have modtaget en specifik 'magisk pakke'.
- Etabler persistens ved at oprette en systemd-tjeneste.
- Udfør kommandoer modtaget fra C2.
- Ved nedlukning eller når signaleret (SIGHUP, SIGINT, SIGTERM), afinstaller eBPF-moduler og fjern/gendan den forudindlæste modifikation /etc/libld.so, så systemet vender tilbage til sin tidligere tilstand.
Den magiske pakke og bankeaktiveringsmekanismen
LinkPros passive aktivering afhænger af en præcis TCP-pakke: enhver TCP-pakke, hvis vinduesstørrelse er lig med 54321, behandles som den 'magiske pakke'. Når Knock registrerer den pakke, lagrer den kilde-IP'en og mærker den med en udløbsdato på en time. Efterfølgende TCP-pakker fra den kilde overvåges, og når det er relevant, omskriver Knock headere, så operatørens trafik omdirigeres til LinkPros lytteport (2333). Udgående pakker justeres for at præsentere den oprindelige port tilbage til netværket (kildeport omskrevet til 2233). Hensigten er ligetil, men effektiv: tillader angriberen at nå LinkPro gennem enhver port, som frontend-firewallen tillader, samtidig med at det bliver vanskeligt at korrelere eksterne firewall-logfiler med værtens interne netværksaktivitet.
Hvordan LinkPro skjuler sig selv
LinkPro bruger en todelt skjulningsstrategi:
Kernel/eBPF-skjuling : Modulet Hide eBPF installerer Tracepoint- og Kretprobe-programmer, der opfanger systemkald såsom getdents (for at skjule filer/mapper) og sys_bpf (for at skjule sine egne BPF-programmer). Denne tilgang kræver en kerne bygget med CONFIG_BPF_KPROBE_OVERRIDE aktiveret.
Brugerplads LD_PRELOAD fallback : Hvis kernefunktionen ikke er til stede, skriver LinkPro et delt bibliotek (libld.so) og placerer dets sti i /etc/ld.so.preload. Fordi /etc/ld.so.preload forårsager, at det angivne bibliotek indlæses i alle dynamisk linkede processer (dem, der bruger /lib/ld-linux.so og glibc), kobler den implanterede libld.so libc-funktioner tidligt (før glibc's egen opførsel) og ændrer returneringer fra libc-kald for at skjule artefakter, der ellers ville afsløre dets tilstedeværelse.
Rootkit-funktioner og kommandosæt
LinkPro understøtter både interaktive og automatiserede fjernhandlinger. De implementerede funktioner omfatter:
- Start af en /bin/bash pseudoterminal og kørsel af interaktive shell-sessioner.
- Udførelse af vilkårlige shell-kommandoer.
- Optælling af filer og mapper og udførelse af filhandlinger.
- Download og skrivning af filer til disk.
- Etablering af en SOCKS5 proxy-tunnel til pivoting og live-off-the-land proxying.
Netværksprotokolunderstøttelse og C2-adfærd
I aktiv (fremadrettet) tilstand er LinkPro fleksibel: den kan kommunikere ved hjælp af HTTP-, WebSocket-, UDP-, TCP- eller DNS-transporter. I passiv (omvendt) tilstand er kommunikationen begrænset til HTTP, men den drager fordel af stealth, fordi den kun lytter, efter at Knock-magipakken har åbnet et midlertidigt kommandovindue på en time.
Oprydnings- og afinstallationsadfærd
Hvis processen modtager afslutningssignaler, sigter LinkPro mod at fjerne spor: den afinstallerer installerede eBPF-moduler og sletter eller gendanner /etc/libld, grupperer den til sin tidligere tilstand, så systemet fremstår uændret. Denne bevidste oprydningsrutine indikerer, at en operatør er bekymret for undvigelse og minimering af langsigtede retsmedicinske fodaftryk.
Operationel kontekst og attribution
Kampagnen brugte et Jenkins-angreb med høj alvorlighed, ondsindede containerbilleder, flere bagdørsvarianter og stealth på kerneniveau – en kombination, der peger på en motiveret og dygtig operatør. Der er ikke offentliggjort nogen endelig tilskrivning; værktøjssættet og den tilsyneladende brug af kompromisset til proxy og vedvarende fjernadgang tyder dog stærkt på økonomisk motiveret aktivitet (pivoting, proxy for yderligere indtrængen eller videresalg af adgang).
Kerneafhængighed og fallback-adfærd
Fordi LinkPro er afhængig af BPF kprobe-overstyringsfunktioner for sin skjulte kernelinterception, anvender den kun kernelniveau-skjuleteknikken, når værtskernen eksponerer CONFIG_BPF_KPROBE_OVERRIDE. Hvor denne kernelfunktion mangler, falder LinkPro bevidst tilbage til LD_PRELOAD shared-library-metoden for at skjule sig selv i brugerområdet, hvilket sikrer skjulning på tværs af en bred vifte af miljøer.
Afsluttende bemærkning
LinkPro demonstrerer, hvordan moderne indtrængen kan kombinere containerkompromittering, staged loaders, kernel instrumentation (eBPF) og smarte netværkstricks (magic-packet aktivering og port-rewriting) for at opretholde stealth og fleksibilitet. Detektion og afhjælpning kræver omhyggelig inspektion for uautoriserede eBPF-programmer, uventede poster i /etc/ld.so.preload, usædvanlige systemd-tjenester og netværksforbindelser til den angivne infrastruktur (retsmedicinske indikatorer inkluderer IP 56.155.98[.]37, porte 29872, 2333, 2233 og det fjernede Docker-billednavn kvlnt/vv).