Stal-k
Durant mes longues heures à faire des challenges sur des sites comme Root-me ou encore Hack the Box, je me suis retrouvé sur une catégorie très particulière, l’OSINT. Il n’y a pas vraiment de compétences techniques à avoir pour les réussir.
OSINT
Pour Open Source Intelligence, c’est le concept de renseignement en source ouverte. Pour simplifier tout ce qui est accessible depuis les moteurs de recherche et sans infiltration dans un système.
Social mapper
Pour automatiser et simplifier mes recherches durant celles-ci, j’ai découvert un projet de Greenwolf appeler social_mapper. Le but du projet ? On lui donne un nom et des images de la personne et il cherche sur les différents réseaux sociaux les personnes qui correspondent. Mais pourquoi lui donner des images ? Parce que ce qui démarque le projet c’est l’inclusion de la reconnaissance faciale pour trouver les bonnes personnes parmi tous les homonymes. En trouvant ce projet, j’étais vraiment content, tout ce que je cherchais. Mais c’était avant que ma curiosité ne prenne le dessus.
Installation et code review
Il n’y a pas d’exécutable tout prêt, c’est à nous de l’installer avec nos petites mains sur différents systèmes, dont les dépendances. Il faut donc installer Firefox, mais pas la version installer de base, sur tous les système linux, Selenium, Geckodriver, libgtk-3-dev et libboost-all-dev. Ce n’est pas impossible, mais si l’on n’est pas sur la même distribution Linux que Greenwolf c’est le début du bricolage. Étant surpris de cette installation et des fonctionnalités, je me suis plongé dans le code par curiosité de comprendre comment un social_mapper avait été développé. Beaucoup de mauvaises pratiques de développement comme du code dupliqué sont utilisées, il n’y a aucun modèle objet, un monolithe de 1500 lignes, très peu de gestion d’erreur et du code pour débugger partout en commentaire. À ce moment-là, le projet stal-k s’est créé dans ma tête.
Stal-k
Mon principal objectif était de faire une copie des fonctionnalités qu’on trouve avec social_mapper, mais codées cette fois en Go avec en objectif premier les performances, la simplicité d’utilisation et la clarté du code. Mais pour cela il fallait rechercher des technologies qui correspondent aux fonctionnalités de social_mapper en Go. J’ai fini par choisir chromedp pour l’émulation d’un utilisateur sur internet afin de récupérer les données et go-face pour la reconnaissance faciale. Je suis arrivé à la fin de mon Proof Of Concept (POC) en pouvant scanner le LinkedIn d’une entreprise et essayer de relier la personne à ses réseaux sociaux (Instagram, Twitter…) en ayant la possibilité de rajouter de nouveau site très facilement. Voici ici la configuration utilisée pour récupérer un compte facebook :
option:
name: Search on facebook
site: www.facebook.com
auth: true
search: true
viewport:
x: 1924
y: 1080
do:
- type: do
actions:
- type: navigate
value: https://www.facebook.com/login
- type: waitvisible
selector: '#email'
- type: sendkeys
selector: '#email'
value: '{{username}}'
- type: sendkeys
selector: '#pass'
value: '{{password}}'
- type: click
selector: '#loginbutton'
- type: waitvisible
selector: '#mainContainer'
- type: screenshot
- type: navigate
value: 'https://www.facebook.com/search/people/?q={{search}}&epa=SERP_TAB'
- type: waitvisible
selector: '#BrowseResultsContainer'
- type: while
selector: '!#browse_end_of_results_footer > div > div > div'
max: 10
actions:
- type: scrollbottom
- type: sleep
value: 1
- type: screenshot
- type: do
actions:
- type: sleep
value: 5
- type: sniffuser
value: >-
// some js code
J’ai pu rajouter des fonctionnalités sur la correspondance des profils, il y a la possibilité de vérifier si les images ne sont pas identiques et ce malgré les différentes, définitions. J’ai pensé le système le plus modulaire possible pour pouvoir ajouter des tests en fonction des idées qui me viennent.
Ça bloque
En poussant le POC je me suis rendu compte des limitations qui bloquaient l’efficacité de mon stal-k. Le premier, c’est le bannissement de mes comptes fake créés pour récupérer les informations étant donné que c’est un processus qui ne répond pas à la charte d’utilisation des différents sites. Il faut réfléchir différemment afin de contourner les systèmes pour ne pas faire sonner l’alarme des traqueurs de bots. Le deuxième est « seulement » lié à la résolution des images trouvées automatiquement. L’atout principal d’un outil comme stal-k c’est la reconnaissance faciale, mais celle-ci demande une résolution importante afin de fonctionner correctement. Pour certain site il est impossible de pouvoir trouver une photo en HD ce qui implique une nouvelle problématique, comment classer les comptes en évitant les faux négatifs ? Il n’y a pas de réponse toute faite et la solution que j’ai trouvée n’est surement pas la meilleure… Mon plan est assez simple, mettre un poids pour chaque vérification. Par exemple, homonyme 10 points, reconnaissance faciale a 70% positif 70 points, image similaire 100 points et ainsi mettre en place une échelle de sûreté du résultat par exemple entre 0 et 50 négatifs, 50 et 80 à vérifier et 100+ un résultat positif. Cette échelle est un simple exemple et il y a surement des modifications qui vont arriver pour l’équilibrer.
V1
Le projet a encore besoin de maturation et c’est pour cela qu’à l’écriture de cet article, le projet n’est pas encore disponible sur mon compte Github. Mais ça ne saurait tarder il faut juste trouver la bonne solution pour chaque limitation trouvée. Mais aussi faire en sorte que stal-k soit le plus facilement installable et cela grâce à un container. Ce dernier se voudra simple et efficace et pourra répondre à tous les problèmes de dépendance et de plateformes (Windows, OS X, Linux …). Il reste de nombreuses choses à faire sur stal-k et de nombreuses idées à trouver. Et je suis sûr qu’avec le temps stal-k saura émerger tel le Cthulhu de la mer.