Théorie des graphes et social engineering
Auteur : Anonyme
Zine : Rafale #21
## INTRO
Généralement, quand on parle de réseaux sociaux, on pense tout de suite à
Facebook, Twitter et autres services. Mais ce n'est pas la définition exacte. Un
réseau social au sens large est en fait une modélisation d'un ensemble de
personnes sous forme de nœuds (les gens) et d'arêtes (leurs relations entre
eux).
Exemple, soient trois personnes A, B et C. Si A connaît B, B connaît C et C
connaît A, alors on a le graphe:
A - B
\ /
C
À noter que la relation "connaître" est généralement bi-directionnelle: si A
connaît B alors B connaît A. On dit alors que le graphe est *non-orienté*. Un
bon exemple pratique de graphe non-orienté est celui de Facebook, où la relation
"être ami" est bi-directionnelle.
Ce n'est pas toujours le cas, lorsque l'on choisit une autre relation entre les
personnes que simplement "connaître". Un exemple trivial est celui de twitter,
où les gens *suivent* d'autres gens sans que cela ne soit nécessairement
réciproque.
On n'imagine pas à quel point l'exploration de ces-dits réseaux sociaux et leur
cartographie peut apporter comme information utile. Bien plus en réalité que la
simple information de "A connaît B". Cet article a pour but de sensibiliser le
lecteur sur ce point-là, d'autant que je me doute que certains d'entre vous ont
de bonnes raisons de s'intéresser aux techniques des RG pour faire tomber les
têtes des réseaux.
Cependant cet article reste très superficiel. Si le sujet vous intéresse
vraiment vous pouvez commencer à creuser avec l'article wikipedia sur le sujet
qui est assez complet:
https://fr.wikipedia.org/wiki/Analyse_des_r%C3%A9seaux_sociaux
Et qui fournit des liens pour bien appronfondir le truc.
## I : LES DONNÉES
Il va de soi que déterminer les relations entre personnes membres d'un réseau
social d'intérêt nécessite une grande quantité d'information. Il faut non
seulement les données sur chaque nœud individuel mais aussi les données sur les
relations entre ces personnes. Or, pour un réseau comptant n personnes, le
nombre de relations possibles est proportionnel à n². Autant dire que ça fait
beaucoup d'information à traiter.
Les agences de renseignements, que l'on commence à bien connaître, se focalisent
généralement sur une cible (un terroriste ou toute personne suspecte) et
explorent ses relations. La NSA irait jusqu'aux relations au 3ème degré, d'après
les révélations de Snowden, c'est-à-dire qu'elle va incorporer dans ses bases de
données les amis des amis des amis des terroristes.
Un peu violent, surtout quand on connaît le "théorème du petit monde", qui
affirme qu'on peut trouver des connexions entre n'importe qui sur Terre en moins
de 8 nœuds. En gros, les amis des amis des amis des amis des amis des amis des
amis de vos amis sont juste tous les humains sur Terre...
Comment se procurer une telle masse de données ? Soit vous vous appelez Mark
Zuckerberg et les gens vous les livrent de leur plein gré (« They "trust" me,
dumb fucks » - Mark Zuckerberg), soit vous êtes une agence gouvernementale et
vous payez Zuckerberg avec l'argent du contribuable pour avoir ces données, soit
vous êtes dégourdis en python, motivés et patients (on va y venir).
Facebook représente donc évidemment une quantité de données et d'information
inestimable, mais les agences ne s'en contentent pas. Elles utilisent également
massivement les méta données des communications électroniques, emails, appels
téléphoniques, SMS, etc. Une analyse du contenu n'est même pas nécessaire.
L'information "A a appelé B" suffit pour établir une relation entre ces nœuds.
Ou alors vous pouvez jouer aux enquêteurs « old school » et agréger ces données
à la main, en tenant un journal des intéractions de votre cible avec son
entourage, en fouillant son identité numérique, etc. Je ne m'y connais
personnellement pas assez dans ce genre de techniques, mais le web ne manque pas
de ressources à ce sujet. L'image du panneau en liège avec des photos et des
fils rouges les reliant vient à l'esprit, et c'est exactement de cela dont il
s'agit.
Voilà, brièvement, les différents moyens pour acquérir les données qui vont nous
servir. On va maintenant voir comment s'en servir.
## II : LES ATTAQUES
Comment faire parler les données ? Question intéressante à laquelle s'emploient
d'innombrables ingénieurs, chercheurs et agents partout dans le monde. Je vais
essayer de rester vulgaire et de ne pas trop rentrer dans les maths qu'il peut y
avoir derrière.
### 1 : L'influence, la hiérarchie.
Quand vous savez qui appelle qui dans un réseau, qui communique avec qui, vous
pouvez, avec les technologies modernes, visualiser cet ensemble d'informations,
et en déduire assez efficacement quelles personnes sont centrales dans ce
réseau. Le « chef » va typiquement se repérer par le fait qu'il met en relation
plusieurs personnes, que c'est vers lui que remonte les informations ou de lui
qu'émanent les ordres.
Ça peut sembler con, mais c'est ainsi que la NSA identife les têtes des réseaux
islamistes, en se basant essentiellement sur les métadonnées des appels et des
SMS.
Une idée intéressante pour mettre ceci en application serait de cartographier
les échanges de mails de la campagne de Macron pour se faire une idée des
personnages clefs de son réseau. Je ne l'ai pas fait (manque de temps) mais
quelqu'un d'un peu dégourdi en parsing et en python devrait s'en sortir.
Voici le lien torrent du fameux dump qui a noirci des pixels pendant la
campagne:
magnet:?xt=urn:btih:3053a8d59ef4b5380763bbaa5b3e942a7ab24a8f&dn=MacronLeaks
&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Fzer0day.
ch%3A1337&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.
coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969
De manière générale, l'analyse d'influence à partir des métadonnées de
communication est une technique primordiale des services de renseignements, et
c'est une chose dont il faut se rappeler lorsque l'on organise un réseau ayant
des activités potentiellement illégales. Il n'y a même pas besoin de
s'intéresser au contenu des communications pour tirer des infos intéressantes
sur un réseau.
### 2 : Les cercles sociaux.
On rentre ici dans le vif du sujet. À moins d'être parfaitement associable, vous
avez certainement une dizaine d'amis et de connaissances. Vous avez connu
chacune de ces personnes dans un contexte particulier. Vous connaissez Gisèle et
Claudine de votre club de bridge, Kévin, Brandon et Morgan de votre club de
foot, Jean-Édouard et Charles-Xavier de votre classe de prépa éco, etc.
Vos amis ne sont pour ainsi dire pas uniformément répartis, mais sont tous
rattachés à certains contextes. En fait, il y a de fortes chances que Gisèle et
Claudine se connaissent, ainsi que Kévin, Brandon et Morgan, mais il est peu
probable que vous ayez présenté Kévin à Gisèle car celui-ci ne partage pas votre
enthousiasme pour le bridge.
Maintenant, petite étude de cas de doxing sophistiqué.
Jean-Michel a la fâcheuse habitude de spammer des images de Booba sur votre
forum anonyme de peintures rupestres Sri Lankaises préféré. Pour lui apprendre
qu'on ne s'attaque pas à votre Club Secret impunément, vous décidez de le doxer.
Hop, petite recherche inversée de l'edit d'une de ses images de Booba, et bingo
vous tombez sur son profil sur un obscur site québecois underground et edgy.
Vous vous infligez la lecture de tous ses posts sur ce site infâme jusqu'au
moment où vous vous apercevez qu'il a été assez stupide pour poster son vrai
facebook.
Vous avez maintenant son nom complet, mais vous décidez de ne pas vous arrêter
là. Vous voulez tout savoir sur lui.
Manque de bol, son profil facebook est complètement opaque. Juste la liste
d'amis est visible.
Loin de vous décourager, vous lancez VIM, téléchargez quelques paquets python
pour les requêtes web et la gestion des graphes (voir plus loin la section «
Outils ») et vous ouvrez la console web de firefox pour commencer le reverse
engineering de facebook.
Après quelques essais, vous parvenez à isoler la requête qui permet de récupérer
des chunks de listes d'amis (vous avez tenté l'API officielle de facebook
seulement pour constater à quel point elle est plus restrictive que la simple
navigation). Quelques heures plus tard vous avez un bot fonctionnel qui
télécharge la liste d'amis complète d'une cible et la stocke dans un graphe, et
qui peut compléter le graphe en regardant comment les amis de la cible sont amis
entre eux, en téléchargeant leur liste d'amis.
Vous vous servez donc de ce script pour :
1. Télécharger la liste d'amis de la cible.
2. Télécharger toutes les listes d'amis des amis de la cible.
3. Établir des liens d'amitié entre les amis de la cible.
4. Exporter le tout dans un fichier de graphes standard (au hasard graphml).
Vous ouvrez le fichier contenant toutes ces infos sympas dans un logiciel dédié
à l'analyse de graphes, gratuit et open source (genre Gephi ou Cytoscape).
Vous lancez le calcul d'une disposition par clusters ("organic" sur Cytoscape
par exemple), et ça vous donne l'image en figure 1, après un peu de bricolage à
la main.
C'est beau. On voit apparaître clairement les cercles sociaux de la cible...
Maintenant, c'est bien sympa mais ça nous avance tout ça ?
Oh que oui. Si la cible a bien rendu privé toutes ses infos personnelles, ce
n'est sans doute pas le cas de ses amis. Il vous suffit de choisir un paquet
d'amis, de visiter chacun de leurs profils pour voir ce qu'ils ont en commun.
S'ils viennent tous de la même fac par exemple, il y a fort à parier que c'est
là que la cible les a connu.
Hop, vous connaissez la fac de la victime.
Vous remarquez tout un paquet avec le même nom de famille que la cible. Hop,
vous avez toute sa famille, y compris les membres qui n'ont pas le même nom,
mais qui sont quand même dans le paquet.
Encore mieux, regardez bien cette image.
Vous voyez la cible en plein milieu, mais vous constatez aussi une autre
personne qui partage beaucoup de ses amis dans un peu tous les cercles sociaux.
Donc quelqu'un qui partage sa vie. Donc sa copine, par exemple (cette image
n'est d'ailleurs pas issue d'un dox mais d'un test que j'ai réalisé sur un ami,
donc je peux confirmer qu'il s'agit effectivement de sa copine).
Voilà comment, à partir des simples relations d'amitiés, on peut en apprendre
vraiment beaucoup sur une cible. Imaginez qu'ici, on ne s'intéresse même pas aux
contenus des messages ou des posts sur les murs publics. C'est 100% de l'analyse
de métadonnées.
Imaginez maintenant que facebook disposent de toutes ces infos disponibles
instantanément, qu'eux ne se privent pas de faire en plus de l'analyse
sémantique des posts, qu'ils disposent de moyens de calcul inimaginables, etc,
ça commence à vous donner une idée de la capacité de flicage que ces média
offrent aux agences gouvernementales.
J'ai fait ici une petite description des attaques de base qu'on peut faire quand
on connaît le réseau social d'une cible. Il en existe sûrement beaucoup
d'autres, mais je me suis personnellement surtout focalisé sur les cercles
sociaux car c'est quelque chose de relativement facile à mettre en place sur
facebook.
À noter que j'ai testé tout ça il y a deux-trois ans et que facebook a sans
doute implémenté des parades à ce genre de bots. J'ai notamment entendu parlé de
blocage de comptes lorsque l'on visite trop de profils inconnus. À voir. Le
principe n'en reste pas moins général, et on peu imaginer récupérer ce genre de
données par un autre moyen.
## 3 : OUTILS
Petit topos sur les outils utilisés et que je recommande :
- urllib2 : lib python pour les requêtes, assez bas niveau pour avoir un
peu de contrôle.
- request : lib python pour les requêtes, vachement plus facile à utiliser
que urllib, à voir si c'est pas mieux.
- networkx : lib python pour gérer les graphes, simple d'utilisation et
fournit des fonctions pour exporter en .graphml.
- threading : lib python pour gérer les threads. Si vous vous lancez dans
l'aventure, vous allez voir que télécharger les listes d'amis par chunk
de 20 (facebook est conçu comme ça...) prend un temps fou, d'où
l'intérêt de threader tout ça.
- Cytoscape : logiciel de visualisation de graphes, gratuit et open source,
a une fonction de disposition "organique" qui permet de bien faire
apparaître les cercles sociaux.
- Gephi : logiciel de visualisation de graphes, peut-être mieux foutu que
Cytoscape mais je ne l'ai découvert qu'après, je l'utilise pour un autre
projet, je le préfère globalement.
Voilà à quoi ressemblait mon script pour cartographier facebook, ça vous donnera
une idée :
Un protip pour l'extraction des listes d'amis : ne pas désespérer si les listes
d'amis sont cachées. On peut récupérer quelques amis à partir des commentaires
et des likes sur les photos de profil, puis regarder les amis de ces amis, puis
les amis des amis de ces amis pour voir si la cible n'apparaît pas dedans. En
gros, bruteforcer la liste d'amis. C'est long (jusqu'à 4-5h avec une connexion
pas top) mais ça marche, j'ai testé et validé cette méthode.
Par exemple sur le screenshot ci-dessus, on voit que 138 amis ont été trouvés
rien qu'à
partir des images...
## CONCLUSION
J'espère que cet article vous aura donné un peu de recul sur votre perception
des réseaux sociaux. Si nos relations avec nos proches ont l'air opaques et
confuses quand on n'y pense pas trop, elles sont en réalité très structurées et
en disent beaucoup sur vous et sur vos proches.
Maintenant, on peut se demander comment structurer la chaîne d'information dans
un réseau pour éviter ce genre d'attaque aux métadonnées dont les agences
gouvernementatales semblent faire leur spécialité.
Ce qui ressort souvent dans la littérature, c'est l'importance de bâtir un
réseau décentralisé, composé de petites cellules isolées, et de minimiser les
contacts.
Il y a certainement d'autres méthodes, mais se poser la question constitue déjà
une bonne moitié du chemin.
|