Vývojáři projektu Grsecurity pozornost na přítomnost triviálně zneužitelné zranitelnosti v sadě patchů (Huawei Kernel Self Protection), před několika dny pro zlepšení ochrany jádra LinuxSituace připomíná , 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 HKSP zpětně také zranitelnosti 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 zájem Grega Kroah-Hartmana, který je zodpovědný za údržbu stabilní větve jádra Linux, který požádal autora, aby rozdělil monolitický patch na části, aby se zjednodušila kontrola a přechod na hlavní jádro. Kees Cook, který vede na do jádra Linux technologie aktivní ochrany, a také 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
