La souris malicieuse v2 (on remet ça !)

La souris malicieuse v2 (on remet ça !)

Dans un précédent article nous avions évoqué la possibilité de réaliser une véritable souris. Au sein de cette dernière, le micro-contrôleur Teensy s’occuperait des tâches diverses comme la gestion du mouvement (capteurs), la gestion du média de stockage (sdcard), etc.

Ceci rendant la souris plus rapide à détecter, moins consommatrice en courant et plus furtive (pas de hub usb, de « mass storage » de double périphérique de pointage). Et il sera aussi possible de détecter les mouvements et actions de l’utilisateur sur cette dernière.

Première étape réaliser une « vraie souris » :

Le but de cette étape est d’interfacer le Teensy avec les différents capteurs d’une souris (capteur de position optique, codeur de la molette, boutons).

Pour se faire nous allons nous aider de quelques librairies de l’environnement Teensyduino (Bounce, Encoder et OptiMouse). La librairie OptiMouse a été modifiée par nos soins pour prendre en charge le capteur de déplacement optique PAN301ASI-204 qui se trouvait dans la souris PS/2 qui à servi de base à notre souris malicieuse.

Hardware :

Pour la partie hardware nous allons utiliser une souris PS/2 banale du commerce que nous allons vider de ses composants superflus pour ne garder que les capteurs. Nous interfaceront ensuite ces capteurs avec un Micro-contrôleur Teensy 2.0 (le choix de ce dernier s’explique principalement par sa taille, son support des périphériques USB, sa facilité de programmation, les nombreux exemples présents sur Internet, la diversité des librairies, etc.).

Vue de l’intérieur de la souris PS/2, identification des différents capteurs.

Nous retireront le circuit d’interface PS/2 qui est connecté au capteur Optique de mouvements ainsi que la diode qui éclaire la roulette (principalement à des fins d’économie d’énergie).

Les traits violets indiquent les endroits ou les pistes ont été coupées.

Les cercles violets indiquent les composants qui ont été dessoudés et/ou retirés.

Les traits de couleur (vert, blanc, orange, bleu, rouge, noir) indiquent les connexions du Teensy vers les différents capteurs.

Connexion de l’alimentation 5V du capteur de position optique (Rouge / Noir).

Connexion des boutons de la souris (blanc : commun, bleu : milieu, vert : droite, orange : gauche).

Connexion de l’encodeur de la molette (blanc : commun, bleu : A, vert : A’).

Connexion des sorties SDA (vert) et SCL (orange) du capteur de position optique.

Dans un premier temps et pour faciliter les tests les capteurs seront « éclatés » en différents bus, puis connectés à l’aide d’une plaque d’essai au Micro-contrôleur Teensy. Ensuite une fois le code stable et fonctionnel, le Teensy sera logé et connecté à l’intérieur du boitier de la souris.

Voici le schéma de câblage des différents capteurs au Teensy. On remarque que les boutons de la souris ne sont pas équipés de résistances de « pull-up », c’est parce que ces dernières sont en fait intégrés au Teensy sur ses entrées PB5, PB4 et PD7. Il en va de même pour l’encodeur de la molette (PC6 et PD3). Le capteur de mouvement optique est connecté au port I2c du Teensy (PD0 et PD1). Il est alimenté en 5v au moyen des broches d’alimentation que met à disposition le Teensy (VCC fil rouge et GND fil noir). Les ports PB0 à PB3 sont réservés pour la connexion future de l’adaptateur MicroSD au port SPI du Teensy.

Software :

La gestion des boutons (détection du click, traitement anti rebond) est assurée par la librairie Bounce.

La gestion de l’encodeur de la molette est assurée par la librairie Encoder. Afin de s’assurer de la réactivité de la molette, l’une des 2 sorties du capteur a été connectée sur une entrée d’interruption du Micro-contrôleur Teensy (PD3).

La gestion du capteur de déplacement optique PAN301-ASI204 fut plus laborieuse. En effet il n’existe pas de librairie ou d’exemple d’interfaçage de ce capteur avec le Teensy. En revanche d’autres capteurs du même type ont déjà été connectés (PAN3101, ADNS-2610, …). La librairie OptiMouse s’est avéré être la plus simple à modifier pour l’adapter au capteur PAN301-ASI ; en effet le fonctionnement de ce dernier est très proche du PAN3101 exception faite de l’adresse de ses registres. Aidés du « datasheet» du capteur PAN301, les adresses des registres ont été modifiées dans la librairie ; la détection et le fonctionnement du capteur fut immédiat.

Vous trouverez dans ce lien, le code source qui permet le fonctionnement simple de cette souris avec le Teensy 2.0.

Seconde étape rendre la souris malicieuse :

La souris en l’état peut déjà réaliser des opérations malicieuses simples (Ouverture du navigateur, envoi d’un mail, exécution de commandes dans une console, …) Mais la place disponible dans la mémoire du Microcontrôleur Teensy est limitée, environ 32Ko et notre programme en utilise déjà 19 à 22 Ko (selon le payload). Il n’est donc pas envisageable en l’état d’embarquer un payload plus gros (Ex : un stager metasploit 45 à 50 Ko).

Pour ce faire nous ajoutons un média de stockage à la souris sous forme d’une carte MicroSD de 2Gb associé à la librairie SD de l’environnement Arduino.

La carte SD ne sera pas vue par l’ordinateur mais uniquement par le Micro-contrôleur Teensy qui pourra lire et écrire dessus. L’avantage est que l’ordinateur ne verra pas de média « Mass storage » mais uniquement un simple couple clavier-souris. Les principaux inconvénients sont :

  • Il ne sera pas possible pour l’ordinateur de lire et écrire directement sur la carte MicroSD.
  • Les vitesses de transfert seront lentes (obligation de saisir les fichiers via le clavier virtuel du Teensy pour les copier de la carte MicroSD sur l’ordinateur).

Version finale de la souris avec le lecteur de carte MicroSD.

Voici le schéma de câblage après l’ajout du module MicroSD.

Vous trouverez dans ce lien, le code source qui permet le fonctionnement de cette souris avec le Teensy 2.0 et quelques payload simples testés sous Windows XP et Windows 7.

Voici le code source de dcode.txt et payload.txt (ce payload joue de la musique) à placer sur la racine d’une carte MicroSD formaté en FAT32.

La copie du payload au format base64 est inspirée du blog de dabermania. Le code de conversion base64 vers binaire a été sommairement modifié et réparti sur plusieurs lignes, en effet nous avons rencontré des problèmes lors de la reconstitution du « one liner » la ligne étant trop longue elle est scindée.

Voici le fonctionnement du code source de la souris malicieuse v2 :

  1. Au branchement la souris se comporte comme une souris standard.
  2. Un premier timer (dit d’« armement ») est initié pendant lequel la souris malicieuse n’effectuera aucune opérations de contrôle (test du lock de la session, exécution du payload, etc, … ).
  3. Suite a ce temps d’armement, la souris va ensuite détecter une absence de mouvement (déplacement X,Y, molette, clicks). Si aucun mouvement n’est réalisé pendant une durée supérieure ou égale à un second timer. Alors la souris va détecter si la session est ouverte, pour cela la souris va tenter de reconstruire un script VB qui change l’état du « CapsLock ». Si le CapsLock change, alors la session n’est pas verrouillée sinon la session est verrouillée et alors la souris planifie un prochain test.
  4. Si la session n’est pas verrouillée alors la souris commence le lancement de son payload, ce dernier peut être de 2 types :
    • Une suite de commandes simples
    • Un exécutable à reconstruire puis lancer.
  5. Une fois le payload délivré, la souris tente d’effacer ses traces en supprimant les fichiers temporaires reconstitués.

La souris dispose aussi d’une fonction qui empêche l’écran de veille de s’activer, dès qu’une inactivité de plusieurs secondes est détectée, la souris effectue de façon aléatoire des mouvements rapides (invisibles à l’œil nu) du curseur et de la molette pour invalider la mise en route de l’écran de veille.

Vous pouvez utiliser n’importe quel payload (Ex : Meterpreter) il suffit pour cela de convertir l’exécutable en base64 et de le placer dans le fichier payload.txt à la racine de la carte MicroSD.

Attention plus le payload est gros plus sa création sera longue (et pas très discrète) sur le poste de la victime essayez de ne pas dépasser les 40 à 50Ko en base64.

Pour aller plus loin … Il serait intéressant de doter la souris de fonction d’exfiltration de données (On dispose pour ce faire d’une carte MicroSD de grande capacité, on peut ajouter un shield Bluetooth, Wifi, Zigbee, 3G, …). Une idée pour copier des données sur la souris serait d’utiliser les leds CapsLock et VerrNum à la manière d’un bus i2c. La suite dans un prochain article …

 

Annexe :

  • Installation de l’environnement de développement Arduino 1.0 et Teensyduino.

L’installation de l’environnement Arduino a déjà été détaillée sur le blogspot de « labofapenetrationtester  » en anglais.

Dans un premier temps il vous faut récupérer la version 1.0 de l’environnement Arduino à cette adresse.

Installez l’environnement en décompressant l’archive dans un répertoire de votre disque.

(Ex : C:\Program Files\arduino1.0\)

Ensuite il faut télécharger le patch Teensyduino pour l’environnement à cette adresse .

Installez l’environnement choisissez le répertoire ou l’environnement Arduino a été installé.

Installez les librairies et drivers (Bounce, Encoder, port série virtuel, …).

Téléchargez le loader Teensy à cette adresse.

 

  • Ajout des librairies nécessaires pour la souris malicieuse.

Nous allons maintenant installer la librairie OptiMouse modifiée par nos soins.

Extraire et copier le répertoire OptiMouse dans le répertoire librairies de l’environnement Arduino.

Nous allons aussi modifier le fichier usb_private.h pour changer les identifiants de la souris et sa description (Keytronic USB Mouse/Keyboard).