El viejo bug del NTDLL

13 03 2008

Hola

Hoy he estado leyendo sobre una herramienta en cuestión, la cual también he probado, y fue bastante grande mi sorpresa al ver que un archivo que creaba la misma, no podía ser eliminado. Pero lo sorprendente no fue el hecho de no poder eliminarlo, si no porque me pareció increíble que un bug tan viejo de Windows siguiera sin resolverse. Hacía ya hace meses que conozco ese bug (por no decir más de un año) y pensé que ya se había solucionado, ya que para ese momento no tenía correctamente actualizado Windows, sumado a que varias páginas mencionan que el bug fue parcheado, cuando no es así.

Como dice el título, concretamente el problema se encuentra en la librería NTDLL.DLL (una de las librería más importantes de Windows) en la funciones RtlpWin32NTNameToNtPathName_U y RtlGetFullPathName_Ustr, que son las que se encargan de chequear las rutas de los archivos. Windows NT utiliza un estilo diferente de nombrado de archivos a los basados en DOS (debido al NTFS), es decir, que admite diferentes tipos de carácteres que antes no podían utilizarse. Po ejemplo, los espacios al final del archivo, lo cual es lo que genera esta vulnerabilidad. Es decir, que cuando intentamos acceder a un archivo que tiene peculiaridades del estilo NT (espacios al final, en este caso) mediante funciones basadas en DOS, no podremos acceder al mismo, ya que los espacios del final son eliminados por la función de chequeo de ruta y pasado un nombre de archivo incorrecto. Para los que no entendieron esta explicación, aquí va una explicación más sencilla:

  • Tenemos un archivo llamado “C:\archivo   ” (con tres espacios al final)
  • Un programa intenta acceder a “C:\archivo   “
  • Se llama la función RtlpWin32NTNameToNtPathName_U para verificar la ruta “C:\archivo   “
  • RtlpWin32NTNameToNtPathName_U automáticamente elimina los últimos tres espacios en blanco.
  • RtlpWin32NTNameToNtPathName_U devuelve la ruta “C:\archivo”, sin los espacios al final.
  • En vez de acceder a “C:\archivo   “, en realidad accedemos a “C:\archivo”, que no existe, o bien es otro archivo diferente.

Como verán, el problema es que al acceder al archivo en cuestión, en realidad estamos accediendo a otro, y con lo de acceder me refiero a modificar, copiar y eliminar.

Las librerías afectadas por este bug (o error de diseño, como quieran llamarle) son las siguientes:

    	
  • acledit.dll
  • ADVAPI32.DLL
  • cscdll.dll
  • CSRSRV.DLL
  • dskquoui.dll
  • EVENTLOG.DLL
  • GDI32.DLL
  • ifsutil.dll
  • KERNEL32.DLL
  • LSASRV.DLL
  • ntmarta.dll
  • OLE32.DLL
  • perfproc.dll
  • query.dll
  • rshx32.dll
  • scesrv.dll
  • sdbapiu.dll
  • setupdll.dll
  • sfc.dll
  • SHELL32.DLL
  • shim.dll
  • srvsvc.dll
  • trkwks.dll
  • ulib.dll
  • wow32.dll
  • AUTOCHK.EXE
  • autoconv.exe
  • autofmt.exe
  • NTVDM.EXE
  • os2srv.exe
  • posix.exe
  • regsvc.exe
  • SERVICES.EXE
  • smss.exe
  • WINLOGON.EXE

Las funciones afectadas son las siguientes:

    	
  • GetShortPathNameW
  • CopyFileW
  • MoveFileW
  • MoveFileExW
  • ReplaceFileW
  • CreateMailslotW
  • GetFileAttributesW
  • FindFirstFileExW
  • CreateFileW
  • GetVolumeInformationW
  • DeleteFileW
  • GetDriveTypeW
  • GetFileAttributesExW
  • CreateDirectoryW
  • FindFirstChangeNotificationW
  • GetBinaryTypeW
  • CreateNamedPipeW
  • SetFileAttributesW
  • MoveFileWithProgressW
  • GetVolumeNameForVolumeMountPointW
  • GetDiskFreeSpaceW
  • CreateDirectoryExW
  • DefineDosDeviceW
  • PrivMoveFileIdentityW
  • GetCompressedFileSizeW
  • SetVolumeLabelW
  • CreateHardLinkW
  • RemoveDirectoryW

Cualquier programador podrá darse cuenta de la potencialidad de esta vulnerabilidad, más aún si es utilizado con algún fin malicioso, como por ejemplo, una infección. Es más, la mayoría de los antivirus son vulnerables a este, lo que significa que al querer acceder a un archivo, no se podría o se estaría accediendo a otro, e imposibilitaría el análisis del mismo, lo cual demuestra obviamente que es un error de diseño bastante peligroso. En mi caso, uso NOD32 AntiVirus, el cual parece ser vulnerable al problema.

¿Cómo saber si mi AntiVirus es vulnerable?

Para verificar esto, sin riesgo alguno, podemos usar el test EICAR:

La prueba EICAR consiste en un archivo que sirve para comprobar la eficacia de los programas antivirus. La ventaja que tiene sobre otras comprobaciones es que el equipo queda libre de riesgos. Se trata de un inofensivo archivo de texto.

Consiste en copiar la siguiente cadena de caracteres:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

En el bloc de notas, y guardarlo con una extensión .com Un antivirus con protección en tiempo real debería detectarlo inmediatamente. Un escaneo en busca de virus también debería detectarlo. Esta prueba ya no es demasiado eficaz, es antigua y muy conocida por todos los fabricantes de software.

La idea es crear un archivo EICAR con espacios al final, para luego ver si el antivirus puede analizarlo y/o detectarlo.

Ahora, ¿Cómo acceder a estos archivos?, muy simple, utilizando el estilo de redirección NTFS, o alguno que no sea vulnerable. Para este caso, ralizamos lo siguiente:

1. – Desactivamos nuestra protección antivirus residente temporalmente para crear el archivo.

2. – Vamos a Inicio, Ejecutar… y tipeamos el siguiente comando:

  • type nul > “\\?\C:\eicar   “
  • notepad  “\\?\C:\eicar   “

En el caso de querer utilizar la carpeta raíz del disco C:\, y es muy importante poner uno o más espacios antes de la última comilla (“). Podrán ver que se abrirá el Bloc de Notas.

3. – Copiamos el siguiente texto al Bloc de Notas:

  • X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Luego, vamos al menú Archivo, y presionamos en Guardar…, o presionamos Ctrl + G.

4. – Una vez creado el archivo EICAR, reactivamos la protección antivirus, y analizamos el archivo.

En el caso de que el archivo no pueda ser analizado o nos de un error de que el archivo no existe, nuestro AntiVirus será vulnerable.

Si no fuera vulnerable, el archivo sería detectado al analizarlo o al hacerle clic (estando el residente activo, claro).



¿Cómo eliminar un archivo de este tipo?

Por ejemplo si quisieramos eliminar el “C:\archivo   ” del primer ejemplo, deberíamos ejecutar este comando:

  • del “\\?\C:\archivo   “

Obviamente, además podemos usar otras funciones y aplicaciones (aunque como dije, la gran mayoría son vulnerables) añadiendo la cadena de carácteres \\?\ al principio de la ruta.

Conclusiones

Este problema es grave, como ya venía diciendo, a nivel programático y también a nivel seguridad. La gran mayoría de los salvaguardas (AntiVirus, AntiSpywares, Firewalls), así que lo mejor sería una solución por parte de Microsoft. Cabe destacar que si nuestro AntiVirus residente está activado y es efectivo, la creación de un archivo será interceptada, únicamente si el archivo en cuestión se encuentra en la base de datos del software. Sinceramente, ver fallos como estos por parte de Microsoft, comienzo a recordar algunos de los motivos del porque uso Debian 😐

Cualquier comentario es bien recibido, y agradecería que informen si su AntiVirus es vulnerable o no, para poder tener una lista de esto.

Salu2





ThreatFire: una protección inteligente

14 11 2007

Hola a todos

Esta vez les escribo para recomendarles un excelente salvaguarda, se trata de ThreatFire, anteriormente llamado Novatix CyberHawk y comprado a la empresa por PC Tools (creadora del famoso Spyware Doctor). Se trata de un complemento gratuito de antivirus (en etapa BETA) que no se basa en detección, es decir que no analiza archivos (aunque la versión de pago tiene un escaner de rootkits), si no que monitorea los procesos del sistema en busca de acciones maliciosas y sospechosas, que puedan llegar a ser las de un malware en ejecución. Esto tiene varias ventajas:

  • Puede detectar virus no reportados, al igual que una heurística
  • Protege el sistema contra crackers e intrusiones al sistema
  • Protege contra backdoors y troyanos de ataque específico (como troyanos para pharming)
  • Protege el sistema contra vulnerabilidades, incluídas 0-day (vulnerabilidades sin parches ni solución)

El programa cuenta con reglas internas que nos alerta cuando algún proceso intenta realizar una acción posiblemente maliciosa, por ejemplo, aquí he utilizado la opción de restauración del archivo hosts que tiene el RegUnlocker, y la ventana de aviso del ThreatFire:

ThreatFire Imagen 1

Si bien en este caso el RegUnlocker no es una aplicación maliciosa, muchos malwares añaden líneas al archivo hosts con el objetivo de redireccionar direcciones IP o dominios, hacia otras falsas o páginas locales creadas por la misma infección, por lo cuál la alerta es totalmente coherente.

Y aquí tienen otro ejemplo, que es una imagen protegiendo el sistema de una vulnerabilidad de Internet Explorer:

ThreatFire Imagen 2

Como verán el programa es muy efectivo, y algunas reglas internas son muy similares a las que usan los antispywares residentes y los firewalls, por lo que puede ser un poco confuso para usuarios inexpertos, ya que es posible que el programa nos alerte sobre programas legítimos, y usuarios sin experiencia o poco conocimiento sobre el tema podrían confundirlos con infecciones.

Además de las reglas internas, el programa cuenta con la posibilidad de configurarle reglas personalizadas, lo cuál es una opción realmente útil, y nos permite por ejemplo monitorear el acceso a un archivos, que puede llegar a ser una base de datos, un archivo de contraseñas o simplemente con información importante, lo cual es muy útil para protegernos de intrusiones.

Es más, como cortesía de esta página, aquí les dejo las reglas personalizadas de mi máquina, de modo que pueda reemplazar a residentes como TeaTimer, Arovax Shield, SUPERAntiSpyware Pro o similares, y otras reglas de protección muy útiles:

ThreatFire Imagen 3

Descarga:

Para instalarlo, simplemente descomprimen el archivo en la carpeta “Documents and Settings\All Users\Datos de programa\PC Tools\ThreatFire”, y remplazan el archivo General.dat. Las reglas están en inglés (idioma universal), al igual que el programa.

Agradezco cualquier tipo de crítica, sugerencia o comentario.

Salu2





Detrás del SpywareBlaster…

1 10 2007

Hola gente

Luego de varios problemas con mi disco duro, que les comento que pasó a mejor vida junto a muchos de mis proyectos :c, me decidí a escribir algo por aquí.

Una cosa lleva a la otra, es decir, un disco nuevo lleva a tener que instalar Windows y la mayoría de sus programas, lo que también me ha llevado a instalar salvaguardas para la protección contra malwares, y entre ellos el SpywareBlaster, lo que me ha hecho estar escribiendoles en este momento.

SpywareBlaster no es un escaner ni un residente, es una aplicación que inmuniza los sistemas Windows contra la instalación de controles ActiveX maliciosos, lo que es una gran protección fundamentalmente para los que usan Internet Explorer. Pero la pregunta que todos nos hacemos ¿Cómo funciona este programa? ¿Qué es lo que hace? ¿Magia tal vez? Para los curiosos aquí está el secreto…
Leer el resto de esta entrada »