File eseguibili negli allegati di posta elettronica su UNIX

0
I file

.EXE rappresentano un pericolo negli allegati alle e-mail e sono generalmente bloccati dai client di posta elettronica di Windows. Com'è questo su UNIX / macOS, dove gli eseguibili non hanno un'estensione?

In base ai dati del file, come si determina se il file è un programma eseguibile (ignorando le autorizzazioni di esecuzione, gli script basati sul testo e i file come PDF che indirettamente eseguono uno spettatore)? Esegui semplicemente file <attachment> e blocchi il file se il risultato è qualcosa come executable ?

Mi piacerebbe anche capire come funziona a un livello basso. Ho speso /usr/share/file/magic/elf . Il formato è un po 'criptico, ma il seguente codice C rileverà in modo affidabile un eseguibile di Linux?

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

Quale sarebbe il test corrispondente per macOS?

    
posta forthrin 04.05.2018 - 13:27
fonte

3 risposte

3

Sistemi UNIX simili come Linux o MacOS non eseguono file eseguibili solo perché hanno un'estensione specifica. Per rendere un file direttamente eseguibile, è necessario che il set di bit eseguibili ( chmod +x file ) non venga eseguito automaticamente quando si salva l'allegato.

Tuttavia, ci sono molti tipi di file che l'ambiente desktop su Linux (e altri sistemi operativi) come GNOME, KDE, ... si aprirà automaticamente. Questo è per uno basato sull'estensione del file simile a quello che fa Windows, cioè i file * .doc verranno aperti con alcune suite per ufficio, * .pdf con un PDF-Viewer ecc. Se l'estensione è mancante, la maggior parte degli ambienti desktop guarderà la "magia" dei file, cioè usa libmagic per determinare il tipo di file e aprirlo nell'applicazione appropriata . Su MacOS c'è anche un meccanismo aggiuntivo in cui il tipo di file e l'applicazione sono inclusi come attributi (fork) in aggiunta al file, ma queste informazioni si perdono di solito durante il trasferimento di un file tramite posta (anche se alcuni programmi di archiviazione preservano questi attributi). p>

Ma NON contrassegnerà automaticamente i file scaricati eseguibili ed eseguirli. Inoltre, non eseguirà direttamente script di shell, Perl-Scripts, Python-Scripts ecc. Che non hanno impostato esplicitamente il bit di esecuzione.

È comunque possibile che tu abbia scaricato un archivio e l'abbia estratto. Il tipo specifico di formati di archivio (come Tar, di solito con estensioni come * .tar, * .tgz e simili) includerà le autorizzazioni di file come il bit eseguibile e queste saranno in genere conservate durante l'estrazione dell'archivio. In questo caso non è necessaria alcuna impostazione aggiuntiva del bit eseguibile e un programma può essere eseguito direttamente.

Quindi, resistendo ai bug nel visualizzatore PDF, nell'applicazione di Office o in applicazioni simili che vengono avviate automaticamente quando si fa clic su un file e si conservano gli archivi, si è generalmente più sicuri in Linux poiché non avvia automaticamente i programmi scaricati da qualche parte. D'altra parte, le applicazioni possono impostare un attributo speciale per i file in Windows per specificare che l'origine del file non è attendibile, il che induce Windows a chiedere conferma prima di eseguire il file.

Se vuoi ancora filtrare i file eseguibili negli allegati potresti usare libmagic o lo strumento basato su libmagic file per rilevare il tipo di file. Nota che questi sono solo euristica e il rilevamento potrebbe in teoria restituire un tipo diverso, specialmente per tipi di file molto simili (come tutti i documenti dell'ufficio basati su ZIP, file JAR, file ZIP ..). Ma dato che i binari ELF oi file con una definizione esplicita dell'interprete in cima (cioè #!/usr/bin/python ) hanno una struttura chiara si può fare affidamento su queste euristiche per questi tipi di file.

Oltre a quella nota, le recenti versioni di Windows non solo utilizzano l'estensione del file per determinare cosa fare con il file. Se il file non ha un'estensione associata a un'applicazione, cercherà di rilevare il tipo di file senza estensione simile a come è fatto in Linux.

    
risposta data 04.05.2018 - 14:57
fonte
0

In linux puoi usare il comando "file" che controllerà l'intestazione e ti dirà il tipo di file, ad esempio:

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

Fondamentalmente il file di comando usa la libreria libmagic che è il responsabile di identificare il file

    
risposta data 04.05.2018 - 14:41
fonte
0

Per Windows, è per lo più sicuro filtrare per estensione poiché se non è un'estensione corretta non verrà eseguito (cioè se il file è denominato 1.tmp non verrà eseguito in quel modo, dovrai rinominarlo in 1.exe).

Per Linux, è meglio usare il controllo delle intestazioni dei file. In questo modo determinerai se il file è pericoloso o meno. Niente è avanzato a riguardo, è solo una pratica standard.

Nel caso di qualsiasi contenuto di file, userei clamav o altre possibilità anti-virus per bloccare i file in base al loro contenuto (cioè aggiungere #! / bin / bash alla lista nera).

Inoltre, puoi bloccare estensioni conosciute come .sh, .py, .tar, .gz, .php, .rpm.

    
risposta data 04.05.2018 - 13:34
fonte

Leggi altre domande sui tag