Buscando malware y deficiencias de seguridad apoyándonos en Google

metasploit

Hace un par de semanas más o menos, salió a la luz el buscador Malware, que emplea a Google como motor de búsqueda, proporcionándole cadenas determinadas que ayudan al usuario a la localización de código malicioso.

A la caza del malware

Veamos un ejemplo fácil. Si le decimos a Malware que nos localice información con la cadena de búsqueda Bagle, aparecerán en pantalla algunas sugerencias sobre esta palabra clave. De entre esos resultados, si queremos buscar piezas de malware del tipo Win32.Bagle.AJ@mm, bastará con pulsar el formato propuesto de búsqueda, con el que obtendremos todos los resultados que contengan un determinado timestamp, tamaño de imagen, punto de entrada y tamaño de código, unívocamente asociables a esa variante Bagle.

En nuestro ejemplo real, logramos acceder al fichero Garry.com, resultado único. Se trata de un ejecutable de Windows 32bit, el cual, una vez analizado, queda confirmado como una muestra del popular gusano Bagle:

virustotal bagle

Buscando problemas de seguridad

El proyecto Malware Search, apadrinado por los investigadores de Metasploit, y cuya imagen ha tenido que ser sustituída porque entraba en conflicto con la imagen de marca de Google, tiene desde hace escasos días un hermano.

bugle

En este caso, el trabajo corresponde a la gente de Cipher, que han denominado al proyecto Bugle, con el subtítulo de Google Source Code Bug Finder. Bugle sirve para localizar e identificar agujeros de seguridad en el código disponible en la red, arañado convenientemente por Google.

No se trata de un buscador, sino más bien de una lista de cadenas de búsqueda que conducen a los resultados esperados. Por ejemplo, empleando un caso real, podemos buscar la cadena Dirty Hack, habitualmente empleada para señalizar en el código código sospechoso.

Entre los muchos resultados mostrados, escogemos un enlace aleatorio, por ejemplo, este código c, que contiene la cadena «dirty hack», pero que no cunda el pánico: en este caso se trata de una adulteración de código legítima, y no código malicioso. Este caso es, concretamente, un módulo de kernel escrito por un programador, que sustituye la función sys_mount() original por una función hackeada, es decir, mejorada por él mismo. Nótese que, para cualquier caso, existe diferencia entre buscar código programado en C y programado en C++, diferenciación que podemos exigir a Google en su proceso de búsqueda, apoyándonos en sus múltiples parámetros de segmentación.

int init_module(void)
{
o_mount = sys_call_table[__NR_mount-__NR_SYSCALL_BASE];
sys_call_table[__NR_mount-__NR_SYSCALL_BASE] = (void *) n_mount;
o_brk = sys_call_table[__NR_brk-__NR_SYSCALL_BASE];
if (debug)
{
printk(«dirty hack loaded.\n»);
}
return 0;
}
void cleanup_module(void)
{
sys_call_table[__NR_mount-__NR_SYSCALL_BASE] = o_mount;
if (debug)
printk(«dirty hack unloaded.\n»);
}

Este sistema es muy parecido a un sistema que documenté en el blog no hará mucho, el Google Hacking, consistente en la búsqueda de cadenas de error o de índole informativa, mediante la cual es posible descubrir servicios vulnerables o expuestos innecesariamente.

Con Bugle, podemos buscar buffer overflows, como por ejemplo cálculos erróneos de longitud de búfer, desbordamientos de entero, fácilmente explotables analizando los bucles if, inyección de comandos, control de flujo, inyección SQL … diversas categorías que se van ampliando poco a poco.

Como podéis ver, el mismo perro con distinto collar: si conocemos los patrones habituales que tiene una muestra de malware, o cómo se suelen formatear en el código fuente las principales fuentes de problemas, sólo hay que decirle a Google que busque esas cadenas, aprovechando su potencia, y nos servirá los resultados en bandeja.

Así de simple, y así de inquietante. Otro más de esos muchos usos de los motores de búsqueda.