Firefox (I) – Les outils de développement de Firefox

Firefox (I) – Les outils de développement de Firefox

Ce billet est le premier billet d’une série sur le navigateur Firefox.

Si je dois bien vous avouer quelque chose, c’est que je n’ai jamais compris la hype, l’engouement autour du navigateur Chrome de Google. En 2012 ou 2013, considérer ce navigateur internet comme le must en la matière pouvait encore se comprendre, à l’heure où ses performances surpassaient celle de Firefox.
Mais depuis l’arrivée de la version 6x, ce dernier est désormais une bête de course et sa gestion de la mémoire le rend diaboliquement efficace.

Bien plus que ses performances pures, c’est surtout sur le plan du respect de la vie privée que Firefox est remarquable. Or, lorsque l’on effectue des recherches en sources ouvertes, il est indispensable de garder la main sur nos données privées et leur éventuelle fuite lors de la navigation. C’est donc bien évidemment ce navigateur qu’OpenFacto recommande à ses lecteurs et membres! Et si vous voulez utiliser Chrome, nous vous encourageons à utiliser Chromium, sa version libre, expurgée des mouchards Google.

Au delà de ces aspects, comprendre la manière dont votre navigateur interagit avec le site internet que vous visitez est essentiel. Un des outils disponibles dans Firefox, particulièrement utile à l’OSINT, est l’outil de Développement Web (il est aussi disponible sous Chromium, rassurez-vous).
Il est activable par la combinaison de touches CTRL+MAJ+I, ce qui devrait faire apparaître la barre ci-dessous.

Avec cet outil, il est possible d’examiner plusieurs éléments et notamment :

  • Le code source de la page avec l’Inspecteur
  • Ce que le site stocke en local sur votre navigateur avec le Stockage
  • Les échanges entre le navigateur et le site distant avec le Réseau

Nous ne nous étendrons pas sur les autres paramètres pour l’instant et c’est sur l’aspect Réseau que nous nous attardons aujourd’hui.

L’outil Réseau – Usage simple

Prenons un exemple pour illustrer à quoi peut bien servir l’outil Réseau.
Imaginons que nous recherchions des informations sur la société OVH (dont le numéro RCS est 424761419), sur le site societe.com.

Si on entre ce numéro dans la barre de recherche, le site donne immédiatement le résultat, mais on ne comprend pas bien comment s’opère cette recherche, comment on obtient ce résultat. La barre d’URL ne donne aucune indication sur la nature de la requête.

Essayons donc d’effectuer cette même requête avec l’outil d’analyse Réseau de Firefox.

On observe que dès que nous appuyons sur l’outil de recherche, le site internet lance une requête de type GET, avec une URL formatée ainsi :

https://www.societe.com/cgi-bin/search?champs=424761419

On comprend dès lors que le site internet utilise une requête spécifique pour afficher cette page, composée d’une chaîne de texte (une URL) se terminant par le signe « égal », auquel il a concaténé le numéro RCS que l’on avait donné.

Pour vérifier notre hypothèse, essayons donc d’effectuer une recherche sur le numéro RCS de GANDI sans passer par la page principale du site, mais en tapant directement l’URL :

https://www.societe.com/cgi-bin/search?champs=423093459

Bingo! Cette URL est fonctionnelle.
On peut également tenter de rechercher par nom et prénom :

https://www.societe.com/cgi-bin/search?champs=martin+bouygues

Mais vous me direz, quel usage pour l’OSINT?

Simple… Supposons que vous ayez une feuille de calcul de type tableur, avec une liste de 20 ou 800+ numéros RCS. Il est alors très simple de composer une colonne supplémentaire à votre tableau en concaténant l’URL que vous avez découverte, et ces numéros… et d’envisager ainsi des possibilités d’automatiser la consultation de ces pages!…

L’outil Réseau – Usage avancé

L’outil réseau permet de récupérer rapidement dans certains cas de l’information très utile, notamment lorsque le site internet est dynamique, ou s’interface avec une base de données.


Prenons l’exemple de cette page issue du site du Tribunal Spécial pour le Liban :
https://www.stl-tsl.org/en/the-cases/contempt-cases/stl-14-05/filings?&case=6&dtype=1

Cette page présente une liste de 20 documents dont on aimerait récupérer les métadonnées (date, titre, etc…), le plus efficacement possible.
Ouvrons cette page à l’aide des outils de développement de Firefox.

Nous allons filtrer la vue en cliquant sur XHR (XMLHTTP Request), un système permettant à un site internet de rafraîchir ses données de manière dynamique en Javascript. Pour récupérer et afficher ses données, le site va se baser sur un fichier de type JSON (un simple fichier texte balisé) contenant les metadonnées que nous cherchons, et les mettre en page à la volée. C’est ce fichier qui nous intéresse.
Si nous sélectionnons la ligne URL contenant le fichier Json, et observons la « réponse » à droite de la fenêtre, on constate que ces metadonnées sont bien présentes.

Comment récupérer ces données?
Il suffit par exemple de cliquer bouton-droit sur la ligne ainsi sélectionnées et de cliquer sur « Copier comme cURL ». Si vous ouvrez un terminal et collez le contenu du presse-papier, vous devriez observer ceci :

curl 'https://www.stl-tsl.org/crs/index.php/home/filings/??&case=6&dtype=1&case=6&dtype=1&p=0&pp=20&lang=1' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0' -H 'Accept: /' -H 'Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3' --compressed -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'Referer: https://www.stl-tsl.org/en/the-cases/contempt-cases/stl-14-05/filings?&case=6&dtype=1' -H 'Cookie: visid_incap_114829=kUHENy7IT4u+MpclqtAvkJOkKF0AAAAAQkIPAAAAAACARMONAVOOktY/aYDphOnUIQ9OWSIRGc7M; language=en; incap_ses_475_114829=3podc9DOQDBo2Y1TI4qXBgfoR10AAAAAtolh2LpK1l+icEJ+YnmlUg==' -H 'TE: Trailers'

Ajoutons une redirection vers un nom de fichier en complétant cette commande par > metadata.json :

curl 'https://www.stl-tsl.org/crs/index.php/home/filings/??&case=6&dtype=1&case=6&dtype=1&p=0&pp=20&lang=1' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0' -H 'Accept: /' -H 'Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3' --compressed -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'Referer: https://www.stl-tsl.org/en/the-cases/contempt-cases/stl-14-05/filings?&case=6&dtype=1' -H 'Cookie: visid_incap_114829=kUHENy7IT4u+MpclqtAvkJOkKF0AAAAAQkIPAAAAAACARMONAVOOktY/aYDphOnUIQ9OWSIRGc7M; language=en; incap_ses_475_114829=3podc9DOQDBo2Y1TI4qXBgfoR10AAAAAtolh2LpK1l+icEJ+YnmlUg==' -H 'TE: Trailers' > metadata.json

On obtient alors un fichier ressemblant à ceci (extrait) :

{"count":3352,"data":[{"id":4166,"title":"Order to Redact the Public Transcript and or the Public Broadcast of a Hearing Held on 25 and 26 June 2018","date":"19-02-2019","case":"Ayyash et al. (STL-11-01)","case_before":"Trial chamber","case_stage":"Trial","filing_party":"Trial Chamber","filing_number":"F3760","record_type":"Order","direction":"ltr","files":{"9694":"English"}},{"id":4164,"title":"Order to Redact the Public Transcript of Hearings Held on 21, 22, 25, 27, 28, and 29 January 2016","date":"19-02-2019","case":"Ayyash et al. (STL-11-01)","case_before":"Trial chamber","case_stage":"Trial","filing_party":"Trial Chamber","filing_number":"F3758","record_type":"Order","direction":"ltr","files":{"9692":"English"}},{"id":4165,"title":"Trial Chamber's Internal Memorandum to the Head of Defence Office - Monitoring the Effective Legal Representation of Mr Hassan Habib Merhi's Defence","date":"14-02-2019","case":"Ayyash et al. (STL-11-01)","case_before":"Trial chamber","case_stage":"Trial","filing_party":"Trial Chamber","filing_number":"F3759","record_type":"Internal Memorandum","direction":"ltr","files":{"9693":"English"}},{"id":4163,"title":"Public Redacted Version of 'Decision on Prosecution Application for a Summons to Appear for Witness PRH588 and Order Issuing a Summons' of 16 February 2017","date":"12-02-2019","case":"Ayyash et al. (STL-11-01)","case_before":"Trial chamber","case_stage":"Trial","filing_party":"Trial Chamber","filing_number":"F2995","record_type":"Decision","direction":"ltr","files":{"9687":"English","9688":"Annex A","9766":"\u0639\u0631\u0628\u064a","9767":"Annex A Arabic"}},

Ce fichier structuré peut être aisément converti avec OpenRefine par exemple au format csv ou xls.

En résumé…

Récupérer des données en deux clicks, vous avouerez que c’est rapide et pratique!

Comprendre le fonctionnement d’un site internet, la manière dont il affiche ses données, comment il interagit avec une base de données, est primordial lorsque l’on cherche à optimiser sa collecte d’information.

Nous reviendrons dans un prochain billet, à l’aide d’un exemple, sur d’autres aspects de l’outil Développement Web de Firefox…


Travailler avec des leaks: le cas des emails leakés du chef de campagne du Président Ukrainien (2nd partie)

Travailler avec des leaks: le cas des emails leakés du chef de campagne du Président Ukrainien (2nd partie)

Dans la première partie de cet article, Lou vous expliquait comment travailler sur des leaks d’emails, en prenant pour exemple ceux du chef de campagne du Président Ukrainien. Cette fuite de données ne concernait que 167 emails, assez simple à analyser avec un simple éditeur de texte.

Toutefois, trouver un si petit nombre de mails est assez rare. Ainsi, dans la cas des « Macron Leaks » en 2017, ce ne sont pas moins de 21.000 mails, issus de plusieurs boites, qui avaient fuité, rendant une analyse manuelle assez complexe à mener dans un temps très court. Oui, explorer les mails à la main, surtout en si grande quantité, peut-être assez fastidieux.

Heureusement, il est possible d’automatiser un peu le processus d’analyse et utilisant quelques outils libres et gratuits.

Comment sont livrés les mails?

La première question à se poser est de savoir comment les mails sont leakés. S’agit-il d’un lot de fichiers EML (chaque mail livré un par un), d’une boite mbox?, d’un fichier pst (Outlook)?

Le plus simple à analyser est le plus souvent d’avoir un mail par fichier.

Pour le format pst – c’est de loin le format le plus pénible – on peut importer ce fichier dans Outlook, à condition de le posséder, puis exporter cette boite au format EML. Sous Linux, il existe une bibliothèque appelée libpst, capable de convertir du pst en eml.
Pour le format mbox, j’utilise souvent Thunderbird, associé au plugin importexporttools, qui permet d’importer et d’exporter les boites mail dans un peu tous les formats.

Thunderbir et importexporttools chez openfacto.fr
Liste des fonctionnalités d’ImportExportTools

Indexer les mails pour mieux les interroger

Les moteurs de recherches d’Outlook ou de Thunderbird sont assez pathétiques en terme de fonctionnalités. Faire de la recherche fine peut s’avérer très pénible. Lorsqu’on a récupéré des courriels en abondance, rien de tel qu’un bon outil d’indexation pour requêter précisément.

En fonction du besoin et du niveau de compétence dont vous disposez, mais également de l’investissement en temps et en argent que vous souhaitez y consacrer, il est possible de recommander trois outils :

1- Rapide à déployer, portable et puissant, fonctionnant sous Windows, Mac et Linux, DocFetcher reste un outil d’indexation incontournable. L’interface est austère mais efficace : vous créez un index de vos mails. Puis vous lancer vos requêtes à l’aide de la syntaxe de Lucène, le moteur d’indexation.

2- Un poil plus complexe à paramétrer, Overview-Project dispose des mêmes fonctionnalités de recherche fine mais permet également de tagguer des documents, de faire des liens entre eux.

3- La Rolls du moment, même si il est plus complexe, OpenSemanticSearch, est un outil d’indexation complet, permettant notamment de faire de la reconnaissance d’entité nommées (NER), et donc d’enrichir automatiquement vos documents en retrouvant par exemple des sociétés des personnes, des lieux, etc…

Enfin, on surveillera de près Datashare, développé ces temps-ci par l’ICIJ (coucou Pierre!), qui permettra de faire tout cela dans une interface sexy en diable.

Travailler sur les entêtes des mails

Les entêtes des emails (ou headers) recèlent une foule d’informations et ne sont pas forcément très étudiés.

Pour les analyser en masse, il va falloir les extraire et si possible automatiquement. Pour cela, il existe une bibliothèque python très intéressante : mailparser. Une fois installée sur votre machine, cette commande permet d’extraire les informations suivantes :

  • bcc
  • cc
  • date
  • delivered_to
  • from_
  • message_id
  • received
  • reply_to
  • subject
  • to

Pour l’exemple des mails ukrainiens, voici la commande utilisée sous bash/Linux :

for i in *.eml;do mailparser -f « $i » -r -b >> emails.csv;done

Ce qui signifie : « pour chaque mail au format .eml, récupère les entêtes (-h) et le corps du message (-b) et enregistre tout dans un unique fichier appelé emails.csv ».

Une fois ce fichier créé, il est possible d’utiliser OpenRefine, pour nettoyer et enrichir ce fichier et d’obtenir cette feuille de calcul :

  • extraction des expéditeurs et destinataires
  • extraction du sujet, et de l’adresse IP d’envoi du message
  • identification et géocodage des adresses IP

Il est possible de voir immédiatement les aberrations, ou les détails qui ne collent pas dans un jeu de données de ce type, comme par exemple ces deux mails qui sortent du champ habituel des mails reçus ou adressés par le titulaire.

Le renommage des colonnes en Source et Target peut vous sembler curieux mais il est en fait très utile pour importer rapidement les données dans Gephi.
Au cas présent, le rendu des échanges sous forme de graphe est peu parlant (faible nombre de mails, et d’interlocuteurs…).

Graphe et OSINT avec Gephi

Mais avec un jeu de données plus important, notamment bien horodaté, il est possible de faire des choses très visuelles comme cette petite animation des échanges entre plusieurs boites mail, par Alexandre Léchenet.

Pour conclure…

Il s’agit de quelques suggestions et de techniques pour analyser un jeu de données de type emails et lui donner rapidement du sens, en comprendre les enjeux…

Souvenez-vous toutefois qu’avec ce type de leaks, il convient d’être particulièrement prudent : les pièces jointes des mails peuvent être contaminées et il conviendra de prendre toutes les précautions nécessaires avant de commencer cette exploration (Machine virtuelle, antivirus, etc…).

Sortez couvert-e-s!