È possibile che un file non eseguibile e di sola lettura esegua codice dannoso?

20

Su un sistema POSIX, esiste la possibilità per un file che non è eseguibile e di sola lettura (ovvero con una modalità 444) per eseguire codice dannoso su una macchina?

Se sì, puoi spiegare come farebbe così?

    
posta Idr 30.12.2015 - 02:10
fonte

5 risposte

41

Sì, qualcosa deve solo eseguirlo. Il flag X suggerisce alla shell che può essere eseguito direttamente, ma ciò non impedisce ad altri programmi di eseguirlo se sanno come.

Ad esempio, se hai un file a.sh che non è eseguibile nella shell, puoi eseguirlo chiamando bash a.sh (che dice esplicitamente a bash di eseguirlo). Se hai un file non eseguibile a.py , puoi eseguirlo chiamando python a.py . Immagino che ci sia anche un modo per dire al sistema operativo di eseguire un file ELF binario, ma non conosco il comando a mano.

Ci sono anche un'intera classe di cose che non richiedono di fare nulla in particolare per farlo eseguire codice dannoso. I file PDF e Adobe Flash in particolare hanno avuto alcuni buchi ben noti che hanno permesso il semplice atto di leggere un file per eseguire codice dannoso. Ci sono anche alcuni file che, in posti specifici, possono essere eseguiti automaticamente (specialmente su Windows). Inoltre, se il file è compresso, potrebbe contenere un virus buffer-overflow per il decompressore. Il file potrebbe anche essere ancora più dannoso, sfruttando un bug ancora sconosciuto nel file system o qualcos'altro veramente di basso livello.

Conclusione: l'unico modo per garantire che qualcosa non infetti il tuo computer è di non fare mai niente con niente.

    
risposta data 30.12.2015 - 02:25
fonte
11

Supponiamo di avere il file myscript che contiene quanto segue:

  #!/bin/bash
  echo "Hello, World!"

Se rendi questo file eseguibile ed eseguilo con ./myscript, il kernel vedrà che i primi due byte sono #!, il che significa che è un file di script. Il kernel utilizzerà quindi il resto della riga come interprete e passerà il file come primo argomento. Quindi, esegue:

     /bin/bash myscript

e bash legge il file ed esegue i comandi che contiene. un altro modo di eseguire un file senza eseguire bit set è:

   #. myscript

un punto seguito da uno spazio e poi il nome del file.

Quindi, per bash (o qualsiasi interprete richiesto dallo script) per "eseguire" lo script, deve solo essere in grado di leggere il file.

Quindi, per gli script, il bit di esecuzione rende solo un po 'più comodo eseguirlo. Finché bash è eseguibile, puoi sempre eseguire bash con il file di script come argomento

    
risposta data 30.12.2015 - 02:59
fonte
8

Questo può essere vero non solo con script come gli altri esempi mostrati su tutte le risposte. Fondamentalmente, se il software che legge un file ha un bug, ogni file è un vettore per l'esecuzione di codice dannoso, utilizzando una vasta gamma di tecniche (overflow, corruzione di mem, esecuzione arbitraria di software ...). Esempi:

  • Exploit.Win32.AdobeReader.K - Questo file PDF dannoso sfrutta una vulnerabilità ( CVE-2007-5020 ) sulla gestione URI dei file PDF. Questa vulnerabilità interessa IE7, Adobe Acrobat e Adobe Reader su alcune piattaforme.
  • Zero Day QuickTime mvhd - Il difetto specifico esiste all'interno dell'atomo 'mvhd'. Fornendo una versione e flag non validi, un utente malintenzionato può creare un danneggiamento della memoria controllabile e attivare un'operazione di scrittura arbitraria. Sfruttando questo, un utente malintenzionato può eseguire codice nel contesto dell'utente corrente. CVE-2014-4979
risposta data 30.12.2015 - 14:04
fonte
1

Un file in sé potrebbe non essere pericoloso stando seduto lì. Ma a seconda del programma cercherà di leggerlo, potrebbe causare problemi. Inoltre, se il file può essere letto, può essere copiato. Quindi potrebbe essere copiato e rinominato in un file eseguibile.

Quindi dici che stai usando DOS / Windows e hai un file something.txt e lo copi in un file chiamato something.bat ora puoi eseguirlo.

Se hai detto un file HTML (o contenuto HTML) puoi caricarlo nel tuo browser e se il tuo browser ha una vulnerabilità in Javascript quel programma può causare danni.

In teoria se il file è appena seduto potrebbe essere ancora pericoloso, se in qualche modo la tabella di allocazione dei file (FAT) per il file system ha alcuni problemi e sta eseguendo un programma, a causa di una frammentazione inappropriata potrebbe passare a dove si trova il tuo file dannoso ed esegui tale codice. Questo tipo di azioni su alcuni sistemi operativi può essere eseguito tramite un buffer overflow.

    
risposta data 31.12.2015 - 18:18
fonte
1

Sì, puoi. L'esempio classico per i binari consiste nell'utilizzare l'interprete ELF come nell'esempio seguente.

$ cp /bin/ls /tmp/ls
$ chmod a-x /tmp/ls
$ /lib/ld-linux.so.2 /tmp/ls

O per i sistemi x86-64:

$ /lib64/ld-linux-x86-64.so.2 /tmp/ls

Lo stesso vale per gli script di shell.

$ echo "#!/bin/bash" > /tmp/hello
$ echo "echo 'hello world" >> /tmp/hello
$ bash /tmp/hello

Questi sono esempi di base quando abbiamo un nuovo auditor o risk manager o addetto alla sicurezza che pensa che dobbiamo riordinare le cose. La risoluzione è quella di seguire il percorso di SELinux su sistemi Linux in quanto limita anche altri percorsi di escalation come altri hanno già menzionato.

    
risposta data 01.01.2016 - 03:13
fonte

Leggi altre domande sui tag