
GRAT2 C2
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| G || || R || || A || || T || || 2 ||
_.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._
(.-./`-'\.-.)(.-./`-`\.-.)(.-./`-'\.-.)(.-./`-'\.-.)(.-./`-'\.-.)
`-' `-' `-' `-' `-' `-' `-' `-' `-' `-'
v1.1 beta!
GRAT2 è uno strumento Command and Control (C2) scritto in Python3 con il client in .NET 4.5. L'idea principale è venuta da Georgios Koumettou che ha avviato il progetto.
Perché abbiamo sviluppato GRAT2?
Sappiamo che esistono numerosi strumenti C2 là fuori, ma abbiamo sviluppato questo strumento per curiosità su come funzionano il C2 e altre tecniche di evasione. Tutto qui! ;-)
Funzionalità attuali:
Tecniche di evasione:
- Sandbox (Verifica se la macchina è nel dominio, in caso contrario esce).
- Patch di Event Tracing for Windows (ETW) Logging.
- Patch di Antimalware Scan Interface (AMSI).
- caretrun - Esegue un comando tramite cmd.exe in formato caret (^i^p^c^o^n^f^i^g) utilizzando explorer.exe come PID padre (Evasione di alcuni AV/EDR).
Comunicazione:
- HTTP e HTTPS
- DNS - Attualmente supporta solo record TXT.
- Comunicazione codificata utilizzando XOR e base64.
- Supporto proxy.
Moduli:
- startdns - Avvia il server di ascolto DNS.
- listagents - Elenca gli agenti attuali.
- localip - Ottiene l'indirizzo IP locale della macchina.
- uac - Tenta di bypassare UAC utilizzando la pulizia silenziosa del disco con la tecnica Parent PID Spoofing.
- maketoken - Rimuove il token corrente e ne crea uno nuovo utilizzando le credenziali fornite (dominio o locale).
- revtoself - Rimuove il token corrente.
- stealtoken - Tenta di rubare un token da un processo in esecuzione e impersonare l'utente (richiede diritti di amministratore).
- rportfwd - Tenta di creare un reverse port forward.
- whoami - Mostra l'utente corrente.
- hostname - Mostra il nome host della macchina.
- domain - Mostra il FQDN del dominio.
- screenshot - Effettua uno screenshot.
- download - Scarica un file.
- upload - Carica un file.
- cd - Cambia directory.
- run - Esegue un comando tramite cmd.exe utilizzando explorer.exe come PID padre.
- caretrun - Esegue un comando tramite cmd.exe in formato caret (^i^p^c^o^n^f^i^g) utilizzando explorer.exe come PID padre (Evasione di alcuni AV/EDR).
- sleep - Imposta un nuovo tempo di attesa.
- exit - Esci.
- shell - Esegue un comando tramite cmd.exe.
- powershell - Esegue un comando PowerShell utilizzando Unmanaged PowerShell.
- powerscript - Esegue script PowerShell utilizzando Unmanaged PowerShell.
- executeassembly - Tenta di eseguire assembly .NET in memoria.
- ps - Stampa i processi correnti.
- pwd - Stampa la directory corrente.
- ls - Elenco della directory.
- pid - Stampa l'ID del processo corrente.
Tecniche di iniezione di processo:
- dynamic_injectcrt - Tenta di iniettare uno shellcode in un processo utilizzando Dynamic Invoke.
- ppid_processhollow - Tenta di iniettare uno shellcode in un processo utilizzando Process Hollowing e la tecnica Parent PID Spoofing (explorer.exe).
- processhollow - Tenta di iniettare uno shellcode in un processo utilizzando la tecnica Process Hollowing.
- injectppidapc - Tenta di iniettare uno shellcode in un processo utilizzando QueueUserAPC e la tecnica Parent PID Spoofing (explorer.exe).
- injectapc - Tenta di iniettare uno shellcode in un processo utilizzando la tecnica QueueUserAPC.
- injectcrt - Tenta di iniettare uno shellcode in un processo remoto utilizzando la tecnica Create Remote Thread.
Fare riferimento a GRAT2_Shellcodes per generare shellcode indipendenti dalla posizione utilizzando Donut.
TODO:
- Listener SMB.
- Migliorare il listener DNS aggiungendo più funzionalità come record A, passaggio da DNS a HTTP, ecc.
- Aggiungere logging.
- Implementare SOCKS5.
- Risolvere problemi noti.
Configura il profilo del client:

Impostazioni generali e listener HTTP/s:
-
c2 - Indirizzo IP o nome host del server GRAT2 (Obbligatorio).
-
sandboxEvasion - Se abilitato (1), GRAT2 verrà eseguito solo su un computer unito al dominio, altrimenti verrà terminato. Se disabilitato (0), GRAT2 verrà eseguito solo su un computer non unito al dominio, altrimenti verrà terminato (Default: Disabilitato).
-
patchEtw - Se abilitato (1), Event Tracing for Windows verrà patchato (Default: Abilitato).
-
patchAmsi - Se abilitato (1), Antimalware Scan Interface verrà patchato (Default: Abilitato).
-
sleep - Imposta il tempo di attesa (Default: 3 secondi).
-
UserAgent - Imposta UserAgent (Default: "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko").
-
initialUrl - Richiesta HTTP GET iniziale di GRAT2 (Default: jquery.js).
-
sendResults - Richiesta HTTP POST dei risultati di GRAT2 (Default: login.aspx).
NOTA se si modifica la stringa initialUrl o sendResults, è necessario aggiornare la stringa in GRAT2_Server/handlers.py rispettivamente alle righe 49 e 84.
Listener DNS:
- DNSListener - Abilita (1) o Disabilita (0). Se abilitato, configura il server GRAT2 (vedi sotto) di conseguenza.
- DNSServer - Il tuo server DNS GRAT2.
- dnsMaxTXT - Lunghezza massima dei record TXT (Default: 255).
- maxDNSChar - Dimensione massima in caratteri per ogni sottodominio DNS (Default: 63).
Configura il profilo del server:

Listener HTTP/s e DNS:
- HOST_NAME - Indirizzo IP o nome host del server GRAT2.
- PORT_NUMBER - Porta di ascolto. (80 o 443)
- server_pem - Posizione del file PEM.
- dnsDomainName - Il tuo server DNS GRAT2.
Utilizzo:
- Aprire il progetto GRAT2 Client (GRAT2_Client.sln) utilizzando Visual Studio, modificare la configurazione della soluzione da Debug a Release e quindi compilare la soluzione.
- Installare le due dipendenze (dnslib e termcolor) sul server GRAT2: pip3 install -r requirements.txt
- Avviare il server GRAT2:

- Eseguire l'eseguibile del client GRAT2 - GRAT2_Client\bin\Release\GRAT2_Client.exe
- Interagire con l'agente:

Note di rilascio:
Versione 1.0 - 05 Set 2020
Versione 1.1 - 13 Dic 2020
- Aggiunto listener DNS
- Aggiunto listener HTTPS
- Aggiunta funzionalità List Agent
- Aggiunto modulo localip, dove è possibile ottenere l'indirizzo IP locale della macchina
- Riscritto Unmanaged PowerShell
- Passato da .NET 4.0 a .NET 4.5
Crediti:
Inoltre, il ringraziamento per ogni autore e il link di riferimento sono evidenziati nel codice sorgente.
Disclaimer:
Questo progetto può essere utilizzato solo per test autorizzati o scopi educativi. L'utilizzo di questo software contro sistemi target senza previa autorizzazione è illegale e l'autore non si assume alcuna responsabilità per eventuali danni derivanti dall'uso improprio di questo software.