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…


Un peu d’Hist-OSINT…

Un peu d’Hist-OSINT…

Sur le réseau Twitter, l’ami Eric Pommereau sollicitait ces jours-ci un coup de main pour localiser deux scènes de la vie familiale tirées de films au format 9.5, numérisés par ses soins.

La résolution des images est assez faible, compte tenu de l’âge des films et du matériel utilisé à l’époque pour filmer. Il est donc difficile en l’état de pouvoir localiser cette scène. Eric précisait alors que l’image du port était disponible en ligne sur le site Vimeo.

Comment résoudre l’énigme du port?

Nous allons détailler ci-après le processus en différentes étapes, et voir avec quels outils, libres, gratuits et compatibles avec tous les systèmes d’exploitation (toujours!), il est possible d’arriver à un résultat tangible.

1- Collecter et archiver la source :

Dans un premier temps, j’ai donc récupéré le film au format MP4 pour l’étudier en détail, en utilisant JDownloader, permettant de télécharger à peu près n’importe quel type de fichier multimédia. J’ai essayé deux plugins Firefox avant cela, mais le format généré par Vimeo était bourré d’erreurs.

Pour les photos, il est utile de rappeler ici que pour récupérer les photos originales de Twitter, sans compression et dans la meilleure résolution, il convient d’ajouter « :large » à la fin de son URL :

https://pbs.twimg.com/media/D6B1OavXsAESdF6.jpg
https://pbs.twimg.com/media/D6B1OavXsAESdF6.jpg:large

2- Analyse visuelle

Une fois récupéré, il est possible de l’étudier attentivement pour remarquer quelques détails :
– Le bateau à 0’40 est immatriculé à Auray (Ay), celui à 1’50 est du Guilvinec (GV). A ce stade, on peut confirmer l’hypothèse initiale d’Eric qui était la Bretagne sud.


– A 2’06, on peut voir le Guedel qui faisait Quiberon Belle-ile en mer, et plus étonnant, à 2’40 l’Insula Oya, qui faisait les trajets vers l’île d’Yeu depuis Fromentine.

Dès lors, on peut déjà indiquer que Port-Maria à Quiberon représente une piste sérieuse : port d’attache du Guédel, il est situé dans une ville balnéaire développée et assez cossue (bâtiments en arrière-plan). Les ports de Belle-île-en mer (Sauzon et Le Palais) sont eux beaucoup trop étroit pour correspondre.

A l’aide du logiciel GIMP et de son greffon GMic, nous pouvons éclaircir et affiner légèrement la netteté d’une des captures d’écran réalisées avec VLC, le lecteur multimedia.

Le Guédel, amarré à son quai (image retouchée)

Une source précieuse d’information, lorsque l’on recherche des images anciennes, est bien évidemment les sites d’achat/vente/collection de cartes postales anciennes.
Pour le Morbihan, il est possible notamment de découvrir à l’aide de Google ou de Qwant, ce site assez complet sur Quiberon où l’on découvre ces deux cartes postales.

3 – Aller plus loin

Encore une fois, le format 9.5 ici utilisé est assez resserré, et d’une résolution très faible. Une technique très utile en matière de GEOINT pour donner du champ et de l’espace est de confectionner des panoramas.
Pour ce faire, nous allons utiliser deux fonctions de VLC : la capture d’écran, et la lecture frame-by-frame, c’est à dire image par image. Pour cela, on met le film en pause et on appuie sur la lettre « e » pour faire défiler le film. On gardera alors plus facilement les images nettes.
L’idée est de conserver 4/5 images assez similaires, idéalement dans le même plan, comme dans cet exemple.

A l’aide du logiciel Hugin, nous allons assembler ces images automatiquement et obtenir le panorama suivant :

Port-Maria à Quiberon (56)

Le film d’Eric présente plusieurs scènes qu’il est ainsi possible d’assembler:

On notera que la scène finale est caractéristique du relief de Belle-île-en-Mer et plus particulièrement du site de la Grotte de l’Apothicairerie, dont on peut trouver quelques clichés sur Flickr, par exemple. Il faudrait sans doute compléter les recherches pour identifier le lieu précis de prise de vue.

4- En résumé

On le voit, avec quelques outils libres et gratuits (lecture et retouche d’image, création de panorama….), un peu de méthode et de technique, et en utilisant un fond documentaire adéquat, qui servira d’imagerie de référence, il est possible d’identifier un lieu sur la base de quelques images.

Comment résoudre l’énigme des bagadous?

Pour les bagadous, c’est a priori un peu plus difficile : on ne dispose pas du film d’origine.
Il faut donc travailler sur l’image elle-même. On repère ainsi une longue avenue qui évoque la sortie de la ville, une devanture de magasin ou d’un restaurant, quatre piliers de clôture aux formes assez caractéristiques, une dans le décrochement de l’immeuble assez haut, sur la façade, une inscription « Hôtel de la gare Bar- Restaurant« .

En essayant d’améliorer l’image de l’inscription sur le mur, on peut imaginer que l’inscription pourrait se terminer par ON, et qu’il pourrait s’agir de Quiberon. Il faut convenir qu’à ce stade, c’est une maigre piste, mais il faut bien un point de départ….

A l’aide de Google images, nous allons donc chercher s’il existe des cartes postales du quartier de la gare de Quiberon, qui pourraient confirmer ce lieu en effectuant deux recherches :

"place de la gare" quiberon

"hotel de la gare" quiberon

Deux images sautent immédiatement aux yeux :

Ce lieu est situé à proximité de la gare à Quiberon, et même s’il a quelque peu changé de nos jours, on reconnaît aisément les piliers de clôtures dont deux exemplaires sont toujours présents, et la façade de l’immeuble à gauche. L’immeuble a quant à lui disparu, et a été remplacé par un bâtiment plus bas, disposant d’une emprise sur ce qui était à l’époque la terrasse.

THAT’S A MATCH!

Épilogue

Vous aimez l’OSINT? rejoignez-nous au sein de d’OpenFacto et inscrivez-vous à nos ateliers! 🙂

Edit : 09/05/2019 14:53 : J’ajoute ce lien fourni par @il_kanguru sur Twitter :

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!

Compte-Rendu du 1er atelier OSINT OpenFacto à Paris (23-24 février 2019)

Compte-Rendu du 1er atelier OSINT OpenFacto à Paris (23-24 février 2019)

Le premier atelier Recherches en Sources Ouvertes d’OpenFacto s’est déroulé les 23 et 24 février 2019 à Paris dans le 19e arrondissement.Il s’agissait pour nous de tester grandeur nature ce concept de formation sur deux jours sur un public de quelques happy-few d’horizons variés.

13 (oui treize!) stagiaires (journalistes indépendants et de divers média nationaux français ou européens, mais aussi étudiant, activistes, enquêteurs), ont pu se former ou approfondir leurs connaissances en recherches avancées, en géolocalisation et analyse de sources internet et réseaux sociaux, sous la houlette d’Hervé.

1er atelier OSINT OpenFacto à Paris en février 2019

Cette première session, très orienté « pratique » s’est notamment appuyée sur de nombreux exemples et cas concrets, permettant de découvrir et manipuler un grand nombre d’outils pour la plupart gratuits et/ou open-source. Si, certains utilisateurs étaient d’un niveau très avancés, d’autres découvraient les possibilités infinies de l’OSINT.

1er atelier OSINT OpenFacto à Paris en février 2019

Un des éléments clefs de cette formation était le développement de la méthodologie d’enquête, basée sur différentes approches séquentielles : observation, puis technique et enfin plus avancée. Mais nous avons également beaucoup parlé du travail de groupe, et de l’importance de la collaboration, de l’utilisation des compétences de chacun.

Parmi les outils utilisés durant ces deux jours, et outre les traditionnels Firefox et GoogleEarth, les participants ont pu se familiariser avec Tor Browser, twint (un scraper python pour Twitter), et quelques autres outils issus de github.

D’autres ateliers sont prévus dans les mois qui viennent et seront bientôt annoncés ici même!

N’hésitez pas à nous contacter pour de plus amples renseignements!

Oui! nous avions des stickers!!