L'antivirus è sempre in grado di catturare attacchi ampi o payload predefiniti da strumenti di uso comune.
Un abile attaccante sarà in grado di modificare, codificare o offuscare il suo carico utile per evitare questo tipo di rilevamento.
Detto questo, la maggior parte dell'antivirus cercherà anche nel file eseguibile le stringhe note solo nel malware. Ad esempio, ecco uno snippet da Invoke-Mimikatz.ps1
:
$e_res2Field = $TypeBuilder.DefineField('e_res2', [UInt16[]], 'Public, HasFieldMarshal')
L'antivirus può cercare stringhe come questa all'interno del file e quindi contrassegnarlo se rileva una corrispondenza. Questo può anche essere sconfitto abbastanza facilmente. Un esempio potrebbe essere quello di prendere il file e scomporlo in stringhe piccole. In questo modo:
"$e_res2Fi" + "eld = $TypeBui" + "lder.DefineField('e_res2'," + " [UInt16[]], 'Public, HasFieldMarshal')"
(non stai cercando di essere sintatticamente corretto qui, ma hai un'idea)
Quindi utilizzare uno script wrapper per raggruppare le stringhe in memoria ed eseguire il codice originale.
Un altro esempio più comune sarebbe la crittografia del payload primario e quindi avere uno stub decrypt ed eseguire il payload in memoria.
Alcuni antivirus eseguiranno anche analisi dinamiche, dove il file viene eseguito in un ambiente virtualizzato o simulato per rilevare le azioni che l'eseguibile eseguirà o per analizzare la memoria di post-decrittografia.
Questo tipo di antivirus può essere ignorato semplicemente consumando una quantità sufficiente di tempo o di memoria prima di decrittografare il payload principale.