Projekt bpftime razvija realizacijo eBPF, ki deluje v uporabniškem prostoru

Predstavljen je projekt bpftime, ki razvija runtime in virtualni stroj za izvajanje obdelovalcev eBPF v uporabniškem prostoru. Bpftime omogoča, da se v celoti v uporabniškem prostoru izvajajo eBPF-programi za sledenje in poseganje v delovanje procesov, ki uporabljajo take možnosti, kot sta uprobe in programsko prestrezanje sistemskih klicev. Opozarja se, da bpftime zaradi izključitve odvečnih preklapljanj kontekstov omogoča desetkratno zmanjšanje stroškov v primerjavi z uporabo funkcionalnosti uprobe in uretprobe, ki jo nudi jedro Linux. Poleg tega bpftime znatno poenostavi odpravljanje napak, potencialno se lahko uporablja na sistemih brez jedra Linux in ne zahteva naprednih privilegijev, potrebnih za nalaganje eBPF-aplikacije v jedro. Koda projekta je napisana v jezikih C/C++ in se distribuirana pod licenco MIT.

Prestrezanje sistemskih klicev in integracija uprobe-preverjanj sta izvedena z uporabo tehnike prepisovanja izvršljive kode (binary rewriting), pri kateri se klici sistemskih klicev, vstopnih točk in lokalnim funkcijam nadomestijo s prehodom na razhroščevalne obdelovalce skozi modifikacijo strojne kode izvršljive aplikacije, kar je znatno učinkovitejše od organizacije prestrezanja z uporabo uprobe na ravni jedra Linux.

Podpirajo se operacije zamenjave ali spremembe funkcij, pritrditev obdelovalcev (hook-ov) in filtrov, preusmerjanje, blokiranje ali zamenjava parametrov sistemskih klicev, prestrezanje vstopnih in izstopnih točk funkcij ter nadomeščanje obdelovalca na poljubnem premiku v kodi. Bpftime se lahko pritrdi na kateri koli delujoč proces v sistemu brez potrebe po njihovem ponovnem zagonu ali ponovnem sestavljanju. Nadzor bpftime v procesih se lahko izvaja za delujoče procese preko ptrace, za nalagajoče pa preko LD_PRELOAD.

V sklopu bpftime se razvija runtime, ki omogoča pritrditev eBPF-programov na točke sledenja sistemskih klicev in uprobe; virtualni stroj eBPF s JIT za izolirano izvajanje eBPF programov na ravni uporabniškega procesa (dodatno podporo ima AOT-kompajlacija); ozadinski proces za interakcijo z jedrom in organizacijo združljivosti z uprobe podskladi jedra (bpftime podpira način nalaganja eBPF v uporabniški prostor iz jedra za omogočanje sodelovanja z eBPF programi v jedru, ki se uporabljajo, na primer, za obdelavo kprobe ali za postavljanje omrežnih filtrov).

Virtualni stroj eBPF je oblikovan v obliki povezljive knjižnice in nudi API, podoben ubpf, kar omogoča njeno uporabo za integracijo funkcionalnosti eBPF v druge projekte. Za skupno agregiranje podatkov iz več procesov se podpira ustvarjanje skupnih eBPF Map, shranjenih v skupni spominski. Skupaj z bpftime se lahko uporabljajo tipični eBPF obdelovalci, napisani za uporabo v jedru, medtem ko se za sestavljanje lahko uporabijo standardna orodja, temelječa na clang in libbpf.

S bpftime v uporabniškem prostoru lahko delujejo sistemi sledenja, kot so BCC, bpftrace in Deepflow. Na primer, demonstrirana je uporaba skripte sslsniff iz BCC ogrodja za analizo in shranjevanje šifriranega prometa v nginx. V opravljenih testih se je zmogljivost nginx pri izvajanju sslsniff na strani jedra zmanjšala za 58%, medtem ko se je pri prenosu obdelovalnika v uporabniški prostor zmanjšala za 12,3%.

Arhitektura sledenja procesom z uporabo izvirnega eBPF v jedru:

Projekt bpftime razvija realizacijo eBPF, ki deluje v uporabniškem prostoru

Arhitektura sledenja v uporabniškem prostoru z uporabo bpftime:

Projekt bpftime razvija realizacijo eBPF, ki deluje v uporabniškem prostoru

Hibridni način, v katerem bpftime deluje skupaj z eBPF v jedru, na primer za nastavitev omrežnih filtrov ali prenos posameznih obdelovalnikov v uporabniški prostor:

Projekt bpftime razvija realizacijo eBPF, ki deluje v uporabniškem prostoru

Iz načrtov za prihodnost izstopa: možnost vstavljanja izjem (Fault Injection); vroče prekrivanje popravkov (Hot Patching) za spreminjanje logike delovanja ali popravljanje napak v binarnih zbirkah; ustvarjanje modula za Nginx, ki omogoča ustvarjanje razširitev s pomočjo eBPF programov (na primer za dinamično izbiro poti, predpomnjenje, uveljavljanje varnostnih politik in obvladovanje obremenitev); širitev zmogljivosti podskladi FUSE (na primer, ustvarjanje pod obliko eBPF programov razširitev za FS za predpomnjenje ali upravljanje dostopa).

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster