Tekshirish punkti zaifliklardan foydalanishni qiyinlashtirgan xavfsiz ulanishni himoya qilish texnikasini taklif qildi

Tekshirish punkti kompaniyasi taqdim Malloc qo'ng'irog'ini bajarishda ajratilgan buferlarga ko'rsatgichlarni belgilash yoki o'zgartirishni manipulyatsiya qiluvchi ekspluatatsiyalarni yaratishni qiyinlashtiradigan xavfsiz ulanishni himoya qilish mexanizmi. Safe-Linking zaifliklardan foydalanish imkoniyatini to'liq to'sib qo'ymaydi, lekin minimal qo'shimcha xarajatlar bilan ma'lum toifadagi ekspluatatsiyalarni yaratishni sezilarli darajada murakkablashtiradi, chunki ekspluatatsiya qilinadigan bufer to'lib ketishiga qo'shimcha ravishda, ma'lumotlarning sizib chiqishiga olib keladigan yana bir zaiflikni topish kerak. to'pning xotiraga joylashishi.

Glibc (ptmalloc), uClibc-NG (dmalloc), gperftools (tcmalloc) va Google TCMalloc uchun xavfsiz ulanishni amalga oshiradigan yamoqlar tayyorlangan va Chromium himoyasini oshirish uchun ham taklif qilingan.
2012-yildan beri Chromium xuddi shu muammoni hal qilishga qaratilgan MaskPtr himoya texnikasini qurgan, ammo Checkpoint yechimi yuqori samaradorlikni namoyish etadi).
Tavsiya etilgan yamoqlar avgust oyida yetkazib berish uchun allaqachon tasdiqlangan Glibc 3.32 va Safe-Linking sukut bo'yicha yoqiladi. uClibc-NG Safe-Linking-ni qo'llab-quvvatlaydi kirdi 1.0.33 versiyasiga kiritilgan va sukut bo'yicha yoqilgan. Gperftools-dagi o'zgarishlar (eski tcmalloc) qabul qilingan, lekin kelajakdagi versiyada variant sifatida taqdim etiladi.

Ishlab chiquvchilar TCMalloc (yangi tcmalloc) qabul qilishdan bosh tortdi o'zgartirish, ishlashning jiddiy pasayishi va har bir narsa kutilganidek ishlayotganini muntazam tekshirish uchun keng qamrovli testlarni qo'shish zarurligini keltirib. Tekshirish punkti muhandislari tomonidan o'tkazilgan testlar shuni ko'rsatdiki, Safe-Linking usuli qo'shimcha xotira sarfiga olib kelmaydi va yig'ish operatsiyalarini bajarishda unumdorlik o'rtacha atigi 0.02% ga, eng yomon holatda esa 1.5% ga kamayadi (taqqoslash uchun, umumiy xarajatlar Chromium-da qo'llaniladigan usulda "2% dan kam" deb baholanadi). Inklyuziya
Safe-Linking har safar free() chaqirilganda 2-3 ta qoʻshimcha yigʻish koʻrsatmalari va malloc() har safar chaqirilganda 3-4 ta koʻrsatma bajariladi. Boshlash va tasodifiy qiymat yaratish bosqichlarini ishga tushirish shart emas.

Tekshirish punkti zaifliklardan foydalanishni qiyinlashtirgan xavfsiz ulanishni himoya qilish texnikasini taklif qildi

Safe-Linking nafaqat turli yig'ma ilovalarning xavfsizligini yaxshilash, balki buferlarning o'zlari yonida joylashgan ko'rsatkichlarning bir-biriga bog'langan ro'yxatidan foydalanadigan har qanday ma'lumotlar tuzilmalariga yaxlitlik boshqaruvlarini qo'shish uchun ham ishlatilishi mumkin. Usulni amalga oshirish juda oddiy va faqat bitta makrosni qo'shish va uni koddagi keyingi blokga ko'rsatgichlarga qo'llashni talab qiladi (masalan, Glibc uchun o'zgarishlar bir necha qator kod). Usul quyidagi o'zgarishlarga asoslanadi:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

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

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

Usulning mohiyati Fast-Bins va TCache kabi bir-biriga bog'langan ro'yxatlarni himoya qilish uchun ASLR manzilini tasodifiy aniqlash mexanizmidan (mmap_base) tasodifiy ma'lumotlardan foydalanishdir. Qiymat ko'rsatgichga ro'yxatdagi keyingi elementga qo'llanilishidan oldin u niqobni o'zgartiradi va sahifa hizalanishini tekshiradi. Ko'rsatkich "(L >> PAGE_SHIFT) XOR (P)" operatsiyasi natijasi bilan almashtiriladi, bu erda P - ko'rsatkichning qiymati va L - ko'rsatgich saqlanadigan xotira joyi.

Tekshirish punkti zaifliklardan foydalanishni qiyinlashtirgan xavfsiz ulanishni himoya qilish texnikasini taklif qildi

Tizimda foydalanilganda ASLR (Address Space Layout Randomization) asosiy manzilli L bitlarining bir qismi P kodlash uchun kalit sifatida ishlatiladigan tasodifiy qiymatlarni o'z ichiga oladi (12 baytli sahifalar uchun 4096 bitli siljish operatsiyasi bilan chiqariladi). Ushbu manipulyatsiya ekspluatatsiyada ko'rsatgichni o'g'irlash xavfini kamaytiradi, chunki ko'rsatgich asl ko'rinishida saqlanmaydi va uni almashtirish uchun yig'ish taqsimotini bilish kerak. Bundan tashqari, yamoq kodi, shuningdek, blokirovkalarni tekislash uchun qo'shimcha tekshiruvni o'z ichiga oladi, bu tajovuzkorga ko'rsatgichni tekislanmagan qiymat bilan almashtirishga imkon bermaydi va hizalanadigan bitlar sonini bilishni talab qiladi, bu 64 bitli tizimlarda qo'shimcha ravishda blokirovka qilishga imkon beradi. Hizalamayı hisobga olmagan 15 hujumdan 16 tasi.

Usul ko'rsatkichni qisman qayta yozish (past baytlarni o'zgartirish), to'liq ko'rsatkichni qayta yozish (tajovuzkor kodiga yo'naltirish) va moslashtirilmagan manzilda ro'yxat o'rnini o'zgartirishdan foydalanadigan hujumlardan himoya qilish uchun samarali. Misol tariqasida, malloc-da Safe-Linking-dan foydalanish yaqinda ekspluatatsiyani blokirovka qilishga imkon berishi ko'rsatilgan. aniqlangan bir xil zaiflik tadqiqotchilari tomonidan CVE-2020-6007 Flibs Hue Bridge aqlli yorug'ligida bufer to'lib ketishi natijasida yuzaga kelgan va qurilmani boshqarish imkonini beradi.

Manba: opennet.ru

a Izoh qo'shish