Creando firmas lógicas para ClamAV

por | 12 marzo, 2018

Las firmas lógicas son más potentes y flexibles que las firmas basadas en hash. Para crear una firma lógica a partir de un fichero infectado con un virus o malware, podemos compararlo con el fichero original, es decir limpio, y determinar trozos del binario en hexadecimal que están presentes en el fichero infectado y no en el original.

Estos «trozos» hexadecimales del virus son combinados en la firma con una función lógica. Los operadores lógicos principales son «Y» y «O» (AND y OR representados con los símbolos «&» y «|»).

Este tipo de firmas permite además incorporar en la misma firma diferentes subfirmas del virus provenientes de diferentes mutaciones. Además permiten identificar el mismo virus independientemente del fichero infectato.

Para crear una firma lógica partiendo de un fichero binario infectado, lo primero que debemos hacer es compararlo con el binario original (limpio) y determinar aquellas diferencias (no hace falta todas sólo algunas que identifiquen clamanente al malware) que están presentes en el fichero infectado y no en el original. Pare mejorar la eficiencia de la firma podemos coger otra tantos trozos de contenido malware en otros ficheros infectados por el mismo virus.

Esos trozos hexadecimales del malware se conbinan en una firma lógica para ClamAV con el siguiente formato:

SignatureName;TargetDescriptionBlock;LogicalExpression;Subsig0; Subsig1;Subsig2;...

Donde:

SignatureName es un nombre arbitrario que asignamos a la firma.

TargetDescriptionBlock proporciona información sobre el motor y el objetivo
archivo con comas Arg: Val separadas por comas, requiere un mínimo y máximo
valor expresado como min-max.

LogicalExpression especifica la expresión lógica que describe la relación
entre Subfirma0 … SubfirmaN.

Cláusula básica: 0,1, …, N índices decimales son SUBEXPRESIONES que representan
Subfirma, Subfirma1, …, SubfirmaN respectivamente.

Cláusula inductiva: si A y B son SUBEXPRESIONES y X, Y son números decimales
entonces (A y B), (A | B), A = X, A = X, Y, A> X, A> X, Y, A <X y A <X, Y
son SUBEXPRESIONES

SubfirmaN es n-ésima subfirma en formato extendido posiblemente precedida por un
offset.  Se pueden especificarse hasta 64 subfirmas.

Por ejemplo, supongamos que tenemos fichero infectado por un virus, que llamaremos fichero_infectado,  y el mismo archivo original. Para generar una firma lógica válida debemos comparar los dos ficheros binarios con algún editor o comparador hexadecimal. Existen varias maneras de compararlo pudiendo usar herramientas como cmp, diff-ext, meld, etc. También existe un comparador online bastante práctico:

https://www.diffnow.com/

Podremos ver que en el fichero infectado aparecen cadenas que no están presentes en el fichero original. Pueden haber muchas diferencias, no hace falta cogerlas todas ni coger cadenas excesivamente largas. Supongamos que hemos identificado estas dos cadenas:

0E1083024A0EE00102EA0E10410E080
E03450E208D04420E288C05480E3086

Podemos entonces crear una firma del virus que sea capaz de detectarlo con la siguiente estructura:

FirmaLogica;Target:0;(0&1);0E1083024A0EE00102EA0E10410E080;E03450E208D04420E288C05480E3086

Ahora supongamos que este virus genera en otro binario otra dos cadenas distintas:

68002E64
796E7379

Podríamos crear una firma que lo detectara igualmente con la siguiente nomenclatura:

FirmaLogica;Target:0;((0&1)|(2&3));0E1083024A0EE00102EA0E10410E080;E03450E208D04420E288C05480E3086;68002E64;796E7379

 

Por último verificaríamos la firma con ClamAV de la manera habitual:

 

[root@localhost]# clamscan -d firma.ldb fichero_infectado
fichero_infectado: FirmaLogica.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 1
Engine version: 0.99.3
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.01 MB
Data read: 0.01 MB (ratio 1.00:1)
Time: 0.005 sec (0 m 0 s)
[root@localhost]#

 

 

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *