Come difendersi da un virus che nasconde il payload crittografandolo?

2

Recentemente ho iniziato a conoscere meglio il funzionamento degli antivirus e di altri prodotti antimalware e mi sono reso conto che la maggior parte di questi utilizza principalmente 3 tecniche diverse per rilevare e bloccare il malware:

  1. Rilevamento basato su firma
  2. Analisi euristiche
  3. Sandboxing (per i file che attraversano il filtraggio di 1. e 2.)

All'inizio mi è sembrata una grande idea, specialmente le funzioni intelligenti sandboxing che potrebbero essere in grado di rilevare l'esecuzione ritardata, le contromisure della macchina virtuale, la crittografia e altro ancora.

Quindi un modo per aggirare quelle tecniche di rilevamento mi è passato per la testa, quindi l'ho testato e funziona contro tutti gli antivirus che ho provato e probabilmente su chiunque faccia affidamento su quelle tecniche:

Che cosa succede se il codice dannoso viene crittografato in un file dall'aspetto innocente con una passphrase che sarà conosciuta solo dalla vittima (che ovviamente non ne è a conoscenza) e che sarà necessaria per decrittografare il codice dannoso ed eseguire al momento dell'esecuzione?

Supponiamo che un codice dannoso sia crittografato utilizzando la funzione di crittografia AES256 con una specifica passphrase. Quindi la stringa risultante crittografata viene inserita in un file JScript che contiene le istruzioni per decrittografarlo una volta che l'utente digita la frase di accesso ed eseguirlo tramite una funzione eval () in fase di runtime. Non c'è modo per l'antivirus di sapere o indovinare la frase di passaggio giusto? E non c'è modo di sapere che c'è del codice malevolo nascosto all'interno di quel file JScript. E poiché verrà decrittografato in memoria solo in fase di runtime, senza mai essere scritto sul disco, il rilevamento basato su firma e l'analisi euristica falliranno. Lo stesso vale per il sandboxing poiché nessuna azione dannosa verrà attivata senza che l'utente debba digitare la passphrase.

Ora per fare in modo che l'utente digiti la pass phrase, può essere usato un semplice tipo di Captcha, che chiede all'utente di digitare le parole che vede in un'immagine (o il disegno ASCII per esempio ^^) per assicurarsi che sia lui non un robot. Quindi, quando l'utente lo digiterà, il codice dannoso verrà decrittografato ed eseguito.

Come ci si dovrebbe difendere da questo tipo di attacco? Forse un antivirus avanzato che utilizza tecniche di deep learning potrebbe essere in grado di rilevarlo, ma mi sembra che gli attuali programmi antivirus siano completamente vulnerabili ad esso.

Aggiornato: esempio di codice che illustra la tecnica sopra

Ecco una semplice implementazione in JScript:

var encryptionFunction = ; // Any encryption function, e.g. AES256 from CryptoJS

var hiddenCode = ; // Write any code here, e.g. WScript.Echo('My code has been executed !');

var passphrase = "Any pass phrase"; // It'll be used as a CAPTCHA challenge-response, e.g. picture with the passphrase or ASCII drawing

var encryptedCode = encryptionFunction(hiddenCode, passphrase); // Our hidden code will be encrypted with the passphrase

var template = "var decryptionFunction = ;" + // The decryption function is defined here

               "var passphrase = InputBox('Your CAPTCHA challenge goes here');" + // CAPTCHA in an Input Box, user's input = passphrase

               "eval(decryptionFunction('" + encryptedCode + "', passphrase))"; // Decryption of the encrypted code thanks to the user's input and run at execution time through eval()

var file = ; // Create a new JScript file (or WSF) and put the template as its content

08/04/2017 - Prova del concetto + Scansione antivirus

Ho aggiunto una dimostrazione del concetto:
link

È fondamentalmente un semplice file WSF che visualizza una finestra che richiede una password, nascosta in un disegno ASCII. Una volta che l'utente digita la password corretta, il codice crittografato incorporato nel file verrà decrittografato ed eseguito in runtime, visualizzando semplicemente "Il mio codice è stato eseguito!" all'interno di una finestra.

Come pensavo, la routine di decrittografia non era considerata dannosa da alcun antivirus su VirusTotal (0/56), ecco la scansione antivirus:
link

    
posta 31.03.2017 - 01:32
fonte

2 risposte

2

Una buona crittografia sembra dati casuali a qualcuno senza la chiave. Quindi un programma antivirus non è in grado di stabilire se i dati crittografati sono dannosi o meno. Nessun antivirus al mondo può sfondare AES.

Quindi hai trovato il magico proiettile d'argento per ingannare tutti i programmi antivirus? No.

Prima di tutto, deve esserci una sorta di meccanismo di bootstrap che prende la chiave, decodifica il codice e lo esegue. Un'e-mail con un allegato JS è già sospetta. Se l'allegato decrittografa un blob binario e lo esegue ... beh, questo dovrebbe far lampeggiare alcune luci rosse.

Quindi, mentre il carico utile effettivo (i dati crittografati) non può essere analizzato dall'antivirus, il bootstrapper potrebbe essere catturato dall'euristica.

In secondo luogo, un virus che richiede all'utente di eseguire alcune attività (ad esempio, immettere una chiave) è un po 'poco pratico. Certo, l'ingegneria sociale può essere potente, ma questo non è buono come qualcosa che viene eseguito silenziosamente in background con zero interazione dell'utente.

    
risposta data 03.04.2017 - 11:31
fonte
4

Dalla mia comprensione questa domanda restringe una domanda più generale a un singolo esempio molto specifico. La domanda più generale è: in che modo alcuni sistemi di analisi (antivirus, ecc.) Rilevano che alcuni software sono dannosi se si comportano malevoli solo in un ambiente specifico, con dati di input specifici, ecc. Questo può essere un archivio protetto da password in cui è nota la password l'utente (come contenuto come testo nella mail di phishing), questo può essere codificato con una password che deve essere inserita dall'utente, questa può essere la dipendenza da un sistema operativo specifico, software installato o simile.

La risposta in tutti questi casi è la seguente: nessun software di analisi è in grado di rilevare con certezza che il software analizzato possa essere dannoso. Al massimo potrebbe impiegare una certa euristica che rileva pattern tipicamente associati a tale comportamento, come il controllo della specifica versione del SO e del browser o del software installato, utilizzando i dati inseriti dall'utente per operazioni che potrebbero sembrare una decifratura, ecc. Ma queste euristiche non sono completamente affidabili Ad esempio, potrebbero rilevare problemi in cui non è presente alcun comportamento dannoso e perderanno un sacco di problemi reali.

Pertanto, tale analisi può essere solo una parte della protezione. Ulteriori parti potrebbero essere per rilevare comportamenti insoliti del sistema, download da siti con cattiva reputazione o consentire solo l'esecuzione del software autorizzato.

    
risposta data 31.03.2017 - 11:05
fonte

Leggi altre domande sui tag