VM OSINT : le guide ultime
Vous menez vos enquêtes OSINT directement sur votre machine professionnelle ou pire, personnelle ? Arrêtez tout et lisez ce guide !
Introduction
J’ai récemment lu le guide attaché au livre OSINT Techniques de Michael Bazzell concernant les machines virtuelles. J’ai ainsi entrepris de créer ma propre VM dans le but de mener mes investigations OSINT, avec des modifications et ajouts personnels. En voici la documentation !
Pour l’ensemble de l’article, on se référera à “l’auteur” pour Michael Bazzell et “le livre” pour OSINT Techniques: The Ultimate Virtual Machine.
Ce guide se veut volontairement non-exhaustif, en particulier en ce qui concerne la partie mise en pratique (par là, j’entends ne pas fournir une liste de commande toute prête ou de script qui installe tout sans effort). En voici les motivations :
- Ne pas plagier le livre de l’auteur.
Reprendre l’ensemble des commandes et explications du livre constituerait un plagiat. Je préfère extraire les outils et concepts les plus intéressant, avec des ajouts personnels. Cet article est donc davantage d’une introduction au sujet et une liste d’outils (toolbox) qu’un guide complet et prêt à l’emploi. Si vous voulez un guide “prêt à l’emploi”, je vous invite à acquérir le livre OSINT Techniques, qui est très complet. - Obsolescence rapide dans le domaine.
D’une version à l’autre, les procédures d’installation peuvent changer. Les outils eux-mêmes évoluent : certains changent complètement, d’autres ne sont plus maintenus. - Apprentissage.
En vous attelant à mettre en place votre propre machine virtuelle, vous apprendrez à la configurer et à l’utiliser. Vous serez ainsi plus à même de la modifier et de l’adapter à vos besoins. Cela vous fera également progresser en administration Linux !
Pourquoi une machine virtuelle ?
Si vous effectuez des recherches OSINT sur des sujets sensibles, vous devez absolument utiliser une machine virtuelle. Voici pourquoi :
- Isolation (sécurité).
Tout au long de vos investigations, vous allez visiter divers sites et visualiser/parcourir différents médias. Cela augmente d’autant plus vos probabilités de tomber sur un malware !- Empreinte numérique.
En utilisant une VM différente par enquête, vous réduisez votre empreinte numérique (certains identifiants de matériel virtuel, par exemple l’adresse MAC, peuvent être changés à chaque clonage).
- Empreinte numérique.
- Modulable, clonable.
Vous pouvez utiliser une VM par sujet d’enquête, et la cloner pour chaque nouvelle investigation. Cela vous permet de ne pas mélanger les données et de ne pas risquer de compromettre une enquête en cours. Il est également possible de créer des snapshots pour garder un état à un instant T. - Traçabilité simplifiée.
Un témoignage de l’auteur illustre parfaitement ce point :Au cours de ma dernière année de travail pour le gouvernement, j’ai témoigné au procès d’une personne qui transportait des mineurs dans plusieurs États pour qu’ils soient abusés s**uellement par des délinquants qui payaient pour cela. La défense a demandé au juge de lui accorder un accès complet à l’ordinateur que j’ai utilisé pour l’enquête afin d’examiner mon travail. Puisque j’ai mené toute l’enquête dans une machine virtuelle, j’ai convaincu le juge que la défense ne devait recevoir qu’une copie de la machine virtuelle et non une copie de mon ordinateur entier, qui avait été utilisé pour d’autres affaires. Il a été beaucoup plus facile de remettre un fichier de 4 Go que de faire cloner mon disque dur et de le soumettre à un examen approfondi. J’espère que vous comprenez l’intérêt qu’il y a non seulement à mener des enquêtes dans une machine virtuelle, mais aussi à sauvegarder l’état de votre travail en vue d’une expertise ultérieure.
OSINT Techniques: The Ultimate Virtual Machine, Michael Bazzell.
- Forensic simplifié.
En cas de compromission suspectée de la VM, on peut en quelques clics créer des instantanés (disque + mémoire vive) pour enquêter ultérieurement. - Archivage complet.
Vous pouvez archiver vos VM et ainsi conserver l’ensemble des éléments sur une enquête, ce qui uniformise et simplifie le processus pour cette étape cruciale, et écarte tout risque d’oubli.
- Forensic simplifié.
Pourquoi créer SA machine virtuelle ?
Quelques rares projets de VM pré-construites existent. Vous avez cependant tout intérêt à construire votre propre VM, pour les raisons suivantes :
- Maîtrise.
Vous savez exactement ce qui est installé dans votre VM, et vous pouvez la personnaliser à votre guise. Pas d’outils superflus, pas d’outil manquant.- Sécurité.
Risque de backdoor amoindri.
- Sécurité.
- Dépendance.
Vous ne dépendez pas d’un seul fournisseur pour les mises à jour. Si un logiciel n’est plus maintenu ou ne vous convient plus, vous pouvez le remplacer sans problème. En choisissant un OS stable et maintenu, vous vous assurez de la pérennité de votre VM pour plusieurs années. - Apprentissage.
Vous apprenez à installer et configurer les logiciels nécessaires à vos investigations. Cela vous permet de mieux comprendre leur fonctionnement et de les utiliser plus efficacement.
Installation
La sécurité de la machine hôte
L’auteur commence par rappeler l’importance de la sécurité de la machine hôte.
En effet, si votre machine hôte est compromise, les machines virtuelles pourront l’être également. L’auteur préconise l’utilisation d’une machine dédiée, fraîchement (ré)installée, et de ne pas l’utiliser pour d’autres usages. Il détaille quelques étapes de durcissement de cette machine hôte.
C’est une première approche de la philosophie Assume breach : considérer que l’on est déjà compromis, où que cela arrivera nécessairement à un moment ou un autre. On pratique ici la compartimentation, un concept essentiel pour limiter les impacts d’une compromission.
Choix du logiciel de virtualisation
L’auteur met en avant deux solutions principales : VirtualBox et VMWare Workstation Pro. Il ne met pas en avant une solution plutôt qu’une autre, VMWare Workstation étant désormais gratuit pour un usage personnel.
Il motive son choix personnel d’utiliser VirtualBox par l’aspect ouvert du projet. C’est également l’option que j’ai personnellement choisie.
A vous de faire votre choix en fonction de vos besoins et de vos préférences !
Choix de l’OS
Une question qui peut faire couler de l’encre : les avis ne convergent pas nécessairement. L’auteur explique comment installer des machines virtuelles Windows et Linux, sur différents OS hôte et logiciels de virtualisation.
L’auteur recommande initialement d’utiliser Ubuntu, mais a changé pour Debian dans sa dernière version.
Avec ce livre, je suis passé d’Ubuntu à Debian pour les machines, qui offre un environnement plus efficace, privé et minimaliste.
OSINT Techniques: The Ultimate Virtual Machine, Michael Bazzell.
Le débat entre Linux et Windows est également ouvert. Linux ne présentant pas de télémétrie, c’est une meilleure option pour les enquêtes sensibles. La majorités des outils présentés par l’auteur sont disponibles sous Linux.
Pour ces raisons, et étant familier avec Debian, j’ai choisi la dernière version de celui-ci.
Choix de l’environnement de bureau
Cette partie ne concerne que les OS basés sur Linux.
C’est une question d’habitude, et de goût personnel.
L’auteur préconise GNOME et fournit les quelques configurations associées pour obtenir une interface épurée. Si vous débutez sur Linux, je vous conseille de rester sur GNOME, qui est le plus utilisé et le plus documenté.
J’ai comme l’auteur choisi GNOME : par expérience, il s’agit du bureau le plus simple à configurer en ligne de commande, et avec lequel j’ai rencontré le moins d’erreurs.
Programmes
Note préalable : l’article original listait les outils, la liste étant amenée à évoluer, je l’ai déplacée vers un start.me : OSINT ToolBox 🔨.
Beaucoup de programmes de collecte et de traitement de données sont en mode CLI (command-line interface). Si vous ne voulez pas vous en priver, vous n’aurez d’autre choix que de vous familiariser avec ce mode d’interaction avec votre machine !
Outils à intégrer
Voici la liste des catégories d’outils à intégrer à votre VM.
- Prise de note et reporting
- Visualisation et traitement de données
- Traitement des vidéos
- Traitement des images
- Recherches de comptes en ligne
- E-mails
Attention : ces outil peuvent provoquer des intéractions avec les cible, ce qui est à éviter en général dans les enquêtes OSINT. Ils utilisent en effet des stratégies d’identification telles que vérifier si un utilisateurs est enregistré (tentative d’authentification) et des invites de récupération de mot de passe.
- Outils pour les sites web/domaines
- Frameworks
- Archivage de comptes en ligne
- GeoInt
- Sécurité
Docker
Cette partie est une suggestion personnelle, et n’est pas mentionnée dans le livre. A vous de juger si ces applications peuvent vous être utiles. Un fichier docker compose est fourni plus bas pour déployer aisément les services présentés !
Applications
- SearxNG
Un moteur de recherche open source, à héberger soi-même, qui collecte les résultats de plusieurs moteurs de recherche. - Linkwarden
Un gestionnaire de liens open source, à héberger soi-même. Permet d’archiver des articles et sites web, de les organiser, de les partager, etc. - Stirling PDF
Un couteau suisse pour les PDF, à héberger soi-même. Permet de convertir, fusionner, diviser, compresser, etc. - CyberChef
Un outil de manipulation de données, à héberger soi-même. Permet de convertir, décoder, encoder, etc. - Excalidraw
Un outil de dessin collaboratif, à héberger soi-même. Permet de créer des diagrammes, des schémas, etc.
Mentions honorables
- Memos
Un gestionnaire de notes open source, qui prend la forme d’un fil de discussion style twitter. Cela permet de noter des éléments horodatés. Peut servir par exemple de main courante pour une enquête. - AliasVault
Un gestionnaire de mots de passe open source, qui prend en charge la génération et le stockage d’alias (nom, prénom, pseudo, e-mail jetable). Il est encore en version beta, et manque encore de fonctionnalités à mon goût. Du fait de la complexité de déploiement (nécessite un serveur mail pour générer souverainement les alias), je ne l’ai pas proposé dans le fichier docker compose. C’est un projet à suivre de près pour la gestion des sock puppets !
Mise en place
Dans mon cas, tous les fichiers sont stockés sous /home/osint/docker/
(osint étant le nom d’utilisateur de la VM). Voici les étapes pour la mise en place :
- Installation de Docker : se référer à un guide actualisé en ligne. A date d’écriture, ce guide est à jour.
- Fichier docker compose : voici le fichier
docker-compose.yaml
que j’utilise pour mes applications Docker. Il est à adapter à vos besoins. Vous pouvez à cette fin commenter les applications qui ne vous intéressent pas. (sous VSCodium :Ctrl + /
pour commenter/décommenter une ligne).1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
services: # SearxNG redis: container_name: searxng-redis image: docker.io/valkey/valkey:8-alpine command: valkey-server --save 30 1 --loglevel warning restart: unless-stopped networks: - searxng volumes: - ./searxng/valkey-data2:/data cap_drop: # comment for first run, uncomment after - ALL # comment for first run, uncomment after cap_add: - SETGID - SETUID - DAC_OVERRIDE logging: driver: "json-file" options: max-size: "1m" max-file: "1" searxng: container_name: searxng-front image: docker.io/searxng/searxng:latest restart: unless-stopped networks: - searxng ports: - 127.0.0.1:8080:8080 volumes: - ./searxng/searxng-data:/etc/searxng:rw environment: - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/ - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4} - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4} cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID logging: driver: "json-file" options: max-size: "1m" max-file: "1" # Linkwarden postgres: image: postgres:16-alpine container_name: linkwarden-db env_file: .env restart: always volumes: - ./linkwarden/pgdata:/var/lib/postgresql/data linkwarden: container_name: linkwarden-front env_file: .env environment: - DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres restart: always image: ghcr.io/linkwarden/linkwarden:latest ports: - 127.0.0.1:3000:3000 volumes: - ./linkwarden/linkwarden-data:/data/data depends_on: - postgres # Stirling-PDF stirling-pdf: container_name: stirling-pdf image: stirlingtools/stirling-pdf:latest ports: - 127.0.0.1:8888:8080 volumes: #- ./trainingData:/usr/share/tessdata # Required for extra OCR languages - ./stirling-pdf/extraConfigs:/configs - ./stirling-pdf/customFiles:/customFiles/ - ./stirling-pdf/logs:/logs/ - ./stirling-pdf/pipeline:/pipeline/ environment: - DOCKER_ENABLE_SECURITY=false - LANGS=fr_FR # CyberChef cyberchef: container_name: cyberchef image: ghcr.io/gchq/cyberchef:latest ports: - 127.0.0.1:8877:80 # Memos memos: image: neosmemo/memos:stable container_name: memos volumes: - ./memos:/var/opt/memos ports: - 5230:5230 networks: searxng:
- Fichier env : voici le fichier
.env
que j’utilise. Si vous souhaitez générer les secrets aléatoirement, nommez-le.env.example
(voir la section qui suit)1 2 3 4
# ===== Linkwarden ===== NEXTAUTH_URL=http://localhost:3000/api/v1/auth NEXTAUTH_SECRET=changeme_lkwd_nextauth POSTGRES_PASSWORD=changeme_lkwd_pg
- Script de (ré)initialisation de l’environnement : à exécuter au moins une fois avant de démarrer le service si vous avez nommé votre fichier env
.env.example
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#!/bin/bash # Asks for confirmation read -p "Are you sure you want to remove all data? This is NOT REVERSABLE (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "[i] Nothing done. Exiting." exit 1 fi for dir in "./linkwarden" "./memos" "./searxng" "./stirling-pdf"; do dir=${dir%*/} if [ -d "./$dir" ]; then echo "[i] Removing $dir" sudo rm -rf ./$dir fi done echo "[i] Regenerating secrets..." cp .env.example .env sed -i "s/POSTGRES_PASSWORD=changeme_lkwd_pg/POSTGRES_PASSWORD=$(openssl rand -hex 32)/" .env sed -i "s/NEXTAUTH_SECRET=changeme_lkwd_nextauth/NEXTAUTH_SECRET=$(openssl rand -hex 32)/" .env echo "[i] Done."
- Script de démarrage : pour démarrer les applications Docker, voici un exemple de script.
1 2 3 4
#!/bin/bash cd ~/docker docker compose up
- Script d’arrêt : pour arrêter les applications Docker, voici un exemple de script.
1 2 3 4
#!/bin/bash cd /home/osint/docker docker compose down
- Création d’un service pour les conteneurs : afin de démarrer les applications Docker au démarrage de la machine et les stopper lors de l’arrêt, on peut créer un service systemd. Voici un exemple de fichier de service.
1 2 3 4 5 6 7 8 9 10 11 12
[Unit] Description=VM's docker containers Requires=docker.service After=docker.service [Service] Restart=always ExecStart=/home/osint/docker/docker-start.sh ExecStop=/home/osint/docker/docker-stop.sh [Install] WantedBy=default.target
- Activation du service : pour activer le service, il suffit de copier le fichier de service dans le dossier
/etc/systemd/system/docker-apps.service
et exécuter les commandes suivantes :1 2 3
sudo systemctl daemon-reload sudo systemctl enable docker-apps sudo systemctl start docker-apps
Navigateurs
Comme le fait remarquer l’auteur :
Votre navigateur est sans doute l’élément le plus important de vos investigations OSINT. Prenez le temps de le configurer en fonction de vos besoins.
OSINT Techniques: The Ultimate Virtual Machine, Michael Bazzell.
Voyons donc ensemble les différentes options, puis les extensions et paramètres à mettre en place sur votre navigateur principal.
Quels navigateurs ?
Dans le livre, l’auteur met en avant Firefox et Brave. Nous installerons le second, mais nous tournerons vers des forks du premier. Explications.
Firefox sort de la course
Mozilla a récemment modifié les conditions d’utilisations de Firefox, et cette nouvelle version pose des questions.
- Une première version, vague, pouvait laisser entendre que toute donnée saisie dans le navigateur appartiendrait alors à Mozilla :
Vous accordez à Mozilla certains droits et autorisations
Vous accordez à Mozilla tous les droits nécessaires au fonctionnement de Firefox, dont les données de traitement tel que décrit dans l’Avis de confidentialité de Firefox, et toutes actions en votre nom destinées à aider à naviguer sur Internet. Lorsque vous chargez ou entrez des informations par le biais de Firefox, vous nous accordez une licence mondiale non exclusive et excluant toute redevance pour l’utilisation de ces informations pour vous aider à naviguer, utiliser et interagir avec du contenu en ligne dans le cadre de votre utilisation de Firefox.
Une seconde version a été publiée, précisant que les données n’appartiennent pas à Mozilla, mais reste tout de même floue.
- La mention “nous ne vendront jamais vos données” a été retirée des conditions d’utilisation. Mozilla motive cette suppression par le fait que “la notion de vente de données est désormais large et en évolution constante”.
Cela a suffi à me convaincre de ne plus utiliser Firefox dans le cadre de l’OSINT, comme en utilisation personnelle.
Pour préciser mon propos : cette sous-section ne fait pas partie du livre, c’est une opinion personnelle. Je vous invite à vous faire votre propre opinion sur le sujet.
Firefox est mort… Vive les forks !
J’utilise au quotidien deux forks de firefox :
A noter que les sections suivantes (extensions et paramètres) sont valables pour ces deux navigateurs de même que pour Firefox.
Je vous conseille de configurer un de ces deux navigateurs comme principal pour vos investigations OSINT, et d’utiliser le second avec des paramètres par défaut pour les sites nécessitant des cookies ou des scripts.
Autres navigateurs
- Brave
Navigateur recommandé par l’auteur, basé sur Chromium, pour les quelques sites qui ne fonctionnent pas avec Firefox. Il présente l’avantage de bloquer les publicités et les trackers par défaut. - Tor Browser
Tor est un sujet à part entière, et l’auteur recommande le Tor browser pour certains cas, par exemple accéder aux fameux services onion. Il met cependant en garde :Le navigateur Tor peut s’avérer exagéré pour la plupart des enquêtes. Si vous vous contentez d’effectuer des recherches et de surveiller des services courants tels que Facebook, Twitter ou YouTube, ce service n’est pas utile. Si vous visitez des sites web personnels et les blogs d’un pirate informatique averti, vous devriez vous appuyer sur votre VPN.
OSINT Techniques: The Ultimate Virtual Machine, Michael Bazzell.
Paramètres
Consultez la documentation la plus à jour. Les paramètres changent au fil du temps.
Il s’agira ici de donner des pistes de configuration :
- DNS : utiliser un DNS tiers sécurisé (Cloudflare, OpenDNS, Quad9, etc.)
- Désactiver le stockage des cookies (prévoir un navigateur où ceux-ci sont activés, afin de ne pas avoir à se reconnecter à chaque visite, et conserver des données de session)
- Désactiver l’historique de navigation (compromis à déterminer entre ergonomie et traçabilité de vos recherches, et OPSEC)
Extensions
Ici également, je vous renvoie vers le start.me que j’ai conçu : OSINT ToolBox 🔨 pour la liste des extensions à installer.
Conseils
Documenter
Il est vital de documenter votre travail : mettre à jour un outil plusieurs mois après, voire pire, devoir réinstaller votre VM, vous devrez dans tous les cas remettre “les mains dans le cambouis” un jour ou l’autre. Documenter votre travail vous fera gagner du temps et vous évitera de perdre des informations importantes !
J’ai pu essayer deux approches qui sont à mon sens efficaces :
- Un grand README.
Un fichierREADME.md
qui contient l’ensemble des commandes et configurations pour votre machine virtuelle. Adapté si vous ne comptez pas reconstruire votre VM régulièrement. - Un grand script bash.
Un script qui contient l’ensemble des commandes d’installation et de configuration pour votre machine virtuelle. Un README minimaliste est à prévoir pour expliquer les conditions d’utilisation du script, et les prérequis. Adapté si vous comptez reconstruire votre VM régulièrement.
Il peut être utile de versionner votre projet avec GIT dans les deux cas, afin de garder une trace des modifications !
Snapshots
Créer des snapshots régulièrement, par exemple lorsque vous testez un nouvel outil ou une section d’un script, vous fera gagner de nombreuses heures de réinstallation en cas de problème. Vous pouvez ainsi revenir à un état stable de votre machine virtuelle !
Sauvegarde
On ne le rappellera jamais assez : un snaphsot n’est pas une sauvegarde !
L’approche est différente selon votre choix de documentation :
- Si vous avez opté pour un grand README : avoir une voire plusieurs copies de votre VM modèle est le plus pertinent (évite de devoir tout réinstaller manuellement).
- Si vous avez opté pour un grand script bash : garder votre script à jour est suffisant, au détriment d’un bon paquet de minutes de réinstallation en cas de problème (l’opération étant entièrement automatisée, cela reste acceptable).
Mettre à jour
Une fois votre machine virtuelle en place, il faudra de temps en temps la démarrer et la mettre à jour. Ici aussi, un script bash peut être utile pour automatiser la mise à jour de l’ensemble des outils et de l’OS.
Pensez à faire un snapshot avant de mettre à jour votre machine virtuelle, au cas où une mise à jour casserait quelque chose !
Tester
Attention à la contamination : ne jamais utiliser votre VM modèle pour vos enquêtes, ou même pour tester les outils : créer un clone pour cela. Documenter toute modification à effectuer après l’avoir testée sur le clone, puis les appliquer à la VM modèle.
Un cadre de test sans trop d’enjeux mais tout à fait opérationnel est un CTF ! J’ai eu l’occasion d’affiner ma VM par ces compétitions.