Un serveur VNC vaniteux (Joke over RFB)
VNC est un protocole bien connu de partage de bureau distant. Ce blog post est l'histoire d'un projet d'un WE qui a conduit à fabriquer un VNC « vaniteux ».
Petit point sur VNC
VNC, c'est LE protocol de partage de bureau à distance (avec RDP pour Windows). De souvenir, je retenais que c'était un protocol peu sécurisé, à ne pas exposer sur Internet directement.
Justement, il existe le projet VNC Resolver qui parcourt l'ensemble des serveurs VNC disponibles publiquement sur Internet (IPv4). Un soir, je suis tombé sur un de leur post mastodon qui publiait un Nyan Cat en plein écrann, certainement une victime du cheval de troie MEMZ qui remplace le secteur d'armorcage d'un ordinateur par un programme qui affiche Nyan-cat en plein écran. J'ai eu alors l'idée de créer un petit serveur VNC qui afficherait une blague.
Le projet
Le but est d'avoir n'est pas d'augmenter la surface d'attaque de mon serveur perso (ou plutôt de l'augmenter au minimum), ni de consommer trop de ressources.
Je me suis alors intéresser au protocol VNC avec pour but d'afficher une image fixe depuis un serveur VNC écrit en Rust.
VNC est donc basé sur le protocole RFB (Remote FrameBuffer), c'est un protocole extrêmement simple basé sur la RFC6143. C'est ce qui fait également sa puissance. Il est relativement efficace, car il supporte la mise à jour partielle du « bureau ».
Au niveau sécurité, il faut admettre que ça pèche un peu. Il existe un mode sans authentification et un mode avec mot de passe, mais sans chiffrement (données en clair sur le réseau). D'autres sécurités sont envisagées, mais dépendantes du fournisseur et non normalisées. Bref, ça incite fortement à faire des bêtises, ce qui confirme mes souvenirs d'un protocole « risqué ». Il est à noter cependant qu'il est désormais courant d'avoir une surcouche TLS qui rend le protocole tout à fait sûr, malheureusement, ça demande un peu plus de travail.
Pour mon projet je me suis tourner donc vers la bibliothèque rfb et j'ai passé une petite heure à créer un écran. Je suis parvenu à ça :
C'est à la fois une carte de visite et une inspiration de l'écran de fin de jeu de Portal.
VNCTrost
Après quelques tentatives, je me suis rendu compte que le crate rfb n'est pas à jour. On peut s'en sortir, car cargo permet de remplacer une dépendance par une version locale. Dans mon cas, j'ai utilisé sub-module git afin d'avoir la dernière version.
Quelques minutes plus tard, j'avais un serveur fonctionnel. Je me suis même amusé à envoyer un bip quand l'utilisateur tape quelques chose. 🔔
J'ai ensuite créé un service (template) dédié sur mon serveur perso :
$ systemctl edit --full --force vnctrost@.service
$ systemctl start vnctrost@5900 vnctrost@5901
Avec cette configuration :
[Unit]
Description=VNCtrost on port %I
After=network.target
[Service]
PrivateTmp=True
WorkingDirectory=/usr/share/vnctrost/
ExecStart=/usr/bin/vnctrost --port %i --screen /usr/share/vnctrost/screen-rfp.png
Restart=on-failure
User=XXXX
Group=XXXX
Environment="RUST_LOG=INFO"
[Install]
WantedBy=multi-user.target
Le serveur est ainsi disponible à ache.one:5900
et ache.one:5901
. Le code source du serveur est disponible sur mon serveur git.
Les logs
J'ai été assez surpris du nombre de connections qui sont faites sur ces serveurs. Environ 1 tentative de connexion par heure. Voici les logs en temps réel :
Existant
Je ne suis absolument pas le premier à faire ça. J'ai trouvé quelques serveurs VNC publiques qui s'en approchaient, souvent, dans le nom du serveur.
Un serveur dont le nom est « chloe was here ».
Le serveur 83.249.96.136
qui semble être un serveur de Tele2, un opérateur suédois.
De nombreux serveurs comme 166.151.167.106
et 166.255.108.226
possèdent plusieurs serveurs VNC, dont les noms indiquent « just so you know this is literally me » ou « i am a lesbian pony with weapons ». Je suis très intrigué par ces serveurs qui semblent être des « revendications » d'une hackeuse plus qu'autre chose. Je n'arrive plus à m'y connecter mais ils sont indexés par shodan.io et le « VNC resolver ».
(Œuvre originale par Rozavive)
Encore un absolument incompréhensible, le serveur est celui de @mastodon.staropa.net@1024x2, le hackeur semble être Litevex, mais celui-ci affirme avoir hacké htwins.net. 😵💫 Bref !
Au sujet des revendications, VNC est un moyen alternatif à la défiguration de site web dans la cyberguerre.
À la prochaine fois pour un article sur l'animation sur le Web ... Ou sur les code QR (encore !). 🤷