Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implémentation de "scan" DHCP #33

Open
1ntegrxl opened this issue Mar 11, 2022 · 6 comments
Open

Implémentation de "scan" DHCP #33

1ntegrxl opened this issue Mar 11, 2022 · 6 comments
Assignees
Labels
enhancement Proposition de fonctionnalité

Comments

@1ntegrxl
Copy link
Collaborator

Implémenter fonctionnalité de scan DHCP. Permet notamment d'extraire les champs :

  • Type d'OS.
  • Vendor ID.

Il serait intéressant de regarder ce qu'on pourrait faire avec ce genre d'information (Vendor ID) et quelles sont les types d'attaques possibles si un attaquant dispose de cette information.

@1ntegrxl 1ntegrxl added the enhancement Proposition de fonctionnalité label Mar 11, 2022
@darcosion darcosion assigned darcosion and unassigned 1ntegrxl and AlixCheval Mar 26, 2022
@darcosion
Copy link
Owner

A priori, nmap fera parfaitement l'affaire pour commencer : https://nmap.org/nsedoc/scripts/broadcast-dhcp-discover.html

@darcosion
Copy link
Owner

Un premier jet de scan DHCP a été réalisé : 02a8379

Pour le moment, il peut fonctionner pour la compréhension d'attribution de découverte DHCP, néanmoins il semble incomplet.

Le scan avec nmap.PortScanner() semble ne pas montrer une partie importante que l'on relève en CLI :

$ sudo nmap -F --script broadcast-dhcp-discover 192.168.1.0/24
Starting Nmap 7.80 ( https://nmap.org ) at 2022-04-10 16:21 CEST
Pre-scan script results:
| broadcast-dhcp-discover: 
|   Response 1 of 1: 
|     IP Offered: 192.168.1.11
|     DHCP Message Type: DHCPOFFER
|     Server Identifier: 192.168.1.254
|     IP Address Lease Time: 2m00s
|     Renewal Time Value: 1m00s
|     Rebinding Time Value: 1m45s
|     Broadcast Address: 192.168.1.255
|     Hostname: Host-001
|     Interface MTU: 1500
|     Domain Name Server: 192.168.1.254
|     Domain Name: lan
|     Router: 192.168.1.254
|_    Subnet Mask: 255.255.255.0
Nmap scan report for SomeIP (192.168.1.38)
Host is up (0.0065s latency).
Not shown: 97 closed ports
PORT     STATE SERVICE

Plusieurs scan sont effectués mais je n'ai pas l'impression que les hosts découvert le sont par DHCP. Pire les données retournées dans le dict de PortScanner ne semblent pas correspondre à cette donnée là, donc je ne suis pas sur que le scan DHCP fonctionne et le manque d'information sur cet élément spécifique fait tâche.

A investiguer donc, il se peut que cette première implémentation fasse tâche.

Par ailleurs, pour plus de sécurité, il serait tentant de jouer avec le paramètre broadcast-dhcp-discover.mac.

@darcosion
Copy link
Owner

darcosion commented Apr 10, 2022

Je crois que j'ai saisi le bug.

Par défaut, voici la commande qui est lancée quand on lui spécifie pas de cible : 'command_line': 'nmap -oX - -F --script broadcast-dhcp-discover 127.0.0.1'
On voit clairement qu'il met une adresse par défaut (127.0.0.1) peut-être issu d'une route ou d'une interface ?

Cela montre que cette issue ne pourra être résolue qu'après #66

@darcosion
Copy link
Owner

Autre solution pour ce type de scan : effectuer un scan DHCP depuis scapy directement, puis utiliser ses résultats pour construire le graph du réseau.

@darcosion
Copy link
Owner

Il semblerait en effet que le scriptlet nmap ne resolve pas. En effet :

Sends a DHCP request to the broadcast address (255.255.255.255) and reports the results. By default, the script uses a static MAC address (DE:AD:CO:DE:CA:FE) in order to prevent IP pool exhaustion.
(https://nmap.org/nsedoc/scripts/broadcast-dhcp-discover.html)

Donc ne permet pas de scanner autre chose que le réseau local.
De plus un paquet DHCP demandant une attribution d'IP va mécaniquement toujours être attribué au routeur le plus proche pour faire son traitement.

J'ai tenté l'ajour de l'adresse 255.255.255.255 en dur, mais rien à faire, je pense qu'on est bon pour se le faire avec scapy...

@darcosion
Copy link
Owner

A priori, on peut se baser sur ça : https://scapy.readthedocs.io/en/latest/usage.html#identifying-rogue-dhcp-servers-on-your-lan

>>> from scapy.all import *
>>> conf.checkIPaddr = False
>>> fam,hw = get_if_raw_hwaddr(conf.iface)
>>> dhcp_discover = Ether(dst="ff:ff:ff:ff:ff:ff")/IP(src="0.0.0.0",dst="255.255.255.255")/UDP(sport=68,dport=67)/BOOTP(chaddr=hw)/DHCP(options=[("message-type","discover"),"end"])
>>> ans, unans = srp(dhcp_discover, multi=True)  
Begin emission:
Finished sending 1 packets.
*..........................................................................................................................................................................................................................................................................................................................................................................................................................................

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Proposition de fonctionnalité
Projects
None yet
Development

No branches or pull requests

3 participants