LinkPro Linux Rootkit
Een recente inbreuk op een Amazon Web Services (AWS)-omgeving bracht een eerder niet-gedocumenteerde GNU/Linux-rootkit aan het licht, gevolgd als LinkPro. Deze backdoor valt op door het dubbele gebruik van eBPF-modules: één set om artefacten te verbergen en een andere die fungeert als een stealthy trigger – een 'klop' die de functionaliteit voor opdrachten op afstand pas activeert nadat een speciaal vervaardigd TCP-pakket is waargenomen. De aanvalsketen en de mechanismen van de rootkit illustreren een geavanceerde operator die containermisbruik, verhulling op kernelniveau en flexibele netwerkactivering combineert om detectie en forensische correlatie te frustreren.
Inhoudsopgave
Infectievector en eerste inzet
De inbraak begon met het misbruiken van een blootgestelde Jenkins-instance die kwetsbaar was voor CVE‑2024‑23897 (CVSS 9.8). Vanuit die positie pushten de aanvallers een kwaadaardige Docker-image (kvlnt/vv, inmiddels verwijderd uit Docker Hub) naar meerdere Kubernetes-clusters. De image maakte gebruik van een Kali Linux-basis en bevatte een kleine applicatiemap die bedoeld was om persistentie, externe toegang en een gefaseerde backdoor-download mogelijk te maken.
Binnen de kwaadaardige Docker-image
De app-map van de afbeelding bevatte drie belangrijke bestanden met verschillende rollen:
start.sh — een shellscript dat een SSH-service start en de andere twee componenten uitvoert.
link — een open-sourceprogramma (vnt) dat is gecompileerd/gebundeld om te fungeren als een VPN-/proxyclient en uitgaande verbinding maakt met vnt.wherewego[.]top:29872. Hierdoor kan de aanvaller de gecompromitteerde host overal bereiken en via de link naar andere doelen overschakelen.
app — een op Rust gebaseerde downloader (ook wel vGet genoemd) die een gecodeerde vShell-payload ophaalt uit een S3-bucket en vervolgens een WebSocket-koppeling tot stand brengt met zijn command-and-control (C2)-server op 56.155.98[.]37.
Extra payloads geleverd aan Kubernetes-knooppunten
Naast de kwaadaardige image plaatsten de operators ook twee andere componenten op de nodes: een dropper die een extra vShell-backdoor installeert, en LinkPro, een door Golang geschreven rootkit. LinkPro is ontworpen om in twee modi te draaien – passief (reverse) of actief (forward) – afhankelijk van de configuratie. In de passieve modus wacht het tot het wordt geactiveerd door een speciaal netwerkpakket; in de actieve modus initieert het contact met de C2 zelf. De forward-modus ondersteunt vijf transportprotocollen (HTTP, WebSocket, UDP, TCP, DNS), terwijl de reverse-modus de communicatie beperkt tot HTTP.
Hoe LinkPro blijft bestaan
Het algemene uitvoerings- en persistentiegedrag van de malware volgt een duidelijke volgorde:
- Installeer de Hide eBPF-module. Deze module bevat de Tracepoint- en Kretprobe eBPF-programma's die worden gebruikt om de processen en netwerkactiviteit van LinkPro te verbergen.
- Als het installeren van de Hide eBPF-module mislukt of als deze is uitgeschakeld, installeer dan een gedeelde bibliotheek op /etc/libld.so en voeg dat pad toe aan /etc/ld.so.preload als een terugvalmechanisme om te verbergen.
- Voor omgekeerde (passieve) werking installeert u de Knock eBPF-module. Knock bevat een XDP-programma en een TC-programma, waardoor het C2-kanaal pas actief wordt na ontvangst van een specifiek 'magisch pakket'.
- Creëer persistentie door een systemd-service te creëren.
- Voer opdrachten uit die u van de C2 ontvangt.
- Bij het afsluiten of wanneer er een signaal wordt gegeven (SIGHUP, SIGINT, SIGTERM), moeten de eBPF-modules worden verwijderd en moet de preload-modificatie /etc/libld.so worden verwijderd/hersteld, zodat het systeem terugkeert naar de vorige staat.
Het magische pakket en het klop-activeringsmechanisme
De passieve activering van LinkPro is afhankelijk van een specifiek TCP-pakket: elk TCP-pakket met een venstergrootte van 54321 wordt behandeld als het 'magische pakket'. Wanneer Knock dat pakket detecteert, slaat het het bron-IP-adres op en tagt het met een vervaldatum van één uur. Volgende TCP-pakketten van die bron worden gemonitord en, indien nodig, herschrijft Knock de headers zodat het verkeer van de operator wordt omgeleid naar de luisterpoort van LinkPro (2333). Uitgaande pakketten worden aangepast om de oorspronkelijke poort terug te geven aan het netwerk (bronpoort herschreven naar 2233). Het doel is eenvoudig maar effectief: de aanvaller LinkPro laten bereiken via elke poort die de front-end firewall toestaat, terwijl het tegelijkertijd moeilijk wordt om externe firewalllogs te correleren met de interne netwerkactiviteit van de host.
Hoe LinkPro zichzelf verbergt
LinkPro maakt gebruik van een tweelaagse verbergingsstrategie:
Kernel/eBPF verbergen : De module eBPF verbergen installeert Tracepoint- en Kretprobe-programma's die systeemaanroepen onderscheppen, zoals getdents (om bestanden/mappen te verbergen) en sys_bpf (om de eigen BPF-programma's te verbergen). Deze aanpak vereist een kernel die is gebouwd met CONFIG_BPF_KPROBE_OVERRIDE ingeschakeld.
Fallback LD_PRELOAD in gebruikersruimte : Als de kernel niet aanwezig is, schrijft LinkPro een gedeelde bibliotheek (libld.so) en plaatst het pad ervan in /etc/ld.so.preload. Omdat /etc/ld.so.preload ervoor zorgt dat de opgegeven bibliotheek in elk dynamisch gekoppeld proces wordt geladen (processen die /lib/ld-linux.so en glibc gebruiken), haakt de geïmplanteerde libld.so libc-functies al vroeg aan (vóór het eigen gedrag van glibc) en wijzigt de returns van libc-aanroepen om artefacten te verbergen die anders de aanwezigheid ervan zouden onthullen.
Rootkit-mogelijkheden en commandoset
LinkPro ondersteunt zowel interactieve als geautomatiseerde acties op afstand. De geïmplementeerde functies omvatten:
- Een /bin/bash pseudo-terminal starten en interactieve shell-sessies uitvoeren.
- Willekeurige shell-opdrachten uitvoeren.
- Bestanden en mappen opsommen en bestandsbewerkingen uitvoeren.
- Bestanden downloaden en naar schijf schrijven.
- Het opzetten van een SOCKS5-proxytunnel voor pivoting en living-off-the-land-proxying.
Netwerkprotocolondersteuning en C2-gedrag
In de actieve (forward) modus is LinkPro flexibel: het kan communiceren via HTTP, WebSocket, UDP, TCP of DNS. In de passieve (reverse) modus is de communicatie beperkt tot HTTP, maar profiteert het van stealth omdat het pas luistert nadat het Knock Magic-pakket een tijdelijk opdrachtvenster van een uur heeft geopend.
Opruim- en verwijderingsgedrag
Als het proces beëindigingssignalen ontvangt, probeert LinkPro sporen te verwijderen: het verwijdert geïnstalleerde eBPF-modules en verwijdert of herstelt de /etc/libld, waarbij deze wordt gegroepeerd naar de vorige staat, zodat het systeem onveranderd lijkt. Deze doelbewuste opschoonroutine wijst erop dat een operator zich zorgen maakt over ontwijking en het minimaliseren van forensische voetafdrukken op de lange termijn.
Operationele context en attributie
De campagne maakte gebruik van een Jenkins-exploit met hoge ernst, kwaadaardige containerimages, meerdere backdoorvarianten en stealth op kernelniveau – een combinatie die wijst op een gemotiveerde, capabele operator. Er is geen definitieve toeschrijving openbaar gemaakt; de toolset en het schijnbare gebruik van de aanval voor proxying en permanente toegang op afstand suggereren echter sterk dat er sprake was van financieel gemotiveerde activiteiten (pivoting, proxying voor extra inbraken of wederverkoop van toegang).
Kernelafhankelijkheid en terugvalgedrag
Omdat LinkPro voor zijn stiekeme kernelinterceptie afhankelijk is van BPF kprobe-override-functies, past het de verbergtechniek op kernelniveau alleen toe wanneer de hostkernel CONFIG_BPF_KPROBE_OVERRIDE blootstelt. Waar die kernelfunctionaliteit ontbreekt, valt LinkPro bewust terug op de LD_PRELOAD-methode voor gedeelde bibliotheken om zichzelf te verbergen in de gebruikersruimte, wat zorgt voor verberging in een breed scala aan omgevingen.
Slotnoot
LinkPro laat zien hoe moderne inbraken containercompromittering, gefaseerde loaders, kernelinstrumentatie (eBPF) en slimme netwerktrucs (magic-packet-activering en poortherschrijving) kunnen combineren om stealth en flexibiliteit te behouden. Detectie en herstel vereisen een zorgvuldige inspectie op ongeautoriseerde eBPF-programma's, onverwachte vermeldingen in /etc/ld.so.preload, ongebruikelijke systemd-services en netwerkverbindingen met de aangegeven infrastructuur (forensische indicatoren omvatten IP 56.155.98[.]37, poorten 29872, 2333, 2233 en de verwijderde Docker-imagenaam kvlnt/vv).