Grsecurity layihəsinin tərtibatçıları
HKSP yamaqları bir Huawei işçisi tərəfindən nəşr edilib, GitHub profilində Huawei haqqında xatırlanır və layihə adında Huawei sözündən istifadə edir (HKSP - Huawei Kernel Self Protection). Eyni zamanda, Huawei nümayəndələri HKSP layihəsinin şirkətlə əlaqəsini inkar etdilər və kodun işçinin şəxsi təşəbbüsü ilə hazırlandığını, rəsmi Huawei layihəsi olmadığını və şirkətin məhsullarında istifadə edilmədiyini bildirdilər. Aktiv
HKSP kredit strukturunda ofsetlərin təsadüfiləşdirilməsi, istifadəçi identifikatorunun ad sahəsinə (pid ad sahəsi) hücumlardan qorunma, proses yığınının mmap sahəsindən ayrılması, kfree funksiyasına ikiqat çağırışların aşkarlanması, psevdo vasitəsilə sızmaların qarşısının alınması kimi dəyişiklikləri əhatə edir. -FS /proc (/proc/ {modullar, açarlar, açar-istifadəçilər}, /proc/sys/kernel/* və /proc/sys/vm/mmap_min_addr, /proc/kallsyms), təkmilləşdirilmiş istifadəçi məkanı ünvanının təsadüfiləşdirilməsi, əlavə Ptrace mühafizə, təkmilləşdirilmiş smap və smep mühafizəsi, xam soketlər vasitəsilə məlumatların göndərilməsini qadağan etmək, UDP yuvalarında yanlış ünvanları bloklamaq və işləyən proseslərin bütövlüyünü yoxlamaq imkanı. O, həmçinin tipik rootkitləri təqdim etmək cəhdlərini aşkar etməyə yönəlmiş Ksguard nüvə modulunu ehtiva edir.
Yamalar
Grsecurity tərtibatçıları tərəfindən yamağın tədqiqi kodda bir çox səhvlər və zəifliklər aşkar etdi, həmçinin layihənin imkanlarını adekvat şəkildə qiymətləndirməyə imkan verəcək bir təhlükə modelinin olmadığını göstərdi. Kodun təhlükəsiz proqramlaşdırma metodlarından istifadə etmədən yazıldığını aydın şəkildə nümayiş etdirmək üçün işləyicidə əhəmiyyətsiz zəifliyin nümunəsi verilmişdir.
0777 hüquqları ilə yaradılmış /proc/ksguard/state faylı, hər kəsin yazmaq imkanına malik olduğunu göstərir. /proc/ksguard/state-ə yazılmış əmrləri təhlil etmək üçün istifadə edilən ksg_state_write funksiyası hədəf buferin ölçüsünü nəzərə almadan və ötürülən operandın ölçüsünə əsasən verilənlərin yazılacağı tmp[32] buferi yaradır. sətir ölçüsü ilə parametrin yoxlanılması. Bunlar. Nüvə yığınının bir hissəsinin üzərinə yazmaq üçün təcavüzkar sadəcə olaraq /proc/ksguard/state-ə xüsusi formatlaşdırılmış sətir yazmalıdır.
statik ssize_t ksg_state_write(struct faylı *fayl, const char __user *buf,
size_t len, loff_t *ofset)
{
u64 dəyəri;
char tmp[32];
size_t n = 0;
əgər (istifadəçidən_copy(tmp, buf, len))
qayıtmaq -1;
dəyər = simple_strtoul(tmp, '\0', 10);
...
İstismar prototipi:
char buf[4096] = { };
int fd = açıq (“/proc/ksguard/state”, YALNIZ O_YANLIŞ);
əgər (fd >= 0) {
yaz (fd, buf, sizeof(buf));
yaxın(fd);
}
Mənbə: opennet.ru