Post

VM OSINT : le guide ultime

VM OSINT : le guide ultime

logo

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).
  • 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.

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.
  • 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
    

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 fichier README.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.

Cet article est sous licence CC BY 4.0 par l'auteur.