Projekti bpftime zhvillon implementimin e eBPF, që funksionon në hapësirën e përdoruesit.

Projekti bpftime është prezantuar, duke zhvilluar një runtime dhe makinë virtuale për ekzekutimin e përpunuesve eBPF në hapësirën e përdoruesit. Bpftime lejon ekzekutimin e programeve eBPF për gjurmimin dhe ndërhyrjen në funksionimin e proceseve krejtësisht në hapësirën e përdoruesit, duke përdorur mundësitë si uprobe dhe kapjen programore të thirrjeve sistemore. Vërehet se, duke përjashtuar kalimet e panevojshme të kontekstit, bpftime arrin një reduktim dhjetëfish të kostove krahasuar me përdorimin e funksionalitetit uprobe dhe uretprobe të ofruar nga bërthama Linux. Për më tepër, bpftime e thjeshton ndjeshëm debimin, potencialisht mund të përdoret në sisteme pa bërthamë Linux dhe nuk kërkon privilegje të avancuara të nevojshme për ngarkimin e aplikacionit eBPF në bërthamë. Kodi i projektit është shkruar në gjuhët C/C++ dhe shpërndahet nën licencën MIT.

Kapja e thirrjeve sistemore dhe integrimi i kontrollimeve uprobe është realizuar duke përdorur teknikën e ri-shkrimit të kodit ekzekutiv (binary rewriting), ku thirrjet në thirrje sistemore, pika hyrëse dhe funksione lokale zëvendësohen me kalime në trajtuesit debues përmes modifikimit të kodit të makinës së aplikacionit në ekzekutim, që është shumë më efektive sesa organizimi i kapjes duke përdorur uprobe në nivelin e bërthamës Linux.

Mbështeten operacionet e zëvendësimit ose ndryshimit të funksioneve, lidhjeve të trajtuesve (hook) dhe filtreve, ridrejtimit, bllokimit ose zëvendësimit të parametrave të thirrjeve sistemore, kapjes së pikave hyrëse dhe dalëse nga funksionet, si dhe zëvendësimi i trajtuesit në ndonjë offset të rastësishëm në kod. Bpftime mund të lidhet me çdo proces në funksion në sistem pa pasur nevojë për rinstalim ose rikonstruksion. Zëvendësimi i bpftime në procese mund të bëhet për proceset që punojnë përmes ptrace, dhe për ata që ngarkohen përmes LD_PRELOAD.

Në përbërjen e bpftime zhvillohet një runtime që lejon lidhen programe eBPF me pikat e gjurmimit të thirrjeve sistemore dhe uprobe; makinë virtuale eBPF me JIT për ekzekutimin e ndarë të programeve eBPF në nivelin e procesit të përdoruesit (për më tepër mbështetet kompilimi AOT); një proces në sfond për ndërveprimin me bërthamën dhe organizimin e kompatibilitetit me nën-sistemin uprobe të bërthamës (bpftime mbështet modalitetin e ngarkimit të eBPF në hapësirën e përdoruesit nga bërthama për të organizuar bashkëpunimin me programet eBPF në bërthamë, të përdorura, për shembull, për trajtimin e kprobe ose për vendosjen e filtrave rrjetërore).

Makinë virtuale eBPF është formuar si një bibliotekë e lidhshme dhe ofron një API të ngjashëm me ubpf, duke e bërë atë të mundshme për integrimin e funksionalitetit eBPF në projekte të tjera. Për grumbullimin e të dhënave nga disa procese mbështetet krijimi i hartave eBPF të përbashkëta, të vendosura në_memorie të ndarë. Së bashku me bpftime, mund të përdoren trajtues të standardizuar eBPF të shkruar për përdorim në bërthamë, dhe për ndërtim mund të përdoren mjete standarde të bazuara në clang dhe libbpf.

Me bpftime në hapësirën e përdoruesit mund të ekzekutohen sisteme gjurmimi si BCC, bpftrace dhe Deepflow. Për shembull, është demonstruar përdorimi i skenarit sslsniff nga frameworku BCC për analizimin dhe ruajtjen e trafikut të enkriptuar në nginx. Në testet e zhvilluara, performanca e nginx në ekzekutimin e sslsniff në anën e bërthamës zvogëlohet me 58%, ndërsa kur trajtuesi është zhvendosur në hapësirën e përdoruesit me 12.3%.

Arqitektura e gjurmimit të proceseve duke përdorur eBPF-original në bërthamë:

Projekti bpftime zhvillon implementimin e eBPF, që funksionon në hapësirën e përdoruesit.

Arqitektura e gjurmimit në hapësirën e përdoruesit duke përdorur bpftime:

Projekti bpftime zhvillon implementimin e eBPF, që funksionon në hapësirën e përdoruesit.

Rekordi hibrid, në të cilin bpftime punon së bashku me eBPF në bërthamë, për shembull, për vendosjen e filtrave rrjetërore ose për zhvendosjen e trajtuesve të veçantë në hapësirën e përdoruesit:

Projekti bpftime zhvillon implementimin e eBPF, që funksionon në hapësirën e përdoruesit.

Nga planet për të ardhmen, përmendet: mundësia e zëvendësimit të përjashtimeve (Fault Injection); ngjitja e nxehtë e patch-eve (Hot Patching) për të ndryshuar logjikën e punës ose për të korrigjuar gabimet në ndërtimet binarë; krijimi i një moduli për Nginx, që lejon krijimin e zgjerimeve duke përdorur programe eBPF (për shembull, për zgjedhjen dinamike të rrugëve, ruajtjen e caches, aplikimin e politikave të sigurisë dhe balancimin e ngarkesës); zgjerimi i mundësive të nën-sistemit FUSE (për shembull, krijimi në formën e programeve eBPF të zgjerimeve për FS për ruajtjen e caches ose menaxhimin e qasjes).

Burimi: opennet.ru

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster