Archivos ejecutables en archivos adjuntos de correo electrónico en UNIX

0
Los archivos

.EXE son un peligro en los archivos adjuntos de correo electrónico, y generalmente son bloqueados por los clientes de correo electrónico de Windows. ¿Cómo es esto en UNIX / macOS, donde los ejecutables no tienen una extensión?

Según los datos del archivo, ¿cómo determina si el archivo es ejecutable del programa (sin tener en cuenta los permisos de ejecución, los scripts basados en texto y los archivos PDF que indirectamente ejecutan? un espectador)? ¿Simplemente ejecuta file <attachment> y bloquea el archivo si el resultado es algo así como executable ?

También me gustaría entender cómo funciona esto en un nivel bajo. He recogido /usr/share/file/magic/elf . El formato es un poco críptico, pero ¿el siguiente código C detectaría de manera confiable un ejecutable de Linux?

if(strcmp(filedata+0, "\x7fELF") == 0)

¿Cuál sería la prueba correspondiente para macOS?

    
pregunta forthrin 04.05.2018 - 13:27
fuente

3 respuestas

3

Los sistemas UNIX similares como Linux o MacOS no ejecutan ningún archivo ejecutable solo porque tienen una extensión específica. Para hacer que un archivo sea directamente ejecutable, debe tener el conjunto de bits ejecutables ( chmod +x file ) que no se hará automáticamente al guardar el archivo adjunto.

Aún así, hay muchos tipos de archivos que el entorno de escritorio sobre Linux (y otros sistemas operativos) como GNOME, KDE, ... se abrirán automáticamente. Esto es para uno basado en la extensión de archivo similar a lo que hace Windows, es decir, los archivos * .doc se abrirán con algunas aplicaciones ofimáticas, * .pdf con un visor de PDF, etc. Si falta la extensión, la mayoría de los entornos de escritorio se verán la "magia" de los archivos, es decir, utilice libmagic para determinar el tipo de archivo y abrirlo en la aplicación correspondiente . En MacOS también hay un mecanismo adicional en el que el tipo de archivo y la aplicación se incluyen como atributos (fork) además del archivo, pero esta información generalmente se pierde cuando se transfiere un archivo a través del correo (aunque algunos programas de archivo conservan estos atributos). p>

Pero, NO marcará automáticamente los archivos descargados ejecutables y los ejecutará. Tampoco ejecutará directamente shell-script, Perl-Scripts, Python-Scripts, etc. que no tienen el bit de ejecución establecido explícitamente.

Aunque es posible que hayas descargado un archivo y lo hayas extraído. Los tipos específicos de formatos de archivo (como Tar, generalmente con extensiones como * .tar, * .tgz y similares) incluirán permisos de archivo como el bit ejecutable y estos se conservarán normalmente al extraer el archivo. En este caso, no se necesita una configuración adicional del bit ejecutable y un programa podría ejecutarse directamente.

Por lo tanto, al resistir errores en el visor de PDF, la aplicación Office o aplicaciones similares que se inician automáticamente al hacer clic en un archivo y resistir los archivos, generalmente está más seguro en Linux, ya que no iniciará automáticamente los programas descargados desde algún lugar. Por otro lado, las aplicaciones podrían establecer un atributo especial a los archivos en Windows para especificar que el origen del archivo no es confiable, lo que hace que Windows solicite confirmación antes de ejecutar el archivo.

Si aún desea filtrar archivos ejecutables en archivos adjuntos, puede usar libmagic o la herramienta basada en libmagic archivo para detectar el tipo de archivo. Tenga en cuenta que estos son solo heurísticos y la detección podría en teoría devolver un tipo diferente, especialmente para tipos de archivos muy similares (como todos los documentos de oficina basados en ZIP, archivos JAR, archivos ZIP ...). Pero dado que los archivos binarios o archivos ELF con una definición explícita de intérprete en la parte superior (es decir, #!/usr/bin/python ) tienen una estructura clara, se puede confiar en estas heurísticas para estos tipos de archivos.

Aparte de esa nota, las versiones recientes de Windows no solo usan la extensión de archivo para determinar qué hacer con el archivo. Si el archivo no tiene una extensión que esté asociada con una aplicación, intentará detectar el tipo de archivo sin una extensión similar a la forma en que se realiza en Linux.

    
respondido por el Steffen Ullrich 04.05.2018 - 14:57
fuente
0

En Linux puede usar el comando "archivo" que verificará el encabezado y le dirá el tipo de archivo, por ejemplo:

lucho@vm1:~$ file engine.so
engine.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=11847fd5591ede794f812fb661f693a940eae73b, not stripped

lucho@vm1:~$ file command
command: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=7b1774a6f6c20faccf2ac8756f7ba07fc857a61d, not stripped

Básicamente, el archivo de comandos usa la biblioteca libmagic que es responsable de identificar el archivo

    
respondido por el camp0 04.05.2018 - 14:41
fuente
0

Para Windows, es casi seguro filtrar por extensión, ya que si no es una extensión adecuada, no se ejecutará (es decir, si el archivo se llama 1.tmp no se ejecutará así, deberá cambiar el nombre a 1.exe).

Para Linux, es mejor usar la comprobación de encabezado de archivos. De esa manera usted determinará si el archivo es un peligro o no. No hay nada avanzado sobre esto, es solo una práctica estándar.

En el caso de cualquier contenido de archivo, usaría la posibilidad de clamav u otro antivirus para bloquear archivos según su contenido (es decir, agregar #! / bin / bash a la lista negra).

También, puedes bloquear extensiones conocidas como .sh, .py, .tar, .gz, .php, .rpm.

    
respondido por el Overmind 04.05.2018 - 13:34
fuente

Lea otras preguntas en las etiquetas