Pages

miércoles, 23 de julio de 2008

Falsos negativos y falsos positivos. Problemas para desarrolladores

Falsos negativos y falsos positivos. Problemas para desarrolladores


Hablamos de antivirus. Un falso negativo sucede cuando un antivirus no detecta un malware, cuando deja pasar o ejecutarse un código malicioso en el sistema que está protegiendo. El falso positivo se da cuando el antivirus, por error, identifica como malware un fichero que es legítimo e inofensivo. De un tiempo a esta parte tanto falsos negativos como positivos van en aumento entre los productos antivirus y, al margen de la efectividad de los antivirus, los desarrolladores de software lo están sufriendo.

Los tiempos en los que era manejable el problema del malware con la generación de firmas reactivas y concretas para cada espécimen ya pasaron. Si bien antes los antivirus tampoco eran perfectos, al menos con ese esquema podían proporcionar una protección suficientemente buena o aceptable (no había tantos falsos negativos).

A día de hoy ese modelo hace aguas debido al volumen de nuevos especímenes que se genera a diario (en VirusTotal recibimos más de 15.000 especímenes al día). Hay que ingeniárselas para ser proactivos en la detección y poder considerarse medianamente útiles. De paso evitar que el fichero de firmas de detección del antivirus engorde tanto que se convierta en "fatware" y consuma tantos recursos que de más problemas al usuario que los propios "bichos".

Esa brutal proliferación y diversificación del malware en la actualidad, que hace el problema inmanejable con firmas de detección tradicionales, está llevando a los productos antivirus al uso de tecnologías de detección más... "genéricas" (estaba dudando que término utilizar, "inteligentes" o "brutas", de todo hay, lo dejamos en "genéricas").

Emulaciones, sandboxs, análisis del comportamiento, heurísticas más agresivas, firmas genéricas, etc. Todas estas tecnologías tienen en común la capacidad de identificación temprana y proactiva de especímenes desconocidos, sin necesidad de poseer una firma de detección específica.
Por contra, también se prestan más a provocar falsos positivos, identificando como malware lo que en realidad no lo es.

Los laboratorios antivirus mantienen grandes colecciones de software bien conocido y se cuidan de evitar que sus productos los detecten como malware (el ejemplo más obvio es comprobar que no se detecta ningún fichero legítimo de Windows, y aún así hay alguna que otra anécdota al respecto). Sin embargo los desarrolladores más modestos sufren cada vez más los falsos positivos, ya que los antivirus no pueden comprobar todo el software legítimo existente, ya sea público, privativo, a medida, etc, y sólo se cuidan de evitar que sus detecciones genéricas no provoquen falsos positivos con el software más estándar o utilizado.

Un ejemplo de la "manga ancha" con la que algunos motores están identificando el malware la encontramos en la detección indiscriminada del uso de packers. Los packers son utilidades que permiten comprimir y/o añadir mecanismos de seguridad a los ejecutables. Si bien es una técnica muy utilizada por los creadores de malware para ofuscar su código en un intento de evitar la detección antivirus, también son utilizados por los creadores de software legítimo para optimizar sus ejecutables o dificultar la ingeniería inversa (para protegerse de modificaciones, crackers, espionaje, etc).

De hecho existen packers comerciales, open source, creados exclusivamente para el malware, etc. Si bien parece que tiene sentido la detección genérica de los que están íntimamente relacionados con el malware, los problemas surgen cuando algunos antivirus también están detectando de forma indiscriminada la utilización de otros packers que, además de poder ser aprovechados por los creadores de malware, tienen también usos legítimos por parte de los desarrolladores.

El resultado es que cada vez más software legítimo está siendo detectado como malware, ya sea por el uso de packers o bien simplemente porque la detección genérica del antivirus identifica de forma errónea alguna porción de código o acción que lleva a cabo el software como peligrosa o perteneciente a alguna familia de malware. Y es aquí donde comienzan los quebraderos de cabeza para el desarrollador, especialmente para la pequeña empresa o programador independiente.

¿Cómo convences al usuario de que tu software no tiene virus cuando su antivirus dice que está infectado? Es más, el usuario lo prueba con un multiantivirus y hay N-motores que coinciden que es un "bicho". El usuario no tiene lugar a dudas, ¡le estás ofreciendo software infectado!

Tras desistir con las explicaciones al usuario, escribes a los laboratorios antivirus que detectan tu software legítimo como malware para que rectifiquen. Dejas pasar unos días y... ¡oh!, no sólo te siguen detectando los que ya lo hacían, sino que hay nuevos antivirus que se han sumado a la detección.

¿De quién es la responsabilidad? ¿Deberían los desarrolladores evitar el uso de packers o técnicas que son detectadas de forma genérica por los antivirus? ¿Deberían comprobar con todos los antivirus su software antes de publicarlo, y realizar las modificaciones pertinentes para no ser erróneamente detectado antes de distribuirlo? ¿O bien deberían los antivirus facilitar y agilizar la actualización de listas blancas de software bien conocido sin discriminar a las pequeñas empresas y programadores independientes?

Fuente: http://www.hispasec.com/