¿Cómo verificar si un archivo de imagen está limpio?

1

Quiero saber si es posible comprobar si un archivo de imagen como JPEG, PNG, GIF o BMP es seguro y no contiene ningún virus.

Quiero filtrar un archivo de imagen antes de enviarlos a sandbox para comprobar si no es sospechoso y sé que es un archivo seguro. La respuesta de la zona de pruebas dura 2-3 minutos y quiero reducir el tiempo si puedo filtrar algunos archivos que definitivamente se limpian.

¿Existe algún método para averiguar si un archivo de imagen es definitivamente seguro?

    
pregunta Max.Futerman 15.03.2018 - 10:41
fuente

3 respuestas

1

Las imágenes son colecciones de píxeles. Esos suelen ser inofensivos. Solo pueden ser peligrosos si están mal formados y el usuario utiliza un software de visualización de imágenes que tiene un error de seguridad crucial o si se los confunde con un ejecutable y alguien intenta ejecutarlos.

Una forma fácil de vencer la mayoría de estos ataques es volver a codificar las imágenes en su servidor. Use una biblioteca en su servidor para decodificar las imágenes a una matriz en memoria de valores RGBA y luego vuelva a codificar esos valores a una nueva imagen en el mismo formato. Eso comprueba si en realidad es un archivo de imagen válido y debería eliminar los datos no deseados de él.

Sin embargo, si haces esto, ten en cuenta que abre tu servidor a posibles ataques:

  • La biblioteca que utiliza para desodificar y codificar las imágenes puede tener vulnerabilidades. Así que asegúrate de usar uno con un buen registro de seguridad.
  • La imagen puede ser una bomba de descompresión . La mayoría de los formatos de imagen utilizan algoritmos de compresión. Muchos algoritmos de compresión permiten crear archivos comprimidos que generan una enorme cantidad de datos si no están comprimidos o requieren una gran cantidad de recursos computacionales para descomprimir. Eso puede ser usado para el agotamiento de recursos DOS ataques. Así que asegúrate de abortar la decodificación de la imagen si comienza a consumir demasiada RAM o toma más de unos pocos milisegundos (a menos que tu biblioteca de imágenes ya lo haga).

También tiene el efecto secundario de que no solo eliminará los metadatos maliciosos de los archivos de imágenes, sino también los metadatos, lo cual es beneficioso (como los perfiles de color). Si desea preservar ciertos tipos de metadatos, debe tener especial cuidado con eso.

    
respondido por el Philipp 15.03.2018 - 13:49
fuente
1

Hay algunas preguntas que abordar aquí:

En primer lugar, el tipo de archivo real. Debe verificar la extensión del archivo, pero eso no indica necesariamente el tipo de archivo real, debe verificar el indicador de tipo de archivo, los "bytes mágicos", existen bibliotecas para muchas plataformas de desarrollo que lo hacen por usted y puede leer más información al respecto aquí .

En el análisis de virus, puede ejecutar un motor de análisis en un servidor y enviar archivos a ese archivo o puede utilizar una API como Virus Total. Hay algunos problemas a considerar al enviar el archivo a una API.

¿Dónde está ubicada la API? Si se encuentra en el mismo país que usted, puede haber restricciones de la ley de datos para enviar el archivo a un motor de escaneo en otro país si esas imágenes pueden contener información personal (como caras, nombres, direcciones de correo electrónico, etc.)

Los archivos cargados en ciertos motores de exploración pueden estar disponibles para otras personas, considere si esto presenta algún problema para usted o sus usuarios. Puede mitigar esto ejecutando su propio sistema 'local' pero esto requerirá infraestructura para ejecutarse y posiblemente incurra en licencias adicionales.

La segunda consideración es cuando escaneas? Si un usuario carga una imagen, ¿escanea a petición tan pronto como intenta subirla? Esto causará un retraso en la carga, pero evitará que los virus ingresen al almacenamiento de archivos. La alternativa es permitir las cargas sin escanear primero y tener un agente que ejecute, escaneando archivos, eliminando los archivos problemáticos a medida que avanza. Depende de los requisitos que tengas.

    
respondido por el iainpb 15.03.2018 - 10:59
fuente
0

No es posible verificar con certeza que una imagen esté limpia, salvo analizarla manualmente para ver si se ajusta perfectamente a los estándares, y que su visor de imágenes también cumple con los estándares. En su lugar, puede codificar la imagen entre un formato simple. La conversión de una imagen a un formato trivial conlleva el riesgo de explotación, pero la conversión de un formato trivial a un formato más complejo no lo hace. Puede explotar esta área de superficie de ataque reducida, por ejemplo:

  1. Cargue la imagen sospechosa en un convertidor de imagen de espacio aislado. El convertidor de imágenes no debe tener acceso al sistema de archivos, Acceso a X11 , o acceso a syscalls innecesarios. El convertidor de imágenes de espacio aislado no debe ser confiable, ya que utilizará bibliotecas potencialmente vulnerables.

  2. Haga que el convertidor de imágenes de espacio aislado vuelva a codificar la imagen en un formato de mapa de píxeles trivial, como PPM . El formato debe ser lo suficientemente simple como para que no se pueda explotar. El supuesto es que este proceso de conversión puede comprometer el convertidor, por lo que no es necesario que todos los pasos posteriores confíen en esta etapa. Un mapa de píxeles es lo suficientemente trivial para estos fines.

  3. Luego, un segundo convertidor de imágenes sin caja se apodera del mapa de píxeles, por ejemplo. a través de la memoria compartida. Este convertidor de imágenes es de confianza, ya que su única entrada será un formato tan trivial que la explotación es inviable. El mapa de píxeles se puede convertir a un formato de imagen más adecuado, asumiendo que, por supuesto, no desea que la salida sea una imagen grande, sin comprimir, sin formato.

Entonces, ¿por qué no tener un solo proceso de caja de arena para convertir la imagen? Si asume que la biblioteca de análisis de imágenes para la entrada es vulnerable, entonces ya no se puede confiar en un proceso de espacio aislado. Si le pide que convierta un JPEG a un PNG y el JPEG es malicioso, podría incrustar un exploit diferente en la salida del PNG. Esto no va a ser probable, pero es posible, haciendo que esto sea un no-go.

Si esto es una exageración, entonces todavía hay otras formas más sencillas de reducir la probabilidad de ser víctimas de una hazaña de análisis de imágenes. Una lista no exhaustiva de recomendaciones es:

  • Mantenga actualizado todo su software, especialmente las bibliotecas de imágenes.

  • Verifique que el formato de la imagen coincida con la extensión, por ejemplo, marcando el tipo MIME .

  • No acepte imágenes de fuentes no confiables si es posible.

  • Use solo formatos de imagen comunes como JPEG, PNG y GIF.

respondido por el forest 16.03.2018 - 05:13
fuente

Lea otras preguntas en las etiquetas