Domanda Malware Perchè le reverse shell non vengono rilevate dall' AV

n0tting

Utente Bronze
14 Dicembre 2020
79
15
7
41
Ciao a tutti

Ho notato che analizzando delle reverse shell sia fatte in C e anche quelle di metasploit non vengono rilevate da virus total,mentre le meterpreter si.
Questo perchè una reverse shell è meno intrusiva e può essere vista come una semplice connessione che esegue comandi non malevoli oppure per qualche altro motivo???
 
Non è una questione di essere "intrusivo" o meno, non è una cosa quantificabile. Semplicemente più codice e pattern sono contenuti in un malware, più opportunità avrà l'antivirus per riconoscerlo. La reverse shell base fa connect, recv, send ed exec, sono cose utlizzate da tantissimi programmi e usando encoding diversi di metasploit o riscrivendola manualmente la struttura cambia abbastanza per non essere riconosciuto dall'av. Mentre meterpreter è strutturato e più "caratteristico", diviso in più stage, con firme e IoC ben riconoscibili da gli antivirus decenti (pensa al codice necessario per getsystem, per fare screenshot o injection/migrazione in altri processi). Ovviamente anche la reverse shell base può essere beccata a runtime, dipende tutto dai comandi che esegui e se piacciono all'av che non smette un attimo di monitorare l'attività del processo.
 
  • Mi piace
Reazioni: TheWorm91
Ciao, uso Meterpreter quotidianamente nelle mie operazioni di sicurezza offensiva, e conosco questo malware meglio di casa mia ormai. Ne stai parlando come se fosse meterpreter.exe, e non un sub-thread che risiede interamente in memoria (senza toccare né scrivere niente su hard disk)...

Questo malware, non è veramente rappresentato da un file. Questo non l'hanno capito nemmeno tutti quei ricercatori da quattro soldi che riciclano i tutorial su Google. Il payload .exe generato da Metasploit è solo un "container", e VirusTotal ha delle signature solo per quello. Per dimostrarlo, ho disabilitato l'AV, lanciato un payload default generato da metasploit, sono migrato in explorer.exe, e poi ho riattivato l'AV: la sessione non è morta, e tutti i comandi funzionavano. Il payload default è stato rilevato e cancellato, ma il sub-thread (migrato in explorer.exe) non è stato toccato. Una volta che Meterpreter è dentro è finita, a meno che non vieni attaccato da un pirla che spara "getsystem" a ca**o duro contro l'AV (unico comando che viene sempre flaggato)
 
Ciao, uso Meterpreter quotidianamente nelle mie operazioni di sicurezza offensiva, e conosco questo malware meglio di casa mia ormai. Ne stai parlando come se fosse meterpreter.exe, e non un sub-thread che risiede interamente in memoria (senza toccare né scrivere niente su hard disk)...

Questo malware, non è veramente rappresentato da un file. Questo non l'hanno capito nemmeno tutti quei ricercatori da quattro soldi che riciclano i tutorial su Google. Il payload .exe generato da Metasploit è solo un "container", e VirusTotal ha delle signature solo per quello. Per dimostrarlo, ho disabilitato l'AV, lanciato un payload default generato da metasploit, sono migrato in explorer.exe, e poi ho riattivato l'AV: la sessione non è morta, e tutti i comandi funzionavano. Il payload default è stato rilevato e cancellato, ma il sub-thread (migrato in explorer.exe) non è stato toccato. Una volta che Meterpreter è dentro è finita, a meno che non vieni attaccato da un pirla che spara "getsystem" a ca**o duro contro l'AV (unico comando che viene sempre flaggato)

Il fatto che l'AV non l'abbia seccato non significa che è tutto fileless e undetectable, puoi produrre meterpreter come shellcode offuscarlo eccetera ma quello shellcode è stato generato da un source in C che fa cose ben precise, conoscendolo così bene dovresti sapere che ogni qualvolta invii un comando come getsystem o "migri" in explorer.exe come hai detto, in realtà meterpreter eseguirà il codice contenuto nel repo github. Puoi anche morphare lo shellcode con un encoder ma alla fine le syscall resteranno quelle e un AV serio dovrebbe rivelarlo comunque. Ma sono abbstanza sicuro che tu non l'abbia fatto, richiede troppe modifiche e la tecnica di injection usata per la migrazione è la Reflective DLL Injection che prevede di usa una dll helper, anche qui l'AV avrebbe tutte le carte per lanciare una detection (ebbene in base_dispatch.c al comando migrate fa OpenProcess, WriteProcessMemory (x4), CreateRemoteThread allocando la dll well-known nel processo remoto e crea anche un evento, lo duplica... insomma ce ne sarebbero IoC da rilevare), se non la fa è una mancanza lato AV non un super potere di meterpreter, infatti le maggiori APT ormai lo ignorano anche se è utilizzabile con le opportune modifiche. Dovresti provare a migrare in un sistema dove è installato un EDR, ho notato che mettono molta più attenzione su metasploit, cobalt strike e compagnia bella rispetto a gli AV "home edition".
 
  • Love
  • Mi piace
Reazioni: Helplease e 0xbro
Confermo, la migrazione è prona alla detection, ma la debolezza è mitigata dal fatto che non avviene per tutti i processi che vai a infettare. Credo che gli AV pongano più attenzione a processi critici come lsass, ma ne ignorino altri. Ad AV attivo ho testato il comando migrate contro vari processi, e quelli intoccabili risultano essere winlogon e lsass, per tutti gli altri c'è una buona chance di riuscita, ma dipende da AV ad AV. Defender chiude un occhio sul comando migrate se non tocchi i processi critici, Avast invece mi presenta sempre un dialog di allerta, ma se non lo confermo alla fine mi fa completare l'injection
 
Confermo, la migrazione è prona alla detection, ma la debolezza è mitigata dal fatto che non avviene per tutti i processi che vai a infettare. Credo che gli AV pongano più attenzione a processi critici come lsass, ma ne ignorino altri. Ad AV attivo ho testato il comando migrate contro vari processi, e quelli intoccabili risultano essere winlogon e lsass, per tutti gli altri c'è una buona chance di riuscita, ma dipende da AV ad AV. Defender chiude un occhio sul comando migrate se non tocchi i processi critici, Avast invece mi presenta sempre un dialog di allerta, ma se non lo confermo alla fine mi fa completare l'injection

Esattamente ciò che intendevo, ma non è solo la migrazione, diciamo che quella è ciò che fa più rumore dopo getsystem e persistenza. Il punto dell'evasion è proprio quello che sottolineavo prima: più codice e feature implementi, più l'AV avrà modi per rilevarti, questo vale per i metodi "rumorosi" che chiamano API che vengono monitorate con sospetto, ma vale anche per cose più innoque, che fatte in un certo ordine e sequenza possono identificare con basso errore la presenza del malware. La differenza è che per rilevare in base alle cose "innoque" bisogna essere chiari, quindi servono regole che scattino solo per quel determinato contesto, mentre cose come injection, usare n-day per UAC bypass e installarsi all'avvio potrebbero anche essere considerate abbastanza per killare subito il processo come minaccia generica (dal motore euristico dell'AV). Poi è risaputo che AV come defender siano riluttanti a rilevare come malevole operazioni previste dal sistema (questa tecnica di injection viene usata anche se raramente da programmi legittimi, al contrario degli n-day per UAC bypass), mentre altri si triggerano subito. Quelli di Avast evidentemente hanno implementato male la disinfezione, probabilmente viene rilevato da una componente user-mode che non è in grado di pulire explorer senza distruggerlo e non dalla PsSetCreateThreadNotifyRoutine che non avrebbe alcun problema a sospendere e terminare solo quel thread che punta alla export della dll unmapped.
 
  • Mi piace
Reazioni: Netcat