Grsecurity төслийн хөгжүүлэгчид
HKSP засваруудыг Huawei-ийн ажилтан нийтэлсэн бөгөөд GitHub профайл дээр Huawei-ийн тухай дурдсан, мөн төслийн нэрэнд Huawei гэдэг үгийг ашигласан (HKSP - Huawei Kernel Self Protection). Үүний зэрэгцээ Huawei-ийн төлөөлөгчид HKSP төслийг тус компанитай холбосон гэдгийг үгүйсгэж, кодыг ажилтны хувийн санаачилгаар боловсруулсан, Huawei-ийн албан ёсны төсөл биш бөгөөд компанийн бүтээгдэхүүнд ашиглагдаагүй гэж мэдэгдэв. Асаалттай
HKSP нь кредитийн бүтэц дэх офсетуудыг санамсаргүй болгох, хэрэглэгчийн танигчийн нэрийн зай (pid нэрийн талбар) руу халдахаас хамгаалах, mmap талбараас процессын стекийг тусгаарлах, kfree функц руу давхар дуудлагыг илрүүлэх, псевдогоор дамжуулан алдагдлыг хаах зэрэг өөрчлөлтүүдийг багтаасан болно. -FS /proc (/proc/ {модуль, түлхүүр, түлхүүр хэрэглэгчид}, /proc/sys/kernel/* болон /proc/sys/vm/mmap_min_addr, /proc/kallsyms), хэрэглэгчийн зайны хаягийн санамсаргүй хуваарилалтыг сайжруулсан, нэмэлт Ptrace хамгаалалт, сайжруулсан smap болон smep хамгаалалт, түүхий залгуураар өгөгдөл илгээхийг хориглох, UDP залгуур дахь буруу хаягийг хаах, ажиллаж байгаа процессуудын бүрэн бүтэн байдлыг шалгах чадвар. Энэ нь мөн ердийн руткит нэвтрүүлэх оролдлогыг илрүүлэх зорилготой Ksguard цөмийн модулийг агуулдаг.
Засварууд
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