Advertisement

Mi az az LSM BPF enabled kernel?

Nemrég megnéztem, hogy hol tart azeweOSfejlesztés és láttam, hogy immáronBPF enabledaz új kernel, illetve a régi is és egy kis kitekintés után azArch,Fedra,OpenSUSEés sok egyéb disztró is kapcsolgatja ezt a bizonyos funkciót, ami egy kezdőnek okozhat némi fejtörést.

Gondoltam készítek egy kis összefoglalót a témában.

🛡️ Tehát mi az az LSM?

AzLSM (Linux Security Modules)egy keretrendszer a Linux kernelben, amely lehetővé teszi, hogy különféle biztonsági modulokközvetlenül a kernel döntéshozatali folyamataibakapcsolódjanak be, pl.:

  • fájl hozzáférés

  • hálózati kapcsolatok

  • processzek létrehozása

  • jogosultságok ellenőrzése

🧩 Mi az LSM hook?

EgyLSM hookegy olyan pont a kernelben (általában egy függvényhívás), ahol egy LSM modul „be tud szólni”, és például azt mondhatja:

„Ez a folyamat nem nyithatja meg ezt a fájlt!” vagy
„Ez a socket kapcsolat tiltott!”

🔧 Példák LSM hook-okra:

Hook neveMire vonatkozik
inode_permissionEllenőrzi, hogy egy fájl elérhető-e az adott művelethez (olvasás, írás)
task_createÚj folyamat indításának engedélyezése vagy tiltása
socket_connectEngedélyezheti vagy megtagadhatja egy hálózati kapcsolat létrehozását
bpfeBPF programok betöltésének ellenőrzése

📦 Milyen LSM-ek használják ezeket?

  • SELinux: MAC-alapú (Mandatory Access Control) rendszer, policy alapon dönt.

  • AppArmor: Profile -alapú, egyszerűbb, de szintén LSM hook -okon keresztül működik.

  • Landlock: Újabb, eBPF -szerű sandboxoló rendszer.

  • BPF-based LSM: Új lehetőség az LSM hook-okateBPF programmalkezelni (pl. saját biztonsági policy kódolása futásidőben).

🛡️ Mi a BPF?

ABPF(Berkeley Packet Filter) eredetileg egy mechanizmus volt, amit a UNIX rendszerekben fejlesztettek ki ahálózati csomagok szűrésére– például arra, hogy atcpdumpcsak az adott port vagy IP cím forgalmát figyelje.

A BPF célja az volt, hogyhatékonyan és biztonságosan szűrje a hálózati forgalmat a kernel szintjén, mielőtt az bekerülne a felhasználói térbe – ez csökkentette a terhelést és növelte a teljesítményt.

Honnan jött és hogyan fejlődött?

  1. Kezdeti BPF (klasszikus BPF):

    • Csak hálózati csomagszűrésre alkalmas.

    • Statikus, korlátozott, nem bővíthető funkciók.

  2. eBPF (extended BPF):

    • A Linux kernel továbbfejlesztette a BPF-et egyáltalános célú, sandboxolt virtuális géppé.

    • Most már nemcsak hálózathoz, hanemteljesítményelemzéshez, biztonsághoz, nyomkövetéshezstb. is használható.

Hogyan működik?

  • A BPF programokat bytecode formájában a kernelbe töltheted.

  • Ezeket averifikátorellenőrzi: nem lehet végtelen ciklus, memóriasértés stb.

  • A program egyhook ponthozkapcsolódik (pl. rendszerhívás, hálózati esemény).

  • A kernel ezután futtatja a BPF programot, amikor az adott esemény megtörténik.

BPF típusFunkcióÁllapot
Klasszikus BPFHálózati csomagszűrésElavult / korlátozott
eBPFÁltalános célú programok kernel szintű futtatásaModern, aktívan használt

🛡️ Mi az eBPF?

AzeBPF(extended Berkeley Packet Filter) egy fejlett technológia a Linux kernelben, amely lehetővé teszi, hogyfelhasználói térből származó kis programokatfuttassunk biztonságosan és hatékonyan a kernel térben — anélkül, hogy kernel modult kellene írni vagy újraindítani a rendszert.

Lényegében azeBPFegy sandboxolt virtuális gép a kernelben.

Mire használják az eBPF-et?

  1. Teljesítményelemzés (performance profiling):
    Eszközök, mint abccvagybpftracelehetővé teszik valós idejű információk gyűjtését a rendszer működéséről anélkül, hogy jelentősen lelassítanák azt.

  2. Hálózati szűrés és monitoring:
    Az eBPF segítségével hatékony, testreszabható tűzfalak (pl. Cilium) és forgalomelemző rendszerek hozhatók létre.

  3. Biztonsági szabályok érvényesítése:
    Futás közben figyelhetjük, hogy egy folyamat milyen rendszerhívásokat végez (például auditálás, sandboxing).

  4. Programozható obszervabilitás:
    Például meghatározhatjuk, milyen eseményeket figyeljünk meg egy alkalmazásban (fájlműveletek, CPU-használat stb.).

Működési elv:

  • Egy eBPF programot C vagy egy magasabb szintű nyelv segítségével írunk.

  • Ez a program a kernelhez egy adott hook ponthoz (pl. rendszerhívás, hálózati esemény) kapcsolódik.

  • A kernel egyverifikátoronkeresztül ellenőrzi, hogy a kód biztonságos (nem csinál végtelen ciklust, nem ír memóriát jogosulatlanul stb.).

  • Ha rendben van, a program bekerül és fut a megfelelő eseménynél.

Példa:

Egy egyszerű eBPF program figyelheti, hogy egy adott folyamat milyen fájlokat nyit meg, és naplózhatja ezeket.

Nézzünk meg egyegyszerű eBPF példát, ami figyeli, hogy egy program milyen fájlokat nyit meg a rendszeren. Ehhez abpftracenevű eszközt fogjuk használni, ami egy magas szintű nyelvet biztosít az eBPF programokhoz (hasonló aawkvagydtracestílusához).

🛠️ Előkészületek

Először is győződj meg róla, hogy a rendszereden elérhető abpftrace. Debian/Ubuntu alatt:

sudo apt install bpftrace

📄 Példa: fájlmegnyitások naplózása

A következő bpftrace szkript figyeli aopenatrendszerhívást, és kiírja, hogy ki (PID) milyen fájlt nyit meg:

sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat {
printf("PID %d opened file: %s\n", pid, str(args->filename));
}'

🔍 Mit csinál ez a szkript?

  • tracepoint:syscalls:sys_enter_openat: ez a Linux kernel egy tracepointja, ami akkor aktiválódik, amikor egy programopenat()rendszerhívást indít — ez történik minden fájlmegnyitáskor.

  • args->filename: tartalmazza a megnyitni kívánt fájl nevét.

  • pid: az éppen futó folyamat azonosítója.

  • printf(...): kiírja az információt a terminálra.

Lehetőség van egy eBPF programotC-benmegírni és betöltenilibbpfvagybccsegítségével — ez bár mélyebb téma, de nagyobb szabadságot ad.

A BPF hivatalos kernel dokumentáció a legújabb kernelben:
https://www.kernel.org/doc/html/latest/bpf/index.html

AzLSMa kernel doksiban:https://docs.kernel.org/security/lsm.html

GRUB kernel opció a kernel sorban – példa az engedélyezésre:

GRUB_CMDLINE_LINUX="lsm=lockdown,capability,bpf"

Egy kis tutorial kezdőknek:
https://eunomia.dev/tutorials/19-lsm-connect/

EweOS progress report:
https://os.ewe.moe/blog/202503-progress-report

Implementációk:

 


Továbbra is várunk mindenkit nagy szeretettel csevegő oldalunkon élőben:
https://skamilinux.hu/chat/

Aktív fórum témák:
https://skamilinux.hu/phpBB3/search.php?search_id=active_topics

 

Translate »