Protéger son domaine contre le Phishing : techniques basées sur l’OSINT
Sommaire
I. Présentation
Dans cet article, nous allons passer en revue quelques méthodes et outils que peuvent utiliser les entreprises afin de se protéger des attaques par phishing. Les méthodes présentées dans cet article vont surtout permettre d'avoir une démarche proactive et une analyse sur les campagnes de phishing potentiellement en cours ou passées, et ce en utilisant les méthodes de l'OSINT (Open Source Intelligence ou renseignement par source ouverte).
II. Recherche et détection de noms de domaine
Dans un premier temps, il est important de s'intéresser aux noms de domaine possédés par votre entreprise, une technique couramment utilisée par les attaquants est d'acheter un nom de domaine ressemblant fortement au vôtre afin de tromper les utilisateurs. En cela, plusieurs techniques visant à tromper l'œil et le cerveau humain sont utilisées, en voici quelques exemples basés sur le nom de domaine redbull.com (liste non exhaustive) :
- Mot-clé : Le nom de domaine contient un mot-clé important provenant du nom de domaine original (ex : rh-redbull.com)
- Tiret : Changer le point par un tiret sur un sous-domaine (ex: www-redbull.com).
- Nouveau TLD : Utiliser le domaine avec un TLD non enregistré (ex : redbull.xyz)
- Homoglyphe : Remplacer les lettres par des lettres qui se ressemblent ou une lettre proche sur le clavier (ex : reclbull.com, rzdbull.com).
- Transposition : Inverse la position de deux lettres dans le nom de domaine (ex : rebdull.com).
- Singularisation/Pluralisation: Ajouter ou supprimer un s à la fin d'un nom de domaine (ex : redbulls.com).
- Omission/Répétition: Répéter ou supprimer une lettre du nom de domaine (Ex: redbul.com, redbulll.com)
- Sous-domaine : Ajouter un point dans le nom de domaine (Ex: red.bull.com).
- Insertion : Insérer une lettre dans le nom de domaine (Ex: rezdbull.com).
- etc.
Il va de soi que tous ces noms de domaine n'appartiennent pas à la société Redbull, même si ils se ressemblent. Ce fait est pourtant difficile à concevoir pour un utilisateur "non technique". Toutes ces techniques sont l'assurance d'un succès pour un attaquant lorsque suffisamment d'utilisateurs sont ciblés, notamment pour des utilisateurs non sensibilisés.
Afin de détecter au plus tôt l'utilisation de ces techniques par un attaquant, différents outils peuvent être utilisés pour générer une liste de noms domaine sur lesquels ces types de modifications sont appliquées, puis de vérifier si ces noms de domaine sont enregistrés, voire utilisés à des fins de phishing.
Le premier outil est dnstwists, téléchargeable sur Github : https://github.com/elceef/dnstwist
# OS Linux git clone https://github.com/elceef/dnstwist.git cd dnstwist pip install # Kali Linux apt install dnstwist
Celui-ci va générer une liste de noms de domaine à partir d'une entrée fournie en utilisant les méthodes citées précédemment. Pour chaque nom de domaine, il vérifiera son enregistrement auprès d'un serveur DNS mondial, ce qui vous permettra de détecter des cas suspects rapidement. Voici un exemple en utilisant le nom de domaine credit-agricole.fr :
Sur la capture d'écran ci-dessus ne sont affichés que les noms de domaine ayant effectivement un enregistrement DNS. La première chose à remarquer ici est que le serveur DNS chenar.credit-agricole.fr et le MX mercure.credit-agricole.fr reviennent plusieurs fois. On peut donc savoir qu'il s'agit des serveurs DNS de la véritable entité du Crédit Agricole et que les noms de domaine qui y sont enregistrés sont bien maitrisés. D'autres noms de domaine enregistrés avec des serveurs DNS, qui eux n'apparaissent qu'une fois comme crdit-agricol.fr ou credit-agricolle.fr, semblent plus suspects.
On peut voir ici plusieurs éléments :
- des noms de domaine que l'entreprise a choisi d'acheter afin de se protéger des attaques par phishing ou de la dégradation de son image
- des noms de domaine achetés par d'autres entités, soit pour du simple cybersquatting, soit pour du phishing
- Éventuellement des noms de domaine achetés par les prestataires de test d'intrusion ayant effectivement acheté des noms de domaine similaires pour tester la sensibilisation des utilisateurs
Une fonctionnalité intéressante de dnstwists est qu'il peut générer une sortie au format CSV, ce qui facilite les potentielles automatisations de ces vérifications. Vous pourrez alors facilement créer une tâche planifiée qui se chargera de vous envoyer un mail si une nouvelle entrée apparaît, signe potentiel d'une attaque par phishing en cours, ou simplement garder un historique des différentes exécutions.
Le second outil est urlcrazy, qui a une démarche similaire, mais lorsque l'on parle d'outils open source, il est bon d'en connaitre plusieurs, car leur développement peut parfois s'arrêter sans prévenir. Celui-ci peut également être téléchargé sur Github : https://github.com/urbanadventurer/urlcrazy.git.
# OS Linux git clone https://github.com/urbanadventurer/urlcrazy.git sudo apt install ruby gem install bundler bundle install gem install json colorize async async-dns async-http # Kali Linux apt install urlcrazy
L'outil urlcrazy permet notamment de renseigner la disposition du clavier (qwerty, azerty, qwertz, dvorak) afin de simuler au mieux les éventuelles fautes de frappe couramment faites par les utilisateurs :
À nouveau, des exports CSV peuvent être réalisés et je vous invite à découvrir par vous-même les quelques options de personnalisation qu'urlcrazy propose.
À la suite de la génération de noms de domaine et de leur vérification par ces deux outils, plusieurs actions peuvent être menées :
- récolter des informations sur ces noms de domaine, pour par exemple savoir s'il s'agit d'un achat de nom de domaine pour du cybersquatting (auquel cas les entreprises ne s'en cachent pas vraiment), de connaitre l'âge du domaine et le registrar utilisé :
whois crdt-agricole.fr
- identifier les interfaces web présentes sur ces noms de domaine, notamment en utilisant Aquatone.
Aquatone est un outil qui permet de prendre des captures d'écran et de récolter des informations sur les en-têtes de services web éventuellement présents à partir d'un fichier contenant une liste de noms de domaine. Il s'agit d'un simple binaire qui peut être trouvé ici : Aquatone
Après avoir mis tous les noms de domaine récoltés via dnstwist et urlcrazy dans un simple fichier texte, on utilise se dernier avec aquatone :
cat domaines.txt |aquatone
Ce dernier va alors tenter d'établir une connexion vers chacun des noms de domaine et si il présente une interface web (sur une liste plus ou moins longue de ports en fonction des options utilisées), y récolter des informations qui seront synthétisées dans une page HTML :
- Identifier un potentiel port 3333 ouvert sur l'IP correspondant au nom de domaine à vérifier, pouvant trahir la présence potentielle d'un portail gophish
- Ajouter ces noms de domaine dans liste noire des proxy d'entreprise et pare-feu centralisés afin d'éviter que vos utilisateurs ne puissent être piégés
III. Google & moteurs de recherche
Une seconde méthode qui peut être utilisée est simplement l'utilisation de moteurs de recherche. De simples Google Dorks peuvent mener à la découverte de pages de phishing et d'autres moteurs de recherche, plus avancés, peuvent se révéler pertinents.
Prenons l'exemple de la page d'authentification de l'espace client Orange, celle-ci comporte plusieurs éléments qui lui sont propres, à commencer par le texte "Indiquez votre compte Orange" :
Cet élément caractéristique d'une page peut être utilisé afin de voir si d'autres sites n'utilisent pas le même, dans notre cas, il y aurait de très grandes chances qu'il s'agisse de page de phishing. Avec la requête Google suivante : intext:"Indiquez votre compte Orange" -inurl:"orange.fr", je tombe très rapidement sur plusieurs pages de phishing :
Ici, j'ai utilisé l'option de recherche intext pour rechercher une suite de caractères précise qui devrait se trouver dans la code source de la page et ai exclu (-inurl) tous les résultats comportant orange.fr dans le nom de domaine, afin de ne pas me retrouver avec de vrais sites appartenant à Orange (ce n'est pas le but de ma recherche).
Même chose ici pour une page d'authentification PayPal :
D'autres moteurs de recherche spécialisés existent afin d'effectuer ce type de recherche, je pense notamment à publicWWW. Ce dernier est payant et je n'ai donc pas pu le tester autant que je l'aurais voulu, mais il permet d'effectuer une recherche sur des éléments techniques (le code source) comme une suite de balises HTML que l'on retrouverait avec exactitude dans d'autres pages web. Sur ce principe, il devient aisé de faire une recherche sur quelques balises caractéristiques du code source de votre page d'authentification (images importées, nom d'un répertoire, etc.).
A noter que les pages de phishing sont rarement finement conçues, les attaquants utilisent la plupart du temps une image qui représente le menu, pied de page et tout ce qui n'est pas utile. Seul le code source du formulaire d'authentification est réellement constitué de balises HTML. En cela, il est courant que les attaquants ne se contentent que de reprendre le code CSS utilisé afin de coller au mieux à ce que les utilisateurs ont l'habitude de voir (couleurs, forme des boutons, etc.). Les noms des fichiers CSS et de leurs fonctions sont donc une bonne base de recherche.
IV. Transparence des certificats
Les certificats SSL sont, dès qu'ils sont créés, considérés comme publics. Ceux-ci contiennent un grand nombre d'informations qui peuvent être utilisées afin de savoir quels sont les domaines nouvellement créés, puisqu'un certificat SSL va contenir tous les domaines pour lesquels il est considéré comme valide. La démarche de la transparence des certificats est détaillée ici : https://certificate.transparency.dev/
Divers projets permettent d'effectuer des recherches sur les certificats SSL, nouveaux comme anciens. On peut alors utiliser ces informations pour détecter des certificats SSL créés pour des noms de domaine similaires aux nôtres. La solution la plus simple pour attaquant étant d'utiliser la technique du mot de clé (redbull-rh.com, paypal-credit.com, etc.)
Plusieurs sites, gratuits ou payants, existent pour réaliser ce type de recherche. Le plus facile d'accès étant https://crt.sh/. Ce dernier permet d'effectuer des recherches sur les certificats contenant une chaine de caractères précise, par exemple le mot clé principal de votre nom de domaine :
Également, il y a le projet https://github.com/x0rz/phishing_catcher, qui se base sur https://certstream.calidog.io/, monitor et affiche en direct les nouveaux certificats créés. Ces derniers peuvent être intéressants afin de mettre en place, dans la durée, une surveillance des potentielles attaques de phishing pouvant cibler vos utilisateurs.
git clone https://github.com/x0rz/phishing_catcher.git cd phishing_catcher pip3 insall - requirements python3 catch_phishing.py
Phishing catcher se base sur une liste de mots pour appliquer un score à un nom de domaine, cette liste étant bien sûr personnalisable pour être adaptée à votre contexte, pour par exemple faire en sorte que tous les noms de domaine contenant un de vos noms de domaine ou un dérivé/une mutation, apparaissent un rouge :
Au bout de quelques instants, je détecte par exemple un nom de domaine pouvant paraitre suspect, utilisant un tiret au lieu d'un point pour créer un sous-domaine :
En personnalisant la configuration, notamment pour y supprimer la surveillance de noms de domaine qui ne vous intéressent pas et en y ajoutant les noms de domaine détenus par votre entreprise, vous pourrez faire en sorte de détecter au plus tôt les créations de noms de domaine similaires au votre. Par défaut, l'outil phishing catcher applique une permutation de lettre sur les noms de domaine à surveiller. Aussi, je vous invite à explorer sa configuration pour l'utiliser au mieux.
V. Conclusion
Avec ce type de solution correctement configurée, il vous sera possible de détecter des tentatives de phishing dès l'étape de mise en place du "piège" par l'attaquant, peut-être même avant qu'il n'envoie un premier mail. Bien sûr, aucune solution magique n’existe en sécurité et toutes ces méthodes doivent être complétées par les protections habituelles, notamment par la sensibilisation des utilisateurs.
Au cours de mes recherches, j'ai également noté que de nombreuses grandes entreprises (paypal, booking, leboncoin, etc.) font appelle à des sociétés externes spécialisées afin de prendre en charge la protection de leur nom de domaine. Ces sociétés proposent notamment l'achat des noms de domaine libres pouvant être utilisés pour nuire à une entreprise, voir le rachat des noms de domaine actuellement utilisés par les attaquants (je ne sais en revanche pas comment ils s'y prennent).
Toutefois, je remarque que pour des sites web très connus et grand public, il est assez aisé de trouver des pages de phishing actives, dont certaines sont là depuis assez longtemps (puisque parfois référencées sur Google). Pour des entreprises de taille plus modeste et potentiellement moins fréquemment ciblée par les attaquants, je pense qu'un monitoring régulier au travers la recherche des noms de domaine et en utilisant la transparence des certificats permet d'avoir une solution pertinente.
Erreur lors de linstallation de urlcrazy. Des idees ?
Fetching gem metadata from https://rubygems.org/…….
Using console 1.8.2
Using timers 4.3.0
Using protocol-http 0.15.1
Using protocol-hpack 1.4.2
Using bundler 2.2.15
Using colorize 0.8.1
Using json 2.3.0
Following files may not be writable, so sudo is needed:
/usr/local/bin
/var/lib/gems/2.7.0
/var/lib/gems/2.7.0/build_info
/var/lib/gems/2.7.0/cache
/var/lib/gems/2.7.0/doc
/var/lib/gems/2.7.0/extensions
/var/lib/gems/2.7.0/gems
/var/lib/gems/2.7.0/specifications
Using protocol-http1 0.10.3
Using protocol-http2 0.11.6
Fetching nio4r 2.5.2
Your user account isn’t allowed to install to the system RubyGems.
You can cancel this installation and run:
bundle config set –local path ‘vendor/bundle’
bundle install
to install the gems into ./vendor/bundle/, or you can enter your password
and install the bundled gems to RubyGems using sudo.
Password:
Installing nio4r 2.5.2 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /tmp/bundler20210407-1029-rq8vcwnio4r-2.5.2/gems/nio4r-2.5.2/ext/nio4r
/usr/bin/ruby2.7 -I /usr/lib/ruby/2.7.0 -r ./siteconf20210407-1029-1ji36gn.rb extconf.rb
mkmf.rb can’t find header files for ruby at /usr/lib/ruby/include/ruby.h
You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.
extconf failed, exit code 1
Gem files will remain installed in /tmp/bundler20210407-1029-rq8vcwnio4r-2.5.2/gems/nio4r-2.5.2 for inspection.
Results logged to /tmp/bundler20210407-1029-rq8vcwnio4r-2.5.2/extensions/x86_64-linux/2.7.0/nio4r-2.5.2/gem_make.out
An error occurred while installing nio4r (2.5.2), and Bundler cannot continue.
Make sure that `gem install nio4r -v ‘2.5.2’ –source ‘https://rubygems.org/’` succeeds before bundling.
In Gemfile:
async-dns was resolved to 1.2.5, which depends on
async-io was resolved to 1.27.7, which depends on
async was resolved to 1.24.2, which depends on
nio4r