Оказывается многие сисфункции позволяют писать в память ядра. В большинстве случаях максимум чего может добиться злобный кодер - это ушатать систему, заставив её зависнуть, но с помощью некоторых сисфункций можно записывать любые данные, включая вредоносный код, и дают шанс выполнить его в kernel mode. Также вирус способен записать свою в загрузочный сектор рамдиска, а пользователь потом, сохранив рамдиск на дискету или винчестер, запустит его в real mode (вероятность не больщая, но она таки есть).
Список функций, которые уязвимы и ранимы: 6, 9, 15.5, 18.11, 18.13, 26.2, 30.2, 36, 48.3, 70. Возможно есть ещё дырявые сисфункции, которые я не нашёл.
Исправить уязвимость не сложно. Есть два способа: a) проверять адреса для записи, которые передаются как параметры, выходят ли они за рамки возможной памяти приложения (диапазон 0x000000000-x7FFFFFFF); б) воспользоваться ядерной функцией check_region, которая проверяет не выходит ли буфер из диапазона используемой процессом памяти (0x000000000-x????????)
Вот эксплойты демонстрирующие использование ядренных дырок:
1st:
Запускаем программу и все букаффки пропадают (не считая консоли)

А через полминуты шрифт восстанавливается;
Attachment:
1st.kex [286 Bytes]
Downloaded 274 times
2nd:
Кейлоггер)) взламывает защиту ядра, вылезает в 0-ое кольцо и перехватывает нажатия клавиш, записывая их в файл /sys/.keylog (если пользователь этого пожелает); помимо этого перехватывает функцию 9, скрывая себя из списка процессов (при этом окно отображается), и функции 18.2 и 18.18, не давая прибить себя

Неплохо оптимизирован по размеру.
Запускать желательно из под ВМ. Этот эскплойт лишь демонстрирует возможности кейлоггинга, т.к. записывает кейлог только по желанию пользователя. Кейлог включает в себя как текст, так и сканкоды.
Attachment:
2nd.kex [666 Bytes]
Downloaded 270 times