Domanda Malware Reverse Shell

DrLupin

Utente Iron
8 Luglio 2021
6
1
0
6
Salve, ho un paio difficoltà con la creazione di reverse shell, non riesco a capire come trasformarle in shell persistenti, come offuscarle a gli AV (tutti i test sono falliti anche usando un encoder x86/shikata_ga_nai con un iterazione di 10 volte).
Esistono metodi più performanti per avviare una shell o un connessione anche senza i privilegi?
 
Inanzitutto considera che le shell di metasploit hanno tutte signuature note agli AV, perciò non mi meraviglio, soprattutto le meterpreter. Una tecnica che potresti usare per fare evasion è utilizzare Shellter (o suoi simili) in modo da iniettare una reverse shell malevola all'interno di un binario legittimo, in modo da ingannare l'AV. Ovviamente la shell dovrà essere stata prima offuscata un minimo.

Per renderla persistente la maggior parte delle volte devi avere privilegi di system, altrimenti puoi provare a inserirla nella folder dei programmi che si avviano automaticamente allo start-up. Non ho idea di come si faccia, immagino si debba inserire qualche chiave di registro specifica.
 
Inanzitutto considera che le shell di metasploit hanno tutte signuature note agli AV, perciò non mi meraviglio, soprattutto le meterpreter. Una tecnica che potresti usare per fare evasion è utilizzare Shellter (o suoi simili) in modo da iniettare una reverse shell malevola all'interno di un binario legittimo, in modo da ingannare l'AV. Ovviamente la shell dovrà essere stata prima offuscata un minimo.

Per renderla persistente la maggior parte delle volte devi avere privilegi di system, altrimenti puoi provare a inserirla nella folder dei programmi che si avviano automaticamente allo start-up. Non ho idea di come si faccia, immagino si debba inserire qualche chiave di registro specifica.
Perfetto proverò a scrivere la shell evitando di usare msfvenom, sperando che non venga rilevata.
 
Se vuoi bypassare Defender hai due vie: o usi una reverse shell classica e compri o modifichi un offuscatore buono, oppure programmi la tua (ci sarebbe qualche altra via ma ti complicheresti la vita). Ti linko quella che ho creato per Inforge, al tempo del caricamento non era rilevata, non so se adesso lo è, ma se aggiungi la persistenza probabilmente lo sarà. In ogni caso puoi prendere spunto o usarla come base.
 
  • Mi piace
Reazioni: 0xbro
Se vuoi bypassare Defender hai due vie: o usi una reverse shell classica e compri o modifichi un offuscatore buono, oppure programmi la tua (ci sarebbe qualche altra via ma ti complicheresti la vita). Ti linko quella che ho creato per Inforge, al tempo del caricamento non era rilevata, non so se adesso lo è, ma se aggiungi la persistenza probabilmente lo sarà. In ogni caso puoi prendere spunto o usarla come base.
Grazie, proverò entrambe le vie per capire meglio.
Noto che la tua shell è HTTP, devo studiarmi bene le differenze. Ma tra tcp e http ci sono vantaggi o in base alla situazione va usata una o l’altra.
 
Grazie, proverò entrambe le vie per capire meglio.
Noto che la tua shell è HTTP, devo studiarmi bene le differenze. Ma tra tcp e http ci sono vantaggi o in base alla situazione va usata una o l’altra.

E' una differenza di protocollo, HTTP infatti e' basato su TCP. L'impatto maggiore e' dato dal fatto che e' stateless, in poche parole non avrai una connessione continua con un flusso di dati ininterrotto, bensi' una connessione, invio/ricezione dati e chiusura a intervalli di tempo. Questo porta ad un impatto sulla velocita', che su TCP e' notevolmente maggiore, i vantaggi ad usare HTTP comunque ci sono, in particolare che essendo un protocollo standard genera traffico meno sospetto, ha piu' possibilita' di passare inosservato da comandi netstat, puoi hostarla su hosting gratuiti avendo quindi il vantaggio di non dover aprire porte del router e non inserire nella shell il tuo IP pubblico e infine puoi visitare il pannello di controllo del C&C da dietro proxy/VPN/Tor.
 
  • Mi piace
Reazioni: 0xbro
Diverse domande unite in una sola, a te interessano 3 cose diverse se ho capito bene: persistence, evasion e la domanda sui privilegi (che ancora non mi è molto chiara):

  • Persistence - Se il tuo eseguibile deve persistere, devi implementare una tecnica di persistenza, in ambito user-land o system-wide (chiavi di registro, startup script, scheduled task e via dicendo. Questo già dovrebbe indirizzarti verso la creazione di un tuo eseguibile custom, senza utilizzare roba già fatta);
  • Evasion - apro una piccola parentesi su una concezione errata che purtroppo hanno diverse persone: encoder come shikata_ga_nai non sono obfuscators, sono (surprise, surprise) encoders. La loro funzione è la manipolazione di payload con determinati caratteri disponibili, il fatto che poi il risultato non venga rilevato da vari AVs o EDRs è semplicemente una conseguenza del fatto che molti di questi prodotti, pur spacciandosi per "NEXT-GEN AI-POWERED BLAH BLAH" in realtà continuano ad affidarsi ai famosi artefatti della pyramid of pain (whitelist, signatures, hashes e via dicendo). Detto ciò, per lavorare sulla evasion hai fondamentalmente un approccio, che è quello di capire come funziona l'AV o l'EDR che devi evadere. Una volta fatta un po' di analisi, le strade son diverse:
  • Privilegi - questa parte non l'ho capita. L'eseguibile non ha bisogno di permessi particolari per avviare una connessione, semplicemente girerà sotto il contesto ed il livello d'integrità dell'utente che la sta eseguendo. Poi, se vuoi fare Privilege Escalation per altri motivi, allora si apre un discorso a parte; ma per avere un eseguibile che ti ritorni una shell, non hai bisogno di privilegi specifici.
 
  • Grazie
Reazioni: 0xbro
Diverse domande unite in una sola, a te interessano 3 cose diverse se ho capito bene: persistence, evasion e la domanda sui privilegi (che ancora non mi è molto chiara):

  • Persistence - Se il tuo eseguibile deve persistere, devi implementare una tecnica di persistenza, in ambito user-land o system-wide (chiavi di registro, startup script, scheduled task e via dicendo. Questo già dovrebbe indirizzarti verso la creazione di un tuo eseguibile custom, senza utilizzare roba già fatta);
  • Evasion - apro una piccola parentesi su una concezione errata che purtroppo hanno diverse persone: encoder come shikata_ga_nai non sono obfuscators, sono (surprise, surprise) encoders. La loro funzione è la manipolazione di payload con determinati caratteri disponibili, il fatto che poi il risultato non venga rilevato da vari AVs o EDRs è semplicemente una conseguenza del fatto che molti di questi prodotti, pur spacciandosi per "NEXT-GEN AI-POWERED BLAH BLAH" in realtà continuano ad affidarsi ai famosi artefatti della pyramid of pain (whitelist, signatures, hashes e via dicendo). Detto ciò, per lavorare sulla evasion hai fondamentalmente un approccio, che è quello di capire come funziona l'AV o l'EDR che devi evadere. Una volta fatta un po' di analisi, le strade son diverse:
  • Privilegi - questa parte non l'ho capita. L'eseguibile non ha bisogno di permessi particolari per avviare una connessione, semplicemente girerà sotto il contesto ed il livello d'integrità dell'utente che la sta eseguendo. Poi, se vuoi fare Privilege Escalation per altri motivi, allora si apre un discorso a parte; ma per avere un eseguibile che ti ritorni una shell, non hai bisogno di privilegi specifici.
Grazie per avermi chiarito la differenza tra encoders e obfuscators, sinceramente credevo avessero la stessa utilità, comunque andrebbe sempre usato un encoder e poi un obfuscators su un payload per aumentare l evasione oppure sbaglio?
Ma è possibile usare WinDefenderCheck anche con altri linguaggi (se no devo ripassare C#).
La domanda sui privilegi, cercavo di capire se una shell può essere avviata da qualsiasi utente ed eredita i privilegi di chi l’ha avviata (dopo un po’ di ricerche ho capito che dovrebbe essere così).
Nei miei test provavo ad infettare una macchina solo per avere una shell persistente dove potevo vedere tutte le caratteristiche del SO e IP.
Per il Persistence andrebbe bene mettere l EXE all’interno della cartella startup?(come prova base).
Conosci libri che potrebbero trattare questi argomenti?
Potrebbe aiutarmi studiare Assembly?
Scusa per le mille domande ma l argomento è più complesso di quanto credessi.
 
Grazie per avermi chiarito la differenza tra encoders e obfuscators, sinceramente credevo avessero la stessa utilità, comunque andrebbe sempre usato un encoder e poi un obfuscators su un payload per aumentare l evasione oppure sbaglio?
Gli encoders servono principalmente nello sviluppo di exploit. per evitare determinati tipi di caratteri che possono andare a rompere la catena di esecuzione (null characters e via dicendo) - se stai facendo altro (come in questo caso, visto che ti interessa semplicemente un eseguibile binario e non sfruttare una vulnerabilità remota) probabilmente ti conviene non considerarli, per il semplice fatto che aggiungi complessità dove non serve.

Ma è possibile usare WinDefenderCheck anche con altri linguaggi (se no devo ripassare C#).
Io l'ho utilizzato solo con binari C# (quando mi serve fare evasion di EDR in genere lavoro sempre con codice custom in C/C++ e faccio unhooking, è la maniera più sicura per ottenere ciò che voglio) - credo sia comunque possibile utilizzarlo con altri linguaggi, tenendo però in conto una cosa (e qui faccio una premessa, questa è soltanto una mia considerazione che non ho nè testato nè verificato, potrei star scrivendo un'enorme castroneria): WinDefenderCheck ti restituisce il codice che viene rilevato da Defender come malevolo perchè C# per natura è facilmente disassemblabile. Molto probabilmente, con eseguibili scritti in linguaggio diverso ti segnalerà soltanto la posizione dell'eseguibile in cui il codice viene segnalato come malevolo, senza però avere il relativo codice sorgente, quindi poi dovresti fare tu qualche passaggio in più.

La domanda sui privilegi, cercavo di capire se una shell può essere avviata da qualsiasi utente ed eredita i privilegi di chi l’ha avviata (dopo un po’ di ricerche ho capito che dovrebbe essere così).
Esatto. Tieni però conto anche dell'UAC e Integrity Context: se avvi l'eseguibile come utente con privilegi di amministratore e UAC è abilitato, avrai comunque una shell che gira in Medium Integrity Context (e quindi non potrai eseguire operazioni amministrative); dovrai poi trovare un modo di bypassare UAC ed ottenere una shell in High Integrity Context.
Per il Persistence andrebbe bene mettere l EXE all’interno della cartella startup?(come prova base).
Certo. Se vuoi dare un'occhiata ad altre opzioni, MITRE ATT&CK è il tuo punto di riferimento https://attack.mitre.org/tactics/TA0003/
Conosci libri che potrebbero trattare questi argomenti?
Il primo che mi viene in mente è la serie di corsi di Malware Development di Sektor7.
Potrebbe aiutarmi studiare Assembly?
Qui non so risponderti. L'ultima volta che è stato toccato l'argomento ne è nata una shitstorm ed è finita con tutti che insultavano tutti :D In tutta onestà Assembly lo conosco molto poco, sono probabilmente la persona meno adatta a rispondere a questa domanda.
 
  • Mi piace
Reazioni: 0xbro