Come è possibile incorporare il codice eseguibile in un'immagine

33

Leggevo FireEye e mi sono imbattuto in questo articolo NYTimes che specifica una chat su Skype in cui è stata inviata un'immagine pieno di malware :

Quote:

To gain access to information on the devices..., hackers posed as women on Skype, identified the types of devices the targets were using and sent photos laden with malware.

The second photo was a particularly potent piece of malware that copied files from the targets computer

So che i dati exif e gli header IPTC esistono nelle immagini e sono abbastanza sicuro che potresti inserire alcune informazioni extra in un file immagine usando le informazioni dell'intestazione del tipo mimet FileMagic, ma come è possibile incorporare il codice eseguibile in un'immagine?

Il formato del file immagine era pif così a meno che il computer non avesse un'app che apriva il file e mostrava un'immagine mentre il codice era esplicitamente esecutivo, non vedo come sia possibile.

    
posta Jeremy Thompson 15.02.2015 - 06:58
fonte

8 risposte

59

La risposta è semplice. Quella era non una foto. E .pif è non un formato immagine. Conta su NYTimes per fornire informazioni tecniche corrette.

Come dice il log sull'articolo di NYTimes e come il report effettivo di FireEye conferma che il file utilizzato era un file .pif . È una delle meno conosciute estensioni di file eseguibili di Windows.

.pif è legacy da MS-DOS, come .com. È inteso per essere un "file di informazioni sul programma" (da cui il nome), memorizzando un collegamento a un programma (DOS) insieme a varie informazioni sul sistema su come trattarlo. Ancora oggi, Windows offre ai file .pif l'icona di un collegamento.

La cosa divertente è che, oggi, a Windows non interessa se il file .pif è in realtà solo un file di informazioni sul programma. Provalo: rinomina qualsiasi file .exe in un file .pif ed eseguilo. Potrebbe esserci qualche differenza, come l'icona che non viene visualizzata, ma questo è tutto. Questo è il trattamento uniforme dei file di diversi formati. Grazie, Microsoft!

Perché succede? Risposta breve: Perché Windows . Risposta più lunga: Windows esegue un file .pif tramite ShellExecute , che tecnicamente dovrebbe trovare un programma adatto per aprire un file e quindi utilizzarlo per aprirlo. Con i file .pif, controlla innanzitutto se è veramente un file che punta a un eseguibile MS-DOS. Se non è conforme al formato file .pif, ShellExecute verifica se contiene codice eseguibile. Se lo fa, viene eseguito come se fosse un exe. Perché? Perché Windows!

Che cosa hanno fatto gli genieri hacker suuper-scary ? Questi ragazzi non si sono preoccupati di fare nulla di complicato: hanno creato un archivio SFXRAR autoestraente ed eseguibile da un programma di installazione di virus e un programma (probabilmente solo un .bat) che apriva l'immagine di una ragazza trovata su Internet, ribattezzato diabolico congegno in un file .pif e lo ha inviato allo sventurato combattente per la libertà.

Perché hanno usato .pif? Per due ragioni, ovviamente:

  1. Poche persone sanno che può essere eseguito come un file eseguibile ( grazie, Microsoft! )

  2. Ovviamente suona come .gif o .tiff o .pdf o qualcosa di molto image-y . Perfino tu non hai dubitato del suo nome che fosse un formato immagine, vero, OP? ;)

Riguardo alla tua domanda reale ("come è possibile incorporare il codice eseguibile in un'immagine"). Sì, è possibile eseguire codice tramite un'immagine appositamente predisposta purché sia aperta in un programma vulnerabile. Questo può essere fatto sfruttando un attacco come un buffer overflow . Ma questi hacker specifici probabilmente non erano abbastanza intelligenti per questo.

Modifica

Nota interessante: questi ragazzi hanno effettivamente utilizzato DarkComet, che ha la capacità di generare file eseguibili compressi con diverse estensioni .pif nella loro lista. Non sono sicuro di visualizzare un'immagine, ma questa potrebbe essere una funzionalità aggiunta in una versione più recente.

Un'altra modifica

Vedo che stai chiedendo come proteggere da questa specifica " vulnerabilità ". La risposta è semplice.

Per prima cosa, assicurati che Windows mostri le estensioni dei file . Di solito, Windows li nasconde di default ( grazie, Microsoft! )

Quindi impara questo a memoria: .exe .com .cmd .bat .pif .vb .vba .vbs .msi .reg .ws .wsc .wsf .cpl .lnk . Questi sono i tipi di file più conosciuti che possono facilmente eseguire codice potenzialmente dannoso o danneggiare in altro modo il computer se aperto, indipendentemente dal fatto che le applicazioni vulnerabili siano installate o meno. Se qualcuno ti manda un file del genere dicendo che è un'immagine di una bella ragazza, puoi essere sicuro che si tratta di un altro hacker di basso profilo come questi siriani.

Un'altra opzione è semplicemente di essere proattivi e controllare e ricontrollare ogni file scaricato con un formato di file non familiare. Potrebbe essere un malware, lo sai.

Per quanto riguarda le immagini reali con exploit ... probabilmente potresti provare a mantenere aggiornato il tuo software.

    
risposta data 18.02.2015 - 14:36
fonte
10

Niente è perfetto, e un tipo comune di bug è un overflow del buffer, in cui i dati brevi vengono copiati dove non dovrebbe essere, e in alcuni casi ciò può portare all'esecuzione di codice arbitrario.

Ad esempio qui è un bug nelle vecchie versioni di Microsoft in cui, se hai visualizzato un certo immagine con IE che potrebbe essere eseguito codice arbitrario.

Si noti che questo è molto specifico per l'implementazione, quindi aprire la stessa immagine in firefox o chrome comporterebbe semplicemente un'immagine spezzata, ma nessuna esecuzione di codice.

Overflow del buffer in parole povere

Dettagli tecnici sull'overflow del buffer

    
risposta data 15.02.2015 - 09:35
fonte
5

La risposta di Mints97 è ottima, ma penso che potrebbe esserci di più. Un problema particolarmente bello (leggi: terribile) con Windows è che supporta il set completo di caratteri Unicode nei nomi dei file, incluso (e questo è il peggiore), U-202E.

Anche se sono certo che ha alcuni buoni usi innocui, ma può consentire alle persone di modificare il nome del file in modo malevolo in un modo che è difficile da notare per l'utente medio. Questo è ottimamente documentato in questo articolo di howtogeek.com .

Essenzialmente l'hacker può mettere U-202E in un nome di file e cambiare filename by gnp.tab in filename by bat.png . Il personaggio inverte l'ordine di tutti i nomi dietro a se stesso. Tutto ciò che l'utente malintenzionato deve fare è scegliere il tipo di file corretto che viene eseguito e Windows lo assocerà al nome dell'eseguibile.

È più difficile proteggersi di quanto pensi. La migliore difesa sarebbe quella di scansionare i nomi dei file per questo. Il comando CMD dir sembra riportare un ? per questo carattere Unicode. Python, e sono sicuro che altre lingue, possono ottenere il nome Unicode, quindi uno script o un programma di qualche tipo potrebbe prevenire questo problema.

Di gran lunga la soluzione più semplice è quella di guardare anche le quattro lettere prima di un'estensione di file e assicurarsi che il contrario non sia un nome eseguibile. (Penso che ci siano alcuni nomi eseguibili in quattro lettere, ma non ne sono sicuro)

Stai attento!

EDIT: ho creato uno script python scaricalo qui che legge i nomi dei file in una directory per U-202E. Ti dice se a) il nome effettivo eb) l'estensione. Dovrebbe supportare il lavoro con più file e più U-202E in un unico nome.

    
risposta data 24.02.2015 - 02:10
fonte
2

Hai scritto, "Il formato del file immagine era pif", ma l'articolo afferma "I ricercatori di FireEye hanno trovato una raccolta di chat e documenti mentre ricercavano malware nascosti nei documenti PDF." Il file di informazioni sul programma è stato utilizzato nei sistemi Microsoft Windows, sebbene i file in quel formato siano più rari ora di quanto lo fossero una volta. C'erano vulnerabilità associate ai file PIF, ad esempio, vedere Microsoft Windows esegue automaticamente il codice specificato nei file di collegamento , ma l'articolo del New York Times parla di documenti PDF.

Le immagini possono essere memorizzate all'interno di documenti PDF e qualcuno che apre un documento PDF può rendersi vulnerabile agli exploit che utilizzano i file PDF. In tal caso il problema è improbabile creato dall'immagine, ma piuttosto dal contenitore, cioè il file PDF, in cui è stato trasmesso. Per alcune vulnerabilità del PDF, vedi pdf attuali minacce e La crescita dello sfruttamento delle vecchie vulnerabilità del PDF . Ad esempio, quest'ultimo riferimento menziona una vulnerabilità associata a JavaScript all'interno di un file PDF che indica "Il JavaScript incorporato potrebbe contenere istruzioni dannose, come i comandi per scaricare e installare altro malware."

    
risposta data 15.02.2015 - 22:31
fonte
1

C'era un exploit ampiamente pubblicizzato qualche anno fa, che usava un bug in una particolare libreria jpeg ampiamente distribuita. L'effetto netto di questo exploit era consentire l'esecuzione codice arbitrario sulla macchina delle vittime, quando nominalmente stava provando tutto quello che stavano facendo per visualizzare un'immagine.

Inoltre, ad esempio, c'era un exploit per i file di testo RTF (formato RTF) che non lo erano richiede un bug, solo usando una caratteristica poco conosciuta del formato rtf da eseguire codice sulla macchina degli utenti.

Un altro esempio è l'integrazione di macro nei documenti word. I macro sono incredibilmente potenti e funzionalità utile, ma quando puoi dare a qualcuno un documento che contiene macro del tuo scegliendo, può anche essere un potente strumento di hacking.

In generale, è davvero allettante incorporare funzionalità in formati di file complessi che li forniscono capacità equivalenti a turing. Inoltre non è una buona idea.

    
risposta data 19.02.2015 - 21:42
fonte
0

Bene, si inizia analizzando il formato del file. E poi fai un po 'di ipotesi su come reagirà il software diverso.

Ad esempio JPEG - link - utilizza marcatori speciali per delimitare l'inizio e la fine di Immagine. Ora si potrebbe scommettere che il software che si occupa di JPEG cercherà solo l'inizio e la fine degli indicatori di immagine e traccerà ogni cosa nel mezzo. Se uno dei due marker non viene trovato, il jpeg non è valido, giusto? Ora cosa succede se, dopo la fine del marcatore di immagini, aggiungiamo un segno di fine del file, e successivamente aggiungiamo il nostro carico utile eseguibile. Beh, scommetto che la maggior parte dei plotter jpeg là fuori ignorerà il payload e funzionerà come presupposto. Successo a questo punto abbiamo allegato un payload nell'immagine. Ora per farlo funzionare, beh, questo è un po 'più difficile. Potremmo avere il nostro "software" in cerca di materiale dopo la fine del markup dell'immagine e, se presente, ingerirlo, o potremmo provare a iniettare un'intestazione ELF / EXE / COM con un offset per il codice prima dell'inizio del markup dell'immagine e sperare che il plotting il software lo ignorerà, ma il sistema operativo no.

Il problema è che inizialmente il sistema e le reti sono state costruite con l'idea sbagliata preformata secondo cui le persone sono oneste e si comportano come macchine e non romperanno i modelli e non utilizzeranno il software al di fuori dei casi previsti. E per questo motivo sono state fatte molte ipotesi. Sì, l'utente digiterà al massimo 200 caratteri, sì, l'utente digiterà sempre il formato leggibile e così via. Quando si pensa ai casi d'uso, come programmatore si entra nell'abitudine di pensare che i casi siano assoluti e non si guardino alle eccezioni. Indovina cosa succede quando arriva qualcuno che sta pensando fuori dagli schemi ...

    
risposta data 18.02.2015 - 16:48
fonte
-1

Ricordo i bei vecchi tempi quando ho visto o caricato un file .ico con le API fornite con Windows utilizzate per consentire l'esecuzione diretta del codice se create in modo abbastanza dannoso.

E l'intero concetto alla base del formato file wmf stava chiamando direttamente le routine grafiche. (da qui la creazione del formato bitmap indipendente dalla periferica, ovvero i file .bmp)

Quindi sì è possibile, ed è stato fatto in passato. anche se improbabile in questi giorni. Non lo escluderei completamente, ma inutile dire che richiederebbe un aggressore estremamente abile per tirarlo fuori.

    
risposta data 18.02.2015 - 18:35
fonte
-1

Penso che il modo per impedire che il malware venga codificato in un file consiste nel creare un tipo di file binario, ad esempio un file di immagine binaria, e creare un programma che leggerà il file e lo gestirà di conseguenza. Ho pensato a un progetto come quello. Il bello del fatto che il file sia un file binario è che per mettere un file eseguibile nel file, devono creare un programma che legge e ricondina il codice excutable ed eseguirlo.

    
risposta data 16.01.2019 - 23:48
fonte

Leggi altre domande sui tag