Gisugyot sa Checkpoint ang teknik sa pagpanalipod sa Safe-Linking, nga nagpalisud sa pagpahimulos sa mga kahuyangan

Kompanya sa Checkpoint gipresentar Mekanismo sa pagpanalipod sa Safe-Linking, nga nagpalisud sa paghimo sa mga pagpahimulos nga nagmaniobra sa kahulugan o pagbag-o sa mga pointer sa mga buffer nga gigahin kung nagpatuman sa usa ka malloc nga tawag. Ang Safe-Linking dili hingpit nga makababag sa posibilidad sa pagpahimulos sa mga kahuyangan, apan sa gamay nga overhead kini makapakomplikado sa paghimo sa pipila ka mga kategoriya sa mga pagpahimulos, tungod kay dugang pa sa mapahimuslanon nga buffer overflow, gikinahanglan ang pagpangita og lain nga kahuyangan nga maoy hinungdan sa pag-leakage sa impormasyon bahin sa ang pagbutang sa tapok sa memorya.

Ang mga patch nga nagpatuman sa Safe-Linking giandam na para sa Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ug Google TCMalloc, ug gisugyot usab alang sa pag-upgrade sa proteksyon sa Chromium (sa
Sukad sa 2012, ang Chromium nagtukod na sa MaskPtr protection technique nga gitumong sa pagsulbad sa samang problema, apan ang solusyon gikan sa Checkpoint nagpakita sa mas taas nga performance).
Ang gisugyot nga mga patch naaprobahan na alang sa pagpadala sa pagpagawas sa Agosto Glibc 3.32 ug ang Safe-Linking ma-enable pinaagi sa default. Gisuportahan sa uClibc-NG ang Safe-Linking nisulod gilakip sa pagpagawas sa 1.0.33 ug gipalihok pinaagi sa default. Mga pagbag-o sa gperftools (daan nga tcmalloc) gidawat, apan itanyag isip kapilian sa umaabot nga pagpagawas.

Mga Developer TCMalloc (bag-ong tcmalloc) nagdumili sa pagdawat pagbag-o, nga naghisgot sa grabe nga pagkadaot sa pasundayag ug ang panginahanglan sa pagdugang sa daghang mga pagsulay aron kanunay nga masusi nga ang tanan nagtrabaho sama sa gipaabut. Gipakita sa pagsulay sa mga inhenyero sa Checkpoint nga ang pamaagi sa Safe-Linking wala magdala sa dugang nga pagkonsumo sa memorya, ug ang pasundayag kung magbuhat sa mga operasyon sa tambak mikunhod sa aberids nga 0.02%, ug sa labing grabe nga senaryo sa kaso sa 1.5% (alang sa pagtandi, ang overhead sa ang pamaagi nga gigamit sa Chromium gibanabana nga "ubos sa 2%"). Paglakip
Ang Safe-Linking moresulta sa 2-3 ka dugang nga mga instruksiyon sa asembliya nga ipatuman sa matag higayon nga libre() ang tawag, ug 3-4 ka instruksiyon sa matag higayon nga malloc() tawgon. Dili kinahanglan ang pagpadagan sa pagsugod ug random value generation stages.

Gisugyot sa Checkpoint ang teknik sa pagpanalipod sa Safe-Linking, nga nagpalisud sa pagpahimulos sa mga kahuyangan

Ang Safe-Linking mahimong gamiton dili lamang aron mapausbaw ang seguridad sa lain-laing mga pagpatuman sa tapok, kondili aron usab makadugang sa mga kontrol sa integridad sa bisan unsang istruktura sa datos nga naggamit sa tagsa-tagsa ka link nga mga listahan sa mga pointer nga gibutang sunod sa mga buffer mismo. Ang pamaagi yano ra kaayo nga ipatuman ug nanginahanglan lamang pagdugang usa ka macro ug ipadapat kini sa mga pointer sa sunod nga bloke sa code (pananglitan, alang sa Glibc nag-usab pipila lang ka linya sa code). Ang pamaagi naglangkob sa mosunod nga mga pagbag-o:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((gidak-on_t) pos) >> 12) ^ ((gidak-on_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- sunod nga = p->fd;
+ sunodp = REVEAL_PTR (p->fd);
...

Ang esensya sa pamaagi mao ang paggamit sa random data gikan sa ASLR address randomization mechanism (mmap_base) aron maprotektahan ang mga single linked list sama sa Fast-Bins ug TCache. Sa dili pa ang kantidad i-apply sa usa ka pointer sa sunod nga elemento sa lista, maghimo kini usa ka pagkabig sa maskara ug susihon ang pag-align sa panid. Ang pointer gipulihan sa resulta sa operasyon "(L >> PAGE_SHIFT) XOR (P)", diin ang P mao ang bili sa pointer ug ang L mao ang lugar sa memorya diin ang pointer gitipigan.

Gisugyot sa Checkpoint ang teknik sa pagpanalipod sa Safe-Linking, nga nagpalisud sa pagpahimulos sa mga kahuyangan

Kung gigamit sa sistema ASLR (Address Space Layout Randomization) nga bahin sa L bits nga adunay heap base address adunay mga random values ​​​​nga gigamit isip yawe sa pag-encode sa P (kinuha sa usa ka 12-bit shift operation alang sa 4096-byte nga mga pahina). Kini nga pagmaniobra makapamenos sa risgo sa pag-hijack sa pointer sa usa ka pagpahimulos, tungod kay ang pointer wala gitipigan sa orihinal nga porma niini ug ang pag-ilis niini nagkinahanglan og kahibalo sa alokasyon sa tapok. Dugang pa, ang patch code naglangkob usab sa usa ka dugang nga tseke alang sa block alignment, nga dili magtugot sa usa ka tig-atake sa pag-ilis sa usa ka pointer sa usa ka dili aligned nga bili ug nagkinahanglan og kahibalo sa gidaghanon sa mga bits nga aligned, nga sa 64-bit nga mga sistema sa dugang nga nagtugot sa blocking. 15 sa 16 ka pagsulay sa pag-atake nga wala magtagad sa paglinya.

Epektibo ang pamaagi sa pagpanalipod batok sa mga pag-atake nga naggamit sa partial pointer rewriting (pag-usab sa ubos nga bytes), kompleto nga pointer rewriting (pag-redirect sa kodigo sa tig-atake) ug pag-usab sa posisyon sa lista sa dili aligned nga adres. Ingon usa ka pananglitan, gipakita nga ang paggamit sa Safe-Linking sa malloc magtugot sa pag-block sa pagpahimulos bag-o lang. giila sa parehas nga mga tigdukiduki sa kahuyang CVE-2020-6007 sa intelihenteng suga sa Philips Hue Bridge, tungod sa pag-awas sa buffer ug gitugotan ka nga makontrol ang aparato.

Source: opennet.ru

Idugang sa usa ka comment