Dates des modifications : | Intervenants : | Modifications apportées : |
---|---|---|
- | Matthieu BILLAUX @_euzebius |
Nhammmber One Mentor ! |
Samedi 14 Juin 2025 | mudpak | Mise à jour |
Dimanche 13 Novembre 2022 | mudpak | Mise à jour |
Samedi 1er Octobre 2022 | mudpak | Finalisation du document (v1.0.0) |
Dimanche 18 Sepembre 2022 | Olivier MATHIEU Frog |
Aide Technique (v0.0.10) |
Mardi 16 Août 2022 | mudpak | Analyse Forensique (v0.0.9) |
Lundi 15 Août 2022 | mudpak | Analyse Forensique (v0.0.8) |
Dimanche 14 Août 2022 | mudpak | Analyse Forensique (v0.0.7) |
Samedi 13 Août 2022 | mudpak | Analyse Forensique (v0.0.6) |
Mercredi 10 Août 2022 | mudpak | Analyse des flux réseaux (v0.0.5) |
Mardi 9 Août 2022 | mudpak | Analyse des flux réseaux (v0.0.4) |
Lundi 8 Août 2022 | mudpak | Analyse des flux réseaux (v0.0.3) |
Dimanche 7 Août 2022 | mudpak | Mise en place du Lab (v0.0.2) |
Dimanche 7 Août 2022 | mudpak | Création du document (v0.0.1) |
Cet article a pour but de guider l’utilisateur dans :
De PTS – PiRogue Tool Suite.
Il y a deux grandes phases dans ce projet qui vont consister à :
Informations : Il est important de noter que PTS Project et MVT sont deux projets distincts réalisés par deux entités distinctes.
Certaines sections de l'article ne sont pas complètes et seulement des captures d'écrans sont insérées car j'ai de moins en moins de temps à y consacrer, donc j'ai préféré publier ce qui a été réalisé pour ne pas laisser ce travail et en faire profiter aux autres.
Disclaimer légal : Il est formellement interdit de conduire des actions de surveillance, d’investigations ou toutes opérations sans le consentement du propriétaire de l’appareil.
Un certain nombre de termes et sigles sont utilisés dans le document, voici leur signification dans le contexte du projet.
Champ du monde Blue Team permettant de réaliser des investigations numériques en vue de retracer le parcours d’un attaquant et ainsi récupérer les preuves d’une intrusion / acte malveillant.
Disciple du monde Blue Team, qui consiste à effectuer des analyses / investigations dans le but de détecter ou attester de la compromission d’un système d’information.
Investigations des flux réseaux.
C’est un outil d’inforensique mobile (Android et IOS), maintenu par les équipes de Amnesty International.
C’est un format de fichier pour les appareils sous Android, tout comme les « exe » pour Windows, un APK permet d’installer une application sur l’appareil.
Pour mettre en place l’infrastructure, il faut répondre à certains critères matériels et logiciels pour pouvoir l’utiliser dans les meilleures conditions.
Voici le matériel nécessaire et mes choix.
Il est essentiel d’utiliser une carte Raspberry Pi parmi les modèles suivants :
Nous allons utiliser le modèle suivant : Raspberry Pi 4 Model B - 8GB
Au vu du contexte actuel, si vous n’arrivez pas à trouver une carte chez votre marchand habituel, vous pouvez vérifier les stocks chez d’autres marchands via ce site :
https://rpilocator.com/?cat=PI4
Depuis cette page nous avons un certain nombre d’informations :
Vendors : liste des vendeurs de matériel
Regions : listes des pays
Devices : différents modèles de Raspberry Pi mais aussi d’autres types de cartes
Filter. . . : filtrer les résultats sur un critère supplémentaire
Auto-refresh listings : permet de mettre à jour automatiquement la liste
Alert Sound : permet d’émettre un son
SKU : modèle de carte
Description : informations plus « lisibles » pour un humain
Link : lien vers le site du vendeur
Update Status : est-ce que le site reçoit des mises à jour
Vendor : noms des vendeurs
In Stock : est-ce que le modèle est en stock chez le vendeur
Last Stock : date de dernier approvisionnement
Price : prix en différentes monnaies
Il est recommandé d’utiliser l’alimentation officielle du Raspberry Pi.
Selon le cas il est recommandé de prendre une carte ayant une capacité de :
Remarque : Par défaut l’historique réseaux des 5 jours est enregistré, donc il faut penser à prendre en compte ce paramètre lors du choix de la capacité de la carte.
Il existe différents types de lecteurs de carte pour micro-SD, le plus simple c’est d’utiliser un lecteur USB comme ci-dessous :
Il est recommandé d’utiliser un câble Ethernet de catégorie 5 au minimum.
Nous allons utiliser un boitier transparent de la marque Aukru, il est facilement trouvable sur Amazon.
L’avantage comme vous pouvez le constater, il est fourni également avec un refroidissement passif, cela a ses avantages et ses inconvénients mais dans notre cas cela n’aura pas de conséquences négatives sur le projet.
Vous pouvez également créer votre boitier en suivants les consignes sur les pages suivantes :
https://pts-project.org/docs/pirogue/build-a-pirogue-case/
https://github.com/PiRogueToolSuite/pirogue-case/tree/main/v1.0_beta
Il est possible d’utiliser des refroidisseurs de deux types :
Comme vu précédemment nous avons opté pour la seconde solution.
Vous pouvez installer un écran pour avoir des informations sur l’appareil, voici un exemple d’aperçu qu’il sera possible d’obtenir :
Pour mettre en place cette solution vous pouvez suivre les étapes sur les pages suivantes :
https://pts-project.org/docs/pirogue/build-a-pirogue-hat/
https://github.com/PiRogueToolSuite/pirogue-hat/tree/main/v1.0_beta
Du point de vue logiciel tous les éléments ci-dessous ne sont pas nécessaires, mais rendent les opérations plus faciles.
L’image du système à utiliser, elle est disponible sur le site du projet.
Pour extraire l’archive que nous allons télécharger.
Pour écrire l’image PiRogue OS sur la carte Micro-SD.
Pour trouver l’adresse IP de notre Raspberry Pi.
Pour prendre le contrôle du téléphone depuis notre ordinateur.
Sur le téléphone, pour autoriser le contrôle à distance via TeamViewer depuis le pc.
Sur le poste Windows pour se connecteur en SSH sur le Raspberry Pi.
Le site officiel de PTS Project est disponible à l’adresse suivante :
https://pts-project.org/
Avant d’entrer dans le vif du sujet, parlons de PiRogue OS et plus généralement du PTS – PiRogue Tool Suite.
Comme son nom l’indique c’est un ensemble d’outils qui permettent :
Pour réaliser des analyses du trafic, l’appareil mobile viens se connecter au point d’accès wifi crée par la plateforme ce qui lui permet d’agir comme un routeur et ainsi intercepter les flux.
Pour mener des investigations PTS utilise l’outil MVT – Mobile Verification Toolkit de Amnesty International.
Nous allons donc dans un premier temps analyser les flux via les dashboards et ensuite effectuer des analyses forensics.
Remarque : Dans cet article nous nous concentrons aux appareils mobiles, plus précisément à un appareil Android, les fonctionnalités de PTS vont au-delà car il permet également d’analyser les flux et mener des investigations sur tous les appareils utilisant des connexions wifi.
Pour découvrir toutes les fonctionnalités de PTS je vous invite à lire la page suivante :
https://pts-project.org/docs/pirogue/overview/
Pour télécharger la version la plus récente du système, se rendre à l’adresse suivante :
https://github.com/PiRogueToolSuite/pirogue-os/releases/latest
Une redirection est effectuée vers la page de la version la plus récente du moment, dans notre cas nous arrivons à la page suivante :
Cliquer sur l’archive contenant l’image, dans notre cas elle se nomme « image_2022-06-12-PiRogueOS-lite.img.xz » :
Le téléchargement commence, il peut prendre un certain temps selon la vitesse de votre connexion :
Vous pouvez télécharger et installer 7-zip depuis le site officiel :
https://www.7-zip.org/download.html
Lorsque le téléchargement est terminé, cliquer sur le logo représentant un dossier :
L’explorateur de fichiers s’ouvre en sélectionnant l’archive :
Effectuer un clique-droit, cliquer sur
L’extraction de l’archive est relativement rapide :
Lorsque l’extraction est terminée, un dossier du même nom que l’archive est créée, effectuer une double clique sur le dossier :
L’image PiRogue OS est présente au format « .img », à ce stade il est important de noter le chemin du dossier pour indiquer à balenaEtcher où se trouve l’image à écrire sur la carte micro-SD.
Vous pouvez télécharger et installer balenaEtcher depuis le site officiel :
https://www.balena.io/etcher/
Insérer la carte dans le pc et une notification comme ci-dessous devrait vous informer.
Par ailleurs nous pouvons identifier le lecteur de notre carte qui porte la lettre « D », cette information est importante pour la suite du processus car il faudra en informer Etcher.
Effectuer une recherche depuis le menu démarrer et cliquer sur
Cliquer sur
L’explorateur de fichiers s’ouvre, sélectionner l’image et cliquer sur
En survolant le choix du périphérique, nous avons des informations détaillées, c’est le moment de s’assurer que la carte est bien sélectionnée :
Cliquer sur
Remarque : Le contrôle du compte utilisateur peut demander une confirmation pour l’opération, cliquer sur « Oui ».
Le logiciel prépare à effacer les données de la carte :
Remarque : Il est très probable que la carte apparaisse dans l’explorateur de fichiers mais ne soit plus accessible comme ci-dessous, c’est tout à fait normal.
L’écriture des données commence, elle peut prendre un certain temps :
Une vérification de l’écriture des données est réalisée pour être certain qu’il n’y a pas eu d’erreurs :
Lorsque toutes les opérations sont terminées, un message s’affiche comme ci-dessous :
Remarque : La carte est automatiquement éjectée de l’ordinateur.
Une notification s’affiché également dans la zone de notifications :
Avant de passer à l’étape suivante, je vous invite à télécharger la version portable de TeamViewer en se rendant à l’adresse suivante :
https://www.teamviewer.com/fr/telecharger/windows/
Une archive sera téléchargée :
Extraire l’archive et cliquer sur
Cocher la case :
Cliquer sur
Nous allons par la suite nous intéresser à la zone :
Depuis votre appareil Android, aller dans le Play Store et rechercher « TeamViewer QuickSupport », cliquer sur
Remarque : Selon la marque de votre téléphone il faudra également installer une extension supplémentaire, en voici un extrait dans la zone (3).
Insérer la carte dans le Raspberry Pi, connecter le câble Ethernet et enfin mettre sous tension la carte.
Vous pouvez télécharger Advanced IP Scanner depuis l’adresse suivante :
https://www.advanced-ip-scanner.com/fr/
Cliquer sur
Un exécutable est téléchargé, cliquer dessus :
Sélectionner la langue souhaitée, cliquer sur
Il est possible soit d’installer, soit simplement d’exécuter le logiciel sans l’installer, c’est ce que nous allons faire, cocher la case :
Cliquer sur
Cocher la case :
Cliquer sur
L’extraction des fichiers est en cours :
Lorsque l’installation est terminée, la fenêtre du logiciel s’affiche avec :
L’adresse de votre réseau local
Pour lancer le scan
Lorsque le scan est terminé les résultats s'affichent :
En parallèle aux informations fournies par le scanner IP, il est possible de corréler les informations via votre routeur internet, ici dans la partie DHCP nous pouvons voir que notre Raspberry Pi à l’adresse IP « 172.16.1.239 » ainsi que les autres informations sur sa configuration réseau :
Remarque : Comme nous le verrons plus-tard, il ne faut pas oublier que le Raspberry Pi diffuse un réseau sans fil sur lequel va se connecter l’appareil que nous allons analyser.
Les informations de ce réseau sont les suivantes :
- SSID : PiRogue1
- Mot de passe : superlongkey
Vous pouvez télécharger et installer Windows Terminal depuis l’adresse suivante ou directement depuis le Store Microsoft :
https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701
Cliquer sur
Le Store Microsoft s’ouvre :
Lorsque le téléchargement et installation sont terminés, cliquer sur
Le terminal Windows s’ouvre :
Saisir la commande suivante :
ssh -p22 pi@172.16.1.239
Détails de la commande :
ssh : protocole à utiliser
-p : argument pour spécifier un port
22 : port à utiliser, dans le cas présent c’est le port par défaut du protocole donc nous pouvions ne pas le spécifier
Pi : nom d’utilisateur
@ : argument pour spécifier une adresse IP / nom d’hôte
172.16.1.239 : adresse IP de notre PiRogue
Puisque c’est la première fois que nous nous connectons à cette machine, une confirmation et vérification de clés est affichée, saisir
Et appuyer sur la touche
Saisir le mot de passe du compte pi et appuyer sur la touche entrée.
Remarque : Le mot de passe par défaut est « raspberry » et c’est tout à fait normal que vous ne voyez pas les critères lors de la saisie.
Nous sommes bien connectés au PiRogue et un message d’avertissement s’affiche car nous utilisons le mot de passe par défaut :
Nous allons effectuer quelques modifications avant d’utiliser la plateforme, saisir la commande suivante :
sudo raspi-config
Détails de la commande :
sudo : pour exécuter avec les droits « root »
raspi-config : outil de configuration pour le Raspberry Pi
Comme nous avons été informés précédemment, pour des raisons de sécurité il est recommandé de changer de mot de passe pour le compte « pi », sélectionner :
Sélectionner :
Un message nous informe que nous allons devons saisir un nouveau mot de passe pour le compte « pi » :
Il faut saisir le nouveau mot de passe, le confirmer et lorsqu’il correspond aux exigences de sécurité un message nous informe qu’il a bien été changé :
Un autre message vient nous informer du bon déroulement de l’opération, appuyer sur
Sous certaines distributions pour Raspberry Pi le protocole SSH est activé uniquement au premier démarrage, pour le garder activer en permanence nous allons le préciser.
Sélectionner
Sélectionner
Sélectionner
Sélectionner
Nous allons dans un premier temps configurer les paramètres de langue et dans un second temps configurer le fuseau horaire à utiliser.
Sélectionner
Sélectionner
Une longue liste s’affiche, descendre et sélectionner :
Sélectionner
Sélectionner
Sélectionner
Sélectionner
Sélectionner
Sélectionner
En parallèle nous pouvons observer :
la commande « date » affichait l’heure avec le fuseau horaire BST
la mise à jour des paramètres régionaux
la mise à jour du fuseau horaire
Il nous reste quelques dernières étapes à réaliser avant de connecter l’appareil au réseau de l’outil.
Pour vérifier l’état des services, saisir la commande suivante :
sudo systemctl list-units pirogue* grafana* suricata* influxdb*
Nous pouvons constater que les services sont actifs et démarrés, sauf celui qui gère la maintenance :
Pour relancer tous les services, saisir la commande suivante :
sudo systemctl restart pirogue*
Avant de connecter notre appareil mobile au réseau du PiRogue, nous allons faire un tour des différents menus.
Une fois que l’appareil sera connecté et des données seront présentes nous irons voir certaines options plus en détails.
Via un navigateur web, se rendre à l’adresse suivante :
http://172.16.1.239:3000
Détails :
http:// : protocole http
172.16.1.239 : adresse IP du Raspberry Pi, à adapter pour votre cas
« : » : pour spécifier l’utilisation d’un port
3000 : le numéro du port
Remarque : Vous pouvez également y accéder via ce lien avec la résolution DNS « http://raspberrypi.local:3000/ ».
Un formulaire s’affiche :
Remplir les champs
Cliquer sur
Dans la zone inférieure de la page, nous pouvons voir des liens vers différentes sources ainsi que la version actuelle :
Par défaut nous arrivons à la page ci-dessous qui contient différents éléments :
General / Home : le nom de la page où nous nous trouvons
Devices : le nombre d’appareils connectés au réseau crée par le PiRogue
Aerts : le nombre d’alertes générées par Suricata
I/O : Inputs/Outputs = données entrantes et sortantes exprimées en taille (Mo, Go. . .)
Flows : représentation des flux entrants et sortants
Domains : noms de domaines
I/O : représentation des données entrantes et sortantes en forme de graphe
Servers location : localisation géographique des serveurs avec lesquels l’appareil a échangé des données / flux
Flows per country : nombre de connexions par pays
Alert timeline : représentation des alertes à travers le temps
Flows : aperçu des flux entrants et sortants de l’appareil
Suricata alerts : aperçu des alertes générées par Suricata
Dans la zone supérieure droite de la fenêtre se trouvent plusieurs options.
Pour ajouter un nouvel élément sur le dashboard existant, cliquer sur
Il est possible d’enregistrer l’état du dashboard avec la configuration, par exemple après avoir ajusté la taille des différents éléments en cliquant sur
Il est possible de modifier les différents paramètres du bashboard en cliquant sur
Par défaut seulement les éléments des trois dernières heures sont affichés :
Il est possible d’afficher des éléments sur des périodes prédéfinies ou ajuster les dates et heures de début et de fin pour avoir des informations selon nos critères :
Il est possible de faire des « sauts » entre des slots de temps en cliquant sur la loupe au lieu d’ajuster manuellement :
Par défaut le tableau de bord se rafraîchit à un intervalle prédéfini, mais il est tout à fait possible de forcer cette actualisation en cliquant sur
L’intervalle d’actualisation par défaut du tableau de bord est de 10secondes, vous pouvez choisir un autre paramètre en 5secondes à 1journée :
Il est possible de basculer entre les différents modes d’affichage pour plus de lisibilité, pour faire cela cliquer sur
Remarque : Pour changer de mode il faut cliquer à nouveau sur ce bouton.
Pour quitter le mode Kiosk, il faut appuyer sur la touche
Il est possible d’avoir plusieurs tableaux de bord, pour les explorer cliquer sur
Nous pouvons voir les éléments suivants :
Search dashboards by name : une zone de recherche permet de trouver notre dashboard
General : la liste des différents dashboards est affichée
Nous pouvons créer différents types d’éléments, cliquer sur
Nous pouvons voir les éléments suivants :
New dashboard : nous sommes dans la partie des tableaux de bords
paramètres que nous avons vu précédemment qui permettent de personnaliser le dashboard
Cliquer sur
Ce menu permet de retrouver les éléments que nous avons vu précédemment :
Nous allons utiliser un smartphone « Xiaomi Redmi 5 Plus » comme cobaye.
Pour le connecter au réseau, cliquer sur
Cliquer sur
Le nom par défaut du point d’accès est « PiRogue1 », cliquer dessus pour se connecter :
Le mot de passe est « superlongkey », ci-dessous nous pouvons voir que l’appareil est bien connecté au réseau :
Les données ont été récoltées durant environ 24heures.
Nous allons préciser au dashboard de nous afficher les données des 24 dernières heures uniquement, c’est la durée pendant laquelle la récolte s’est effectuée :
Par ailleurs nous allons aussi préciser que nous ne souhaitons plus actualiser les tableaux de bords car en laissant le rafraichissement actif nos filtres seront réinitialisés :
Avant d’exploiter les données, il faut savoir que nous pouvons faire différentes opérations sur chaque tableau, en voici un aperçu des fonctionnalités.
Il faut survoler le titre d’un tableau pour voir apparaitre un symbole pour et cliquer dessus pour faire défiler les options :
Pour voir le tableau sur tout l’écran, cliquer sur
Ici le tableau s’affiche complètement ce qui permet d’avoir une meilleure lisibilité :
Puisque tous ces tableaux de bords sont déjà configurés, nous pouvons également les modifier pour les adapter à nos besoins, cliquer sur
Un certain nombre de zones nous permettent d’effectuer les actions souhaitées :
Device : sélectionner le périphérique d’où proviennent les données, ici nous n’avons qu’un seul donc ce n’est pas problématique d’avoir « All »
des paramètres pour modifier le type d’affichage, les ranges de données et le type de tableau (graphe, courbe . . .)
pour sauvegarder et appliquer les changements
le résultat du tableau, ici une carte du monde qui représente les flux
paramètres pour personnaliser le tableau
zone pour effectuer des requêtes, ici nous avons la requête qui est appliquée pour obtenir le résultat
Nous pouvons partager le tableau, cliquer sur
Les paramètres de partage via un lien sont les suivants :
ici nous partageons le tableau via un lien
pour prédéfinir les paramètres d’horodatage sur le tableau à partager ainsi que le thème d’affichage
le lien complet pour accéder au tableau partagé
Il est également possible de générer un lien « court » en cliquant sur
Il est possible de partager le tableau dans un état donné avec les informations d’un instant précis, cliquer sur
Voici les paramètres de personnalisation :
nom du tableau de bord, date d’expiration et délai d’attente de chargement
pour prendre le snapshot et partager publiquement
Il est possible de partager un lien qui peut être intégré sur une page existante, cliquer sur
Voici les paramètres de personnalisation :
horodatage et thème d’affichage
le lien qu’il faudra renseigner sur la page web
La dernière option de partage permet sur le serveur lui-même de partager dans un dossier ou librairie locale, cliquer sur
Pour voir les données et effectuer des requêtes, cliquer sur
Plusieurs zones permettent à la fois d’effectuer des requêtes et d’avoir un visuel sur les résultats :
paramètres généraux et pour lancer la requête
zone dédiée aux requêtes, ici nous avons un exemple de requête déjà écrite
l’affichage des résultats sous forme de graphe, puisqu’il s’agit des données géographiques nous avons les latitudes et longitudes
les mêmes informations représentées en forme de tableau
Pour avoir un aperçu différent des résultats et exporter les données, cliquer sur
Dans la section « Data » il est possible d’exporter les données en format CSV :
Il est également possible de choisir d’autres paramètres avant export :
La section « Stats » permet d’avoir les informations en termes de temps de réponse par exemple :
La section « Query » permet d’afficher la requête qui a été appliquée pour obtenir les données :
La section JSON permet d’afficher au format JSON la requête :
Nous pouvons également choisir d’autres formats de requêtes :
Cliquer sur
Ce paramètre permet de créer une copie instantanée de la carte :
le tableau original
la copie
Ce paramètre permet également de créer une copie, cependant il faut réaliser quelques étapes supplémentaires.
Cliquer sur
Cliquer sur
Nous pouvons observer que la copie a bien été réalisée :
le tableau original
la copie
Maintenant nous pouvons passer à l’analyse des résultats et voir jusqu’à quel niveau les informations présentes dans chaque section peuvent nous aider dans nos investigations.
Au niveau des appareils il n’y en a qu’un seul et c’est normal :
Il y a eu 7 alertes qui ont été générées, nous les verrons en détails plus loin :
Il y a eu près de 2GB de données consommées, nous voyons un pic d’activité au début de la récolte.
Cette information est intéressante car sans connaissance du contexte nous pouvons déjà nous demander si un tél pic est normal ou non et pourquoi le reste du temps il n’y a eu quasiment aucune activité.
Il y a eu 7 147 connexions tout au long de la récolte, l’activité s’est intensifiée du milieu vers la fin :
De nombreux noms de domaines ont été contactés, dans notre cas 421 :
Il y a eu de forts pics d’activités au début de la récolte comme nous avons vu grâce au tableau « I/O » :
Nous pouvons voir différentes informations intéressantes ici :
le débit en abscisses
l’heure en ordonnée
Il y a des pics de différents couleurs en fonction du débit qui a été atteint :
Dans le cas des pics en rouge, cela signifie qu’il y a eu une forte activité, nous pouvons aller à l’intersection des abscisses et ordonnées et voir la date et heure exacte de l’évènement :
Des lignes en pontillées de couleur violette apparaissent 7 fois sur le graphe elles correspondent aux alertes suricata :
De par la disposition par défaut des résultats, il n’est pas pratique de les observer comme ci-dessous où de nombreux pics sont rassemblés.
Pour mieux visualiser ces données il est possible de créer un effet de zoom en sélectionnant une plage de début et de fin comme c’est représenté ici par la zone grisée :
Il est également possible d’ajouter des annotations pour pouvoir revenir plus tard et se servir de repère, cliquer sur
Voici les différents éléments :
Description : champ réservé aux informations que nous souhaitons indiquer
Tags : si vous souhaitez ajouter des tags, par défaut il n’en existe pas
Save pour enregistrer les changements
Ce tableau de par son visuel permet d’avoir un aperçu rapide et clair des flux qui ont été réalisés entre l’appareil et les serveurs dans le monde.
Dans le cas présent nous pouvons observer qu’il y a trois grandes zones qui ont été contactées :
Si nous effectuons un zoom sur la carte il y a différents niveaux de couleurs pour montrer les niveaux d’interactions :
Le tableau précédent permet d’avoir un visuel clair et rapide mais ne permet pas de quantifier le nombre de connexions contrairement au tableau ci-dessous.
Ainsi comme nous avons vu une tendance ici elle se confirme que la quasi-totalité des connexions se font dans les trois zones suivantes :
Les tableaux précédents ont permis d’avoir des visuels et le nombre de connexions toujours pas suffisamment de détails, pour pallier cela le tableau ci-dessous va nous être très utile.
Nous pouvons observer différentes colonnes et il est impératif de noter que nous pouvons appliquer un filtre sur chacune d’elle grâce à l’entonnoir présent.
Voici les informations obtenues dans chaque colonne :
Time : Année-Mois-Jour Heures :Minutes :Secondes.MillièmeDeSeconde, permet d’avoir un horodatage très précis du début d’une connexion
Category : le type de trafic selon NFSteam
Application : type de connexion ou protocole
Domain : nom de domaine du serveur qui a été contacté
Source IP : l’hôte qui a initié le flux
Destination IP : l’hôte qui va recevoir le flux
Country : nom de code du pays vers qui le flux est envoyé
I/O : la quantité de données en entrée et sortie associée à ce flux
Community_id_b64 : identifiant en base64 qui permet d’identifier le flux de manière unique
Par la suite nous allons voir quelques cas pratiques d’informations que nous pouvons obtenir.
Nous allons filtrer le trafic par pays et n’afficher que les flux avec la Chine, sélectionner la colonne
Cliquer sur l’entonnoir, dans la liste déroulante sélectionner
Cliquer sur
Parmi les différentes connexions qui ont eu lieu, nous allons nous intéresser aux trois flux encadrés ci-dessous :
Pour avoir plus d’informations sur un flux, il faut aller dans la colonne
Survoler le flux en question et cliquer sur
Nous obtenons de nombreuses informations :
Community ID : identifiant en base64
Flows : le nombre de flux
I/O bytes : la taille du paquet
Duration : la durée de la connexion
Alerts : nombre d’alertes suricata
Localisation du serveur distant
Alerts : Détails sur l’alerte
Time : horodatage du début de la connexion
Category : type de connexion
Application : type de protocole
Source IP : l’adresse IP de notre appareil ou du PiRogue qui forward la requête
Destination port : le port local
Destination IP : l’adresse du serveur
Destination port : le port du serveur
Domain : le nom de domaine qui a été contacté
Sur la carte lorsque nous survolons le point il est possible d’obtenir les coordonnées géographiques exactes du lieu :
En plus de la simple visualisation et corrélation du flux il est possible de réaliser des analyses plus avancées notamment via :
Pour être certain que l’IP ou le DNS ne soient pas signalés comme étant malveillants / blacklistés.
Nous appliquons le filtre pour afficher les flux vers des serveurs localisés en France.
Ci-dessous nous pouvons observer un certain nombre de requêtes vers le réseau social Facebook, à priori rien n’anormal mais n’ayant pas installé l’application sur le portable il est étrange de le voir initier des connexions vers les serveurs de cette plateforme.
Le sous-domaine « Graph » de Facebook est également sollicité, la seule explication rationnelle qui est existe c’est le fait que Instagram soit installé et puisque c’est une application appartenant à Meta / Facebook alors les données leur sont également envoyées.
Nous pouvons observer un certain nombre de flux vers des domaines très reconnaissables :
Nous allons appliquer le filtre pour afficher les flux allant vers les USA.
Ici il est intéressant de noter que :
les flux de Tinder vont vers ce pays ce qui est normal puisque l’application est Américaine
les flux de Doctolib vont vers les USA, en d’autres termes des données de santé de la population française sont hébergées dans ce pays
il en est de même pour des serveurs appartenant au gouvernement et ici utilisés pour l’application « MonCompteFormation » (CPF)
Ce graphe permet d’avoir un visuel sur les alertes générés par Suricata :
Les intersections représentées ici avec des flèches correspondent aux alertes de sévérite 1, c’est-à-dire des alertes critiques :
Les alertes de niveau 3 correspondent à un niveau de criticité faible :
Ce graphe ne permet en revanche pas de connaitre des détails sur les alertes, c’est pourquoi le tableau ci-dessous existe.
Nous avons des informations supplémentaires sur les alertes générées :
Time
Severity : le niveau de criticité de l’alerte, il y a 4 niveaux
Category : type de menace détectée
Rule : le nom de la règle qui a générée l’alerte
Source IP
Destination IP
Community_id_b64
Dans notre cas il y a eu deux règles qui ont générées des alertes :
ET INFO Android Device Connectivity Check
ET POLICY possible Xiaomi phone data leakage DNS
Mobile Verification Toolkit (MVT) est un outil pour faciliter l'analyse forensic consensuelle des appareils Android et iOS, dans le but d'identifier les traces de compromission.
En d’autres termes contrairement à d’autres outils, MVT permet avec l’autorisation du propriétaire de l’appareil d’effectuer des analyses sur son appareil.
Cet outil a été créée et est maintenu par Amnesty International, bien qu’il soit installé sur le PiRogue, il n’est cependant pas maintenu par l'équipe PTS.
MVT Permet d’effectuer des analyses forensics sur des appareils :
Dans notre cas nous allons simplement l’utiliser sur un appareil Android.
Voici les éléments qui seront à vérifier dans le cadre d’une analyse forensic sur un appareil Android via MVT :
Se connecter en SSH sur le PiRogue.
Pour afficher la version actuelle de l’outil saisir la commande suivante :
mvt-android version
Détails de la commande :
mvt-android : l’outil
version : pour connaitre la version de l’outil
Nous pouvons voir que la version actuelle est « 1.5.4 » et une nouvelle version est disponible « 2.1.3 » :
Pour mettre à jour, saisir la commande suivante :
pip3 install --upgrade mvt
Détails de la commande :
pip3 : gestionnaire de paquets pour python3
install : paramètre pour demander une installation
--upgrade : argument, ici nous souhaitons mettre à jour un paquet
mvt : paquet à mettre à jour
Différentes étapes se succèdent, ici les nouveaux paquets sont téléchargés :
Les paquets nécessaires déjà présents sont listés :
Les nouveaux paquets installés sont affichés :
Lorsque les différentes étapes sont terminées nous pouvons à nouveau saisir la commande pour vérifier la version.
Non seulement nous disposons de la dernière version de l’outil mais en plus nous sommes invités à télécharger les IOC.
Pour télécharger la dernière version des IOC, saisir la commande suivante :
mvt-android download-iocs
Détails de la commande :
mvt-android : programme à utiliser
download-iocs : paramètre pour télécharger les IOC
Nous pouvons voir que les IOC qui sont téléchargés, ici parmi les trois groupes nous avons ceux de NSO Group (=Projet Pegasus).
Lorsque le téléchargement est terminé nous pouvons vérifier la présence des IOC dans le répertoire précédemment cité par l’outil :
Nous pouvons voir que les IOC sont présents en différents formats :
Maintenant que notre outil est à jour et les IOC ont été téléchargés, nous pouvons brancher l’appareil au PiRogue et commencer les investigations.
Connecter l’appareil au PiRogue via un câble USB et le dévrouiller.
Dans la zone de notifications devrait apparaitre un message comme ci-dessous vous informant que l’appareil a été connecté à une prise USB, appuyer sur la notification :
Sélectionner
Une fois que vous avez sélectionné ce paramètre il devrait changer de couleur comme ci-dessous :
Maintenant que l’échange de fichiers est actif via USB, nous allons par la suite activer le mode débogage via USB.
Pour activer le mode ADB, il faut dans un premier temps activer le mode développeur.
Aller dans les paramètres du téléphone :
Appuyer sur
Appuyer sur
Appuyer plusieurs fois d’afficher sur
Il faut normalement appuyer plusieurs fois, et vous devriez voir une notification vous informant de combien de tentatives il reste avant d’activer le mode « développeur » :
Lorsque le mode développeur est activé un message comme ci-dessous s’affiche :
Appuyer sur la flèche retour pour revenir au menu précédent :
Appuyer sur
Appuyer sur
Par défaut le mode débogage USB est désactivé, appuyer dessus pour l’activer :
Pour confirmer l’activation du mode, appuyer sur
Puisque le téléphone est connecté via USB avec le PiRogue (=Raspberry Pi) une vérification est faite via la clé RSA pour être certain d’être connecté au bon appareil, appuyer sur
Dans la zone de notifications, il est désormais possible de voir :
Pour s’assurer que le PiRogue détecte bien l’appareil, saisir la commande suivante :
adb devices
Ici nous pouvons voir qu’un appareil a bien été détecté, nous pouvons donc passer aux étapes suivantes.
MVT-Android propose différentes options, pour les afficher saisir la commande suivante :
mvt-android --help
Nous pouvons voir les différentes commandes qu’il est possible d’exécuter :
Nous allons voir certaines des commandes en détails par la suite.
Ce module permet de vérifier l’appareil via ADB, et permet d’effectuer des vérifications de la présence d’IOC par exemple en utilisant différents modes et modules.
Pour afficher la liste des modules, saisir la commande suivante :
mvt-android check-adb --list-modules
Voici la liste des modules qui peuvent être utilisés, si nous souhaitons utiliser un spécifique il faudra le signaler à l’outil via le paramètre « m » :
Nous allons lancer une analyse sans spécifier de module, saisir la commande suivante :
mvt-android check-adb --output Xiaomi/
Détails de la commande :
mvt-android : pour analyse d’un appareil Android
check-adb : vérification via ADB
--output : pour spécifier un dossier où seront enregistrés les résultats
Xiaomi/ : le nom du dossier où seront enregistrés les résultats de l’analyse
Les différents IOC sont extraits et chargés :
Dans la suite de l’analyse nous avons plusieurs éléments intéressants :
la vérification via ADB commence
le module « ChromeHistory » est exécuté
le module « ChromeHistory » n’a produit aucune détection
une demande de savegarde est faite, il faut l’accepter sur le téléphone sinon les messages ne seront pas analysés
le module « Whatapp » commence son analyse
Des applications qui sont autorisées à utiliser l’application téléphone sont listées, dans le cas présent elles sont légitimes :
Dans le cas de l’interception des SMS, autant les premières applications sont légitimes mais si on ignore que la dernière application est en lien avec « Signal » cela peut être un indicateur d’application malveillante :
Au niveau des permissions des applications nous avons le nombre de permissions pour chacune d’elles :
Il est possible d’envoyer les éléments pour analyse sur VirusTotal, auquel cas il faudra renseigner la clé API, ce qui n’est pas notre cas.
Lorsque le scan est terminé un récapitulatif est affiché et dans notre cas il n’y a pas de présence d’IOC parmi ceux que nous avons utilisés :
A la fin de l’analyse un certain nombre de fichiers sont générées et enregistrés dans le répertoire que nous avons défini dans la commande précédente :
Ce fichier enregistre toutes les étapes qui ont été réalisées à l’issue de la commande :
Ce fichier contient la liste des « activités », dans le contexte Android une activité c’est une action qui est réalisée très souvent avec interaction avec l’utilisateur.
Source :
https://developer.android.com/reference/android/app/Activity
Ce fichier contient l’historique de la batterie :
Source :
https://developer.android.com/studio/command-line/dumpsys#battery
Ce fichier contient la liste des services en cours d’exécution :
Source :
https://developer.android.com/studio/command-line/dumpsys
Ce fichier liste tous les fichiers et dossier présents sur l’appareil, dans l’extrait ci-dessous nous pouvons voir que les éléments présents dans la carte SD ont été listés :
Ce fichier contient les détails sur les spécifications de l’appareil :
Ce fichier contient les informations sur les IOC qui ont été utilisés pour l’analyse :
Ce fichier est censé contenir les journaux d’évènements systèmes avant le dernier redémarrage, mais dans le cas présent la récupération n’a pas pu être effectuée :
Source :
https://developer.android.com/studio/command-line/logcat
Ce fichier contient les journaux d’évènements de l’appareil :
Ce fichier contient la liste de toutes les applications installées ainsi que des informations sur celles-ci telles que :
Ce fichier contient la liste des processus en cours d’exécution sur l’appareil :
Nous pouvons constater que sur les 565 processus en cours, il y a 420 qui sont exécutés avec le compte root !
Ce fichier permet de connaitre le statut du paramètre SELinux :
Ce fichier contient la liste de tous les paramètres de l’appareil, voici quelques informations que nous pouvons trouver :
Source :
https://developer.android.com/training/connect-devices-wirelessly/wifi-direct
Ce fichier contient la liste des applications avec quelques informations telles que :
Pour des raisons légales et d’intégrité des données, lors des investigations il est cruciale de calculer les empreintes des éléments récoltés.
Nous allons calculer l’empreinte MD5 des fichiers qui ont été générés par l’outil, saisir la commande suivante :
md5sum *
Détails de la commande :
md5sum : nous souhaitons obtenir l’empreinte MD5
* : pour signifier que nous souhaitons effectuer cette opération sur tous les éléments
Ici nous avons bien l’empreinte MD5 et en face le nom de chaque fichier.
Bien que MD5 soit encore très utilisé, il y a des risques de collisions (=plusieurs éléments peuvent avoir la même empreinte), c’est pourquoi il est recommandé d’utiliser un algorithme plus puissant tel que le SHA256.
Pour calculer l’empreinte, saisir la commande suivante :
sha256sum *
Nous obtenons les empreintes en face des fichiers, ici la longueur du hash est plus longue du au fait que l’algorithme ne soit pas le même :
Nous allons télécharger les fichiers APKs présents sur l’appareil, cette action permet d’analyser un APK suspect par la suite.
Saisir la commande suivante :
mvt-android download-apks --output Xiaomi-APKs
Détails de la commande :
download-apks : pour télécharger les fichiers APK
--output : pour spécifier un répertoire d’enregistrement
Xiaomi-APKs : le nom du dossier dans lequel nous souhaitons exporter les APK
Avant le téléchargement différentes étapes se succèdent :
La liste des applications est affichée ainsi que leur date d’installation :
D’autres phases se succèdent :
affichage de la liste des applications systèmes et non système
dossier dans lequel est APK seront extrais
nombre de paquets non-système
début du téléchargement
exemple de téléchargement d’une application, ici AmazonShop
L’état de l’avancement du téléchargement est consultable en temps réel :
Lorsque les téléchargements sont terminés l’outil nous en informe :
A la fin du processus nous obtenons :
Voici un extrait du dossier qui contient les fichiers APK :
Voici un extrait du fichier « apks.json », il contient pour chaque application téléchargée :
des informations générales, notamment l’emplacement sur l’appareil
des empreintes pour vérifier l’intégrité de l’APK
les permissions accordées à l’application
Nous allons effectuer une sauvegarde des SMS/MMS pour les analyser par la suite.
Saisir la commande suivante :
adb backup -nocompress com.android.providers.telephony
Détails de la commande :
adb backup : pour effectuer une sauvegarde
-nocompress : pour ne pas compresser le fichier
com.android.providers.telephony : l’application dont nous souhaitons faire la sauvegarde
Une intervention manuelle sur l’appareil est requise pour la suite du processus :
Il est possible de définir un mot de passe pour la sauvegarde et dans le cas présent nous pouvons également voir les éléments qui seront sauvegardés :
Lorsque la sauvegarde est terminée nous pouvons l’analyser.
Saisir la commande suivante :
mvt-android check-backup --output Xiaomi-SMS/ backup.ab
Détails de la commande :
check-backup : pour analyser un fichier
--output : pour spécifier un dossier où seront enregistrés les éléments après analyse
Xiaomi-SMS/ : le dossier où seront enregistrés les éléments
backup.ab : le fichier de sauvegarde à analyser
Le programme initie la vérification :
Les messages sont analysés :
A la fin du processus nous pouvons voir le nombre de messages qui ont été analysés et le résultat :
Lors de l’analyse un certain nombre de fichiers ont été créés :
Le fichier « sms.json » contient tous les SMS / MMS, voici quelques champs qui sont présents :
Source :
https://www.epochconverter.com/
Nous avons vu à travers cet article comment mettre en place PTS et utiliser ses différents outils pour :
Bien que nous n’ayons pas vu les fonctionnalités avancées des outils, nous avons déjà un aperçu des possibilités offertes et l’utilité dans un contexte CSIRT / CERT.
Problème : La carte « Servers location » ne s’affiche plus :
Solution : Si vous venez de mettre sous tension le Raspberry Pi il faut attendre environ 5 minutes le temps que l’infrastructure et les services soient fonctionnels
Si vous avez attendu au-delà de 5 minutes, il faut rafraichir la page ou appuyer sur (F5)
Problème : Le nom du point d’accès (PiRogue) par défaut ne me plait pas, comment le changer ?
Solution : Il faut modifier le fichier de configuration « /etc/hostapd/hostapd.conf »et remplacer PiRogue par le nom que vous souhaitez insérer :
Problème : Il est impossible de récupérer la liste des IOC :
Solution : Il faut mettre à jour MVT, saisir la commande suivante : « pip3 install --upgrade mvt ».
Problème : Lors de la saisie d’une commande aucun module ne se lance pourtant l’appareil mobile est bien connecté :
Solution : Saisir la commande « adb kill-server » pour résoudre le problème.
Site officiel :
https://pts-project.org/
Get Started :
https://pts-project.org/docs/prologue/introduction/
Build a PiRogue :
https://pts-project.org/docs/pirogue/build-a-pirogue/
Operate a PiRogue :
https://pts-project.org/docs/pirogue/operate-a-pirogue/
Site officiel :
https://rpilocator.com/?cat=PI4
Documentation :
https://docs.mvt.re/en/latest/
MVT 2.1.3 :
https://pypi.org/project/mvt/
Python PIP usage :
https://note.nkmk.me/en/python-pip-usage/
Activation du mode deboguage :
https://help.airdroid.com/hc/en-us/articles/360045329413-How-to-Enable-USB-debugging-on-Xiaomi-