Проблемы с безопасностью в патчах, предложенных сотрудником Huawei для защиты ядра Linux

13 мая 2020 года

Разработчики проекта Grsecurity обратили внимание на наличие тривиально эксплуатируемой уязвимости в наборе патчей HKSP (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))
return -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);
	}

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «Проблемы с безопасностью в патчах, предложенных сотрудником Huawei для защиты ядра Linux», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.