Linux yadrosini himoya qilish uchun Huawei xodimi tomonidan taklif qilingan yamoqlardagi xavfsizlik muammolari

Grsecurity loyihasini ishlab chiquvchilar tortdi yamoq to'plamida arzimas tarzda foydalaniladigan zaiflik mavjudligiga e'tibor HKSP (Huawei Kernel Self Protection), bir necha kun oldin taklif qilingan Linux yadrosi xavfsizligini yaxshilash uchun. Vaziyat eslatadi Samsung bilan ish, unda tizim xavfsizligini yaxshilashga urinish yangi zaiflikning paydo bo'lishiga olib keldi va qurilmalarni buzishni osonlashtirdi.

HKSP yamoqlari Huawei xodimi tomonidan nashr etilgan, GitHub profilida Huawei haqida eslatma mavjud va loyiha nomida Huawei so‘zidan foydalaniladi (HKSP - Huawei Kernel Self Protection). Shu bilan birga, Huawei vakillari HKSP loyihasining kompaniya bilan bog‘lanishini rad etib, kod xodimning shaxsiy tashabbusi bilan ishlab chiqilgani, Huawei’ning rasmiy loyihasi emasligi va kompaniya mahsulotlarida qo‘llanilmasligini ma’lum qildi. Yoniq GitHub sahifasi HKSP orqaga qarab kashfiyotdan keyin zaifliklar ham qo'shildi E'tibor bering, loyiha mening bo'sh vaqtimda tadqiqot maqsadlarida ishlab chiqilmoqda.

HKSP kredit tuzilmasidagi ofsetlarni tasodifiylashtirish, foydalanuvchi identifikatori nom maydoniga hujumlardan himoya qilish (pid nom maydoni), jarayon stekini mmap maydonidan ajratish, kfree funksiyasiga qo'sh qo'ng'iroqlarni aniqlash, psevdo orqali sizib chiqishni blokirovka qilish kabi o'zgarishlarni o'z ichiga oladi. -FS /proc (/proc/ {modullar, kalitlar, kalit-foydalanuvchilar}, /proc/sys/kernel/* va /proc/sys/vm/mmap_min_addr, /proc/kallsyms), yaxshilangan foydalanuvchi maydoni manzilini tasodifiylashtirish, qo'shimcha Ptrace himoya, kengaytirilgan smap va smep himoyasi, xom rozetkalar orqali ma'lumotlarni yuborishni taqiqlash, UDP rozetkalarida noto'g'ri manzillarni bloklash va ishlaydigan jarayonlarning yaxlitligini tekshirish. Shuningdek, u odatiy rootkitlarni joriy etishga urinishlarni aniqlashga qaratilgan Ksguard yadro modulini ham o'z ichiga oladi.

Yamalar chaqirdi Linux yadrosining barqaror filialini saqlash uchun mas'ul bo'lgan Greg Kroah-Xartman qiziqish uyg'otdi va muallifdan ko'rib chiqish va asosiy yadroga ko'tarishni soddalashtirish uchun monolit yamoqni qismlarga ajratishni so'radi. Kees Kuk, bosh qoralama haqida rag'batlantirish Linux yadrosida faol himoya texnologiyasi ham ijobiy yamoqlarga javob berdi va muammolar orasida x86 arxitekturasi bilan bog'lanishiga va ko'plab rejimlarning bildirishnoma xarakteriga e'tibor qaratdi, ular faqat muammo haqida ma'lumotni qayd qiladi, lekin uni blokirovka qilishga urinmaydi.

Grsecurity ishlab chiquvchilari tomonidan yamoqni o'rganish koddagi ko'plab xatolar va zaif tomonlarni aniqladi, shuningdek, ularga loyihaning imkoniyatlarini etarli darajada baholash imkonini beradigan tahdid modeli yo'qligini ko'rsatdi. Kod xavfsiz dasturlash usullaridan foydalanmasdan yozilganligini aniq ko'rsatish uchun ishlov beruvchidagi ahamiyatsiz zaiflikning misoli keltirilgan.
0777 huquqlar bilan yaratilgan /proc/ksguard/state fayli, bu hamma yozish huquqiga ega ekanligini anglatadi. /proc/ksguard/state-ga yozilgan buyruqlarni tahlil qilish uchun ishlatiladigan ksg_state_write funksiyasi tmp[32] buferini yaratadi, unga maqsadli bufer hajmini hisobga olmagan holda va uzatilgan operand hajmiga qarab ma'lumotlar yoziladi. parametrni satr o'lchami bilan tekshirish. Bular. Yadro stekining bir qismini qayta yozish uchun tajovuzkor /proc/ksguard/state ga maxsus formatlangan qator yozishi kerak.

statik ssize_t ksg_state_write(struct fayli *fayl, const char __user *buf,
size_t len, loff_t *ofset)
{
u64 qiymati;
char tmp[32];
size_t n = 0;

agar (foydalanuvchidan_copy (tmp, buf, len))
qaytish -1;

qiymat = simple_strtoul(tmp, '\0', 10);
...

Exploit prototipi:

char buf[4096] = {};
int fd = ochiq ("/proc/ksguard/state", O_WRONLY);
agar (fd >= 0) {
write(fd, buf, sizeof(buf));
yopish (fd);
}

Manba: opennet.ru

a Izoh qo'shish