LinkPro Linux Rootkit gebruikt eBPF om te verbergen en te activeren via Magic TCP-pakketten

Een onderzoek naar het compromitteren van een door Amazon Web Services (AWS) gehoste infrastructuur heeft geleid tot de ontdekking van een nieuwe GNU/Linux-rootkit genaamd LinkProvolgens bevindingen van Synacktiv.

“Deze achterdeur beschikt over functionaliteiten die afhankelijk zijn van de installatie van twee eBPF-modules (extended Berkeley Packet Filter), enerzijds om zichzelf te verbergen, en anderzijds om op afstand te worden geactiveerd bij ontvangst van een ‘magisch pakket'”, aldus beveiligingsonderzoeker Théo Letailleur.

Volgens het Franse cyberbeveiligingsbedrijf hadden de aanvallers bij de infectie als uitgangspunt gebruik gemaakt van een blootgestelde Jenkins-server die kwetsbaar was voor CVE-2024-23897, waarna een kwaadaardige Docker Hub-image met de naam “kvlnt/vv” (nu verwijderd) werd ingezet op verschillende Kubernetes-clusters.

De Docker-image bestaat uit een Kali Linux-basis samen met een map genaamd “app” die drie bestanden bevat –

  • start.sh, een shellscript om de SSH-service te starten en de resterende twee bestanden uit te voeren
  • link, een open-sourceprogramma genaamd vnt dat fungeert als een VPN-server en proxymogelijkheden biedt door verbinding te maken met vnt.wherewego(.)top:29872, waardoor de aanvaller overal verbinding kan maken met de gecompromitteerde server en deze als proxy kan gebruiken om andere servers te bereiken
  • app, een op Rust gebaseerde downloader, vGet genoemd, die een gecodeerde VShell-payload ontvangt van een S3-bucket, die vervolgens communiceert met zijn eigen command-and-control (C2)-server (56.155.98(.)37) via een WebSocket-verbinding

Ook werden twee andere soorten malware aan de Kubernetes-nodes geleverd: een dropper die een andere vShell-backdoor inbedde en LinkPro, een rootkit geschreven in Golang. De sluipende malware kan werken in passieve (ook wel omgekeerde) of actieve (ook wel voorwaartse) modus, afhankelijk van de configuratie, waardoor het alleen naar opdrachten van de C2-server kan luisteren na ontvangst van een specifiek TCP-pakket of direct contact met de server kan initiëren.

Terwijl de voorwaartse modus vijf verschillende communicatieprotocollen ondersteunt, waaronder HTTP, WebSocket, UDP, TCP en DNS, gebruikt de omgekeerde modus alleen het HTTP-protocol. De algemene opeenvolging van gebeurtenissen ontvouwt zich als volgt:

  • Installeer de eBPF-module “Verbergen”, die eBPF-programma’s van het type Tracepoint en Kretprobe bevat om de processen en netwerkactiviteit ervan te verbergen
  • Als de installatie van de module “Verbergen” mislukt, of als deze is uitgeschakeld, installeer dan de gedeelde bibliotheek “libld.so” in /etc/ld.so.preload
  • Als de omgekeerde modus wordt gebruikt, installeer dan de “Knock” eBPF-module, die twee eBPF-programma’s bevat van het type eXpress Data Path (XDP) en Traffic Control (TC) om ervoor te zorgen dat het C2-communicatiekanaal alleen wordt geactiveerd na ontvangst van het magische pakket
  • Bereik persistentie door een systemd-service op te zetten
  • Voer C2-opdrachten uit
  • Bij onderbreking (SIGHUP-, SIGINT- en SIGTERM-signalen) verwijdert u de eBPF-modules en verwijdert u de gewijzigde /etc/libld.so en herstelt u deze terug naar de oorspronkelijke versie

Om dit te bereiken wijzigt LinkPro het configuratiebestand “/etc/ld.so.preload” om het pad te specificeren van de gedeelde bibliotheek libld.so die daarin is ingebed, met als hoofddoel het verbergen van verschillende artefacten die de aanwezigheid van de achterdeur zouden kunnen onthullen.

“Dankzij de aanwezigheid van het pad /etc/libld.so in /etc/ld.so.preload, wordt de gedeelde bibliotheek libld.so geïnstalleerd door LinkPro geladen door alle programma’s die /lib/ld-linux.so14 vereisen,” legde Letailleur uit. “Dit omvat alle programma’s die gedeelde bibliotheken gebruiken, zoals glibc.”

“Zodra libld.so wordt geladen bij de uitvoering van een programma, bijvoorbeeld /usr/bin/ls, koppelt het (vóór glibc) verschillende libc-functies om resultaten te wijzigen die de aanwezigheid van LinkPro zouden kunnen onthullen.”

Het magische pakket, volgens Synacktiv, is een TCP-pakket met een venstergroottewaarde van 54321. Zodra dit pakket wordt gedetecteerd, slaat de Knock-module het bron-IP-adres van het pakket en een bijbehorende vervaldatum van één uur op als waarde. Het programma let vervolgens op aanvullende TCP-pakketten waarvan het bron-IP-adres overeenkomt met dat van het reeds opgeslagen IP-adres.

Met andere woorden: de kernfunctionaliteit van LinkPro is het wachten tot er een magisch pakket wordt verzonden, waarna de bedreigingsacteur een uur de tijd heeft om opdrachten naar een poort van zijn keuze te sturen. De Knock-module is ook ontworpen om de header van het binnenkomende TCP-pakket te wijzigen om de oorspronkelijke bestemmingspoort te vervangen door de luisterpoort van LinkPro (2333), en om het uitgaande pakket te wijzigen om de bronpoort (2233) te vervangen door de originele poort.

“Het doel van deze manoeuvre is om de operator in staat te stellen de ontvangst van commando’s voor LinkPro te activeren door via een poort te gaan die is geautoriseerd door de front-end firewall”, aldus Synacktiv. “Dit maakt ook de correlatie tussen de front-end firewall logs en de netwerkactiviteit van de gecompromitteerde host complexer.”

De door LinkPro ondersteunde opdrachten omvatten het uitvoeren van /bin/bash in een pseudo-terminal, het uitvoeren van een shell-opdracht, het opsommen van bestanden en mappen, het uitvoeren van bestandsbewerkingen, het downloaden van bestanden en het opzetten van een SOCKS5-proxytunnel. Het is momenteel niet bekend wie er achter de aanval zit, maar er wordt vermoed dat de dreigingsactoren financieel gemotiveerd zijn.

“Omdat het op kernelniveau verborgen blijft, gebruikt de rootkit eBPF-programma’s van het tracepoint- en kretprobe-type om de systeemaanroepen getdents (bestanden verbergen) en sys_bpf (eigen BPF-programma’s verbergen) te onderscheppen. Deze techniek vereist met name een specifieke kernelconfiguratie (CONFIG_BPF_KPROBE_OVERRIDE)”, aldus het bedrijf.

“Als dit laatste niet aanwezig is, valt LinkPro terug op een alternatieve methode door een kwaadaardige bibliotheek te laden via het bestand /etc/ld.so.preload om ervoor te zorgen dat zijn activiteiten in de gebruikersruimte verborgen blijven.”

Thijs Van der Does