Bezpečnostní problémy v záplatách navržených zaměstnancem Huawei na ochranu linuxového jádra

Vývojáři projektu Grsecurity kreslil pozornost na přítomnost triviálně zneužitelné zranitelnosti v sadě patchů HKSP (Huawei Kernel Self Protection), před několika dny navržený zlepšit zabezpečení linuxového jádra. Situace připomíná pouzdro se Samsungem, ve kterém pokus o zlepšení zabezpečení systému vedl ke vzniku nové zranitelnosti a usnadnil kompromitaci zařízení.

Záplaty HKSP byly zveřejněny zaměstnancem Huawei, obsahují zmínku o Huawei v profilu GitHub a v názvu projektu používají slovo Huawei (HKSP - Huawei Kernel Self Protection). Zástupci Huawei zároveň popřeli spojení projektu HKSP se společností a uvedli, že kód byl vyvinut z osobní iniciativy zaměstnance, není oficiálním projektem Huawei a není používán v produktech společnosti. Na stránka GitHub HKSP zpětně po objevení také zranitelnosti byl přidán poznamenat, že projekt je vyvíjen ve svém volném čase pro výzkumné účely.

HKSP zahrnuje změny jako randomizace offsetů ve struktuře cred, ochrana proti útokům na jmenný prostor identifikátoru uživatele (jmenný prostor pid), oddělení zásobníku procesů od oblasti mmap, detekce dvojitých volání funkce kfree, blokování úniků přes pseudo -FS /proc (/proc/ {moduly, klíče, uživatelé klíčů}, /proc/sys/kernel/* a /proc/sys/vm/mmap_min_addr, /proc/kallsyms), vylepšená randomizace adres v uživatelském prostoru, další Ptrace ochrana, vylepšená ochrana proti smapování a smepu, možnost zakázat odesílání dat přes raw sockety, blokování nesprávných adres v UDP socketech a kontrola integrity běžících procesů. Obsahuje také modul jádra Ksguard, který je zaměřen na odhalování pokusů o zavedení typických rootkitů.

Záplaty způsobil Greg Kroah-Hartman, který je zodpovědný za udržování stabilní větve linuxového jádra, měl zájem a požádal autora, aby monolitický patch rozdělil na části, aby se zjednodušila kontrola a povýšení na hlavní jádro. Kees Cook, vedoucí projekt na povýšení technologie aktivní ochrany také v jádře Linuxu pozitivně reagoval na záplaty a mezi problémy upozornil na vazbu na architekturu x86 a notifikační charakter mnoha režimů, které informace o problému pouze logují, ale nesnaží se je blokovat.

Studie patche od vývojářů Grsecurity odhalila mnoho chyb a slabin v kódu a také ukázala absenci modelu hrozeb, který by jim umožnil adekvátně posoudit schopnosti projektu. Aby bylo jasné, že kód byl napsán bez použití bezpečných metod programování, je uveden příklad triviální zranitelnosti v handleru.
soubor /proc/ksguard/state, který je vytvořen s právy 0777, což znamená, že každý má přístup pro zápis. Funkce ksg_state_write, která se používá k analýze příkazů zapsaných do /proc/ksguard/state, vytváří vyrovnávací paměť tmp[32], do které se zapisují data na základě velikosti předávaného operandu, bez zohlednění velikosti cílové vyrovnávací paměti a bez kontrola parametru s velikostí řetězce. Tito. K přepsání části zásobníku jádra útočníkovi stačí napsat speciálně formátovaný řádek do /proc/ksguard/state.

static ssize_t ksg_state_write(soubor struktur *soubor, const char __user *buf,
size_t len, loff_t *offset)
{
hodnota u64;
char tmp[32];
velikost_t n = 0;

if (copy_from_user(tmp, buf, len))
návrat -1;

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

Využití prototypu:

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

Zdroj: opennet.ru

Přidat komentář