Kees Cook prezantoi zgjidhje të reja për të përmirësuar sigurinë e pirgjeve të kernelit Linux

Linux

Kees Cook, një ish-shef sysadmin në kernel.org dhe udhëheqës i ekipit të sigurisë Ubuntu, tani punon në Google për të mbrojtur Android dhe ChromeOS, ka lëshuar një sërë rregullimesh që rastësojnë kompensimet e pirgjeve të kernelit kur merren me thirrjet e sistemit. Arnimet përmirësojnë sigurinë e kernelit duke ndryshuar vendndodhjen e pirgut, lose kjo i bën sulmet stack shumë më të vështira dhe më pak të suksesshme

Ideja origjinale për arnimin i përket projektit PaX RANDKSTACK. Në vitin 2019, Elena Reshetova, një inxhiniere në Intel, u përpoq të krijonte një zbatim të kësaj ideje, të përshtatshme për përfshirje në përbërjen kryesore të kernelit Linux.

Më pas, iniciativa u mor nga Kees Cook i cili paraqiti një implementim të përshtatshëm për versionin kryesor të kernelit dhe arnimet e të cilit janë planifikuar për versionin 5.13 të Linux.

Modaliteti do të çaktivizohet si parazgjedhje dhe për ta mundësuar atë, ofrohet parametri i rreshtit të komandës së kernelit "Randomize_kstack_offset = ndezur / çaktivizuar»Dhe cilësimet CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, Për më tepër, shpenzimet e përgjithshme të mundësimit të mënyrës vlerësohen me afërsisht 1% humbje të performancës.

Thelbi i mbrojtjes së propozuar është të zgjidhni një kompensim të rafteve të rastësishme në secilën thirrje të sistemit, gjë që komplikon përcaktimin e paraqitjes së pirgut në memorje edhe nëse merret informacioni i adresës, pasi adresa bazë e pirgut do të ndryshojë në thirrjen tjetër.

Ndryshe nga zbatimi i SISTEMI PAX, në pjesët e propozuara për përfshirje në bërthamë, randomizimi nuk bëhet në fazën fillestare, por pas vendosjes së strukturës pt_regs, gjë që e bën të pamundur përdorimin e metodave të bazuara në ptrace për të përcaktuar një kompensim të rastësishëm gjatë një thirrjeje të gjatë në sistem.

Ndërsa mbrojtjet e pirgjeve të kernelit Linux janë përmirësuar vazhdimisht (harta e grumbujve të bazuar në vmap me faqe mbrojtëse, heqje thread_info, STACKLEAK), sulmuesve u është dashur të gjejnë mënyra të reja për të funksionuar shfrytëzimet e tyre.

Ata kanë dhe vazhdojnë të mbështeten në determinizmin e pirgut të kernelit, në situata kur VMAP_STACK dhe THREAD_INFO_IN_TASK_STRUCT ato nuk ishin të rëndësishme. Për shembull, sulmet e mëposhtme të fundit do të ishin penguar nëse kompensimi i pirgut nuk do të ishte përcaktues midis thirrjeve të sistemit

Qëllimi i funksionit randomize_kstack_offset është të shtoni një kompensim të rastësishëm pasi pt_regs të jetë shtyrë në pirg dhe para se pjesa tjetër e pirgut të fijeve të përdoret gjatë përpunimit të thirrjeve të sistemit dhe ta ndryshoni atë sa herë që një proces lëshon një thirrje të sistemit. Burimi i rastësisë përcaktohet aktualisht nga arkitektura (por x86 përdor bajtin e ulët të rdtsc ()).

Përmirësimet e ardhshme janë të mundshme për burime të ndryshme të entropisë, por jashtë fushës së kësaj patch-i. Gjithashtu, për të shtuar më shumë pa parashikueshmëri, kompensimet e reja zgjidhen në fund të thirrjeve të sistemit (koha e të cilave duhet të jetë më pak e lehtë për tu matur nga hapësira e përdoruesit sesa në kohën e hyrjes së thirrjes së sistemit) dhe ruhen në një ndryshore për CPU, në mënyrë që jetëgjatësia e vlerës të mos mbetet e lidhur në mënyrë të qartë me një detyrë të vetme.

Nuk ka ndryshime të dukshme për këtë në x86 sepse ruajtësi i pirgut është tashmë i paaftë pa kushte për njësinë e përpilimit, por ndryshimi kërkohet në krah64. Fatkeqësisht, nuk ka asnjë atribut që mund të përdoret për të çaktivizuar ruajtësin e pirgut për funksione specifike. Krahasimi me funksionin PaX RANDKSTACK: Funksioni RANDKSTACK rastëson vendndodhjen e fillimit të pirgut (cpu_current_top_of_stack), domethënë, përfshin vendndodhjen e strukturës pt_regs në pirg.

Fillimisht, kjo copë toke ndoqi të njëjtën qasje, por gjatë diskutimeve të fundit është përcaktuar të ketë pak vlerë pasi nëse funksionaliteti ptrace është i disponueshëm për një sulmues, ju mund të përdorni PTRACE_PEEKUSR për të lexuar / shkruar kompensime të ndryshme në strukturën pt_regs, për të vëzhguar sjelljen e memorjes cache të pt_regs kompensim i rafteve të rastësishme.

Më në fund përmendet se implementimi fillestar mbështet procesorët ARM64 dhe x86 / x86_64.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: AB Internet Networks 2008 SL
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.