Праблемы з бяспекай у патчах, прапанаваных супрацоўнікам Huawei для абароны ядра Linux

Распрацоўнікі праекту Grsecurity звярнулі увага на наяўнасць трывіяльна эксплуатаванай уразлівасці ў наборы патчаў ХКСП (Huawei Kernel Self Protection), некалькі дзён таму прапанаваных для падвышэння абароны ядра Linux. Сітуацыя нагадвае выпадак з Samsung, у якім спроба павышэння бяспекі сістэмы прывяла да з'яўлення новай уразлівасці і спрасціла кампраметацыю прылад.

Патчы HKSP былі апублікаваныя супрацоўнікам кампаніі Huawei, уключаюць згадванне Huawei у профілі GitHub і выкарыстоўваюць слова Huawei у расшыфроўцы назвы праекта (HKSP – Huawei Kernel Self Protection). Пры гэтым прадстаўнікі Huawei абверглі сувязь праекту HKSP з кампаніяй і заявілі, што код распрацаваны па асабістай ініцыятыве працаўніка, не з'яўляецца афіцыйным праектам Huawei і не выкарыстоўваецца ў прадуктах дадзенай кампаніі. На GitHub-старонцы HKSP заднім лікам пасля выяўлення уразлівасці таксама было дададзена нататка, што праект развіваецца ў вольны час у даследчых мэтах.

HKSP уключае такія змены, як рандомизация зрушэнняў у структуры cred, абарона ад нападаў на прастору імёнаў ідэнтыфікатараў карыстачоў (pid namespace), аддзяленне стэка працэсаў ад вобласці mmap, выяўленне падвойнага выкліку функцыі kfree, блакаванне ўцечак праз псеўда-ФС /proc (/proc/ {modules, keys, key-users}, /proc/sys/kernel/* і /proc/sys/vm/mmap_min_addr, /proc/kallsyms), паляпшэнне рандамізацыі адрасоў у прасторы карыстальніка, дадатковая абарона Ptrace, узмацненне абароны smap і smep , магчымасць забароны адпраўкі дадзеных праз raw-сокеты, блакіраванне некарэктных адрасоў у UDP-сокетах і праверка цэласнасці запускаемых працэсаў. У склад таксама ўваходзіць модуль ядра Ksguard, накіраваны на вызначэнне спроб укаранення тыпавых руткітаў.

патчы выклікалі цікавасць у Грега Кроа-Хартмана (Greg Kroah-Hartman), які адказвае за падтрымку стабільнай галінкі ядра 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 *offset)
{
u64 value;
char tmp[32];
size_t n = 0;

if (copy_from_user(tmp, buf, len))
вяртанне -1;

value = simple_strtoul(tmp, '\0', 10);
...

Прататып эксплоіту:

char buf[4096] = { };
int fd = open("/proc/ksguard/state", O_WRONLY);
if (fd >= 0) {
write(fd, buf, sizeof(buf));
close(fd);
}

Крыніца: opennet.ru

Дадаць каментар