Imtiyozlarning kuchayishiga olib kelishi mumkin bo'lgan Linux yadrosi axlat yig'uvchisidagi poyga holati

Bir vaqtlar Spectre va Meltdown zaifliklarini aniqlagan Google Project Zero jamoasidan Jann Xorn Linux yadrosi axlat yig'uvchisida zaiflikdan (CVE-2021-4083) foydalanish texnikasini nashr etdi. Zaiflik unix soketlaridagi fayl identifikatorlarini tozalashdagi poyga holati bilan bog'liq bo'lib, mahalliy imtiyozsiz foydalanuvchiga yadro darajasida o'z kodini bajarishga imkon beradi.

Muammo qiziq, chunki poyga holati yuzaga keladigan vaqt oralig'i haqiqiy ekspluatatsiyalarni yaratish uchun juda kichik deb hisoblangan, ammo tadqiqot muallifi shuni ko'rsatdiki, hatto dastlabki shubhali zaifliklar ham haqiqiy hujumlar manbai bo'lishi mumkin, agar ekspluatatsiya yaratuvchisi. zarur ko'nikmalar va vaqt. Yann Horn qanday qilib filigri manipulyatsiyasi yordamida close() va fget() funksiyalarini bir vaqtda chaqirishda yuzaga keladigan poyga holatini to'liq foydalaniladigan zaiflikka kamaytirish va allaqachon bo'shatilgan ma'lumotlarga kirishga erishish mumkinligini ko'rsatdi. yadro ichidagi struktura.

Bir vaqtning o'zida close() va fget() ni chaqirish paytida fayl deskriptorini yopish jarayonida poyga holati yuzaga keladi. Close() ga qo'ng'iroq fget() bajarilgunga qadar sodir bo'lishi mumkin, bu axlat yig'uvchini chalkashtirib yuboradi, chunki qayta hisob-kitobga ko'ra, fayl strukturasi tashqi havolalarga ega bo'lmaydi, lekin fayl identifikatoriga biriktirilgan bo'lib qoladi, ya'ni. Axlat yig'uvchisi strukturaga eksklyuziv kirish huquqiga ega deb o'ylaydi, lekin aslida qisqa vaqt ichida fayl identifikatorlari jadvalidagi qolgan yozuv baribir bo'shatilgan tuzilishga ishora qiladi.

Poyga holatiga tushish ehtimolini oshirish uchun bir nechta fokuslar qo'llanildi, bu tizimga xos optimallashtirishlarni joriy qilishda ekspluatatsiya muvaffaqiyati ehtimolini 30% gacha oshirishga imkon berdi. Masalan, fayl identifikatorlari bo'lgan tuzilishga kirish vaqtini bir necha yuz nanosekundlarga oshirish uchun protsessor keshidan ma'lumotlar keshni boshqa CPU yadrosidagi faollik bilan to'ldirish orqali o'chirildi, bu esa strukturani xotiradan emas, balki xotiradan olish imkonini berdi. tez CPU keshi.

Ikkinchi muhim xususiyat poyga holati vaqtini oshirish uchun apparat taymer tomonidan yaratilgan uzilishlardan foydalanish edi. Vaqt shunday tanlandiki, uzilishni ishlov beruvchi poyga holati yuzaga kelganda ishga tushadi va kodning bajarilishini bir muncha vaqt to'xtatadi. Boshqarishni qaytarishni kechiktirish uchun epoll yordamida kutish navbatidagi 50 mingga yaqin yozuvlar yaratildi, bu esa uzilishni qayta ishlash vositasi orqali qidirishni talab qildi.

Zaiflikdan foydalanish texnikasi 90 kunlik oshkor qilinmagan davrdan keyin oshkor qilindi. Muammo 2.6.32 yadrosidan beri paydo bo'ldi va dekabr oyi boshida tuzatildi. Tuzatish yadro 5.16-ga kiritilgan va shuningdek, yadroning LTS filiallariga va tarqatishlarda taqdim etilgan yadro paketlariga o'tkazildi. Shunisi e'tiborga loyiqki, zaiflik MSG_PEEK bayrog'ini qayta ishlashda axlat yig'uvchida namoyon bo'ladigan CVE-2021-0920 shunga o'xshash muammoni tahlil qilish paytida aniqlangan.

Manba: opennet.ru

a Izoh qo'shish