Mon Setup et mes histoires d'ordinateurs
Depuis que j’ai démarré ce blog, je me suis mis à faire des CTF HackTheBox à profusion, autant que possible en réalité. Et parmi toutes les questions que je reçois (c’est-à-dire zéro) il y en a une qui revient donc absolument jamais et qui est : « Mais quel est ton setup pour faire des CTFs ? » Et on va y répondre aujourd’hui.
Mes histoires Link to heading
Je fais partie de la génération smartphones moi, et donc le jour où j’ai eu mon premier ordinateur en 2017, je ne savais pas vraiment quoi faire avec et je n’avais pas du tout le réflexe de l’utiliser. J’ai fini par installer un truc louche dessus et j’avais l’impression qu’il ramait énormément, j’étais sûr qu’il avait besoin d’être réparé donc mes parents ont fait venir un “ami qui s’y connaît bien” qui a déclaré que l’ordinateur était foutu mais qu’il voulait bien nous le reprendre, quelle chance !
Un an plus tard j’entre en prépa et là on nous demande d’avoir un ordinateur portable car on va faire du code pour la première fois. À nouveau on se lance dans tout un tintouin pour me trouver l’ordinateur idéal, et on tombe sur une machine Asus à 1000€ voire plus (donc très, très cher de mon point de vue de l’époque) avec beaucoup de RAM, core i7, un GPU intégré etc. Je me souviens des conversations avec les gars de LDLC : « Mmmmh… Oui vous avez raison, je ferai PEUT-ÊTRE de la 3D donc il vaut mieux y mettre plein de puissance… »
Trois ans plus tard j’ai toujours cet ordinateur que je maîtrise de mieux en mieux (la pandémie a certainement aidé de ce côté-là) et je commence à m’intéresser très fort à la cybersécurité. C’est à cette période que je fais mon premier dual-boot Windows - Linux et c’était pas évident ! Ça a comme effet secondaire de me faire vouloir prendre mon ordinateur en tout temps tout endroit, y compris quand je pars en soirée (pour “travailler” sur le trajet). Et ce qui devait arriver arriva : l’ordinateur à 1000€ a pris un coup pendant la soirée. Il est devenu inutilisable à l’aube de mon stage à polytechnique Montréal.
Inutilisable ? Non, pas vraiment. En fait, seul l’écran ne fonctionne pas. Si je le branche à un écran externe, je peux travailler dessus normalement. J’ai donc commencé par faire le move un peu risqué de commander un nouvel écran sur le site d’Asus et de le changer moi-même avec mes maigres compétences de bricolage. Comme je le craignais, le problème ne venait pas de l’écran et donc j’ai dû soigneusement remballer les 200€ d’écran dans leur paquet (en remettant les adhésifs et tout) pour espérer me faire rembourser (je vous rassure je me suis fait rembourser à la fin de l’histoire). J’ai ensuite cherché à faire réparer l’ordi dans deux boutiques montréalaises qui m’ont toutes deux dit que c’était un problème de carte mère et que donc ça vaut pas le coup de changer (BestBuy m’a quand même fait payer bien cher ce diagnostic contrairement au réparateur indépendant du coin de la rue).
Du coup je réinvestis dans un nouvel ordinateur portable à 500€ cette fois-ci, que j’ai toujours aujourd’hui et qui est mon principal outil de travail (le clavier canadien est une grande source de confusion pour tous ceux qui essaient de s’en servir à mon grand amusement). J’ai donc laissé mon ancien ordinateur dans un placard pendant un bon moment jusqu’à ce que je décide de le sortir pour en faire un lab, un ordinateur que j’utiliserai pour faire des petites expériences marrantes.
Je suis passé par beaucoup de phases différentes pour mettre en place ce lab. J’ai commencé par retirer l’écran qui ne faisait que prendre de la place pour rien.
- Le lab branché à l’écran, posé verticalement sur mon bureau tandis que mon ordinateur portable est posé normalement sur mon bureau. Et j’alterne entre contrôler l’un et l’autre en changeant les appareils sur mon clavier et ma souris logitech.
Complètement infâme de faire ces changements bien sûr, d’autant que si j’ai besoin de faire une tâche sur mon ordinateur normal et que j’ai besoin des deux écrans je dois débrancher et rebrancher. En plus il n’y a aucun copier-coller possible entre les deux appareils ce qui est bien problématique pour la prise de note. Autant vous dire que je suis pas resté longtemps dans cette configuration.
- Le lab est toujours posé sur mon bureau, mais cette fois-ci j’y ai installé un logiciel d’accès à distance (que je détaillerai plus tard).
Là c’est pas mal, on résout le problème du contrôle et des deux écrans pour mon ordinateur principal si besoin. Cependant, avec ce nouveau confort, on prend conscience de deux nouveaux problèmes : je dois moi-même appuyer sur le bouton de mon lab pour l’allumer et ce lab prend quand même de la place sur mon bureau. N’y a-t-il pas moyen d’optimiser ça ?
- Le setup idéal : mon lab est dans le même placard que ma box internet. Il reste toujours branché sur secteur et j’ai rajouté une fonctionnalité de Wake-On-LAN pour pouvoir le démarrer à distance.
Ça règle les deux problèmes cités ci-dessus. En voici un petit extrait :
Les gens ont une sacré réaction quand ils ouvrent mon placard électrique haha ! J’ai retiré la batterie car ces trucs peuvent être problématiques, et sinon j’ai aussi retiré le capot histoire d’avoir de meilleur courant d’air pour quand on lance une session hashcat et que ça chauffe un peu ;)
- Le setup ultime : je fais l’acquisition d’une freebox ce qui me permet de configurer beaucoup de choses, notamment l’accès à mon lab à distance à partir d’internet.
Et c’est donc ce que j’ai fait, pour pouvoir accéder à mon lab peu importe où je suis tant que j’ai une connexion internet !
Voici donc les 4 étapes principales que j’ai suivies pour avoir le setup que j’ai aujourd’hui. Très badant non ? Mais maintenant rentrons un peu plus dans les détails.
La technique Link to heading
Sur mon lab, j’ai commencé par constater que j’avais en fait deux disques, un de 250GB et un de 1TB. J’ai testé quelques distributions différentes en utilisant parfois un disque parfois l’autre, avant de finir sur Fedora et d’utiliser Gnome. Puis un beau jour, pour je ne sais plus quelle raison je me suis dit que ça serait une bonne idée d’installer Arch Linux plutôt. D’ailleurs, vous pouvez aller consulter mon article sur comment j’ai installé Arch. Une fois que c’est fait, il faut mettre en place le logiciel d’accès à distance.
J’ai choisi FreeRDP ce qui était un choix évident car à la base j’utilisais Windows sur mon ordinateur principal. Je suis passé sur Debian récemment mais je continue malgré tout d’utiliser FreeRDP par habitude d’une part, mais aussi car je n’ai sincèrement pas trouvé de meilleure alternative (et ce n’est pas faute d’avoir essayé).
Installer et configurer FreeRDP sur le lab Link to heading
Une fois Arch Linux installé sur la machine, il faut choisir son environnement système. Puisque je commençais à bien connaître Gnome, je me suis dit que j’allais essayer KDE car, en effet, je suis un peu plus à l’aise avec des icônes et des images et tout.
Maintenant, pour installer FreeRDP :
sudo pacman -Syu
sudo pacman -S xrdp xorgxrdp
Pour mon utilisation, j’ai besoin que le lab reste constamment éveillé, et qu’il ne se mette jamais en mode sommeil ou autre. Dans le fichier etc/xrdp/xrdp.ini on rajoute les lignes :
max_bpp=32
reconnect_timeout=60
Et dans le fichier /etc/xrdp/sesman.ini on rajoute :
IdleTimeLimit=0
Normalement, rien ne devrait s’arrêter de fonctionner ou entrer en mode veille.
Configurer KDE Link to heading
Il faut donc configurer FreeRDP pour qu’il comprenne qu’il faut lancer KDE. On rajoute donc :
echo "exec startplasma-x11" > ~/.xinitrc
Il faut aussi customiser le script startwm.sh et pour ça J’ai trouvé ce script tout fait, qui marche assez bien.
Configurer GDM Link to heading
GDM ça veut dire Gnome Desktop Manager, et c’est l’écran qui apparaît après qu’on ait redémarré l’ordinateur qui nous demande de choisir un utilisateur et de rentrer le mot de passe. Et l’idée c’est de lui dire que nous, on veut pas le voir car on spécifiera l’utilisateur et le mot de passe au moment de la connexion sur la machine d’origine.
sudo echo "auth optional pam_exec.so /usr/lib/gdm-runtime-config setuser" >> /etc/pam.d/gdm-password
sudo echo "auth optional pam_exec.so /usr/lib/gdm-runtime-config setuser" >> /etc/pam.d/xrdp-sesman
Les paramètres ci-dessus m’ont été soufflés par une IA, je n’aurais pas eu l’idée de le faire moi-même, surtout que quand je regarde l’arch wiki à ce sujet je ne trouve pas mention de cette ligne mais enfin bon.
Il est aussi bien recommandé de désactiver l’option Wayland :
sudo nano /etc/gdm/custom.conf
[daemon]
<SNIP>
WaylandEnable=false
<SNIP>
Et voilà, normalement vous ne devriez plus être embêté, enfin je dis ça mais je suis généralement embêté par le keyring pour scanner les réseaux wifi mais bon, c’est pas trop embêtant puisque mon lab est branché en ethernet. Du coup je clique juste sur “Cancel” sur une fenêtre à chaque fois que je démarre mon ordinateur.
Pare-feu Link to heading
Et enfin pour terminer notre installation de FreeRDP, il faut dire à notre pare-feu de laisser passer le traffic RDP sur le port sur lequel tourne le serveur, à savoir par défaut le 3389.
sudo ufw allow 3389
Activation Link to heading
Et voilà, normalement FreeRDP est bien configuré, on a configuré KDE, GDM ainsi que notre pare-feu pour que tout marche, démarrons maintenant les services :
sudo systemctl enable --now xrdp
sudo systemctl enable --now xrdp-sesman
Normalement tout roule !
Configurer le Wake-On-LAN Link to heading
Pour ce faire, on peut simplement suivre les instructions du Arch Wiki.
sudo ethtool -s eth0 wol g
Ici, le Wake-On-LAN est activé, il ne reste plus qu’à le rendre permanent avec systemd :
sudo nano /etc/systemd/system/wol@.service
On écrit :
[Unit]
Description=Wake-on-LAN for eth0
Requires=network.target
After=network.target
[Service]
ExecStart=/usr/bin/ethtool -s eth0 wol g
Type=oneshot
[Install]
WantedBy=multi-user.target
Et au prochain démarrage on est à peu près sûr qu’on pourra donc démarrer le lab à partir du réseau, notamment avec la commande suivante sur Debian :
wakeonlan -i 172.16.1.2 aa:bb:cc:dd:ee:ff
À ajuster avec l’adresse IP et MAC de votre lab. Cependant, on va voir dans la section juste après qu’on peut faire autrement pour “réveiller” notre lab.
Configurer la Freebox Link to heading
Maintenant, la partie fun ! Les freebox sont franchement plutôt cool et on peut faire bien des choses avec. Je découvre des nouveaux trucs à chaque fois que je bidouille les freebox autour de moi. Je pense que je commence à bien savoir comment ça marche et voici des tutos pour quelques unes des fonctionnalités.
Configurer le serveur VPN Link to heading
On peut faire aussi plein d’autres choses. Notamment transformer la freebox en serveur VPN :
On ajoute notre utilisateur avec le type de connexion (Wireguard) :
Je floute mes informations évidemment.
Ensuite on navigue sur Wireguard dans le menu Wireguard pour télécharger le fichier de configuration :
Une fois qu’on a le fichier de configuration sur son ordinateur, il faut télécharger Wireguard et importer le fichier de configuration pour lancer la connexion. Une fois la connexion lancée, on peut vérifier son adresse IP (en regardant les paramètres réseaux de notre ordinateur, ou en allant sur Mon-IP) et on peut surtout accéder au portail de connexion de notre freebox.
Utiliser le Wake-On-LAN pour allumer notre lab Link to heading
On peut alors cliquer sur “Périphériques réseau” pour avoir la liste de tous les appareils connectés ou qui se sont un jour connectés à notre freebox et trouver notre lab :
Je l’ai renommé archlinux_eth et j’ai changé le logo pour le repérer plus rapidement. On peut faire un clique droit dessus et envoyer le paquet d’allumage :
Et alors on va voir qu’après une minute, on voit :
On voit qu’il n’est pas grisé mais en gras ce qui indique qu’il est bien allumé.
Se connecter au lab Link to heading
On peut alors s’y connecter avec la commande suivante (il faut avoir installé le paquet freerdp2 d’abord) :
xfreerdp /v:172.16.1.2 /u:<username> /p:<password> /cert:ignore /kbd:French +clipboard +dynamic-resolution +auto-reconnect
Je vous recommande de stocker votre mot de passe dans un fichier sécurisé et de l’utiliser comme ça :
echo 'password=<yourpassword>' > password.txt
chmod 400 password.txt
chown root:root password.txt
xfreerdp /v:172.16.1.2 /u:<username> /p:$(sudo grep password password.txt | cut -d '=' -f2) /cert:ignore /kbd:French +clipboard +dynamic-resolution +auto-reconnect
De cette manière il n’y a pas besoin d’entrer le mot de passe directement dans la commande, cependant le mot de passe est donc stocké en clair dans un fichier (même si celui-ci est protégé). Il est aussi sûrement possible de configurer le logiciel pour être contraint d’entrer le mot de passe sur une page d’authentification mais ça prend plus de temps et pour alléger mon environnement de travail j’ai décidé de faire comme ça.
On note bien sûr l’option pour le clavier français, j’ai toujours eu du mal avec ça, des fois ça marche des fois non, des fois il faut rajouter d’autres configurations autre part etc.
Et voilà le travail, je mets la fenêtre en plein écran sur mon écran externe et je peux maintenant m’y donner à cœur joie dans mes CTFs !
Conclusion Link to heading
Et voilà tout le parcours jusqu’à la création de ce setup ! Ça a pris du temps et ça s’est fait de manière incrémentale, il faut pas imaginer que tout soit parfait dès le départ ;)
Un truc que je trouve vraiment super avec ce setup c’est que je peux lancer une commande ou un programme quand je suis dans une session, et le programme ne va pas s’arrêter si j’arrête la session. Je peux donc lancer des scans nmap, couper la connexion, partir faire autre chose et quand je reviens le scan a terminé !
Depuis que j’ai ce setup, j’ai essayé à plusieurs reprises d’utiliser d’autres protocoles comme SSH avec du transfert X11 pour l’image, VNC avec tigervnc, x2go et d’autres encore. Mais je n’ai jamais eu la même qualité que maintenant malheureusement, et c’est pourquoi je suis resté sur RDP.
J’ai encore quelques trucs qui m’irritent : quand j’appuie sur la touche Windows, j’ai le menu qui s’ouvre sur mon ordinateur de base et sur mon lab et ça me force à cliquer. J’observe aussi un comportement bizarre avec les majuscules qui fait que je suis obligé de taper deux fois la touche “ver maj” pour qu’elle s’active ou se désactive dans ma session RDP. Le copier coller ne marche pas avec des images et pas non plus hyper bien tout le temps, donc je dois souvent spammer la touche C quand je fais ctrl+C pour être sûr que ça marche. Je suppose qu’un jour je trouverai la motivation de résoudre ces petites broutilles, ou alors un jour je changerai complètement de setup et j’aurais d’autres problèmes ! x)