Vérifiez la réputation des adresses IP publiques avec lesquelles vos équipements communiquent

5
(2)

Vous êtes nombreux à avoir apprécié mon tuto consacré à la détection d’activité anormale sur votre réseau local avec Suricata sur un Raspberry Pi. Je vous propose dans cet article un moyen complémentaire de détecter une activité anormale sur votre réseau local en vérifiant la réputation des adresses IP avec lesquelles vos équipements communiquent. Vous serez par exemple en mesure de détecter qu’un malware est installé sur un équipement de votre réseau car il communique avec un serveur de mauvaise réputation.

Architecture

L’architecture est identique à celle que j’ai utilisé pour mon tutoriel Suricata. Un Switch recopie toutes les trames échangées sur le réseau vers un Raspberry Pi grâce à la fonctionnalité de “Port Mirroring”. Pour capter le trafic Wifi, on utilise un petit routeur Wifi qui sera également relié sur un port du Switch. Il est ainsi possible pour le Raspberry Pi d’avoir la visibilité sur tout le trafic de votre réseau local.

Exemple d’architecture permettant d’analyser tout le trafic avec Wireshark sur un Raspberry Pi

Nous capturerons les trames reçus par le port Ethernet du Raspberry Pi grâce à l’outil TShark, qui est une version de Wireshark qui peut être appelée directement dans un terminal et sans interface graphique.

Mon programme IP Reputation Check utilisera ensuite le fichier PcapNg créé par TShark et l’analysera afin d’en extraire toutes les adresses IP externes avec lesquelles vos équipements communiquent.

Capture du trafic sur le Raspberry Pi

Installez Raspberry Pi OS Lite 64 bits sur votre Raspberry Pi avec l’outil Raspberry Pi Imager disponible sur le site https://www.raspberrypi.org/software/. J’utilise cette version de Raspberry Pi OS car ce tutoriel n’a pas besoin d’interface graphique et il est recommandé d’utiliser la version 64 bits pour le Raspberry Pi 4. Mais vous pouvez bien entendu utiliser la version Raspberry Pi OS Desktop.

Installez TShark sur le Raspberry Pi :

sudo apt update
sudo apt install tshark

Lors de l’installation choisissez le mode permettant a des utilisateurs qui ne sont pas super-utilisateurs de capturer les trames (cliquez sur Yes lorsque le choix vous est proposé).

Il est cependant nécessaire de modifier les droits du programme /usr/bin/dumpcap :

sudo chmod +x /usr/bin/dumpcap

Lancez une capture durant 2 minutes afin de vérifier le bon fonctionnement du programme :

tshark -W mon-fichier.pcapng -a duration:120

Une fois que tout fonctionne, vous pouvez lancer une capture plus longue (1h) en évitant d’utiliser votre réseau de façon intensive afin de limiter le trafic légitime.

Programme de vérification de la réputation des adresses IP

Installez les librairies Python nécessaire à mon programme :

sudo apt install python3-pip
pip install scapy==2.5.0rc1 
pip install shodan dotenv

Installez mon programme IP Reputation Check depuis GitHub :

sudo apt install git
git clone https://github.com/tutoduino/IP_reputation_check

Ce programme écrit en Python3 utilise plusieurs services en ligne permettant de vérifier la réputation d’une adresse IP. Vous devez vous inscrire à ces services afin d’obtenir une clé API pour chacun d’eux. L’inscription est gratuite, mais elle permet un nombre limitée de requête par jour. C’est suffisant pour un tester un petit réseau local normalement. Vous pouvez bien entendu passer à un abonnement payant de ces services si vous souhaitez lever cette limite. Notez qu’une fois le nombre de requête atteinte pour un service, mon programme n’affichera plus d’information issues de ce service mais continuera à fonctionner avec les autres services.

Liste des services utilisés dont il faut récupérer une clé API:

Il faut copier les clé API des services auxquels vous êtes inscrits dans un fichier .env situé dans le répertoire IP_reputation_check. Si vous ne souhaitez pas utiliser un service, ne mettez tout simplement pas de clé pour ce service dans le fichier .env.

Voici un exemple de fichier .env dans lequel vous devez remplacer les “xxx” par vos clés API :

# API KEYS
SHODAN_API_KEY=xxx
VIRUS_TOTAL_KEY=xxx
IPQS_KEY=xxx
APIVOID_KEY=xxx
ABUSEIPDB_KEY=xxx

Mon programme ip_reputation_check.py prend une liste d’adresse IP via le flux d’entrée standard stdin.

Vous pouvez ainsi l’utiliser de plusieurs manières :

Utilisation avec une liste d’adresses IP entrées au clavier

Vous pouvez entrer une ou plusieurs adresses IP directement dans la console. Entrez chaque adresse IP et appuyez sur la touche retour/entrée (symbole ↵). Appuyez une nouvelle fois sur la touche retour/entrée après la dernière adresse IP entrée.

$python3 ip_reputation_check.py↵
8.8.8.8↵
1.1.1.1↵
↵

Le programme affichera les informations pour ces adresses :

8.8.8.8 is a public IP address
Shodan           -> Number of open ports: 3
Shodan           -> Hostnames: ['dns.google']
AbuseIPDB        -> Number of reports: 50
AbuseIPDB        -> Confidence of Abuse: 0%
ApiVoid          -> Risk score: 0
ApiVoid          -> Detection rate: 0%
VirusTotal       -> Number of reports saying it is malicious: 1
VirusTotal       -> Number of reports saying it is suspicious: 0
VirusTotal       -> Reputation (<0 is suspicious): 473
VirusTotal       -> Harmless votes: 132
VirusTotal       -> Malicious votes: 21
IpQualityScore   -> Fraud score (>75 is suspicious): 0
IpQualityScore   -> Bot activity: True
IpQualityScore   -> VPN status: False
IpQualityScore   -> Proxy status: False
IpQualityScore   -> Tor status: False
------------------------------------------
1.1.1.1 is a public IP address
Shodan           -> Number of open ports: 13
Shodan           -> Hostnames: ['one.one.one.one']
AbuseIPDB        -> Number of reports: 48
AbuseIPDB        -> Confidence of Abuse: 0%
ApiVoid          -> Risk score: 0
ApiVoid          -> Detection rate: 0%
VirusTotal       -> Number of reports saying it is malicious: 4
VirusTotal       -> Number of reports saying it is suspicious: 0
VirusTotal       -> Reputation (<0 is suspicious): 77
VirusTotal       -> Harmless votes: 66
VirusTotal       -> Malicious votes: 11
IpQualityScore   -> Fraud score (>75 is suspicious): 0
IpQualityScore   -> Bot activity: True
IpQualityScore   -> VPN status: False
IpQualityScore   -> Proxy status: False
IpQualityScore   -> Tor status: False
------------------------------------------

Utilisation avec un fichier PcapNg

Vous pouvez utiliser directement le fichier Pcap (ou PcapNg) contenant le trafic enregistré par TShark sur le Raspberry Pi. Le programme parse_pcap.py va extraire automatiquement la liste d’adresses IP externes de ce fichier, et la commande pipe “|” va permettre de transmettre cette liste au programme ip_reputation_check.py

python3 parse_pcap.py mon-fichier.pcapng | python3 ip_reputation_check.py 

Utilisation avec un fichier CSV

Vous pouvez aussi fournir une liste d’adresses IP dans un fichier CSV.

python3 parse_ip_csv.py csv_file.csv | python3 ip_reputation_check.py

Exemple sur l’adresse 139.162.99.243

Voici un exemple d’affichage de la réputation d’une adresse IP suspecte.

  • AbuseIPDB indique que cette adresse a été indiquée comme suspecte 2345 fois, ce qui lui permet de donner un indice de 100% sur la certitude que cette adresse soit malicieuse
  • ApiVoid indique un score de risque de 100
  • VirusTotal indique que cette adresse a été indiquée 3 fois comme malicieuse
  • IpQualityScore donne un score de fraude de 100 qui indique également qu’elle est suspicieuse et que de l’activité d’un réseau de Bot y a été détectée.
139.162.99.243 is a public IP address
Shodan           -> Number of open ports: 2
Shodan           -> Hostnames: ['scan-42.security.ipip.net']
AbuseIPDB        -> Number of reports: 2345
AbuseIPDB        -> Confidence of Abuse: 100%
ApiVoid          -> Risk score: 100
ApiVoid          -> Detection rate: 15%
VirusTotal       -> Number of reports saying it is malicious: 3
VirusTotal       -> Number of reports saying it is suspicious: 0
VirusTotal       -> Reputation (<0 is suspicious): 0
VirusTotal       -> Harmless votes: 0
VirusTotal       -> Malicious votes: 0
IpQualityScore   -> Fraud score (>75 is suspicious): 100
IpQualityScore   -> Bot activity: True
IpQualityScore   -> VPN status: True
IpQualityScore   -> Proxy status: True
IpQualityScore   -> Tor status: False
------------------------------------------

Voyant plusieurs services indiquer indiquer que cette adresse IP est malicieuse, on peut en conclure qu’elle est pour le moins suspecte. Il faudra donc analyser finement le comportement de votre équipement qui communique avec cette adresse IP.

Votre avis compte !

Note moyenne : 5 / 5. Nombre de votes : 2

Pas encore de vote pour ce tutoriel

Désolé si cet article ne vous a pas intéressé

Merci de commenter afin que je puisse l’améliorer.

Dites-moi comment améliorer cette page.