27/07/2024

Phase de collecte d’informations

Contrairement à l’intelligence acquise depuis des sources telles que la plongée physique dans les bennes à ordures de la société ciblée, ou la récupération de la base d’un site web ou encore l’ingénierie sociale, l’organisme Open Source INTelligence (aussi abrégée en OSINT) est constituée des collectes des sources d’enregistrements publics et de media sociaux. Voyons quelques-uns des outils permettant de se renseigner et disposer légalement d’informations concernant une cible potentielle.

A. Netcraft

Lorsque l’on recherche de l’information, on peut se tourner vers la partie déclarée publiquement par une entreprise concernant son serveur web et son hébergement. On peut notamment interroger le site de la firme Netcraft qui journalise les requêtes en temps-réel effectuées par ses clients, stockées alors sur le site www.netcraft.com. Cette société fournit également de l’information quant à la politique anti-phishing mise en œuvre pour l’entreprise considérée.

Exemple : pour le domaine it-connect.fr

En complément de ces informations, on peut également interroger le registrar de domaine, qui conserve un enregistrement des domaines qu’il héberge via la commande whois :

# whois mydmn.org

REMARQUE : il est également possible d’utiliser un des clients DNS pour interroger l’annuaire de noms à l’aide de la commande nslookup ou encore dig. Par ailleurs, il existe également une commande permettant d’interroger directement le nom d’hôte concerné : la commande host (ou plus récemment la commande hostnamectl) :

# host –t ns mydmn.org
mydmn.org name server ns3.mydmn.org
mydmn.org name server ns4.mydmn.org
…

B. Autour du DNS

Un autre moyen de récupérer de l’information à moindre coût consiste à exploiter celles fournies par le transfert de zone DNS, autorisés par les serveurs de noms et autorisant la réplication des enregistrements d’un domaine. En général, sur une infrastructure classique, on initialise un serveur de noms DNS primaire que l’on redonde avec un serveur de backup. Cela permet de dupliquer les informations du serveur primaire vers le serveur secondaire.

Malheureusement, nombre d’administrateurs système créent leurs serveurs DNS de façon non sécurisée. Ainsi, n’importe qui peut transférer les enregistrements DNS d’un domaine. Il suffit simplement d’exécuter :

# host -l mydmn.com ns2.mydmn.com

Le listing obtenu en sortie fournit une bonne idée des failles potentielles à exploiter durant la phase de test de vulnérabilité. Par exemple, le serveur mail2.mydmn.org est probablement un serveur de messagerie où il est possible de trouver un ou plusieurs trous de sécurité à exploiter, en se basant sur le protocole SMTP et le port TCP/25.

En guise de bonne pratique, en sachant que les tests d’intrusion externes trouvent souvent moins de services exposés que ceux issus de tests d’intrusion internes, on peut se dire de n’exposer que les services devant véritablement être utilisés à distance : serveurs web, serveurs de messagerie, serveurs VPN et probablement SSH ou FTP (ou tous ceux identifiés comme étant critiques). Ce genre de services est le plus généralement la cible des attaques. Si l’entreprise ne force pas l’utilisation de facteurs d’authentification double, ces tentatives d’intrusions par la messagerie deviendront monnaie courante.

REMARQUE : via l’ingénierie sociale, on peut également trouver bon nombre d’adresses de messagerie d’utilisateurs de firmes, directement sur Internet, grâce aux contacts d’associations ou réseaux sociaux.

Il existe également une autre commande permettant d’interroger un nom de domaine. Il s’agit de l’utilitaire dnsenum que l’on peut utiliser de la façon suivante :

# dnsenum –enum mydmn.org

ATTENTION : il ne faut pas utiliser cela sur un site web public qui ne nous appartient pas. Car, serait alors considérer comme un acte de piratage.

C. TheHarvester

Il est possible d’utiliser un script python appelé theHarvester permettant de collecter au sein des résultats d’une centaine de moteurs de recherche, les adresses de messagerie potentielles. Ce script peut automatiser la recherche au travers des moteurs tels que :

  • Google
  • Bing
  • PGP
  • Linkedin

Exemple: recherche sur le domaine de kali.org au travers du moteur Google :

D. Maltego

Ce dernier est un outil de collecte d’information (aussi appelé data-mining) spécialement conçu pour visualiser l’intelligence ainsi récupérée. Cet outil possède une version commerciale et une version Open Source, un peu plus bridée. Maltego exploite les informations publiques disponibles sur Internet. Il est donc tout à fait légal d’effectuer des reconnaissances à l’aide de cet outil.

A l’ouverture de la session, l’assistant réclame le type d’utilisation (parmi une liste de trois choix) :

Dans notre exemple, nous utiliserons évidemment la version libre. EN premier lieu, le programme nécessite la création d’un compte sur le site propriétaire du logiciel (alias Paterva - www.paterva.com). Il faut ensuite s’y connecter, et lorsque c’est fait, il faut alors sélectionner l’option suivante :

On doit ensuite sélectionner une palette. Cela consiste à préciser dans quel périmètre on interagit :

Afin de choisir le domaine sur lequel on va effectuer sa recherche, il faut double-cliquer dans le champ "Domain Name" de la boite de dialogue Properties à droite de l’écran. Ainsi, on peut changer le texte pour celui du domaine que l’on souhaite explorer.

Ensuite, il suffit d’ouvrir le menu All Transform -> To DNS Name – MX (mail server) -> Run Transform, pour déclencher l’analyse souhaitée. Ainsi, on va obtenir rapidement l’architecture complète de l’annuaire de noms pour le domaine mentionné. Pour se former, on peut suivre l’un des nombreux tutoriels disponibles sur le site www.paterva.com.

E. Le scan de ports et de services

Avant d’effectuer la moindre action concernant un test d’intrusion, on doit identifier les machines actives se trouvant dans le périmètre du réseau ciblé. On peut commencer par tester l’aller-retour avec le protocole ICMP via la commande ping. Mais, la plupart du temps ce protocole est bloqué par la barrière des pare-feu. On peut alors utiliser la commande nmap afin de déterminer si un serveur est actif ou non.

# nmap -sP 232.23.130.10

REMARQUE: il existe aussi une commande nping permettant de fournir un peu plus de détail concernant l’échange de paquets au niveau du réseau. Faut-il encore que le protocole ICMP ne soit pas bloqué à quelque niveau que ce soit.

Avec la commande nmap, on peut notamment savoir quel type de système d’exploitation est actuellement utilisé :

# nmap -O 192.168.3.24
…
Device type: general purpose
Running: Microsoft Windows 7|2008

Il est possible de lister explicitement la ou les plage(s) de ports à scanner en utilisant l’option -p comme suit:

# nmap -p 1-1000 192.168.3.24

On peut également, pour un port donné, scanner l’ensemble de la plage réseau  de notre infrastructure :

# name -p 22  192.168.3.*

Au sein de Kali Linux, on trouve également une interface graphique encapsulant l’utilitaire nmap, appelé zenmap. On peut alors s’en servir pour lister l’ensemble des machines du réseau à attaquer.

De la même façon que l’on peut récupérer l’empreinte d’un hôte à l’aide de l’option -O, on peut aussi scanner un réseau pour récupérer l’empreinte d’un service grâce à l’option -sV :

# nmap –sV 192.168.3.24

F. Plages réseau

Lorsque l’on souhaite déterminer sur quelle(s) plage(s) d’adresses notre test d’intrusion va porter, on peut aussi utiliser le script dmitry, en redirigeant le résultat dans un fichier en sortie :

 # dmitry –wnspb mydmn.org –o /root/Dmitry-results

Lorsque le script a terminé sa recherche, on devrait alors disposer en sortie du fichier /root/Dmitry-results.txt, listant les différentes adresses IP et serveurs pour le domaine mydmn.org. On peut aussi récupérer les différents masques de sous-réseaux de la plage en question :

# netmask –s mydmn.org

On peut alors utiliser l’utilitaire scapy, permettant de reconstituer les différents paquets échangés à travers un réseau, pour reconstituer les différents sous-réseaux :

# scapy
> ans,unans=sr(IP(dst= "mydmn.org/30", ttl=(1,6))/TCP())

Afin de stocker le résultat dans une table interne de l’outil, il suffit d’exécuter la requête ci-dessous :

> ans.make_table( lambda (s,r) : (s.dst, s.ttl, r.src) )

Le résultat est alors affiché sous forme d’une liste d’adresse IP. On peut alors simuler une commande traceroute en recréant les paquets TCP idoines via la requête scapy suivante :

> res,unans=tracerouite(["www.qwant.fr",www.mysite.fr,"mydmn.org"],dport=[80,443],maxttl=20,retry
=-2)

Du coup, il est même possible d’afficher un graphe de dépendances en exécutant l’instruction suivante :

> res.graph()

REMARQUE: ce graphe peut être sauvegardé dans un fichier temporaire en mentionnant la redirection au sein de la fonction res.graph()= :

> res.graph(target="> /tmp/graph.svg")
author avatar
Philippe PIERRE
A exercé de nombreuses années en tant qu'administrateur de base de données et comme administrateur Système Unix/Linux. Il a enseigné les réseaux au CNAM (Paris). Aujourd'hui, employé en tant qu'ingénieur infrastructure, au sein d'un laboratoire pharmaceutique et administrant un cluster de calculs HPC, il connaît parfaitement les environnements GNU/Linux dans le cadre d'une entreprise et des systèmes de haute disponibilité. Il aime partager son expérience.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail