Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Esitletakse projekti bpftime, mis arendab runtime'i ja virtuaalmasinat eBPF-handlerite tĂ€itmiseks kasutaja ruumis. Bpftime vĂ”imaldab tĂ€ies ulatuses kasutada kasutaja ruumis eBPF-programme jĂ€lgimiseks ja protsesside sekkumiseks, kasutades selliseid funktsioone nagu uprobe ja sĂŒsteemikallutatute programmiline intervjueerimine. TĂ€heldatakse, et tĂ€nu liigsete konteksti vahetuste vĂ€listamisele vĂ”imaldab bpftime saavutada kĂŒmnekordset kulu vĂ€henemist vĂ”rreldes Linuxi kernelis pakutava uprobe ja uretprobe funktsionaalsusega. Lisaks lihtsustab bpftime oluliselt tĂ”rkeotsingut, seda saab potentsiaalselt kasutada mitte-Linuxi kerneliga sĂŒsteemides ning ei nĂ”ua kĂ”rgeid Ă”igusi, mis on vajalikud eBPF-rakenduse laadimiseks kernelisse. Projekti kood on kirjutatud C/C++ keeltes ja jagatakse MIT litsentsi alusel.

SĂŒsteemikallutatute peremeeste jĂ€lgimise ja uprobe-kontrollide integreerimine on teostatud tĂ€idesaatva koodi (binary rewriting) ĂŒmberkirjutamise tehnika abil, kus sĂŒsteemikallutuste, sisenemispunktide ja kohalike funktsioonide kutsed asendatakse ĂŒlemineku suunamisega tĂ”rkeotsingu kĂ€itlejatele vĂ€læ‰§èĄŒć…ƒæŁ‹ç‰Œoodatud rakenduse masinkoodi muutmise kaudu, mis on oluliselt tĂ”husam kui uprobe tasemel kernelis jĂ€rjestamine.

Toetatakse funktsioonide asendamise vĂ”i muutmise, kĂ€itlejate (hook-ide) ja filtrite kinnitamise operatsioone, sĂŒsteemikallutuste parameetrite ĂŒmbersuunamist, blokeerimist vĂ”i asendamist, sisenemise ja vĂ€ljumise jĂ€lgimist ning kĂ€itleja asendamist mis tahes koodis asuvas offset'is. Bpftime saab kinnitada igasugusele töötavale protsessile sĂŒsteemis ilma vajaduseta neid ĂŒmber kĂ€ivitada vĂ”i uuesti ehitada. Bpftime'i asendamine protsessides vĂ”ib toimuda aktiveeritud protsesside jaoks ptrace'i kaudu ning laaditavate jaoks LD_PRELOAD'i kaudu.

Bpftime'i koostisosana areneb runtime, mis vĂ”imaldab eBPF programme kinnitada sĂŒsteemikallutuste jĂ€lgimispunktidele ja uprobe'ile. virtuiaalmasin eBPF JIT, etten eraldatud eBPF programmide tĂ€itmiseks kasutaja protsessi tasandil (lisaks AOT kompileerimise toele); taustaprotsess tuuma suhtlemiseks ja tuuma uprobe alamsĂŒsteemiga ĂŒhilduvuse korraldamiseks (bpftime toetab eBPF laadimise reĆŸiimi kasutaja ruumi tuumast, et tagada koostöö tuuma eBPF programmidega, mida kasutatakse nĂ€iteks kprobe töötlemiseks vĂ”i vĂ”rgufiltrite rakendamiseks).

eBPF virtuaalne masin on vĂ€lja töötatud plug-in teegina ja pakub API-d, mis sarnaneb ubpf-ile, vĂ”imaldades kasutada seda eBPF funktsionaalsuse integreerimiseks teistesse projektidesse. Mitme protsessi andmete kogumiseks toetatakse ĂŒhiselt kasutatavate eBPF Map'ide loomist, mis asuvad jagatud mĂ€lus. Koos bpftime'iga saab kasutada ka tuumas kirjutatud tĂŒĂŒpilisi eBPF töötlejaid ning kompilatsiooniks saab kasutada standardseid tööriistu, mis pĂ”hinevad clang'il ja libbpf'il.

bpftime'i kasutades saavad kasutaja ruumis töötada sellised jĂ€lgimissĂŒsteemid nagu BCC, bpftrace ja Deepflow. NĂ€iteks on nĂ€idatud BCC raamistiku sslsniff skripti kasutamist krĂŒpteeritud nginx'i liikluse analĂŒĂŒsimiseks ja salvestamiseks. Testides vĂ€henes nginx'i jĂ”udlus sslsniffi töötlemisel tuumas 58%, samas kui töötleja viimisega kasutaja ruumi oli see 12,3%.

Protsesside jÀlgimise arhitektuur, mis kasutab originaalset eBPF'i tuumas:

Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Kasutaja ruumis bpftime'i kasutamise jÀlgimise arhitektuur:

Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

HĂŒbriidsĂŒsteem, kus bpftime töötab koos eBPF'iga tuumas, nĂ€iteks vĂ”rgufilterite seadistamiseks vĂ”i eraldi töötlejate kasutamiseks kasutaja ruumis:

Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Tuleviku plaanide seas on mĂ€rgitud: vigade asendamise (Fault Injection) vĂ”imalus; kuumade patchide (Hot Patching) rakendamine tööloogika muutmiseks vĂ”i viga parandamiseks binaarses kogumises; Nginx'i mooduli loomine, mis vĂ”imaldab luua laiendusi eBPF programmide kaudu (nĂ€iteks dĂŒnaamilise marsruudi valiku, vahemĂ€lu rakendamise, turvapoliitikate rakendamise ja koormuse tasakaalustamise jaoks); FUSE alamsĂŒsteemi vĂ”imaluste laiendamine (nĂ€iteks eBPF programmidena laienduste loomine failisĂŒsteemi jaoks vahemĂ€lu vĂ”i juurdepÀÀsu juhtimise jaoks).

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster