
Attaque de souris/clavier sans fil avec rejeu/transmission preuve de concept
Ce code étend les outils mousejack https://github.com/RFStorm/mousejack.
Des outils de rejeu/transmission ont été ajoutés aux outils d'origine.
Des paquets POC basés sur un Logitech Wireless Combo MK220 qui se compose d'un clavier sans fil K220 et d'une souris sans fil M150 sont inclus dans le dossier logs.
Plus de détails disponibles ici https://www.ckn.io/blog/2016/07/09/hijacking-wireless-mice-and-keyboards/
#Utilisation
Outil de découverte de périphériques en mode pseudo-promiscuité, qui parcourt une liste de canaux et affiche les paquets Enhanced Shockburst décodés.
usage: ./nrf24-scanner.py [-h] [-c N [N ...]] [-v] [-l] [-p PREFIX] [-d DWELL]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-p PREFIX, --prefix PREFIX Promiscuous mode address prefix
-d DWELL, --dwell DWELL Dwell time per channel, in milliseconds
Rechercher des périphériques sur les canaux 1 à 5
./nrf24-scanner.py -c {1..5}
Rechercher des périphériques avec une adresse commençant par 0xA9 sur tous les canaux
./nrf24-scanner.py -p A9
Sniffer suiveur de périphérique, qui suit un périphérique nRF24 spécifique lors de ses sauts de canal et affiche les paquets Enhanced Shockburst décodés provenant du périphérique. Cette version a également été modifiée pour enregistrer les paquets dans un fichier de log.
usage: ./nrf24-sniffer.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS -o OUTPUT [-t TIMEOUT] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Address to sniff, following as it changes channels
-o OUTPUT, --output OUTPUT Output file to log the packets
-t TIMEOUT, --timeout TIMEOUT Channel timeout, in milliseconds
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Sniffer les paquets de l'adresse 8C:D3:0F:3E:B4 sur tous les canaux et les enregistrer dans output.log
./nrf24-sniffer.py -a 8C:D3:0F:3E:B4 -o logs/output.log
Rejouer des paquets capturés ou transmettre des paquets générés. Il suit un périphérique nRF24 spécifique lors de ses sauts de canal et envoie les paquets depuis un fichier de log.
usage: ./nrf24-replay.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS -i INPUT_FILE [-t TIMEOUT] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Address to sniff, following as it changes channels
-o INPUT_FILE, --input INPUT_FILE Input file that has the packets to sned
-t TIMEOUT, --timeout TIMEOUT Channel timeout, in milliseconds
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Envoyer les paquets du fichier keystroke.log à l'adresse 8C:D3:0F:3E:B4 sur le canal de saut
./nrf24-replay.py -a 8C:D3:0F:3E:B4 -i logs/keystroke.log
Mappeur de réseau en étoile, qui tente de découvrir les adresses actives dans un réseau en étoile en modifiant le dernier octet de l'adresse donnée, et en envoyant une requête ping à chacune des 256 adresses possibles sur chaque canal de la liste de canaux.
usage: ./nrf24-network-mapper.py [-h] [-c N [N ...]] [-v] [-l] -a ADDRESS [-p PASSES] [-k ACK_TIMEOUT] [-r RETRIES]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
-a ADDRESS, --address ADDRESS Known address
-p PASSES, --passes PASSES Number of passes (default 2)
-k ACK_TIMEOUT, --ack_timeout ACK_TIMEOUT ACK timeout in microseconds, accepts [250,4000], step 250
-r RETRIES, --retries RETRIES Auto retry limit, accepts [0,15]
Mapper le réseau en étoile auquel appartient l'adresse 61:49:66:82:03
./nrf24-network-mapper.py -a 61:49:66:82:03
Les puces nRF24LU1+ incluent un mécanisme de test pour transmettre une tonalité continue, dont la fréquence peut être vérifiée si vous avez accès à un SDR. Il existe un potentiel de décalages de fréquence entre les périphériques pouvant entraîner un comportement inattendu. Par exemple, l'une des cartes SparkFun testées avait un décalage de fréquence d'environ 300 kHz, ce qui l'amenait à recevoir des paquets sur deux canaux adjacents.
Ce script fera transmettre une tonalité au émetteur-récepteur sur le premier canal passé en paramètre.
usage: ./nrf24-continuous-tone-test.py [-h] [-c N [N ...]] [-v] [-l]
optional arguments:
-h, --help show this help message and exit
-c N [N ...], --channels N [N ...] RF channels
-v, --verbose Enable verbose output
-l, --lna Enable the LNA (for CrazyRadio PA dongles)
Transmettre une tonalité continue à 2405 MHz
./nrf24-continuous-tone-test.py -c 5
Ce script utilise un dictionnaire pour mapper les pressions de touches aux paquets équivalents. Il lit l'entrée stdin et enregistre les paquets mappés dans logs/keystrokes.log. Il acceptera les entrées jusqu'à ce que Ctrl+C soit pressé.
usage: ./keymapper.py
Le dossier logs contient divers paquets pré-enregistrés pour diverses opérations de clavier.
Shell.log est destiné à l'exploitation d'une machine Windows en exécutant une commande powershell one-liner qui se reconnecte à la machine de l'attaquant.
Le fichier keys.log sert de référence où diverses pressions de touches et combinaisons sont mappées à leurs paquets équivalents.
Une démo d'exploitation d'une machine Windows peut être trouvée ici https://www.youtube.com/watch?v=YLzUeK1IvJs&feature=youtu.be