
YouTube comme canal C2 - Contrôler des systèmes Windows en téléversant des vidéos QR sur YouTube
SharpCovertTube est un programme conçu pour contrôler des systèmes Windows à distance en téléchargeant des vidéos sur Youtube.
Le programme surveille une chaîne Youtube jusqu'à ce qu'une vidéo soit téléchargée, décode le code QR de la miniature de la vidéo téléchargée et exécute une commande. Les codes QR dans les vidéos peuvent utiliser des valeurs en clair ou chiffrées avec AES.
Il existe en deux versions : binaire et service binaire, et il inclut un script Python pour générer les vidéos malveillantes. Son objectif est de servir de méthode de persistance en utilisant uniquement des requêtes web vers l'API Google.

Exécutez l'écouteur sur votre système Windows :

Il vérifiera la chaîne Youtube toutes les X minutes (10 minutes par défaut) jusqu'à ce qu'une nouvelle vidéo soit téléchargée. Dans ce cas, nous téléchargeons "whoami.avi" depuis le dossier example-videos :
Après avoir détecté une nouvelle vidéo sur la chaîne, il décode le code QR de la miniature de la vidéo, exécute la commande et la réponse est encodée en base64 puis exfiltrée via DNS :

Cela fonctionne également pour les codes QR avec des charges utiles chiffrées en AES et des réponses de commandes plus longues. Dans cet exemple, le fichier "dirtemp_aes.avi" de example-videos est téléchargé et le contenu de c:\temp est exfiltré à l'aide de plusieurs requêtes DNS :

La journalisation dans un fichier est facultative mais vérifiez que le dossier existe, la valeur par défaut est "c:\temp\.sharpcoverttube.log", donc "c:\temp" doit exister.
L'exfiltration DNS est également facultative et peut être facilement testée avec le collaborator de Burp :

Comme alternative, j'ai créé un script pour créer facilement des vidéos QR, les télécharger sur Youtube, puis surveiller et analyser les requêtes DNS encodées en base64. La configuration pour utiliser ce script en tant que serveur C2 est expliquée dans le dossier c2-server :

Certaines valeurs peuvent être modifiées, que vous trouverez dans le fichier Configuration.cs pour le binaire standard et le binaire de service. Seules les deux premières valeurs doivent être mises à jour :

Vous pouvez générer les vidéos à l'aide du script serveur dans le dossier c2-server ou simplement en exécutant le script generate_video.py. Pour ce dernier, commencez par installer les dépendances :
pip install Pillow opencv-python pyqrcode pypng pycryptodome rebus
Si vous utilisez Linux, vous pourriez également avoir besoin de :
apt-get install libgl1
Exécutez ensuite le script generate_video.py :
python generate_video.py -t TYPE -f FILE -c COMMAND [-k AESKEY] [-i AESIV]
TYPE (-t) doit être "qr" pour les charges utiles en clair ou "qr_aes" si vous utilisez le chiffrement AES.
FILE (-f) est le chemin où la vidéo est générée.
COMMAND (-c) est la commande à exécuter sur le système.
AESKEY (-k) est la clé pour le chiffrement AES, nécessaire uniquement si vous utilisez le type "qr_aes". Doit être une chaîne de 16 caractères identique à celle du fichier Program.cs dans SharpCovertTube.
AESIV (-i) est l'IV pour le chiffrement AES, nécessaire uniquement si vous utilisez le type "qr_aes". Doit être une chaîne de 16 caractères identique à celle du fichier Program.cs dans SharpCovertTube.
Générer une vidéo avec une valeur QR de "whoami" en clair dans le chemin c:\temp\whoami.avi :
python generate_video.py -t qr -f c:\temp\whoami.avi -c whoami
Générer une vidéo avec une valeur QR chiffrée en AES pour "dir c:\windows\temp" avec la clé et l'IV "0000000000000000" dans le chemin c:\temp\dirtemp_aes.avi :
python generate_video.py -t qr_aes -f c:\temp\dirtemp_aes.avi -c "dir c:\windows\temp" -k 0000000000000000 -i 0000000000000000

Vous trouverez le code pour l'exécuter en tant que service dans le dossier SharpCovertTube_Service. Il possède les mêmes fonctionnalités, à l'exception de l'auto-suppression, qui n'aurait pas de sens dans ce cas.
Il est possible de l'installer avec InstallUtil, il est préparé pour s'exécuter en tant qu'utilisateur SYSTEM et vous devez l'installer en tant qu'administrateur :
InstallUtil.exe SharpCovertTube_Service.exe
Vous pouvez ensuite le démarrer avec :
net start "SharpCovertTube Service"

Si vous disposez de privilèges d'administration, cela peut être plus discret que le binaire ordinaire, mais la "Description" et le "DisplayName" doivent être mis à jour (comme vous pouvez le voir dans l'image ci-dessus). Si vous ne disposez pas de ces privilèges, vous ne pouvez pas installer de services et ne pouvez donc utiliser que le binaire ordinaire.
Le fichier doit être en 64 bits !!! Cela est dû au code utilisé pour le décodage QR, emprunté au projet de Stefan Gansevles QR-Capture, qui en a emprunté une partie au projet QRCode d'Uzi Granot, qui lui-même en a emprunté une partie au projet Camera_Net de Zakhar Semenov (puis j'ai perdu la trace). Merci donc à eux tous !
Ce projet est un portage de covert-tube, un projet que j'ai développé en 2021 en utilisant uniquement Python, qui s'inspirait des blogs de Welivesecurity sur les malwares Casbaneiro et Numando.
Ce projet est une preuve de concept (PoC) pour montrer que presque n'importe quoi sur Internet peut être utilisé comme canal C2, et j'espère qu'il sera source d'inspiration pour quelqu'un. Le projet est destiné à des fins éducatives ; si vous utilisez mal le service Youtube, vous pourriez rencontrer des problèmes, comme la suppression de votre chaîne par Youtube.