Wireshark : Commencer

Réseaux
1425 mots

Introduction

Wireshark est un sniffer relativement puissant et utile lorsqu'il s'agit de faire de l'analyse réseau que ce soit pour vérifier les intrusions ou même simplement savoir si tout se passe bien, on peut rarement s'en passer surtout quand on bosse dans le red teaming.

Prérequis

Installez Wireshark

L'interface de base

Quand vous aurez téléchargé Wireshark et que vous l'aurez démarrer vous tomberait sur un interface similaire à celle ci-dessous. On voit qu'elle est composé de 3 parties :

  • Le "Header" avec toutes les options et les filtres disponibles (on va y venir)
  • La section "Ouvrir" : Cet outil nous permet d'exporter des fichiers .pcap ou .pcapng pour analyser le traffic plus tard ou à d'autres fins, c'est ici que seront répertoriés les fichiers que vous aurez ouverts.
  • La section "Capture" : Ici sont regroupées 2 choses
    • Vos interfaces réseaux :
      • eth0, wlan0 seront en général vos interface (Ethernet ou Wifi) de base
      • vmnet1, vmnet2, vmnet8 sont les interfaces réseaux créées par VMWare
      • Loopback ou lo0 c'est l'interface créée par différents systèmes Linux pour la communication interne
      • docker0 : Interface de Docker hein
      • Etc...
    • Des Manières de Capturer :
      • Ciscodump -> Capture les paquets directement depuis un routeur ou un switch Cisco via SSH ou Telnet (permet d'écouter le traffic sans être connecté physiquement à l'appareil)
      • Dpauxmon -> Peut être utilisé pour capturer des paquets depuis un périphérique réseau avancé.
      • randpkt -> Ne capture pas de vrais packets c'est utile pour faire des tutoriels.
      • Sdjournal -> Permet d'écouter vos journaux systemd (mais c'est ni très utile ni super fonctionnel)
      • sshdump -> Capture les paquets d’un serveur SSH distant via une connexion SSH.
      • udpdump -> Capture uniquement le trafic UDP sur l’interface sélectionnée.
      • wifidump -> Capture les paquets Wi-Fi en mode monitor (si ta carte Wi-Fi le supporte). Permet d’analyser le trafic sans être connecté à un réseau (sniffing Wi-Fi).

Dans cet article on va s'intérresser a la capture sur une interface on va pas aller des les manières de captures détaillées ce sera le sujet d'un autre article.

WireSharkInterfaceDeBase

Première Capture

La base

Pour capturer on va aller sur l'interface eth0 (ou wlan0 si vous l'avez). Nous allons avoir plusieurs nouvelles choses qui vont arriver.

WireSharkInterfaceCapture

Dans la fenêtre centrale on va avoir tous les packets sniffés par wireshark en temps réel. Il y a plusieurs choses qui sont affichées

  • Le numéro du packet
  • Le temps auquel il a été capturé depuis le début de la capture
  • L'adresse IP Source (celle qui a envoyé le packet)
  • L'addresse de destination (celle qui le reçoit)
  • Le protocole utilisé par le paquet (Ici beacoup de UDP utilisé pour la retransmission vidéo)
  • La taille du packet
  • Et les informations (Ici : Port Source -> Port Dest + Taille)

Dans la fenêtre en dessous à gauche, nous avons toutes les informations détaillées liées au paquet. En gros :

  • Le type de trame capturée
  • La liaison Source -> Destination au niveau Ethernet
  • Le protocole (réseau) sur lequel est basé le paquet ici IPv4
  • Le protocole (de transport) ici UDP (User Datagram Protocol)
  • Les données transmises.

Dans la fenêtre en dessous à droite on peut voir les données hexadécimales transmises par le paquet. (En gros tout ce qu'il y a a gauche mais en version hexadécimale.

Les filtres

Tout en haut vous pouvez voir une barre qui attend un input, ou il y a marqué "Appliquer un filtre d'affichage". Ces filtres sont extrêmement utile pour s'arranger la vie lors de l'analyse de gros fichiers pcap ou simplement pour capturer que les paquets qui nous interresse. Voici quelques exemples de filtres :

  • tcp.port == 80 || udp.port == 80 : Capture les paquets TCP & UDP sur les ports 80 (relatif à HTTP, ce serait 443 pour HTTPS)

image

  • ip.addr == 192.168.1.135 : Permet d'afficher les paquets ou l'adresse ip source ou destination est 192.168.1.135 vous pouvez utiliser ip.src & ip.dst pour spécifier si l'adresse doit être celle source ou de destination.
  • ftp.request.command == "USER" || ftp.request.command == "PASS" : Le protocole FTP envoie les données en clair sur le réseau ducoup les commandes d'authentification on peut les voir dans WireShark ce filtre permet de récupérer le login/password ftp sur le réseau qu'on à écouté
  • telnet ce protocole c'est ssh non chiffré ducoup...
  • http.request.method == "POST" : Recherche de credentials dans les données transmises via des formulaires
  • dns && dns.qry.name contains "." : Recherche de requêtes DNS anormalement longues
  • Détection par port tcp utilisé
    • tcp.port == 3389 : Détecter les sessions RDP (Remote Desktop Protocol)
    • tcp.port == 22 : 22 est le port par défault pour les sessions SSH veuillez noter que la plus part des gens avertis le change mais il mettent tous 2222 alors...
    • tcp.port == 4444 : Port de connexion typique utilisé par les hackers pour les ReverseShells ou les Meterpreter
    • tcp.port == 21 : Ecoute de FTP
    • tcp.port == 23 : Ecoute de Telnet
    • tcp.port == 53 : Voir les requêtes dns
    • tcp.port == 67 && tcp.port == 68 : Voir les requêtes DHCP
    • tcp.port == 80 && tcp.port == 443 : Voir le traffic HTTP/HTTPS
    • tcp.port == 25 && tcp.port == 110 && tcp.port == 143 -> SMTP, POP3, IMAP pour tout ce qui est lié aux E-Mails à savoir que leurs versions sécurisées utilisent les ports 993 (POP3), 995 (IMAP)
    • tcp.port == 3306 : Base de données MySQL
    • tcp.port == 5432 : Base de données PostgreSQL
    • tcp.port == 5900 : Protcole VNC (Contrôle à distance)
    • tcp.port == 5938 : TeamViewer (Contrôle à distance)
    • tcp.port == 123 : NTP (Network time Protocol). Utile pour les sessions kerberos et d'autre choses..
    • tcp.port == 389 && tcp.port == 636 : LDAP
    • tcp.port == 445 : SMB Partage de fichiers Windows, Lateral Movement
    • 9001, 9050, 9150 Tor
    • 50050 CobaltStrike
    • 1194, 51820 -> VPN Non légitimes
    • 1080 -> Proxys SOCKS
  • Il en va de même pour UDP
    • udp.port == 69 -> TFTP
    • udp.port == 88 -> Kerberos, protocole de sécurité dans Active Directory mais pas que.
    • Etc...
  • Détection des Scans NMAP
    • tcp.flags == 0x002 -> SYN Scans
    • tcp.flags == 0x001 -> FIN Scans
    • tcp.flags == 0x000 -> NULL Scans
    • tcp.flags == 0x029 -> XMAS Scan
    • tcp.flags == 0x029 -> ACK Scan

Vous pouvez appliquer ces filtres avant ou pendant la capture.

La coloration

La coloration est une autre méthode pour filtrer les paquets plus précisement pour mettre l'accent sur des paquets que vous spécifierez à Wireshark. Vous pouvez le faire de manière temporaire ou persistante. Vous pouvez voir les règles de colorisations déjà établies dans Vue > Règles de colorisation

La manière temporaire

Allez dans Vue > Coloriser la conversation puis sélectionnez une couleur.

La manière persistante

Allez dans Vue > Règles de colorisation. Ca va vous ouvrir une nouvelle fenêtre avec les règles de bases déjà établies par WireShark. En bas à droite cliquez sur le + pour ajouter une nouvelle règle. Dans cette nouvelle règle vous avez le Nom (à gauche) et le filtre (à droite). Par exemple on veut colorier les paquets ou l'ip 192.168.135 est présente

image

image

Ensuite une fois que c'est fait selectionnez le paquet que vous venez de créer puis appliquer les filtres de couleurs sur Couleur de la police & Couleur du fond à côté du + en bas à gauche

image

Et voila lors de votre nouvelle capture vous verrez les paquets dans votre nouvelle couleur (dsl c'est ignoble ici)

image

### Profils Les profils permettent de garder des paramètres que vous aurez spécifier dans Wireshark et de les réutiliser seulement dans le profil que vous aurez créés pour ceci allez dans Editer > Profils de configuration cliquez sur le + puis nommez votre profil. Chaque paramètre que vous entrerez désormais sera sauvegardé sur ce profil et vous pourrez le ré-utiliser à la prochaine ouverture de Wireshark

Lua Console

Comme Nmap, Wireshark utilise lua comme langage de programmation, dans Outils > Lua Console vous pouvez exécuter des scripts Lua pour faire telles ou telles choses spécifiques. Par exemple :

Détecter les connexions sur le port 4444 (Utilisé pour les ReverseShells et les Session Meterpreter en général)

local tcp_port = Field.new("tcp.port")
tap = Listener.new("frame", "tcp.port == 4444")

function tap.packet(pinfo, tvb)
    local port = tcp_port()
    if port then
        print("ALERTE : Connexion suspecte sur le port 4444 !")
    end
end

Voir les mots de passes en clair sur FTP

tap = Listener.new("frame", "ftp")

function tap.packet(pinfo, tvb)
    local payload = tvb():string()
    if string.find(payload, "PASS") then
        print("Mot de passe FTP détecté : " .. payload)
    end
end

Charger ces Scripts

Vous pouvez le faire au démarrage de wireshark : wireshark -X lua_script:ftp_passwords.lua

Ou alors depuis la console Lua : dofile("C:\\chemin\\vers\\ftp_passwords.lua")

Pour améliorer un peu ce script vous pouvez logger les mots de passe dans un fichier en voici un exemple :

local file = io.open("ftp_passwords.log", "a")  -- Ouvre un fichier en mode ajout

tap = Listener.new("frame", "ftp")

function tap.packet(pinfo, tvb)
    local payload = tvb():string()
    if string.find(payload, "PASS") then
        local log_entry = "[ALERTE] Mot de passe FTP détecté : " .. payload .. "\n"
        print(log_entry)
        file:write(log_entry)
        file:flush()  -- Assure que les données sont écrites immédiatement
    end
end

function tap.reset()
    file:close()  -- Ferme le fichier proprement quand Wireshark se ferme
end

Voila tous les mots de passes seront enregistrés dans ftp_passwords.log désormais.

Conclusion

On est loin d'avoir fait le tour de tout ce que vous pouvez faire avec cet outil mais on a déjà pas mal avancé. Si vous voulez voir tous les protocoles supportés par Wireshark vous pouvez vous rendre ici : Wireshark Supported Protocols. Amusez-vous bien.