LinkPro Linux Rootkit
Egy Amazon Web Services (AWS) környezet nemrégiben történt feltörése során egy korábban nem dokumentált GNU/Linux rootkitet tártak fel, amelyet LinkPro néven azonosítottak. Ez a hátsó ajtó az eBPF modulok kettős használatáról ismert: az egyik a műtermékek elrejtésére szolgál, a másik pedig egy rejtett triggerként működik – egy „kopogás”, amely csak egy speciálisan létrehozott TCP csomag észlelése után aktiválja a távoli parancsfunkciókat. A támadási lánc és a rootkit mechanizmusai egy kifinomult operátort illusztrálnak, aki a konténer-visszaélést, a kernel szintű elrejtést és a rugalmas hálózati aktiválást ötvözi a felderítés és a forenzikus korreláció meghiúsítása érdekében.
Tartalomjegyzék
Fertőzésvektor és kezdeti telepítés
A behatolás egy, a CVE‑2024‑23897 (CVSS 9.8) sérülékenységnek kitett Jenkins-példány kihasználásával kezdődött. Erről a pozícióról a támadók egy rosszindulatú Docker-képet (kvlnt/vv, azóta eltávolították a Docker Hub-ból) több Kubernetes-klaszterbe juttattak. A kép Kali Linux alapot használt, és egy kis alkalmazásmappát tartalmazott, amelynek célja a perzisztencia, a távoli hozzáférés és a szakaszos hátsó ajtós letöltés biztosítása volt.
A rosszindulatú Docker kép belsejében
A képfájl alkalmazásmappája három, különböző szerepkörrel rendelkező kulcsfontosságú fájlt tartalmazott:
start.sh — egy shell szkript, amely elindít egy SSH szolgáltatást, és végrehajtja a másik két komponenst.
link — egy nyílt forráskódú program (vnt), amelyet VPN/proxy kliensként fordítottak/csomagoltak, és kimenőleg a vnt.wherewego[.]top:29872 címre csatlakozik. Ez lehetővé teszi a támadó számára, hogy bárhonnan elérje a feltört gazdagépet, és azon keresztül más célpontokra váltson.
alkalmazás – egy Rust-alapú letöltő (vGet néven ismert), amely titkosított vShell-payloadot kér le egy S3 tárolóból, majd WebSocket-kapcsolatot létesít a parancs- és vezérlő (C2) szerverével az 56.155.98[.]37 címen.
Kubernetes csomópontokra kézbesített további hasznos terhek
A rosszindulatú kép mellett az operátorok két másik komponenst is telepítettek a csomópontokra: egy droppert, amely egy másik vShell hátsó ajtót telepít, és a LinkPro-t, egy Golang által írt rootkitet. A LinkPro kétféle módban – passzív (fordított) vagy aktív (előre irányuló) – futhat a konfigurációjától függően. Passzív módban egy speciális hálózati csomag általi aktiválásra vár; aktív módban magával a C2-vel kezdeményez kapcsolatot. Az előre irányuló mód öt átviteli protokollt támogat (HTTP, WebSocket, UDP, TCP, DNS), míg a fordított mód a HTTP-re korlátozza a kommunikációt.
Hogyan működik a LinkPro?
A kártevő végrehajtásának és megmaradásának viselkedése egyértelmű sorrendet követ:
- Telepítse az eBPF elrejtése modult. Ez a modul tartalmazza a Tracepoint és a Kretprobe eBPF programokat, amelyek a LinkPro folyamatainak és hálózati tevékenységének elrejtésére szolgálnak.
- Ha az eBPF elrejtése modul telepítése sikertelen – vagy ha le van tiltva –, telepítsen egy megosztott könyvtárat az /etc/libld.so címen, és adja hozzá ezt az elérési utat az /etc/ld.so.preload fájlhoz tartalék elrejtési mechanizmusként.
- Fordított (passzív) működéshez telepítse a Knock eBPF modult. A Knock egy XDP és egy TC programot tartalmaz, így a C2 csatorna csak egy adott „mágikus csomag” vétele után válik aktívvá.
- A perzisztencia biztosítása egy systemd szolgáltatás létrehozásával.
- Végrehajtja a C2-től kapott parancsokat.
- Leállításkor vagy jelzés (SIGHUP, SIGINT, SIGTERM) esetén távolítsa el az eBPF modulokat, és távolítsa el/állítsa vissza az /etc/libld.so előtöltési módosítását, hogy a rendszer visszatérjen az előző állapotába.
A mágikus csomag és a kopogásos aktiválási mechanizmus
A LinkPro passzív aktiválása egy pontos TCP-csomagtól függ: minden olyan TCP-csomagot, amelynek ablakmérete megegyezik az 54321-gyel, „mágikus csomagként” kezel. Amikor a Knock érzékeli ezt a csomagot, eltárolja a forrás IP-címét, és egyórás lejárati dátummal látja el. A forrásból érkező további TCP-csomagokat figyeli, és szükség esetén a Knock átírja a fejléceket, így az operátor forgalma a LinkPro figyelőportjára (2333) kerül átirányításra. A kimenő csomagokat úgy módosítja, hogy az eredeti portot mutassák vissza a hálózatnak (a forrásportot 2233-ra írják át). A szándék egyszerű, de hatékony: lehetővé tenni a támadó számára, hogy a front-end tűzfal által engedélyezett bármelyik porton elérje a LinkPro-t, miközben megnehezíti a külső tűzfalnaplók és a gazdagép belső hálózati tevékenységének összefüggésbe hozását.
Hogyan rejti el magát a LinkPro
A LinkPro kétszintű elrejtési stratégiát alkalmaz:
Kernel/eBPF elrejtés : Az eBPF elrejtése modul telepíti a Tracepoint és Kretprobe programokat, amelyek elfogják a rendszerhívásokat, például a getdents-t (fájlok/könyvtárak elrejtéséhez) és a sys_bpf-et (a saját BPF programjainak elrejtéséhez). Ehhez a megközelítéshez olyan kernel szükséges, amelyre engedélyezett a CONFIG_BPF_KPROBE_OVERRIDE.
Felhasználói térbeli LD_PRELOAD tartalék : Ha a kernel képessége nincs jelen, a LinkPro egy megosztott könyvtárat (libld.so) ír, és annak elérési útját az /etc/ld.so.preload fájlba helyezi. Mivel az /etc/ld.so.preload hatására a megadott könyvtár minden dinamikusan összekapcsolt folyamatba betöltődik (azok, amelyek a /lib/ld-linux.so és a glibc könyvtárat használják), a beültetett libld.so korán (a glibc saját viselkedése előtt) bekapcsolja a libc függvényeket, és módosítja a libc hívások visszatérési értékeit, hogy elrejtse azokat az összetevőket, amelyek egyébként felfednék a jelenlétét.
Rootkit képességek és parancskészlet
A LinkPro támogatja mind az interaktív, mind az automatizált távoli műveleteket. A megvalósított funkciók a következők:
- /bin/bash pszeudoterminál indítása és interaktív shell munkamenetek futtatása.
- Tetszőleges shell parancsok végrehajtása.
- Fájlok és könyvtárak felsorolása és fájlműveletek végrehajtása.
- Fájlok letöltése és lemezre írása.
- SOCKS5 proxy alagút létrehozása elforgatáshoz és a szárazföldön kívüli élő proxyzáshoz.
Hálózati protokoll támogatás és C2 viselkedés
Aktív (előre irányuló) módban a LinkPro rugalmas: HTTP, WebSocket, UDP, TCP vagy DNS átvitellel kommunikálhat. Passzív (fordított) módban a kommunikációja HTTP-re korlátozódik, de a lopakodás előnyeit élvezi, mivel csak azután figyel, hogy a Knock magic csomag megnyitott egy ideiglenes, egyórás parancsablakot.
Tisztítási és eltávolítási viselkedés
Ha a folyamat leállítási jeleket kap, a LinkPro célja a nyomok eltávolítása: eltávolítja a telepített eBPF modulokat, és törli vagy visszaállítja az /etc/libld fájlt, csoportosítva azt az előző állapotába, így a rendszer változatlannak tűnik. Ez a szándékos takarítási rutin arra utal, hogy az operátor aggódik a kijátszás és a hosszú távú forenzikus lábnyomok minimalizálása miatt.
Működési kontextus és attribúció
A kampány egy súlyos Jenkins sérülékenységet, rosszindulatú konténerképeket, több hátsó ajtó variánst és kernel szintű lopakodást alkalmazott – ez a kombináció egy motivált, rátermett operátorra utal. A pontos eredetet nem hozták nyilvánosságra; azonban az eszközkészlet és a kompromittált program látszólagos használata proxyzáshoz és tartós távoli hozzáféréshez erősen pénzügyileg motivált tevékenységre utal (pivoting, további behatolások proxyzása vagy hozzáférés viszonteladása).
Kernelfüggőség és tartalék viselkedés
Mivel a LinkPro a BPF kprobe felülírási funkcióira támaszkodik a rejtett kernel-elfogáshoz, a kernel szintű elrejtési technikát csak akkor alkalmazza, amikor a gazdakernel elérhetővé teszi a CONFIG_BPF_KPROBE_OVERRIDE metódust. Ahol ez a kernel-képesség hiányzik, a LinkPro szándékosan az LD_PRELOAD megosztott könyvtár metódushoz tér vissza, hogy elrejtse magát a felhasználói térben, biztosítva az elrejtést a környezetek széles skáláján.
Záró megjegyzés
A LinkPro bemutatja, hogyan tudják a modern behatolások kombinálni a konténerkompromittálást, a szakaszos betöltőket, a kernel instrumentációt (eBPF) és az okos hálózati trükköket (mágikus csomagaktiválás és portátírás) a rejtett működés és a rugalmasság fenntartása érdekében. Az észlelés és a hibaelhárítás alapos vizsgálatot igényel a jogosulatlan eBPF programok, a váratlan bejegyzések az /etc/ld.so.preload fájlban, a szokatlan systemd szolgáltatások és a jelzett infrastruktúrához való hálózati kapcsolatok szempontjából (a forenzikus indikátorok közé tartozik az 56.155.98[.]37 IP-cím, a 29872, 2333, 2233 portok, valamint az eltávolított Docker-kép neve, a kvlnt/vv).