Линукс цөмийг хамгаалахын тулд Huawei-ийн ажилтны санал болгосон засваруудын аюулгүй байдлын асуудал

Grsecurity төслийн хөгжүүлэгчид эргэв нөхөөсийн багцад өчүүхэн ашиглагдах эмзэг байдал байгаа эсэхэд анхаарлаа хандуулаарай HKSP (Huawei Kernel Self Protection), хэдхэн хоногийн өмнө санал болгосон Линуксийн цөмийн аюулгүй байдлыг сайжруулах. Нөхцөл байдал сануулж байна Samsung-ийн хэрэг, системийн аюулгүй байдлыг сайжруулах оролдлого нь шинэ эмзэг байдал үүсэхэд хүргэж, төхөөрөмжүүдийг эвдэхэд хялбар болгосон.

HKSP засваруудыг Huawei-ийн ажилтан нийтэлсэн бөгөөд GitHub профайл дээр Huawei-ийн тухай дурдсан, мөн төслийн нэрэнд Huawei гэдэг үгийг ашигласан (HKSP - Huawei Kernel Self Protection). Үүний зэрэгцээ Huawei-ийн төлөөлөгчид HKSP төслийг тус компанитай холбосон гэдгийг үгүйсгэж, кодыг ажилтны хувийн санаачилгаар боловсруулсан, Huawei-ийн албан ёсны төсөл биш бөгөөд компанийн бүтээгдэхүүнд ашиглагдаагүй гэж мэдэгдэв. Асаалттай GitHub хуудас HKSP буцаан илрүүлсний дараа эмзэг байдал бас нэмэгдсэн байна Энэ төслийг миний чөлөөт цагаараа судалгааны зорилгоор боловсруулж байгааг анхаарна уу.

HKSP нь кредитийн бүтэц дэх офсетуудыг санамсаргүй болгох, хэрэглэгчийн танигчийн нэрийн зай (pid нэрийн талбар) руу халдахаас хамгаалах, mmap талбараас процессын стекийг тусгаарлах, kfree функц руу давхар дуудлагыг илрүүлэх, псевдогоор дамжуулан алдагдлыг хаах зэрэг өөрчлөлтүүдийг багтаасан болно. -FS /proc (/proc/ {модуль, түлхүүр, түлхүүр хэрэглэгчид}, /proc/sys/kernel/* болон /proc/sys/vm/mmap_min_addr, /proc/kallsyms), хэрэглэгчийн зайны хаягийн санамсаргүй хуваарилалтыг сайжруулсан, нэмэлт Ptrace хамгаалалт, сайжруулсан smap болон smep хамгаалалт, түүхий залгуураар өгөгдөл илгээхийг хориглох, UDP залгуур дахь буруу хаягийг хаах, ажиллаж байгаа процессуудын бүрэн бүтэн байдлыг шалгах чадвар. Энэ нь мөн ердийн руткит нэвтрүүлэх оролдлогыг илрүүлэх зорилготой Ksguard цөмийн модулийг агуулдаг.

Засварууд дуудсан Линуксийн цөмийн тогтвортой салбарыг хадгалах үүрэгтэй Грег Кроа-Хартман сонирхож байсан бөгөөд зохиогчоос үндсэн цөм рүү хянах, сурталчлах ажлыг хялбарчлахын тулд цул нөхөөсийг хэсэг болгон хуваахыг хүссэн. Кис Күүк, дарга аа ноорог дээр сурталчилгаа Линукс цөм дэх идэвхтэй хамгаалалтын технологи, мөн эерэгээр засварууд дээр хариу өгч, асуудлын дотроос x86 архитектуртай холбоотой, олон горимуудын мэдэгдлийн шинж чанарт анхаарлаа хандуулсан бөгөөд энэ нь зөвхөн асуудлын талаархи мэдээллийг бүртгэдэг боловч үүнийг хаахыг оролддоггүй.

Grsecurity хөгжүүлэгчид нөхөөсийг судалж үзэхэд кодын олон алдаа, сул талууд илэрсэн бөгөөд төслийн чадавхийг зохих ёсоор үнэлэх боломж олгох аюулын загвар байхгүй байгааг харуулсан. Аюулгүй програмчлалын аргуудыг ашиглахгүйгээр код бичсэнийг тодорхой харуулахын тулд зохицуулагчийн өчүүхэн эмзэг байдлын жишээг өгсөн болно.
0777 эрхээр үүсгэгдсэн /proc/ksguard/state файл нь хүн бүр бичих эрхтэй гэсэн үг юм. /proc/ksguard/state-д бичсэн командуудыг задлахад ашигладаг ksg_state_write функц нь зорилтот буферийн хэмжээг харгалзахгүйгээр дамжуулсан операндын хэмжээнээс хамаарч өгөгдөл бичих tmp[32] буфер үүсгэдэг. параметрийг мөрийн хэмжээгээр шалгаж байна. Тэдгээр. Цөмийн стекийн хэсгийг дарж бичихийн тулд халдагчид /proc/ksguard/state руу тусгайлан форматласан мөр бичихэд л хангалттай.

статик ssize_t ksg_state_write(бүтцийн файл *файл, const char __хэрэглэгч *buf,
size_t len, loff_t *офсет)
{
u64 утга;
char tmp[32];
хэмжээ_t n = 0;

хэрэв (хэрэглэгчээс хуулах(tmp, buf, len))
буцах -1;

утга = simple_strtoul(tmp, '\0', 10);
...

Ашиглалтын прототип:

char buf[4096] = {};
int fd = нээлттэй(“/proc/ksguard/state”, O_WRONLY);
хэрэв (fd >= 0) {
бичих(fd, buf, sizeof(buf));
хаах(fd);
}

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

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