Come funzionano i programmi anti-exploit?

6

Sono disponibili molte risposte che descrivono dettagliatamente il funzionamento di programmi antivirus e anti-malware, inclusi dettagli su firme, euristica, sandboxing, ecc. Tuttavia, sembrano esserci poche risorse su come i programmi anti-exploit (come EMET , MBAE e HitmanPro.Alert) effettivamente rilevano e prevengono gli exploit.

Le azioni che si verificano effettivamente durante un exploit sembrano quasi impossibili da rilevare senza collegare un debugger al processo, il che sembrerebbe avere impatti inaccettabili sulle prestazioni.

Quali sono i diversi metodi utilizzati dai programmi anti-exploit per rilevare e mitigare i tentativi di exploit?

    
posta konsolas 24.09.2016 - 13:56
fonte

1 risposta

1

Risponderò a questo sulla base della mia esperienza con il compiler CBMC . Non ho mai usato HitmanPro , malwarebytes anti -exploit o EMET di Microsoft ma non vedo alcun motivo per cui farebbero le cose completamente diversamente da CBMC.

Protezione exploit nota

Se guardiamo il malwarebytes anti-exploit video (gentilmente ricercato dall'OP), vediamo che MBAE potrebbe trovare un exploit identificando un file dannoso scaricato. Questo è esattamente come funziona un moderno programma antivirus: controlla la firma di un malware noto (o "exploit payload" se si desidera chiamarlo in questo modo) e interrompe l'esecuzione se corrisponde.

In questo caso specifico possiamo affermare che Anti-Exploit è semplicemente un nome rinominato per un programma Anti-Virus. In teoria si può sostenere che AV (Anti-Virus) controlla solo la firma dei file, mentre AE (Anti-Exploit) controlla il payload (ad es. Mentre sta scaricando un file) Si può anche sostenere che gli EA cercano CVE mentre gli AV cercano le firme malware . Ma tutti gli AV moderni eseguono tutto questo: vengono aggiornati quando escono CVE, controllano le firme del traffico di rete (file scaricati) e lo fanno in tempo reale. Quindi sostengo che, da quel video, possiamo concludere che gli AE sono semplicemente rimarchiati in AV.

Tuttavia, c'è di più: gli EA promettono di essere in grado di trovare exploit zero-day. E questo sarebbe diverso dagli AV.

exploit zero-day

Non è possibile trovare un exploit zero-day in un programma senza eseguire il programma. Ma eseguire un programma rischioso non è saggio. Questo perché, se esiste un punto sfruttabile nell'ambiente di runtime, l'esecuzione di un programma può sfruttare esattamente tale violazione. Il sandboxing è un'opzione, ma i sandbox spesso hanno delle violazioni del loro vinto. Quindi, come possiamo eseguire un programma senza eseguirlo? Esecuzione simbolica in soccorso.

Come ho detto all'inizio della risposta userò CBMC, uno strumento di cui avevo bisogno ad un certo punto nel passato. Esegue l'esecuzione simbolica, ma è uno strumento di ricerca. E nessuno sostiene che l'esecuzione simbolica possa trovare tutti i possibili problemi che un programma potrebbe avere.

CBMC è un compilatore C (e ha anche una versione commerciale per VHDL) che non compila un programma in codice macchina. Invece compila il programma in un linguaggio chiamato GOTO, che è una rappresentazione simbolica semplificata del programma . Quindi un processore GOTO (parte di CBMC) viene utilizzato per eseguire la rappresentazione simbolica del programma.

Una rappresentazione simbolica è molto più facile da ragionare, e il programma può essere eseguito assumendo una vasta gamma di input. Ad esempio, una delle cose che CBMC / GOTO cattura bene nei programmi C sono i buffer overflow.

Ora, CBMC funziona sui programmi C e VHDL, ma lo stesso può essere fatto con il montaggio. Anche se non sarebbe accurato come costruire una rappresentazione simbolica dal codice sorgente (poiché lo smontaggio non è perfetto), permetterebbe di eseguire la rappresentazione simbolica del programma e controllare gli errori di codifica.

Gli overflow del buffer sono le cose più facili che si possono pensare che possano essere trovate nell'assembly, ma altre possibilità possono includere l'input non controllato (l'input è tracciato in una rappresentazione simbolica, almeno in CBMC) o l'apertura di socket di rete (dal è un syscall conosciuto.

Disclaimer : non so come sia effettivamente costruito un AE, ma se dovessi creare qualcosa che possa trovare un exploit zero-day l'esecuzione simbolica automatica sarebbe la strada che potrei provare. L'esecuzione simbolica non arriva senza problemi (noti alla comunità di ricerca aperta, alcune fonti non divulgate potrebbero aver trovato soluzioni ad alcuni di essi):

  • SE non trova i tutti problemi, ad es. l'interazione tra diverse configurazioni spesso non viene trovata.
  • SE è piuttosto lento.
  • Intel o ARM (o qualsiasi altra) disassebmly non è mai perfetto, e i problemi di smontaggio si riflettono nei risultati SE.
risposta data 25.09.2016 - 02:23
fonte

Leggi altre domande sui tag