¿Cómo detectan los programas antivirus el virus de prueba EICAR?
-
19-08-2019 - |
Pregunta
El virus de prueba EICAR se utiliza para probar la funcionalidad de los programas antivirus. Para detectarlo como un virus,
¿Debe el programa antivirus tener la definición de virus para el virus de prueba?
O
Las heurísticas lo detectan como un patrón sospechoso y lo detectan como un virus.
(He visto una ocasión en que un programa AV elimina el archivo durante la descarga pero sin identificar el virus como virus de prueba EICAR. Solo como un objeto sospechoso, es decir, si tiene la definición, debería identificar el nombre del virus, detalles, etc. ¿No es así?)
Solución
En mi humilde opinión, el objetivo del virus de prueba es tener algo que se sabe que es inofensivo y aceptado como virus para que los usuarios finales puedan verificar que el software AV está encendido y pueden ver el efecto de un virus identificación. Piense en simulacro de incendio, para software AV.
Me imagino que la mayoría tiene una firma y lo reconoce directamente como tal.
No me sorprendería si el patrón de bits de la prueba EICAR real incluyera patrones de bits que olieran a códigos de operación sospechosos, pero no sé si ese es el caso. Si es así, entonces podría ser una prueba válida de un simple reconocedor de virus heurístico. Sin embargo, dado que la prueba EICAR ha existido durante mucho tiempo , también me imagino que cualquier heurística que la almacene en caché no es lo suficientemente buena como para atrapar algo ahora en la naturaleza.
No esperaría que reconocer EICAR sea una prueba de una afirmación más fuerte que "el AV está instalado y escanear lo que se esperaba que escaneara", y si desarrollara un sistema AV, no trataría de fortalecerlo reclamar al respecto.
Update:
El virus de prueba EICAR real es la siguiente cadena:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
que fue cuidadosamente elaborado (de acuerdo con el artículo de Wikipedia ) para tener un par de propiedades interesantes .
Primero, consta de solo caracteres ASCII imprimibles. A menudo incluirá espacios en blanco y / o una nueva línea al final, pero eso no tiene ningún efecto en su reconocimiento ni en su función.
Lo que plantea la segunda propiedad: de hecho, es un programa ejecutable para una CPU 8086. Se puede guardar (a través del Bloc de notas, por ejemplo) en un archivo con la extensión .COM, y se puede ejecutar en MSDOS, la mayoría de los clones de MSDOS e incluso en el modo de compatibilidad MSDOS del símbolo del sistema de Windows (incluido en Vista, pero no en ningún Windows de 64 bits ya que decidieron que la compatibilidad con el modo real de 16 bits ya no era una prioridad).
Cuando se ejecuta, produce como salida la cadena "EICAR-STANDARD-ANTIVIRUS-TEST-FILE!" y luego sale.
¿Por qué hicieron este esfuerzo? Aparentemente, los investigadores querían un programa que se sabía que era seguro de ejecutar, en parte para poder probar los escáneres en vivo sin necesidad de capturar un virus real y arriesgarse a una infección real. También querían que fuera fácil de distribuir por medios convencionales y no convencionales. Como resulta que hay un subconjunto útil del conjunto de instrucciones en modo real x86 donde cada byte cumple con la restricción de que también sea un carácter ASCII imprimible, lograron ambos objetivos.
El artículo wiki tiene un enlace a una explicación detallada de cómo funciona realmente el programa, que también es una lectura interesante. A la complejidad se suma el hecho de que la única forma de imprimir en la consola o salir de un programa en modo real de DOS es emitir una instrucción de interrupción de software, cuyo código de operación (0xCD) no es un carácter ASCII de 7 bits imprimible. Además, las dos interrupciones requieren un parámetro inmediato de un byte, uno de los cuales debería ser un carácter de espacio. Dado que la regla autoimpuesta era no permitir espacios, los cuatro últimos bytes del programa ('' H + H * '' en la cadena) se modifican en su lugar antes de que el puntero de instrucción llegue allí para ejecutarlos.
Desmontando y volcando EICAR.COM con el comando DEBUG en un símbolo del sistema en mi cuadro XP, veo:
0C32:0100 58 POP AX 0C32:0101 354F21 XOR AX,214F 0C32:0104 50 PUSH AX 0C32:0105 254041 AND AX,4140 0C32:0108 50 PUSH AX 0C32:0109 5B POP BX 0C32:010A 345C XOR AL,5C 0C32:010C 50 PUSH AX 0C32:010D 5A POP DX 0C32:010E 58 POP AX 0C32:010F 353428 XOR AX,2834 0C32:0112 50 PUSH AX 0C32:0113 5E POP SI 0C32:0114 2937 SUB [BX],SI 0C32:0116 43 INC BX 0C32:0117 43 INC BX 0C32:0118 2937 SUB [BX],SI 0C32:011A 7D24 JGE 0140 0C32:0110 45 49 43 41 EICA 0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV 0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$ 0C32:0140 48 DEC AX 0C32:0141 2B482A SUB CX,[BX+SI+2A]
Después de ejecutar instrucciones hasta JGE 0140
, las dos últimas instrucciones se han modificado para que sean:
0C32:0140 CD21 INT 21 0C32:0142 CD20 INT 20
La mayoría de las llamadas al sistema DOS se enviaron a través de INT 21
con el valor del registro AH
o AX
que especifica la función a ejecutar. En este caso, AH
es 0x09, que es la función de cadena de impresión, que p