Consultar virustotal.com desde la línea de comandos
Estoy haciendo unos scripts para mantener limpios (en la medida de lo posible) nuestros servidores windows. Buscando la mejor manera de hacerlo me dije… Y si en vez de instalar un antivirus, instalo 38. Alguien podría decir que es una locura a la par que un imposible. Pero llega Hispasec con su Virustotal.com y nos pone de forma totálmente gratuita 38 antivirus.
Y aquí es donde nos aprovechamos un poco de ellos. Tengo que decir que antes de publicar el código, consulté con su soporte si había alguna limitación de uso. La única limitación es el número de consultas por ip así que si alguna vez no os funciona, ya sabéis por qué es
El código es bastante simple. Virustotal.com tiene una base de datos de hashes ya procesados y es posible consultar un determinado hash. El código no sube el fichero a virustotal, solo consulta esta base de datos por lo que os podéis encontrar que piezas de malware no son detectadas como tales:
#!/usr/bin/perl
use strict;
use LWP;
use Digest::MD5;
use Getopt::Long;
my $md5 = Digest::MD5->new;
my $virhash;
my $file;
my $hash;
GetOptions ( "file=s" => \$file,
"hash=s" => \$hash
);
if($file && $hash) {
usage();
exit 100;
}
if(!$file && !$hash) {
usage();
exit 100;
}
if(-f $file) {
open FILE,$file;
binmode(FILE);
$virhash = $md5->addfile(*FILE)->hexdigest;
print "[HASH] Using MD5 hash $virhash\n";
}
elsif ($hash) {
$virhash = $hash;
print "[HASH] Using hash $virhash\n";
}
my $ua = LWP::UserAgent->new;
push @{$ua->requests_redirectable }, 'POST';
my $resp = $ua->post('http://www.virustotal.com/vt/en/consultamd5',[ "hash" => $virhash , "x" => 138 , "y" => 24 ]);
if($resp->is_success) {
my $data = $resp->content;
$data =~ m,(
),m;
my $virdata = $1;
$virdata =~ m,>(\d+)/(\d+) ,;
if($1 > 0) {
print "Virus Found ($1/$2)\n";
exit 1;
} else {
print "Virus Not Found\n";
exit 0;
}
} else {
print $resp->status_line;
exit 100;
}
sub usage () {
print "$0 (--file fichero | --hash hash)\n";
}
Si puedo y me dejan, dentro de unos días publicaré el código algo más avanzado. Pero para los que tengan iniciativa, diré que Win32::Process::Info es un gran comienzo para sacar la lista de procesos y la ruta del ejecutable asociado.
Hasta pronto!
Autor:Iñaki
Datum: Tuesday, 20. January 2009 17:16
Trackback: Trackback-URL Themengebiet: Malware
Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren