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!!
Croiser des données sur OpenStreetMap avec Overpass-Turbo

Croiser des données sur OpenStreetMap avec Overpass-Turbo

Lorsque l’on cherche à géolocaliser une image, ou une vidéo sans grandes informations disponibles, il est parfois utile de se reposer sur les seuls éléments visibles à l’écran :

  • L’intersection d’un pont autoroutier avec une voie de chemin de fer.
  • Un angle de rue d’une ville allemande, avec une station du bus, une borne de taxi, une église et une pharmacie…
  • etc….

Dans ces cas précis, il pourrait être utile de pouvoir requêter une base cartographique sur le mode :

“Montre-moi sur la carte tous les lieux comprenant une église et une pharmacie dans un rayon de 50 mètres.”.

C’est là qu’un outil comme overpass-turbo.eu et une carte collaborative très détaillée prennent tout leur sens!


Overpass est une interface de requête pour Openstreetmap.

Il existe plusieurs tutoriels d’utilisation d’OverPass-Turbo sur le net, et le but de celui-ci n’est pas de tout montrer mais de vous présenter un exemple concret de ce qu’il est possible de lui faire faire!

A gauche de l’écran, on trouve la zone de requête. A droite se trouve la zone géographique où l’on souhaite requêter. La première des choses à faire est donc de définir notre zone de recherches, en zoomant au bon niveau de détails.

Cherchons par exemple toutes les églises situées dans un rayon de 50m d’une pharmacie à Rennes, en Bretagne. Tout d’abord, zoomons sur la ville.

overpass-turbo sur openfacto.fr-02-10T12-01-00.947Z

Voici le script qui va nous donner ces informations :

/*
This query will retrieve churches at max distance of 50m of a pharmacy in the area
*/
[out:json][timeout:25];

node({{bbox}})[amenity=pharmacy]->.pharmacy;
 (
   way(around.pharmacy:50)[amenity=place_of_worship];
   node(around.pharmacy:50)[amenity=place_of_worship];
 );
 (._;>;);
 out meta;

Détaillons un peu ce script :

Nous avons tout d’abord commenté un peu celui-ci pour le rendre plus lisible :

/*
This query will retrieve churches at max distance of 50m of a pharmacy in the area
*/

Ensuite nous avons explicité une sortie de type json (un format de données plat), et une limite de requête sur le serveur à 25s.

[out:json] [timeout:25];

La requête proprement dite vient ensuite :

node({{bbox}})[amenity=pharmacy]->.pharmacy;

{{bbox}} signifiant “dans la zone visible à droite”.

Par convention, une pharmacie est déclarée dans OpenStreetMap en tant que node (noeud), affublé d’une valeur spécifique amenity, correspondant à la chaîne de caractères ‘pharmacy’.

Nous allons donc chercher dans la zone à droite, tous les noeuds, dont la valeur amenity possède la chaîne « pharmacy.So we first look for every node in this area that as this specific value and insert them in a variable called ‘pharmacy’ :

->.pharmacy;

Puis nous cherchons une église.

(
   way(around.pharmacy:50)[amenity=place_of_worship];
   node(around.pharmacy:50)[amenity=place_of_worship];
 );

Une église a une valeur amenity avec la chaîne de caractères “place_of_worship”, mais peut également être un node ou une way (c’est plutôt rare…), dans OSM.

on précise ensuite la distance en mètres :

around.pharmacy:50

 (._;>;);
 out meta;

Les deux dernières lignes correspondent à l’intersection de ces critères.

Une fois le script entré, on appuie sur « execute »

Ce qui nous donne ce résultat :

OverPass-Turbo exemple sur OpenFacto.fr

Il ne s’agit là que d’un simple exemple de requête.

Et bien évidemment, cette requête sera d’autant plus efficace que votre zone de recherches sera détaillée. C’est pour cela qu’il est important d’aider le projet OpenStreetMap, mais aussi de participer et d’encourager la participation à ce projet.

Quelques ressources complémentaires sur ce langage de requêtes :

Ce tutoriel sur Github est aussi très pratique.

Amusez-vous bien !

P.S. : Plein de remerciements à Eric Pommereau pour son travail toujours inspirant.

P.P.S : ce billet est basé sur un billet initialement posté sur mon blog personnel.

Les relevés météorologiques en sources ouvertes

Les relevés météorologiques en sources ouvertes


Lors de vos recherches en sources ouvertes, il est parfois nécessaire de disposer de relevés météorologiques précis d’une zone géographique et une période donnée.
Ainsi, si vous cherchez à identifier la chrono-localisation d’une image ou d’une vidéo présentant de la neige, il est important de pouvoir vérifier vos déductions, à l’aide d’éléments externes.

Bien sûr, il existe une liste importante de site météorologiques en français ou en anglais, capables de vous renseigner.
On citera par exemple Météo-France, Weather Underground…

Malheureusement, ces sites ont une mémoire relativement récente et disposent de statistiques assez lacunaires. Par ailleurs, certaines zones géographiques assez lointaines sont peu référencées, notamment si l’on cherche un historique ancien.

(suite…)