¿Realmente puede obtener un troyano en un archivo de imagen y, de ser así, cómo se ejecutará?

11

Acabo de digitalizar un par de LPs y necesitaba algo de portada. Mi escáner no es lo suficientemente grande como para escanear el álbum, así que busqué y descargué las imágenes de la red.

Cuando lo hice, Avast informó que uno de ellos contenía el troyano "Win32: Hupigon-ONX" y lo puso en cuarentena de inmediato. Como no quería arriesgarme, descargué una copia diferente que informaba que estaba limpia.

Ahora, ¿esto fue solo un falso positivo de Avast o podría haber realmente un troyano en el jpg?

Si hubiera, ¿cómo se ejecutaría?

Debo admitir que este aspecto de los troyanos y los virus siempre me ha desconcertado. Como desarrollador de software, siempre he verificado la longitud de las matrices, etc., así que no veo por qué deberían ocurrir cosas como desbordamientos de búfer. Entiendo que la gente corta atajos y comete errores, y si el software es lo suficientemente complejo, estos errores pueden pasar.

ChrisF
fuente

Respuestas:

11

Las vulnerabilidades en los archivos de imagen aprovechan los defectos de desbordamiento del búfer en el código de procesamiento de imágenes del sistema operativo. Se encontraron varios defectos importantes en la capa GDI de Windows hace un par de años: se lanzaron parches hace mucho tiempo, pero las imágenes de explotación todavía están ahí, ya sea porque se quedaron o con la esperanza de que golpeen una máquina que aún no ha sido parcheada. .

La causa habitual de tal agujero de seguridad es pasar datos de imagen entre funciones en la pila de llamadas y no verificar adecuadamente la longitud máxima de los datos. Esto puede ser explotado por datos ingeniosamente construidos que están sobredimensionados y organizados de tal manera que terminen sobrescribiendo el siguiente código en el marco de la pila (sobrescribiéndolo con otro código) o sobrescribiendo punteros al código que se usará para llamar a otras funciones o cuando la función a la que se llama vuelve a llamarse (sobrescribiendo dicho puntero para que apunte al código de explotación), o sobrescribiendo datos de tal manera que exponga otro agujero. El método exacto varía según el agujero de seguridad en cuestión.

Las CPU modernas tienen una protección que detiene la mayoría de estas vulnerabilidades si el código lo admite. Esto funciona mediante el programa / biblioteca que marca explícitamente cuáles de sus páginas son datos y cuáles son código: la CPU generará una excepción si algo en lo que deberían ser datos (como datos de imágenes) intenta ejecutarse como código. IIRC Vista y versiones superiores y recientes de .Net han modificado todas sus bibliotecas para admitir esta protección, y también es compatible con otros sistemas operativos, pero esto no detiene todas esas vulnerabilidades y solo funciona si está explícitamente activado (de lo contrario, un gran cantidad de código antiguo se rompería).

David Spillett
fuente
9

Debo admitir que este aspecto de los troyanos y los virus siempre me ha desconcertado. Como desarrollador de software, siempre he verificado la longitud de las matrices, etc., así que no veo por qué deberían ocurrir cosas como desbordamientos de búfer.

Bueno, bienvenido al mundo real ;-). Desbordamientos de búfer & c. puede suceder en muchos idiomas (especialmente en aquellos con la gestión de memoria manual como C), y como desarrolladores cometen errores, no sucederá.

Aunque normalmente un desbordamiento del búfer simplemente bloqueará el programa (violación de segmentación o similar), puede permitir que un atacante ejecute código -> troyano activado.

Por ejemplo:

http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx

http://secunia.com/advisories/35216/

Y para una explicación de cómo esto permite la ejecución del código:

/programming/460519/how-are-buffer-overflows-used-to-exploit-computers

sleske
fuente
Sé que suceden, es solo una de las verificaciones básicas que siempre he hecho al procesar datos, verifique que tenga / haya asignado suficiente espacio para los datos.
ChrisF
@ChrisF, el hecho de que debes asegurarte de verificar (a diferencia de la "computadora" es el problema en sí.)
Zabba
@Zabba, lo que quise decir es que "codifico el programa para verificar" cuando proceso datos.
ChrisF
2

Debo admitir que este aspecto de los troyanos y los virus siempre me ha desconcertado. Como desarrollador de software, siempre he verificado la longitud de las matrices, etc., así que no veo por qué deberían ocurrir cosas como desbordamientos de búfer. Entiendo que la gente corta atajos y comete errores, y si el software es lo suficientemente complejo, estos errores pueden pasar.

Tal vez esté verificando todos los punteros, matrices, etc. Pero, ¿está seguro de que todos los programadores de cualquier biblioteca de 3er patry que (podría) usar (algún día) también lo hicieron?

La solución más simple para esto sería descargar un archivo como "image.jpg.exe" o algo similar en lugar de una imagen real.

Las formas más avanzadas de infectar su PC ya se han descrito aquí (por ejemplo, desbordamiento de búfer, ...)

Elvith
fuente
1
Verdadero, pero cambio las opciones de carpeta para mostrar extensiones. Estoy seguro de que ocultar extensiones conocidas ha causado más problemas de los que resuelve. De hecho, no puedo pensar en un problema que realmente resuelva.
ChrisF
ack completo: es una de las primeras opciones que activo cuando trabajo con Windows
Elvith el
@ChrisF: Bueno, obviamente el problema que resuelve es que, de lo contrario, los usuarios pueden cambiar accidentalmente la extensión de un archivo al cambiarle el nombre. Esto causa el problema familiar "El ícono de mi documento parece gracioso y ya no puedo abrirlo. ¡Ayuda!" :-) (y sí, a veces hago soporte técnico para mi familia).
sleske
@sleske: Windows 7 no selecciona la extensión cuando cambia el nombre de un archivo.
ChrisF
1
@ ChrisF: Interesante, no lo sabía. Sin embargo, solía ser diferente: al menos Windows Server 2003 selecciona el nombre completo para un cambio de nombre. Y en cualquier caso, si los usuarios pueden editar la extensión, ellos :-).
sleske