
Outil simple d'injection de frappes pour Windows et Linux qui exfiltre les données WiFi stockées (SSID et mot de passe).

Avez-vous déjà vu un film où un hacker branche une clé USB apparemment ordinaire dans un ordinateur et vole instantanément des données ? Aujourd'hui, vous allez construire un appareil qui fait exactement cela.
⚠️ Avertissement :
Tout le contenu de ce projet est destiné uniquement à des fins de recherche en sécurité.
À l'été 2022, j'ai entrepris de construire un appareil capable d'extraire des données d'un ordinateur cible. Mais comment déployer un logiciel malveillant et exfiltrer des informations exactement ? Dans les sections suivantes, je vais parcourir les étapes essentielles, les concepts sous-jacents et les nuances techniques impliqués dans la création d'un outil d'injection de frappes personnalisé. Bien que ce projet cible spécifiquement les identifiants WiFi, la charge utile peut facilement être modifiée à des fins plus avancées ou malveillantes – les seules limites réelles sont votre créativité et votre expertise technique.
Au fil du temps, le projet a grandi pour inclure une grande variété de scripts et d'outils. Il a été créé à l'origine pour démontrer les capacités d'un Rubber Ducky – plus précisément, une version économique utilisant le Raspberry Pi Pico (RPi Pico). Actuellement, les deux composants principaux du projet sont :
Accès physique à l'ordinateur de la victime déverrouillé.
L'ordinateur doit avoir accès à Internet pour envoyer les données volées en utilisant SMTP pour l'exfiltration sur un support réseau.
Connaissance du mot de passe de l'ordinateur de la victime pour l'exploit Linux.
Après avoir créé un pico-ducky, il vous suffit de copier la charge utile modifiée (ajustée pour vos détails SMTP pour l'exploit Windows et/ou ajustée pour le mot de passe Linux et le nom de la clé USB) sur le RPi Pico.
[!NOTE]
Il est possible de construire cet outil en utilisant le Rubber Ducky, mais gardez à l'esprit que le RPi Pico coûte environ 4,00 $ et le Rubber Ducky coûte 80,00 $.
Cependant, bien que le pico-ducky soit une bonne solution économique, le Rubber Ducky offre des avantages comme la discrétion et l'utilisation de la dernière version de DuckyScript.
Afin d'utiliser Ducky Script pour écrire la charge utile sur votre RPi Pico, vous devez d'abord le convertir en pico-ducky. Suivez ces étapes simples pour créer un pico-ducky.
Un outil d'injection de frappes, une fois connecté à une machine hôte, exécute des commandes malveillantes en exécutant un code qui imite les frappes saisies par un utilisateur. Bien qu'il ressemble à une clé USB, il agit comme un clavier qui tape une charge utile préprogrammée. Des outils comme le Rubber Ducky peuvent taper plus de 1 000 mots par minute. Une fois créé, toute personne ayant un accès physique peut déployer cette charge utile facilement.
La charge utile utilise la commande STRING pour traiter les frappes d'injection. Elle accepte un ou plusieurs caractères alphanumériques/de ponctuation et tapera le reste de la ligne exactement comme tel dans la machine cible. ENTER/SPACE simulera une pression des touches du clavier.
Nous utilisons la commande DELAY pour interrompre temporairement l'exécution de la charge utile. Ceci est utile lorsqu'une charge utile doit attendre un élément, comme une invite de commande, pour se charger. Le délai est utile lorsqu'il est utilisé au tout début, lorsqu'un nouveau périphérique USB est connecté à un ordinateur cible. Initialement, l'ordinateur doit effectuer un ensemble d'actions avant de pouvoir commencer à accepter les commandes d'entrée. Dans le cas des HIDs, le temps de configuration est très court. Dans la plupart des cas, cela prend une fraction de seconde car les pilotes sont intégrés. Cependant, dans certains cas, un PC plus lent peut prendre plus de temps pour reconnaître le pico-ducky. Le conseil général est d'ajuster le temps de délai en fonction de votre cible.
L'exfiltration de données est le transfert non autorisé de données depuis un ordinateur/périphérique. Une fois les données collectées, un adversaire peut les empaqueter pour éviter la détection lors de l'envoi de données sur le réseau en utilisant le cryptage ou la compression. Les deux moyens les plus courants d'exfiltration sont :
Cette approche a été utilisée pour l'exploit Windows. L'ensemble de la charge utile peut être vu ici.
Cette approche a été utilisée pour l'exploit Linux. L'ensemble de la charge utile peut être vu ici.
Pour utiliser la charge utile Windows (payload1.dd), vous n'avez pas besoin de connecter de fil de cavalier entre les broches.
Une fois que les mots de passe ont été exportés vers le fichier .txt, la charge utile enverra les données à l'adresse e-mail désignée en utilisant Yahoo SMTP. Pour des instructions plus détaillées, visitez le lien suivant lien. De plus, le modèle de charge utile doit être mis à jour avec vos informations SMTP, ce qui signifie que vous devez mettre à jour RECEIVER_EMAIL, SENDER_EMAIL, et votre PASSWORD d'e-mail. En outre, vous pouvez également mettre à jour le corps et l'objet de l'e-mail.
[!NOTE]
Après avoir envoyé les données par e-mail, le fichier
.txtest supprimé.Vous pouvez également utiliser un SMTP d'un autre fournisseur d'e-mail, mais vous devez faire attention au serveur SMTP et aux numéros de port que vous écrirez dans la charge utile.
Gardez à l'esprit que certains réseaux peuvent bloquer l'utilisation d'un SMTP inconnu au niveau du pare-feu.
Pour utiliser la charge utile Linux (payload2.dd), vous devez connecter un fil de cavalier entre GND et GPIO5 afin de respecter le code dans code.py sur votre RPi Pico. Pour plus d'informations sur la configuration de plusieurs charges utiles sur votre RPi Pico, visitez ce lien.
Fig. 1 : Exploit sur Linux
Une fois que les mots de passe ont été exportés de l'ordinateur, les données seront enregistrées sur la clé USB désignée. Pour que cette charge utile fonctionne correctement, elle doit être mise à jour avec le nom correct de votre clé USB, ce qui signifie que vous devrez remplacer USBSTICK par le nom de votre clé USB à deux endroits.
De plus, vous devrez également mettre à jour le PASSWORD Linux dans la charge utile à trois endroits. Comme indiqué ci-dessus, pour que cet exploit réussisse, vous aurez besoin de connaître le mot de passe de la machine Linux de la victime, ce qui rend cette attaque moins plausible.
Pour exécuter le script wifi_passwords_print.sh, vous devrez mettre à jour le script avec le nom correct de votre clé USB, après quoi vous pourrez taper la commande suivante dans votre terminal :
echo PASSWORD | sudo -S sh wifi_passwords_print.sh USBSTICK
où PASSWORD est le mot de passe de votre compte et USBSTICK est le nom de votre périphérique USB.
NetworkManager est basé sur le concept de profils de connexion et utilise des plugins pour lire/écrire des données. Il utilise un format de fichier clé de type .ini et stocke les profils de configuration réseau. Le fichier clé est un plugin qui prend en charge tous les types de connexion et les capacités de NetworkManager. Les fichiers se trouvent dans /etc/NetworkManager/system-connections/. Basé sur le format de fichier clé, la charge utile utilise la commande grep avec une expression régulière afin d'extraire les données d'intérêt. Pour le filtrage des fichiers, une assertion de lookbehind positif modifiée a été utilisée ((?<=keyword)). Alors que l'assertion de lookbehind positif correspondra à une certaine position dans la chaîne, sc. à une position juste après le mot-clé sans faire partie du texte lui-même, l'expression régulière (?<=keyword).* correspondra à tout texte après le mot-clé. Cela permet à la charge utile de faire correspondre les valeurs après les mots-clés SSID et psk (clé pré-partagée).
Pour plus d'informations sur NetworkManager, voici quelques liens utiles :
Voici un exemple des données exfiltrées et formatées depuis la machine d'une victime dans un fichier .txt.
L'un des avantages du Rubber Ducky par rapport au RPi Pico est qu'il n'apparaît pas comme un périphérique de stockage de masse USB une fois branché. Une fois branché à l'ordinateur, la machine le voit uniquement comme un clavier USB. Ce n'est pas un comportement par défaut pour le RPi Pico. Si vous voulez empêcher votre RPi Pico d'apparaître comme un périphérique de stockage de masse USB lorsqu'il est branché, vous devez connecter un fil de cavalier entre la broche 18 (GND) et la broche 20 (GPIO15). Pour plus de détails, visitez ce lien.
💡 Astuce :
- Téléchargez votre charge utile sur le RPi Pico avant de connecter les broches.
- Ne soudez pas les broches car vous voudrez probablement changer/mettre à jour la charge utile à un moment donné.
Lors de la création d'un fichier de charge utile fonctionnel, vous pouvez utiliser le script writer.py, ou vous pouvez modifier manuellement le fichier modèle. Pour exécuter le script avec succès, vous devrez passer, en plus du nom du fichier script, un nom du système d'exploitation (windows ou linux) et le nom du fichier de charge utile (par exemple payload1.dd). Vous trouverez ci-dessous un exemple d'exécution du script writer lors de la création d'une charge utile Windows.
python3 writer.py windows payload1.dd
Avec quelques modifications mineures, les scripts précédemment utilisés peuvent également être adaptés pour fonctionner sur le Bash Bunny. Le Bash Bunny fonctionne en émulant un périphérique USB de confiance [1]. Pour ce projet, nous le configurerons pour émuler un périphérique de stockage flash en utilisant la commande suivante [1, 2] :
ATTACKMODE HID STORAGE
En utilisant la commande DuckyScript ATTACKMODE, nous pouvons définir quel type de périphérique le Bash Bunny doit émuler [1]. Chaque mode d'attaque s'enregistre auprès du système avec un identifiant unique de fabricant USB (VID) et un identifiant de produit (PID) [1]. Il est également possible de combiner plusieurs modes d'attaque en les enchaînant.
Fig. 2 : Bash Bunny Mark I branché sur un PC
Le Bash Bunny prend en charge les commandes DuckyScript originales, c'est pourquoi j'ai pu réutiliser le script de la section Rubber Ducky. Pour utiliser ces commandes en ligne, nous devons les préfixer avec la commande QUACK [1]. Par exemple, au lieu d'écrire WINDOWS r, nous écrivons Q WINDOWS r.
Pour charger les charges utiles sur le Bash Bunny, l'appareil doit être réglé en mode d'armement (position du commutateur 3—celle la plus proche de la prise USB) [1]. Une fois connecté, copiez payload.txt et exfil.txt dans payloads\switch1. Les charges utiles doivent être nommées payload.txt [1,2], tandis que tous les fichiers de support référencés par la charge utile peuvent être nommés librement.
Pour référence, la structure du répertoire de stockage de masse du Bash Bunny est la suivante [2] :
BashBunny/
├── loot/
│ └── (les données exfiltrées des charges utiles seront sauvegardées ici)
└── payloads/
├── library/
│ └── (scripts ou modules réutilisables)
├── switch1/
│ ├── payload.txt
│ └── (fichiers optionnels, par exemple exfil.txt, scripts, etc.)
└── switch2/
├── payload.txt
└── (fichiers optionnels)
Fig. 3 : Structure du répertoire de stockage de masse du Bash Bunny
Une fois le script terminé, les résultats seront enregistrés dans loot\wifi_pass.txt. Si l'ordinateur cible n'a pas de mots de passe WiFi enregistrés, le fichier sera vide.
[!NOTE]
Étant donné que l'attaque Bash Bunny repose sur un script PowerShell (
exfil.txt), elle ne peut être utilisée que sur des systèmes Windows. Pour utiliser une approche similaire sous Linux, vous devrez modifier la charge utile et remplacer le script PowerShell par le script Bash référencé dans la section Linux ci-dessus.
Ce pico-ducky fonctionne actuellement uniquement sur Windows OS.
Cette attaque nécessite un accès physique à un appareil déverrouillé pour être déployée avec succès.
L'exploit Linux est beaucoup moins susceptible de réussir, car pour réussir, vous avez non seulement besoin d'un accès physique à un appareil déverrouillé, mais aussi de connaître le mot de passe administrateur de la machine Linux.
Le pare-feu de la machine ou le pare-feu du réseau peut empêcher l'envoi des données volées sur le support réseau.
Les délais de la charge utile peuvent être inadéquats en raison des vitesses variables des différents ordinateurs utilisés pour déployer une attaque.
Le périphérique pico-ducky n'est pas vraiment discret, en fait c'est plutôt l'inverse, il est vraiment volumineux surtout si vous soudez les broches.
De plus, le périphérique pico-ducky est sensiblement plus lent que le Rubber Ducky exécutant le même script.
Si la touche Caps Lock est activée, une partie du code de la charge utile ne sera pas exécutée et l'exploit échouera.
Si l'ordinateur a un environnement non anglais défini, cet exploit ne réussira pas.
Actuellement, pico-ducky ne supporte pas DuckyScript 3.0, seul DuckyScript 1.0 peut être utilisé. Si vous avez besoin de la version 3.0, vous devrez utiliser le Rubber Ducky. Pour cet exploit, la version 3.0 n'est pas nécessaire !