Beiträge vom January, 2009

Packers y Yara

Saturday, 31. January 2009 22:59

Desde hace poco, estoy metiéndome un poco en el mundo del reversing, malware,… Y buscando, encontré una herramienta muy curiosa. Yara. Esta herramienta busca patrones en ficheros. Por defecto, no hay ninguno, por lo que cada cual tendrá que hacerse los suyos. Ahora mismo lo estoy usando para descubrir binarios empaquetados y para ello, recurrí a la lista de patrones de PEiD, que es pública.

Pero antes había que pasarla al formato de reglas de yara. Total, que recurrí a un pequeño script que hice. Os lo cuelgo por si a alguien le fuera de utilidad:

http://virtualminds.es/uploads/scripts/yararules.pl

Y el fichero de reglas:

http://virtualminds.es/uploads/scripts/packers.sig.gz -> Fichero de reglas

http://virtualminds.es/uploads/scripts/rules.db.gz -> Correspondencia con los packers

Thema: Malware | Kommentare (0) | Autor: Iñaki

Consultar virustotal.com desde la lí­nea de comandos

Tuesday, 20. January 2009 17:16

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 :P

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!

Thema: Malware | Kommentare (0) | Autor: Iñaki