Шалгах цэг нь Safe-Linking хамгаалах аргыг санал болгосон нь эмзэг байдлыг ашиглахад илүү төвөгтэй болгодог

Шалгах цэгийн компани танилцуулсан Safe-Linking хамгаалалтын механизм нь malloc дуудлагыг гүйцэтгэх үед хуваарилагдсан буферт заагчийг тодорхойлох эсвэл өөрчлөхөд нөлөөлдөг мөлжлөгүүдийг үүсгэхэд хүндрэл учруулдаг. Safe-Linking нь сул талуудыг ашиглах боломжийг бүрэн хаадаггүй боловч хамгийн бага зардалтай байх нь тодорхой ангиллын мөлжлөгийг бий болгоход ихээхэн хүндрэл учруулдаг, учир нь ашиглагдах буферийн хэт их ачаалалаас гадна энэ тухай мэдээлэл алдагдахад хүргэдэг өөр нэг эмзэг байдлыг олох шаардлагатай байдаг. санах ойд овоолгыг байрлуулах.

Safe-Linking-ийг хэрэгжүүлдэг засваруудыг Glibc (ptmalloc), uClibc-NG (dmalloc), gperftools (tcmalloc) болон Google TCMalloc-т бэлтгэсэн бөгөөд Chromium-д хамгаалалтыг сайжруулахыг санал болгож байна (д.
2012 оноос хойш Chromium нь ижил асуудлыг шийдвэрлэхэд чиглэсэн MaskPtr хамгаалалтын техникийг аль хэдийн суулгасан боловч Checkpoint-ийн шийдэл нь илүү өндөр гүйцэтгэлийг харуулж байна).
Санал болгож буй засваруудыг XNUMX-р сард хүргэхээр аль хэдийн батлагдсан Glibc 3.32 програм болон Safe-Linking нь анхдагчаар идэвхждэг. uClibc-NG нь Safe-Linking-г дэмждэг орсон 1.0.33 хувилбарт багтсан бөгөөд анхдагчаар идэвхжсэн. gperftools (хуучин tcmalloc) дахь өөрчлөлтүүд хүлээн зөвшөөрсөн, гэхдээ дараагийн хувилбарт сонголтоор санал болгоно.

Хөгжүүлэгчид TCMalloc (шинэ tcmalloc) хүлээн авахаас татгалзсан өөрчлөлтГүйцэтгэлийн ноцтой бууралт, бүх зүйл хүлээгдэж буйгаар ажиллаж байгаа эсэхийг тогтмол шалгахын тулд өргөн хүрээтэй туршилтуудыг нэмж оруулах шаардлагатайг дурджээ. Шалгах цэгийн инженерүүдийн туршилтаас үзэхэд Safe-Linking арга нь санах ойн нэмэлт зарцуулалтад хүргэдэггүй бөгөөд овоолгын үйлдлийг гүйцэтгэх үед гүйцэтгэл дунджаар ердөө 0.02%, хамгийн муу тохиолдолд 1.5% (харьцуулбал, нэмэлт зардал) буурсан байна. Chromium-д ашигласан аргыг "2% -иас бага" гэж тооцсон). Оруулсан
Safe-Linking нь free()-г дуудах бүрт 2-3 нэмэлт угсралтын заавар, malloc()-г дуудах бүрт 3-4 зааварчилгааг гүйцэтгэнэ. Эхлүүлэх болон санамсаргүй утга үүсгэх үе шатуудыг ажиллуулах шаардлагагүй.

Шалгах цэг нь Safe-Linking хамгаалах аргыг санал болгосон нь эмзэг байдлыг ашиглахад илүү төвөгтэй болгодог

Safe-Linking нь зөвхөн янз бүрийн нуруулдан хэрэгжүүлэлтийн аюулгүй байдлыг сайжруулахад ашиглагдахаас гадна буферийн хажууд байрлуулсан заагчуудын дангаар холбогдсон жагсаалтыг ашигладаг аливаа өгөгдлийн бүтцэд бүрэн бүтэн байдлын хяналтыг нэмэхэд ашиглаж болно. Энэ аргыг хэрэгжүүлэхэд маш энгийн бөгөөд зөвхөн нэг макро нэмж, кодын дараагийн блокийн заагч дээр ашиглах шаардлагатай (жишээлбэл, Glibc-д зориулсан). өөрчлөлтүүд хэдхэн мөр код). Энэ арга нь дараах өөрчлөлтүүдтэй холбоотой:

+#PROTECT_PTR(pos, ptr) тодорхойлох \
+ ((__typeof (ptr)) ((((хэмжээ_t) pos) >> 12) ^ ((хэмжээ_t) ptr)))

+#REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)-г тодорхойлох

- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...

Аргын мөн чанар нь Fast-Bins болон TCache зэрэг дангаар холбогдсон жагсаалтыг хамгаалахын тулд ASLR хаягийн санамсаргүй хуваарилалтын механизмаас (mmap_base) санамсаргүй өгөгдлийг ашиглах явдал юм. Жагсаалтын дараагийн элементийн заагч руу утгыг хэрэглэхээс өмнө маск хөрвүүлэлт хийж, хуудасны зэрэгцүүлэлтийг шалгана. Заагчийг "(L >> PAGE_SHIFT) XOR (P)" үйлдлийн үр дүнд орлуулах бөгөөд P нь заагчийн утга, L нь заагч хадгалагдаж буй санах ойн байршил юм.

Шалгах цэг нь Safe-Linking хамгаалах аргыг санал болгосон нь эмзэг байдлыг ашиглахад илүү төвөгтэй болгодог

Системд ашиглах үед ASLR (Хаягийн орон зайн байршлыг санамсаргүй болгох) нуруулдан суурь хаягтай L битийн хэсэг нь P кодлох түлхүүр болгон ашигладаг санамсаргүй утгуудыг агуулдаг (12 байт хуудасны хувьд 4096 битийн шилжих үйлдлээр задалсан). Заагч нь анхны хэлбэрээр нь хадгалагдаагүй тул түүнийг солихын тулд овоолгын хуваарилалтын талаархи мэдлэг шаардлагатай тул энэ заль мэхийг ашигласнаар заагчийг хулгайлах эрсдэлийг бууруулдаг. Нэмж дурдахад нөхөөсийн код нь блокийн зэрэгцүүлэлтийг шалгах нэмэлт шалгалтыг агуулдаг бөгөөд энэ нь халдагчид заагчийг тэгш бус утгаар солихыг зөвшөөрдөггүй бөгөөд 64 битийн систем дээр давхарласан битүүдийн тоог мэдэх шаардлагатай байдаг. 15 довтолгооны 16 нь тэгшлэхийг харгалздаггүй.

Энэ арга нь заагчийг хэсэгчлэн дахин бичих (бага байтыг өөрчлөх), заагчийг бүрэн дахин бичих (халдагчийн код руу дахин чиглүүлэх) болон тэгш бус хаяг дахь жагсаалтын байрлалыг өөрчлөх зэрэг халдлагаас хамгаалахад үр дүнтэй. Жишээлбэл, malloc-д Safe-Linking ашиглах нь сүүлийн үед мөлжлөгийг хаах боломжийг олгоно. тодорхойлсон ижил эмзэг байдлын судлаачид CVE-2020-6007 Philips Hue Bridge ухаалаг гэрэлд буфер халиснаас үүдэлтэй бөгөөд төхөөрөмжийг удирдах боломжийг танд олгоно.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх