Firefox (III) – Les outils de développement – Cas pratique – OSINT sur Zello

Firefox (III) – Les outils de développement – Cas pratique – OSINT sur Zello

Nous avons vu dans la première de cette série d’articles sur les outils de développement web de Firefox (« dev tools » pour aller plus vite), comment ils pouvaient être utilisés de manière fine pour collecter de l’information en source ouvertes.
Nous vous proposons aujourd’hui un cas pratique complet d’utilisation de ces outils sur le site internet Zello.com.

Qu’est-ce que Zello?

Zello est une application pour téléphone mobile ou tablette Android et iOS transformant ces derniers en Talkie-Walkie : un gros bouton push-to-talk, un canal public ou privé que vous créez à volonté… Vous voilà équipé de petites radios mobiles à portée mondiale, de très bonne qualité audio, très utiles lors de vos déplacements en famille, par exemple. Les communications, audio ou texte, transitent via le réseau internet.

Cette facilité d’emploi en a fait un réseau également très utilisé lors des conflits par les populations civiles, les groupes armés (au Dombass par exemple), ou les services d’urgences (Casques blancs en Syrie…).

Les chaînes (channel) publiques sont susceptibles d’héberger des messages audio librement accessibles au public et donc de fournir des informations de contexte assez précieuses pour la recherche en sources ouvertes. Mais travailler en OSINT sur le site de Zello n’est pas une sinécure.
Voilà pourquoi les dev tools de Firefox vont nous aider.

Chercher de l’information sur Zello.

Pour cet exemple, nous nous intéressons à la région d’Idleb (Syrie), qui fait l’objet d’une intense campagne de bombardements par le régime syrien et les forces russes depuis plusieurs mois.

L’idée de départ, notre postulat, est que l’application Zello est peut-être utilisée par les secouristes, la population, ou les combattants et que peut-être, nous pouvons récupérer de l’information importante via des bribes de conversation audio.

Zello ne dispose pas d’un moteur de recherches très puissant et qui plus est, ce dernier est plutôt bien caché!

Nous allons donc utiliser un GoogleDork, une requête un peu spécifique, pour rechercher des chaînes en lien avec le secteur d’Idleb.


Les utilisateurs locaux utilisent l’arabe, il nous faut donc contextualiser la recherche en utilisant la graphie arabe de la ville.


إدلب site:zello.com

La recherche renvoie environ 150 résultats mais pour un aspect pratique et concret, nous nous intéressons aux chaînes récentes (moins de trois ans) et comportant si possible un nombre important d’abonnés (subscribers).

La chaîne مرصد ابو عرب سراقب (Observatoire Abu Arab Saraqeb) est particulièrement intéressante :

Créée il y a trois mois environ, elle regroupe déjà plus de 270.000 utilisateurs. Une traduction sommaire de la biographie du profil nous indique qu’il s’agit d’un poste d’observation militaire, destiné à la surveillance du trafic aérien. Le groupe dispose de trois administrateurs, et seize modérateurs, il est donc animé et vivant. Il s’agit d’un système d’alerte équivalent à Sentry Syria, à destination des populations civiles.
A ce stade, il serait déjà possible de s’abonner à cette chaîne sur l’application mobile, en respectant le cas échéant quelques précautions élémentaires (profil, burner phone, etc…).

Effectuons donc un archivage de cette chaîne susceptible de disparaître, sur Archive.Today et sur Archive.org.

Une question se pose : cette chaîne dispose-t-elle de messages publics accessibles sur son site?

L’URL de recherche sur Zello n’est pas facilement accessible.
Pour obtenir les derniers messages postés sur l’ensemble des canaux il faut utiliser cet outil :

https://zello.com/shared/#latest/1//////undefined

Notez la présence peu commune de multiples slashs sur cette URL…
Sur cette page, il est possible de rechercher par channel, par profil, par utilisateur ayant partagé un message. Il est possible de filtrer par langue.

Effectuons un recherche sur la chaîne مرصد ابو عرب سراقب.
Elle retourne une réponse paginées, par tranche de 10 messages, « plus de 1.000 enregistrements » selon le site. On le voit là aussi, la réponse du site est plutôt floue.

Lors de l’analyse d’un site, l’étude d’une URL est aussi très importante.

Cliquez sur le bouton Next. L’URL devient alors :

https://zello.com/shared/#latest/2/%D9%85%D8%B1%D8%B5%D8%AF%20%D8%A7%D8%A8%D9%88%20%D8%B9%D8%B1%D8%A8%20%D8%B3%D8%B1%D8%A7%D9%82%D8%A8/////undefined

Juste après « #latest/« , le chiffre 1 a été remplacé par le chiffre 2 : la pagination est donc accessible simplement en incrémentant cette valeur de 1… Intéressant!

Pour chaque message, les informations disponibles a priori sont les suivantes : nom de l’utilisateur à l’initiative du message, durée du message, chaîne, heure approximative et nombre de lecture dudit message. Pour l’instant, c’est assez vague.
Lorsque l’on clique sur un des messages, apparaît alors le lecteur suivant :

S’il est possible de lire le son, cette première séquence ne permet pas d’aller beaucoup loin dans la recherche, alors même que l’on dispose d’une banque audio visiblement assez conséquente. Plutôt frustrant donc!

Les dev tools à la rescousse!

Ouvrons les dev tools de Firefox, et notamment l’outil Réseau, (CTRL+MAJ+E), sur la page de recherches de la chaîne et réactualisons la page.

En filtrant les requêtes réseau, on constate que le site est assez surchargé de liens vers les réseaux sociaux Facebook, Google, Twitter, Linkedin, etc…
Autant le dire tout de suite, Zello est très gourmand en matière de données personnelles… Heureusement, le Plugin uBlock bloque l’essentiel de ces requêtes…

A ce stade, filtrons ces requêtes en ne gardant que celles au format XHR, prenons la première URL et observons son contenu dans l’onglet « réponse » à droite.

Bingo!
Nous constatons que les dix premiers résultats sont envoyés grâce à un fichier Json contenant l’ensemble des informations (metadonnées), des messages.
Comme dans le premier volet de cette série d’articles sur Firefox, nous cliquons sur cette URL en tant que cURL avec le bouton droit et exportons son contenu dans un terminal, au format Json (le > zello.json à la fin).

curl 'https://zello.com/shared/-/latest/1/%D9%85%D8%B1%D8%B5%D8%AF%20%D8%A7%D8%A8%D9%88%20%D8%B9%D8%B1%D8%A8%20%D8%B3%D8%B1%D8%A7%D9%82%D8%A8/////undefined' -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 'Content-Type: application/x-www-form-urlencoded' -H 'X-Requested-With: XMLHttpRequest' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: https://zello.com/shared/' -H 'Cookie: __cfduid=de2c760986dd4346c968fb357057eb0ef1565680803; PHPSESSID=ea80d5b5aab44ac731725ea949d93851' -H 'Cache-Control: max-age=0' -H 'TE: Trailers' --data 'nonce=9qyne6zvzcv02xmbbl95q5xgjg63p412n491shpfgfs24zr64a5yahv5v6u7f4wl' > zello.json

Il est possible de transformer facilement ce fichier en un fichier tabulaire (csv ou xls) avec un outil tel qu’OpenRefine. Pour l’exemple ci-dessous, certaines colonnes inutiles ou redondantes ont été retirées.

zello-json.csv

1565817526Q7yjr081KxhQabo asad assafhttps://s3.amazonaws.com/zello.sharedmessages/Q7yjr081KxhQ08/14/2019 16:18:46 Android 4.65abo asad assafar15658174841565817527
1565793585UxmZEqic5jMgshhehdhdhdhhttps://s3.amazonaws.com/zello.sharedmessages/UxmZEqic5jMg08/14/2019 09:39:451Android 4.65shhehdhdhdhar15657935431565793585
15657935314sDN5fB4RK3Snor nortvhttps://s3.amazonaws.com/zello.sharedmessages/4sDN5fB4RK3S08/14/2019 09:38:51Android 4.64nor nortvar15657934381565793532
1565793477EdqnvlAwFY5qzzddrreewwhttps://s3.amazonaws.com/zello.sharedmessages/EdqnvlAwFY5q08/14/2019 09:37:57Android 4.65zzddrreewwar15657933441565793477
1565793436SD9FMXQID33iahmad.tec200https://s3.amazonaws.com/zello.sharedmessages/SD9FMXQID33i08/14/2019 09:37:16Android 4.69ahmad.tec200en15657934121565793437
1565779734xoanwLa4F36Odgdytuhttps://s3.amazonaws.com/zello.sharedmessages/xoanwLa4F36O08/14/2019 05:48:548Android 4.65dgdytuar15657780851565779734
1565727084g2she5inRHo2ytrewqjhgdaahttps://s3.amazonaws.com/zello.sharedmessages/g2she5inRHo208/13/2019 15:11:24Android 4.67ytrewqjhgdaaar15657268611565727084
1565698368BI5F4jD63Ockahmdalomlahttps://s3.amazonaws.com/zello.sharedmessages/BI5F4jD63Ock08/13/2019 07:12:481Android 4.56ahmdalomlaar15656982971565698368
1565692805DePxegwqPJbOhasan.basid.jdihttps://s3.amazonaws.com/zello.sharedmessages/DePxegwqPJbO08/13/2019 05:40:05Android 4.67hasan.basid.jdiar15656926851565692805
15656399517wj3tUEXJga2xjssdjjdddhttps://s3.amazonaws.com/zello.sharedmessages/7wj3tUEXJga208/12/2019 14:59:112Android 4.67xjssdjjdddar15656392361565639952

Nous constatons qu’en réalité, les données librement disponibles sur l’application Zello sont beaucoup plus verbeuses que ce qu’il était possible d’imaginer au départ :
– L’horodatage de l’envoi est complet et lisible, la version du logiciel employé également…
– Mais surtout, ce fichier donne l’adresse directe de téléchargement du fichier audio, sur un serveur Amazon S3!

Nous disposons donc désormais d’une liste de fichiers téléchargeables, certes avec des noms apocryphes (ex : Q7yjr081KxhQ…), mais grâce au fichier csv obtenu via les Dev Tools de Firefox, nous disposons également d’une table de correspondance indiquant date, heure de la mise en ligne, ainsi que l’identifiant de l’auteur….

La suite?

L’objet de cet article est essentiellement de vous montrer, à l’aide d’un cas concret, comment les Outils de Développement Web du navigateur Firefox peuvent vous aider dans vos recherches en Sources Ouvertes.

Vous remarquerez que nous n’avons utilisé aucun outil miraculeux hormis Firefox mais qu’en suivant une démarche méthodique simple (Que cherche-t’on?, requête google adaptée, première analyse de page, archivage, analyse fine complémentaire via les dev tools….), nous avons pu remonter des informations essentielles à notre recherche,

Mais en plus de la collecte d’informations, ces outils ouvrent de nouvelles perspectives pour l’automatisation de cette collecte, dont voici quelques pistes :

  • Il paraît impossible a priori de déterminer facilement le nombre total de messages disponibles (« plus de mille » nous indique le site…). Toutefois, en remplaçant la valeur numérique dans l’URL par 100, 101 (etc…)


https://zello.com/shared/#latest/2/%D9%85%D8%B1%D8%B5%D8%AF%20%D8%A7%D8%A8%D9%88%20%D8%B9%D8%B1%D8%A8%20%D8%B3%D8%B1%D8%A7%D9%82%D8%A8/////undefined

et en observant le contenu affiché, il est possible de constater que le premier message a été posté il y a cinq mois (valeur numérique 101) :

  • Le corollaire de cette constatation, est qu’il est sans doute possible (spoiler : oui c’est possible!) de créer un script informatique simple (en Python, en Bash, en DOS, en R…), sous forme d’une boucle allant de 1 (première page), à 101 (dernière page), capable de récupérer en quelques minutes, l’intégralité des messages (1.010 à la date de rédaction de cet article) de cette chaîne Zello!
  • Enfin, disposer d’un gros millier d’adresses Amazon S3 permet également d’envisager de créer une boucle identique, capable d’aspirer facilement l’intégralité de ces données pour analyse et archivage….
  • Ces données peuvent être analysées de plusieurs manières : contenu des conversations (type d’aéronefs, bilan humains, géolocalisation des impacts….), statistiques sur la fréquence des observations qui donnent une idée de l’intensité des bombardements, et peuvent aider les enquêtes (citoyennes, journalistiques, judiciaires…) en livrant des éléments de contexte difficiles à recueillir d’une autre manière…

Ces pistes feront l’objet de petits articles supplémentaires ici-même dans quelques temps! 🙂

Firefox (III) – Les outils de développement – Cas pratique – OSINT sur Zello

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…


OpenGraph et récupération de contenu effacé…

OpenGraph et récupération de contenu effacé…

[Article édité le 13 mai 2019]
Il y a quelques jours, Hackers Republic signalait sur Twitter la possibilité de récupérer du contenu effacé sur les réseaux sociaux (des images flickr au cas d’espèce), grâce aux balises SEO.

@Tris_HR vous explique comment…

Pour améliorer l’engagement, le référencement et le partage de contenus sur les réseaux sociaux, les développeurs et spécialistes du Search Engine Optimization (SEO) sont fortement incités à paramétrer leurs contenus. Lorsque l’on crée un site internet, en plus des titres courts, des descriptions et des images, on enrichit l’ensemble avec des données supplémentaires, destinées aux moteurs de recherche ainsi qu’aux réseaux sociaux.

La plupart des Content Management System (CMS) proposent des modules complémentaires pour enrichir les pages. Retenons-en trois :

OpenGraph sert principalement à baliser son contenu pour Facebook, l’objectif étant d’avoir une jolie présentation. TwitterCards est utilisé par Twitter, mais le réseau social Mastodon a opté pour un balisage similaire des contenus. Enfin, Schema.org est plus particulièrement destiné aux moteurs de recherche.

Un exemple de balise sémantique SEO Openfacto Osint
Un exemple de balise sémantique

Même si OpenGraph et TwitterCards servent à favoriser le partage, ils ont les mêmes caractéristiques que les moteurs de recherche.
En effet, lorsqu’un contenu est supprimé d’un site Web, s’il a été indexé avant sa suppression, il est possible de récupérer une version en cache, directement dans les moteurs de recherche ou grâce aux différentes plateformes d’archives.

Il subsistait une difficulté : que faire si le contenu effacé n’avait pas été archivé ou indexé ?

En dehors de cas très spécifiques, les contenus mis en ligne ont vocation à être partagés. On peut donc tester les liens sur les réseaux sociaux. Le cas d’espèce concernait des photos, mises en ligne sur Flickr. Le propriétaire avait effacé les photos et supprimé son compte. Il a pourtant été possible de récupérer certaines photos.

La photo récupérée : cache_og.png (anonymisée…)

Pourquoi ? L’auteur des photos les avait partagées sur Facebook. Facebook a stocké les données OpenGraph, permettant ainsi d’afficher les photos. Les métadonnées utilisées pour le partage sont donc toujours disponibles et l’auteur des photos n’a pas indiqué à Facebook que les liens étaient invalides.

Après insertion des liens dans une conversation sur Messenger, les photos qui avaient déjà été partagées, se sont affichées. Il ne restait plus qu’à afficher la console de Chrome (clic droit> inspecter l’élément), cliquer sur l’onglet « Sources » pour récupérer rapidement les photos.

Évidemment, en cas de contenu supprimé, s’il a été partagé sur Facebook, les seules informations qui pourront être récupérées seront celles d’OpenGraph. Du côté de Twitter, le réseau social garde aussi les informations contenues dans les TwitterCards.


Une Twitter Card après suppression du contenu

D’après leur documentation, si un lien est invalide, elles sont supprimées au bout de 7 jours. https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started.html

Edité le 13 mai 2019 :
En théorie, Twitter efface les liens et les données au bout de 7 jours.
En réalité : non. J’ai repris le lien que j’avais posté le 24/04/2019 et la capture d’écran montre que si l’image a disparu, ce n’est pas le cas du texte. J’ai testé avec mon compte Twitter pro le même lien que je n’avais jamais posté depuis ce compte, depuis un autre navigateur. Même résultat.

Quand j’inspecte l’élément, je récupère bien le texte ainsi le lien raccourci via Twitter.

Un tour sur CheckShortURL me montre le lien complet :
http://checkshorturl.com/expand.php?u=https://t.co/TI75mSO9rB

En dehors de Facebook, d’autres réseaux sociaux et messageries utilisent OpenGraph pour baliser les contenus, dont les messageries Telegram et WhatsApp et comme Facebook, il faut forcer la désindexation.

Un contenu, en particulier une photo, qui a été hébergé ailleurs que sur Facebook, peut donc être partiellement ou totalement récupéré grâce au balisage sémantique, si ce contenu a été partagé sur un réseau social utilisant OpenGraph.

Néanmoins, il n’est pas possible de récupérer l’intégralité du balisage en cas de contenu effacé. Dans le cas présenté ici, seule la photo a pu être récupérée, mais pas les autres balises telles que l’heure de mise en ligne, l’auteur, la description éventuelle, etc.

Code-source d’une photo récupérée 
Romance express sur Linkedin

Romance express sur Linkedin

Quand le virus de l’OSINT vous gagne, des réflexes assez drôles se mettent en place, comme la nécessité impérieuse de vérifier qui sont donc ces personnes inconnues qui vous écrivent sur LinkedIn. Cela se corse quand on a passé la soirée au lancement d’un rapport auquel on a participé et qu’effectivement, on aurait potentiellement pu parler à une certaine Agnès….

Évidemment avant de se précipiter à répondre favorablement à cette innocente requête, il est préférable de cliquer sur son profil pour voir qu’il y a un truc pas net : ici, pas de photo (pourquoi pas, moi je n’en ai pas non plus…) et elle semble avoir laissé son doigt appuyé un peu trop longtemps sur le « i » de « serving ». Détail détail…

En recherchant son nom sur internet, on ne trouve pas grand chose à part des occurrences bizarres en espagnol : Agnes est un prénom en vogue en Espagne, et « precio » signifiant « prix« , Google a tendance à sur-représenter les boutiques en ligne.

La recherche sur Pipl ne vaut guère mieux….

Son email apparaît toutefois sur des sites de rencontre et plusieurs photos d’une même personne y sont associées. Mais l’email est aussi signalé comme arnaque. Alors qu’elle se présente sous le nom de Agnes Precio, on remarque vite qu’un autre nom y est également associé : Sergeant Angela Pace.

Angela Pace est en fait une vraie personne employée de l’Armée américaine dont on retrouve facilement les profils [ouverts] sur les réseaux sociaux. On peut voir qu’elle est en charge du recrutement des nouveaux talents de l’Armée américaine et fait la promotion de l’institution en ligne.

En creusant un peu, on voit qu’elle appartient au U.S. Army Recruiting Command et a été promue en Novembre 2017 au grade de Sergeant Major – équivalent de Sous-Officier dans l’Armée française. Ses photos ont donc été pillées et utilisées pour créer des faux profils sur internet sous différentes identités.

Depuis quelques années le personnel de l’Armée Américaine présent sur les réseaux sociaux est pris pour cible pour la création d’arnaques financières sur les sites de rencontres : les Romance Soldiers Scam…

Moralité : Verrouillez vos réseaux sociaux….

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!

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

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

Un leak récent a été mise en ligne le 22 Mars 2019 sur un forum de hacking Cyber Guerilla, publiant ainsi les emails de Vitaly Kovalchuk, directeur de campagne du Président Poroshenko en Ukraine, en lice pour une réélection, à huit jours du scrutin.

Vitaly Kovalchuk

Le groupe responsable de la publication des leaks est liée à la publication des leaks sur l’organisation Integrity Initiative, spécialisée dans la lutte contre la désinformation. Cette opération de hacking a été présentée comme une opération du gouvernement russe par les media britanniques. L’attribution de cette leak Ukrainienne, exercice toujours périlleux, est en effet une donnée importante puisque la fuite de ces emails intervient à un moment politique clef du pays dans un contexte où l’utilisation des attaques cyber a été signalée plusieurs fois pendant la campagne électorale.

Capture d’écran du site de publication de la leak

Avec seulement une centaine d’emails datant du 6 au 21 Mars 2019, CyberGuerilla illustre la valeur de cette leak en mettant l’accent sur des échanges qui démontreraient l’utilisation de soutiens politiques occidentaux en faveur de la navigation libre ukrainienne de la Mer d’Azov dont l’accès est actuellement bloqué par la Russie comme argument politique de campagne pour la ré-élection du Président Ukrainien.

En réalité, il s’agit en fait d’un seul email datant du 20 Mars 2019.

Traduction en commencant par le bas de l’email :

Vitaliy Kovalchuk – Pavel Anatolyevich, bonjour! Vraiment hâte de savoir quels ont été les résultats de la prise de contact avec Maas [Heiko Maas Ministre des Affaires Etrangères d’Allemagne]. Nous y sommes très attachés.

Pavel Anatolyevich – Bonjour, leur position n’a pas changé. Maas nous parle franchement au sujet de la mer mais si je comprends bien, ils ne veulent tout simplement pas risque le pipeline Nord Stream et aller au conflit ouvert. Je pense que cette question reste en suspens jusqu’à la fin des élections, ils sont très prudents.

VK – Des sanctions sont nécessaires avant. Ou, au moins, que l’Allemagne, se soit prononcée [publiquement]. Nous devons construire sur quelque chose. Nous devrions peut-être demander l’aide de nos amis.

PA – C’est exclu. Il y aurait l’effet inverse. Maas était extrêmement agacé par
la pression des états après la dernière action. Maintenant, il a évidemment fait comprendre qu’il n’y aura pas de décisions embarrassantes de leur part.

Pavel Anatolyevich est présenté par les hackers comme un fonctionnaire important dans l’aparatus d’Etat, probablement un proche ou le ministre des Affaires Etrangères lui-même [Pavel Anatolyevich Klimkin]. Trois éléments dérangent: l’absence de nom de famille mentionné dans l’email pour identifier la personne et son rôle, la langue russe (rappelons que l’ukrainien est la langue officielle du pays, étonnant que tout soit en russe). Enfin, il est difficile d’attribuer réellement l’adresse email à Pavel Anatolyevich – 380975551318@inet.ua – qui n’apparaît nulle part.

D’autres éléments étonnent dans le dossier. Trois emails sont écrits en anglais et sont adressés ou viennent de personnalités occidentales: Carl Bildt – ancien Premier Ministre Suédois – (expéditeur), George Kent du Département d’Etat Américain (expéditeur) et Graham Atkins de la société Atkins Thomsons (destinataire). Ces individus utilisent des adresses personnelles (gmx, mail.com et tutamail.com) dans le cadre de communication très officielle, assurant le soutien de la Suède et des USA au Président et à la démocratie ukrainienne ou faisant référence à un procès judiciaire (qui a bien eu lieu). Non seulement, l’utilisation de ces adresses mais aussi la structure de certaines tournures de phrase semblent peu crédibles.

Email de Carl Bildt utilisant gmx.com et la mention de « the entire democracy world » pour le moins étrange
Email de George Kent en charge du bureau Eurasie au Département d’Etat Américain
Un partner de la société Atkins Thomson avec une adresse tutamail….

Les adresses emails de Carl Bildt et George Kent peuvent être analysées rapidement:

  1. L’adresses IP de l’email de Carl Bildt est localisé en Suède. Pas étonnant car il est suédois. Sauf que le 15 Mars dans l’après midi, il est à Londres et s’envolera le soir pour le Brésil (seule l’hypothèse du VPN semble tenir…).

2. L’adresse IP de l’email de George Kent est localisée plus bizarrement en Espagne (service VPN du Département d’Etat américain?) et son adresse email backup pour le service mail.com est une adresse en givmail.com du service temporaire d’email de GetNada. C est étrange.

L’ensemble de ce faisceau d’indices nous permet de nous questionner à juste titre: s’agit-il de vrais emails? Est-ce que Carl Bildt et George Kent sont bien les auteurs des emails assurant le soutien de leur gouvernement respectif à la démocratie ukrainienne? Est-ce une tentative de manipulation orchestrée de l’information afin de distraire à quelques jours d’un scrutin électora?. Cette tactique de distraction s’inscrirait alors dans la stratégie des 4 D employée régulièrement dans les campagnes de désinformation (Dismiss, Distract, Distort, Dismay comme le dit Ben Nimmo.).

Travailler avec les leaks dans la recherche en sources ouvertes

Rencontre entre l’open-source et la communauté cyber, les leaks ou data breach (fuites de données) font partie intégrantes des sources disponibles en sources ouvertes. Consacrées initialement par Wikileaks avec la publication en ligne des câbles diplomatiques des ambassades américaines autour du monde et des Syrian Files, ces leaks permettent d’avoir accès à du matériel de première main dans la recherche d’un sujet particulier. Néanmoins, elles amènent à se poser certaines considérations éthiques puisqu’il s’agit de matériel volé et obtenu au travers d’opération de hacking par divers groupes.

Si on s’intéressera beaucoup aux emails, documents, photos de première main qui vont permettre d’appuyer un élément de recherche avec une preuve solide et originelle, il ne sera pas inutile non plus de s’intéresser aux identifiants et mot de passe collectés. Il ne s’agit surtout pas de chercher à utiliser ces informations pour se logguer à un compte (ce serait illégal!).
Mais ces informations peuvent permettre de retrouver d’autres alias, d’autres boites mails appartenant à de individus.

Alors quoi faire face à ces leaks?

Dans un premier temps, il faut être capable d’y accéder et de les ouvrir en toute sécurité car ces leaks peuvent être piégés. Certains nécessitent d’aller les chercher sur le réseau ToR, ce qui demande de configurer son ordinateur à cet effet [un bon guide ici]. Il est toujours plus prévoyant d’ouvrir les fichiers dans une machine virtuelle pour les examiner [un guide ici] – Oracle propose un logiciel gratuit à cet effet [ici].

Ensuite il semble nécessaire d’identifier le groupe derrière et de comprendre leurs motivations. Les attributions sont parfois très faciles mais parfois surgissent de groupes anonymes qu’il est difficile à appréhender. Un excellent article et thread a été partagé et écrit par The Grugq concernant l’utilisation par les services de renseignement russes d’avatars hacktivistes pour pousser des informations servant un agenda précis.

Finalement la dernière étape, l’une des plus dures quand on doit traiter des giga-octets de données, c’est de vérifier l’authenticité des documents. Il s’agit donc de maintenir un esprit critique à tout moment face à ce que l’on voit et lit.

Une plateforme qui regroupe toutes les leaks

Distributed Denial of Secrets [lien vers un site utilisant ToR] a été lancé en décembre 2018 comme un collectif pro-transparence dont le but est de faire circuler l’information. Le collectif suit deux critères pour publication: est- ce intéressant/important pour le public et peut-on déterminer aux premiers abords la véracité du contenu?