Case Study : Twitter Hijacking

Préambule

Pour inaugurer le blog de SecureMyData, je vous ai préparé un petit case-study pour modifier un Tweet qui ne nous appartient pas.

Pour ne pas nuire aux personnalités dont j’ai modifié les tweets, j’ai choisi de mettre une petite image et un lien redirigeant vers médecins sans frontières.La démarche était purement technique et curieuse.

Comptes ciblés

Avant de vous décrire comment j’ai procédé, voici les comptes dont j’ai modifié les tweets :

  • Kev Adams : un humoriste français
  • Norman : un youtubeur avec presque 10 millions d’abonnés sur YouTube
  • Omar et Fred : deux humoristes et comédiens
  • Russell Brand : un humoriste anglais (12 millions d’abonnés sur Twitter)
  • SoundCloud : un site de streaming audio bien connu
  • Stephen Fry : un écrivain, acteur et réalisateur britannique (qui possède aussi 12 millions d’abonnés)
  • Jason Thompson : un joueur de NBA
  • Nicolas Bedos : un humoriste et acteur français

Résultat

Démarche de recherche

Récupération des tweets

Tout d’abord, j’ai utilisé un logiciel russe nommé Zennoposter pour récupérer tous les tweets avec un lien sur le compte de plusieurs centaines de personnalités (l’API Twitter ne laissant pas passer ce genre de requêtes).

Avec Zennoposter, j’ai réalisé un « template » qui effectuait cette opération. En voilà un aperçu.

Zennoposter me renvoie donc un fichier avec tout les tweets  : voici le fichier pour les curieux.

Récupération des liens

Une fois ce fichier en ma possession, j’ai extrait tous les liens des tweets. C’est facile. Twitter raccourciy les URL avec un format tel que t.co/XXXX .

grep -E -o 'http://t.co[^"]+' tweets.txt >> urls.txt

Avec cette commande, on extrait tous les liens simplement dans un fichier urls.txt (encore une fois il est accessible aux curieux).

Filtre des liens

Une fois ces urls extraites, il fallait que je teste leurs disponibilités. Pour ne pas spammer les services whois, j’ai tenté de faire un CURL sur les URL et j’ai regardé si le serveur répondait.

Pour ceci, j’ai développé un petit script en PHP

<?php $content = file_get_contents('urls.txt'); $urls = explode("\n",$content); foreach($urls as $key => $url) {
	
	$url = trim($url);
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
	curl_setopt($ch,CURLOPT_TIMEOUT,30);
	$a = curl_exec($ch);
	
	if(!empty(curl_error($ch)))  {
		
		file_put_contents('test.txt',$url . ' => ' . curl_error($ch)."\n",FILE_APPEND);
		
	}
	
	echo "$key => $url \n";
}

Ce script PHP resortait un fichier de logs appelait test.txt que voici.

Ensuite j’ai identifié que les lignes contenant « Could not resolve host: » était intéressante. J’ai donc juste récupéré les domaines de ces lignes à l’aide d’une commande UNIX.

sed '/host/!d' test.txt | awk -F"host: " '{print $2}' >> sort.txt && cat sort.txt | sort | uniq >> uniq.txt

Une fois ces domaines extraits, j’ai regardé les domaines disponibles et j’ai racheté ceux présents sur un tweet que je souhaitais modifier.

J’ai donc racheté 7 noms de domaine.

Mise en place des domaines

Ensuite, pour que la modification ait lieu, il m’a fallu insérer des Twitter Card sur mes domaines : c’est un bout de code HTML qui indique à Twitter ce qu’il doit afficher.

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@MSF">
<meta name="twitter:title" content="Médecins sans frontieres">
<meta name="twitter:description" content="Faites un don">
<meta name="twitter:image" content="https://jamaity.org/wp-content/uploads/2015/12/logo_medecins_sans_frontieres.jpg">

Et j’ai aussi forcé la redirection vers le site de médecins sans frontières.

<meta http-equiv="refresh" content="0; URL=http://www.msf.fr/">
<script>
	document.location.href = "http://www.msf.fr/";
</script>

Une fois ceci effectué, j’ai scanné mes noms de domaines sur l’outil de validation des Twitter Card et la modification est apparu sur le tweet.

Conclusion

La conclusion sera très simple. Elle démontre que personne n’est à l’abri d’une faille de sécurité. Que ce soit le site ou l’utilisateur, il persistera toujours une faille quelque part.

Laisser un commentaire

Notre site internet

SecureMyData.fr

Numéro de téléphone

Horaires d'ouvertures

Lundi - Vendredi - 8:00 - 18:00, Samedi - 14:00 - 18:00

Newsletter

SecureMyData © 2017 Tous droits réservés.