{HoneyPot} – Détecter une intrusion
Bonjour à tous,
C'est la reprise, et comme dit précédemment, je devrais être beaucoup moins actifs sur le blog, cependant, j'avais un peu de temps et j'ai voulu vous écrire quelques lignes sur un sujet assez ludique !
Bonne lecture à tous, et encore une fois merci pour vos petits messages !!!
Souvent lorsque l'on souhaite se parer à toute éventualité d'intrusion, nous pensons, customisation de configuration (port par défaut, identifiants par défaut, ...), antivirus, firewall, mise en place de bonnes pratiques de développements, etc ...
Ce sont en effet de très bons réflexes.
Cependant, vous n'êtes pas à l'abri d'être dépassé par la technologie.
Un jour il vous arrivera de constater tardivement qu'un vilain pirate aura dévoilé une faille mettant à mal n'importe quels systèmes, dont le vôtre !
Le HoneyPot permet à la fois d'attraper les pirates la main dans le sac, mais également de voir des intrusions que vous n'auriez peut-être pas vu venir ! Voir même dans certains cas, de découvrir de nouvelles formes d'attaques.
Un HoneyPot
Je passerais assez rapidement sur ce terme, car il y a une multitude d'articles qui en parle en long, en large et en travers.
Le HoneyPot est un "pot de miel" (champion de la traduction ;) )
En gros, il s'agit d'un piège posé sciemment pour qu'un pirate tombe dedans.
Une fausse injection SQL dans lequel le pirate va passer 3 jours .... sans parvenir à ses fins, ou à l'inverse qui lui envoi de faux jeux de données .... le rassasiant peut-être, et lui faisant à nouveau perdre du temps à comprendre pourquoi ces données ne fonctionnent pas.
Un faux accès shell mais si limité que le pirate ne peut rien faire.
Un proxypass sur le site de la gendarmerie, gloups .... non ne faites pas ça ;)
Bref l'idée c'est vraiment de piéger le gars :
- soit pour l'attraper
- soit pour le décourager en lui faisant vraiment perdre son temps
- soit pour être averti d'une tentative d'intrusion.
Le répertoire qui contenait tous vos secrets les plus secrets
Ce qui intéresse généralement un pirate, ce n'est pas la police de caractères que vous utilisez ...
Ni votre fond d'écran ...
Mais plutôt des bases de données, des noms d'utilisateurs, des mots de passe, des bitcoins, etc ....
En dehors des sites Web souvent truffés de vulnérabilités en tout genre, ce qui est intéressants, c'est la partie système qu'il y a derrière.
Imaginons 2 types de scénarios :
- Le pirate trouve une brèche dans votre site Web qui lui permet d'explorer votre serveur et de lire / écrire des fichiers (LFI, RFI, UFU).
- Le pirate trouve une vulnérabilité au niveau système qui lui donne un accès shell.
Dans ces 2 scénarios, toutes vos sécurités ont été contournés car notre pirate est une pépite, et a brillamment réussi à passer au travers.
A ce stade là il n'est donc pas vraiment question de lui barrer la route, mais l'idée ici, c'est de l'attirer dans un endroit qui vous alerterait qu'il se passe un truc louche
Nous allons donc créer un dossier, fichier avec un nom très alléchant :
- SauvegardeBaseDeDonnées
- MesMotsDePasse
- Bitcoins
- BackupDB.tar.gz
- confidential/
- ...
Notre pirate va chercher des informations sensibles, il sera donc forcément intrigué par ce fichier / dossier, et c'est là que le piège va se refermer sur lui.
Stat et INotifyWait
stat : Un utilitaire linux qui permet de connaitre toutes les informations d'un dossier / fichier (A qui appartient-il : utilisateur / groupe, quels sont les droits d'accès : Lecture, Ecriture, Execution, ... date de dernière modification, date de dernier accès, date de création, ...)
stat /home/user/example/folder
inotifywait : Un outil qu'il vous faudra installer et qui permettra de monitorer un fichier / dossier afin de vous prévenir lorsqu'il y a un changement.
inotify /home/user/example/folder
Via ces utilitaires nous pouvons donc savoir s'il y a eu des modifications
Le changement c'est maintenant
Vous l'aurez compris, l'idée ici c'est de créer un fichier ou un répertoire qui va attirer notre pirate.
Ce fichier ou répertoire n'aura bien entendu aucune valeur pour nous si ce n'est d'être le plus tape à l’œil possible, et il ne nous faut pas l'utiliser ! Ni vous ! Ni vos équipes (si vous êtes dans un contexte professionnel) !
Stat et / ou InotifyWait indépendamment ou combiné vous permettront de surveiller et d'être soit en temps réel, soit par tâche planifiée à de courts intervalles, des changements qui s'opèrent sur ce piège.
L'avantage de Stat, c'est qu'il offre une magnifique librairie C (qui ... rassurez-vous ... est portée dans d'autres langages), cela vous permet donc d'innover et de créer la solution qui fera une requête vers votre raspberry, déclenchant ainsi une sirène et une lumière rouge dans toute la maison, et déclenchant le lancement d'une ogive nucléaire en représailles !
Attention aux limitations du système
Il est possible que vous souhaitiez vérifier si votre HoneyPot fonctionne.
Ainsi vous tenterez de lire un fichier, ou d'accéder à un dossier, afin de voir si la date et l'heure d'accès ont changés ...
Vous serez alors confronté (peut-être) à 2 cas de figure :
- l'heure d'accès ne change jamais
- L'heure d'accès ne change qu'une seule fois
Je vous rassure c'est parfaitement normal et c'est malheureusement une triste incohérence de Linux ... ou pour certains développeurs une "optimisation" ...
Lorsque votre système de fichiers est monté, il est pour la plupart du temps monté avec l'une de ces 2 options "noatime" ou "relatime".
La première demande à ne pas tenir compte des temps d'accès, la seconde met une limite à une mise à jour de ce temps d'accès par jour ....
/!\ Attention, par "temps d'accès", je ne parle pas de vitesse, mais du "moment" où une personnes accède à un fichier / dossier (date + heure > timestamp)
Afin de vérifier si c'est votre cas, exécutez cette commande :
mount | egrep -i '(relatime|noatime )' --color
Si vous êtes sur un montage avec l'option relatime :
Cela ne change pas grand chose pour votre HoneyPot.
Il fonctionnera car si vous n'accédez jamais à votre dossier ou fichier "piège", votre système de fichiers permet une mise à jour du temps d'accès par jour, donc normalement seul un éventuel pirate serait responsable de cette mise à jour ;)
Enfin, dans l'hypothèse où vous souhaitez creuser un peu le sujet et voir les différents moyens de le contourner cette limitation, je vous propose de consulter ces quelques liens :
https://unix.stackexchange.com/questions/8840/last-time-file-opened
https://superuser.com/questions/464290/why-is-cat-not-changing-the-access-time
Exemple en C
Voici un petit exemple en C, dont vous pouvez voir le test ici :
Workflow (déroulement) du test :
Dans la console du dessus, je lance mon script qui va surveiller le répertoire "MinimalistKeyLogger".
Dans la console du dessous, je rentre dans le repertoire "MiniMalistKeyLogger" et je regarde ce qu'il y a dedans.
Dans la console du dessus, apparaît le message Accès détecté au moment où le contenu du répertoire "MinimalistKeyLogger" est affiché.
Conclusion
Les HoneyPot, ce n'est pas une véritable solution de sécurité, mais c'est très complémentaire.
Dans certains cas, c'est même utilisé par des chercheurs en sécurités pour découvrir de nouvelles formes d'attaques.
Je vous invite à me raconter en commentaire vos éventuelles idées et / ou expériences dans ce domaine.