LKRG 0.8 մոդուլի թողարկում՝ Linux միջուկի խոցելիությունների շահագործումից պաշտպանվելու համար

Openwall նախագիծ հրատարակվել միջուկի մոդուլի թողարկում LKRG 0.8 (Linux Kernel Runtime Guard), որը նախատեսված է միջուկի կառուցվածքների ամբողջականության հարձակումները և խախտումները հայտնաբերելու և արգելափակելու համար: Օրինակ, մոդուլը կարող է պաշտպանել գործող միջուկի չարտոնված փոփոխություններից և օգտագործողի գործընթացների թույլտվությունները փոխելու փորձերից (բացահայտում է շահագործման օգտագործումը): Մոդուլը հարմար է ինչպես Linux միջուկի համար արդեն հայտնի շահագործումներից պաշտպանություն կազմակերպելու համար (օրինակ, այն իրավիճակներում, երբ դժվար է համակարգում միջուկը թարմացնելը), այնպես էլ դեռ անհայտ խոցելիությունների համար շահագործումներին հակազդելու համար: Ծրագրի կոդը տարածվում է լիցենզավորված GPLv2-ի համաձայն:

Նոր տարբերակի փոփոխություններից.

  • LKRG նախագծի դիրքավորումը փոխվել է, որն այլևս բաժանված չէ առանձին ենթահամակարգերի՝ ամբողջականությունը ստուգելու և շահագործումների օգտագործումը որոշելու համար, այլ ներկայացված է որպես ամբողջական արտադրանք՝ հարձակումների և ամբողջականության տարբեր խախտումների հայտնաբերման համար.
  • Համատեղելիությունը տրամադրվում է Linux միջուկների հետ 5.3-ից մինչև 5.7, ինչպես նաև միջուկների հետ, որոնք կազմված են ագրեսիվ GCC օպտիմիզացիաներով, առանց CONFIG_USB և CONFIG_STACKTRACE ընտրանքների կամ CONFIG_UNWINDER_ORC տարբերակի, ինչպես նաև միջուկների հետ, որոնք չունեն LKRG ֆունկցիաներ, եթե դրանք hook չեն կարող: ազատվել;
  • Կառուցելիս CONFIG_* միջուկի որոշ պարտադիր կարգավորումներ ստուգվում են՝ անհասկանալի խափանումների փոխարեն իմաստալից սխալի հաղորդագրություններ ստեղծելու համար;
  • Ավելացվեց սպասման (ACPI S3, կասեցում RAM) և քնի (S4, կասեցում սկավառակի վրա) ռեժիմների աջակցություն;
  • Ավելացվեց DKMS աջակցություն Makefile-ին;
  • Իրականացվել է 32-բիթանոց ARM հարթակների փորձարարական աջակցություն (փորձարկվել է Raspberry Pi 3 Model B-ի վրա): Նախկինում հասանելի AArch64 (ARM64) աջակցությունն ընդլայնվել է Raspberry Pi 4 տախտակի հետ համատեղելիություն ապահովելու համար.
  • Ավելացվել են նոր կեռիկներ, ներառյալ ընդունակ() զանգերի մշակիչը՝ ավելի լավ բացահայտելու շահագործումները, որոնք շահարկում են «կարողությունները«, ոչ թե մշակել ID-ները (Լիազորագիր);
  • Առաջարկվել է նոր տրամաբանություն անվանատարածքի սահմանափակումներից խուսափելու փորձերը հայտնաբերելու համար (օրինակ՝ Docker կոնտեյներներից);
  • x86-64 համակարգերում ստուգվում և կիրառվում է SMAP (Supervisor Mode Access Prevention) բիթը, որը նախատեսված է միջուկի մակարդակով աշխատող արտոնյալ կոդից օգտվողի տարածքի տվյալների մուտքն արգելափակելու համար: Նախկինում իրականացվել է SMEP (Supervisor Mode Execution Prevention) պաշտպանությունը.
  • Գործողության ընթացքում LKRG-ի կարգավորումները տեղադրվում են հիշողության էջում, որը սովորաբար միայն կարդալու է.
  • Տեղեկությունների գրանցումը, որը կարող է առավել օգտակար լինել գրոհների համար (օրինակ՝ միջուկի հասցեների մասին տեղեկությունները) սահմանափակված է վրիպազերծման ռեժիմով (log_level=4 և ավելի բարձր), որը լռելյայն անջատված է:
  • Գործընթացների հետագծման տվյալների բազայի մասշտաբայնությունը մեծացել է. մեկ RB ծառի փոխարեն, որը պաշտպանված է մեկ spinlock-ով, օգտագործվում է 512 RB ծառերից բաղկացած հեշ աղյուսակ, որը պաշտպանված է 512 կարդալ-գրելու կողպեքներով.
  • Լռելյայն ներդրվել և միացված է մի ռեժիմ, որում գործընթացի նույնացուցիչների ամբողջականությունը հաճախ ստուգվում է միայն ընթացիկ առաջադրանքի, ինչպես նաև ընտրովի ակտիվացված (արթնացման) առաջադրանքների համար: Այլ առաջադրանքների համար, որոնք գտնվում են քնի վիճակում կամ աշխատում են առանց LKRG-ի կողմից վերահսկվող միջուկի API մուտք գործելու, ստուգումը կատարվում է ավելի հազվադեպ:
  • Ավելացվել են նոր sysctl և մոդուլի պարամետրեր LKRG-ի ճշգրտման համար, ինչպես նաև երկու sysctl՝ պարզեցված կազմաձևման համար՝ ընտրելով մշակողների կողմից պատրաստված ճշգրտման կարգավորումների (պրոֆիլների) հավաքածուներից.
  • Կանխադրված կարգավորումները փոխվել են՝ մի կողմից՝ խախտումների հայտնաբերման արագության և արձագանքման արդյունավետության, և մյուս կողմից՝ կատարողականի վրա ազդեցության և կեղծ դրական արդյունքների ռիսկի միջև ավելի հավասարակշռված հավասարակշռության հասնելու համար.
  • Systemd միավորի ֆայլը վերանախագծվել է՝ LKRG մոդուլը բեռնման սկզբում բեռնելու համար (միջուկի հրամանի տողի տարբերակը կարող է օգտագործվել մոդուլն անջատելու համար);

Հաշվի առնելով նոր թողարկումում առաջարկվող օպտիմալացումները, LKRG 0.8-ի օգտագործման դեպքում կատարողականի նվազումը գնահատվում է 2.5% լռելյայն ռեժիմում («ծանր») և 2% թեթև ռեժիմում («թեթև»):

Վերջերս կայացած մի հետազոտություն փաթեթների արդյունավետությունը rootkits LKRG-ի հայտնաբերման համար ցույց տվեց լավագույն արդյունքները՝ բացահայտելով միջուկի մակարդակում աշխատող 8 փորձարկված rootkits-ից 9-ը՝ առանց կեղծ պոզիտիվների (rootkits Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit և Sutekh, հայտնաբերվել են, բայց Keysniker, որը հանդիսանում է Keysniffer, մոդուլը, բաց թողնվեց keylogger-ի հետ, ոչ թե rootkit-ի բառացի իմաստով): Համեմատության համար նշենք, որ AIDE, OSSEC և Rootkit Hunter փաթեթները հայտնաբերել են 2 rootkits-ից 9-ը, մինչդեռ Chkrootkit-ը չի հայտնաբերել որևէ մեկը: Միևնույն ժամանակ, LKRG-ն չի աջակցում օգտագործողի տարածքում տեղակայված rootkits-ների հայտնաբերմանը, ուստի ամենամեծ արդյունավետությունը ձեռք է բերվում AIDE-ի և LKRG-ի համադրություն օգտագործելիս, ինչը հնարավորություն է տվել բացահայտել բոլոր տեսակի 14 rootkits-ից 15-ը:

Բացի այդ, կարելի է նշել, որ բաշխման մշակողը Whonix- ը սկսել ձեւավորումը պատրաստի փաթեթներ DKMS-ով Debian-ի, Whonix-ի, Qubes-ի և Kicksecure-ի համար և փաթեթ՝ Arch Linux- ը արդեն թարմացվել է 0.8 տարբերակին: LKRG-ով փաթեթները հասանելի են նաև ռուսերենով ALT-Linux и AstraLinux.

LKRG-ում ամբողջականության ստուգումն իրականացվում է՝ համեմատելով միջուկի և մոդուլների իրական կոդը և տվյալները, որոշ կարևոր տվյալների կառուցվածքները և պրոցեսորի կարգավորումները պահված հեշերի կամ համապատասխան հիշողության տարածքների, տվյալների կառուցվածքների կամ ռեգիստրների պատճենների հետ: Չեկերն ակտիվանում են ինչպես պարբերաբար, այնպես էլ ժմչփի միջոցով, և տարբեր իրադարձությունների դեպքում:

Շահագործումների և արգելափակման հարձակումների հնարավոր օգտագործման որոշումը կատարվում է այն փուլում, երբ միջուկը ռեսուրսների հասանելիություն է տրամադրում (օրինակ՝ ֆայլ բացելուց առաջ), բայց գործընթացի չթույլատրված թույլտվություններ ստանալուց հետո (օրինակ՝ UID-ի փոփոխություն): Երբ հայտնաբերվում է չարտոնված վարքագիծ, գործընթացները ստիպված են լինում դադարեցնել լռելյայն, ինչը բավարար է բազմաթիվ շահագործումներն արգելափակելու համար:

Source: opennet.ru

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