Nmap

Un article de Backtrack-fr.

Sommaire

[modifier] Introduction

Nmap est sans doute le scanner de sécurité le plus connu au monde. Il détecte les ports ouverts avec une rapidité impressionnante. De plus, il est composé d'une panoplie d'options permettant à tout utilisateur d'obtenir le maximum d'informations (Informations de service, version, OS ...).

Il met donc en oeuvre plusieurs types de scans (TCP, UDP, ICMP...) que l'on peut coupler à différentes techniques :

  • IDLE Host Scanning.
  • Spoofing (adresse IP et MAC).
  • Port scanning (mode récursif, aléatoirement, choisis dans une liste et/ou déterminés).
  • Fingerprinting (prise d'empreinte de pile système active et passive, service discovering).
  • ...

Il est décrit comme : flexible, puissant, portable, simple, libre, bien documenté, soutenu par une communauté, reconnu par les professionnels, et enfin populaire !

[modifier] Usage

 nmap [Scan Type(s)] [Options] {target specification}

[modifier] Options

[modifier] Spécifier la(les) cible(s)
   Accepte les noms d'hôtes, les adresses IPs, les réseaux, etc.
   Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
   -iL <inputfilename>: Lire les noms d'hôtes et de réseaux depuis le fichier spécifié
   -iR <num hosts>: Définir les cibles aléatoirement
   --exclude <host1[,host2][,host3],...>: Exclure des hosts et/ou des réseaux
   --excludefile <exclude_file>: Liste d'exclusion depuis le fichier spécifié
[modifier] Découverte de l'host
   -sL: List Scan - liste simplement les cibles scannées
   -sP: Ping Scan - go no further than determining if host is online
   -P0: Partir du principe que tous les hôtes sont connecté au réseau -- ne pas vérifier leur présence
   -PS/PA/PU [portlist]: TCP SYN/ACK or UDP discovery to given ports
   -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
   -n/-R: ne jamais utiliser la résolution d'adresse IP DNS/toujour utiliser la résolution d'adresse IP DNS [par défaut: parfois]
   --dns-servers <serv1[,serv2],...>: Spécifier des serveurs DNS
   --system-dns: Utiliser le résolveur de système d'exploitations par DNS (OS's DNS resolver)
[modifier] Techniques de scan
   -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
   -sU: Scan UDP
   -sN/sF/sX: TCP Null, FIN, and Xmas scans
   --scanflags <flags>: Customize TCP scan flags
   -sI <zombie host[:probeport]>: Idlescan
   -sO: IP protocol scan
   -b <ftp relay host>: FTP bounce scan
[modifier] Spécifier le port
   -p <port ranges>: Scanner seulement les ports spécifiés
     Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080
   -F: Fast - Scanner uniquement les ports listés dans le fichier nmap-services
   -r: Scanner consécutivement les ports - pas aléatoirement
[modifier] Types de détection des services et versions
   -sV: Examine les ports scannés pour déterminer les services (et leur version) potentiellement présents
   --version-intensity <level>: Set from 0 (light) to 9 (try all probes)
   --version-light: Limit to most likely probes (intensity 2)
   --version-all: Try every single probe (intensity 9)
   --version-trace: Afficher la version détaillée de l'action du scan (option pour debugger)
[modifier] Détection d'OS
   -O: Activer la détection de systèmes d'exploitations (try 2nd generation w/fallback to 1st)
   -O2: Utiliser seulement la nouvelle (2ème version) méthode de détection (no fallback)
   -O1: Utiliser seulement la vielle (1ère version) méthode de détection
   --osscan-limit: Limit OS detection to promising targets
   --osscan-guess: Guess OS more aggressively
[modifier] Synchronisations et perfomances
   Options which take <time> are in milliseconds, unless you append 's'
   (seconds), 'm' (minutes), or 'h' (hours) to the value (e.g. 30m).
   -T[0-5]: Set timing template (higher is faster)
   --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
   --min-parallelism/max-parallelism <time>: Probe parallelization
   --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <time>: Specifies
       probe round trip time.
   --max-retries <tries>: Caps number of port scan probe retransmissions.
   --host-timeout <time>: Give up on target after this long
   --scan-delay/--max-scan-delay <time>: Adjust delay between probes
[modifier] Spoofing et contournement d'IDS/Parefeu
   -f; --mtu <val>: fragment packets (optionally w/given MTU)
   -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
   -S <IP_Address>: Spoofer l'adresse source
   -e <iface>: Utilier l'interface réseau à utiliser
   -g/--source-port <portnum>: Use given port number
   --data-length <num>: Append random data to sent packets
   --ip-options <options>: envois les packets réseaux avec les options IP spécifiées
   --ttl <val>: Définir le champs TTL (Time To Live)
   --spoof-mac <mac address/prefix/vendor name>: Spoofer votre adresse MAC
   --badsum: Envoyer les packets réseaux avec une checksum TCP/UDP buggé
[modifier] Informations de sortie
   -oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
     and Grepable format, respectively, to the given filename.
   -oA <basename>: Output in the three major formats at once
   -v: Augmenter la précision des informations (peut-être utiliser deux fois pour plus d'effet)
   -d[level]: Définir le niveau de précision des information de débuggage (maximum à 9)
   --open: Afficher seulement les ports potentiellement ouverts
   --packet-trace: Afficher tous les packets réseau envoyés et reçus
   --iflist: Print host interfaces and routes (for debugging)
   --log-errors: Enregistrer les messages d'erreurs et d'avertissements dans le format normal de sortie de fichier
   --append-output: Append to rather than clobber specified output files
   --resume <filename>: Reprendre un scan intérompu
   --stylesheet <path/URL>: Spécifier une feuille de style XSL pour transformer la sortie XML en HTML
   --webxml: Reference stylesheet from Insecure.Org for more portable XML
   --no-stylesheet: Prevent associating of XSL stylesheet w/XML output
[modifier] Divers
   -6: Activer le mode IPv6
   -A: Activer la détection de systèmes d'exploitation et de leur version
   --datadir <dirname>: Specify custom Nmap data file location
   --send-eth/--send-ip: Send using raw ethernet frames or IP packets
   --privileged: Partir du principe que l'utilisateur à tous les privillèges
   --unprivileged: Assume the user lacks raw socket privileges
   -V: Afficher le numéro de version
   -h: Afficher cette page d'aide

[modifier] Exemples

Lister simplement les hôtes en ligne sur la plage 1-254 d'une adresse ip de classe C (192.168.1.xxx) :

 bt ~ # nmap -n -sP 192.168.1.1-254
 Starting Nmap 4.50 ( http://insecure.org ) at 2008-03-01 03:35 GMT
 Host 192.168.1.1 appears to be up.
 MAC Address: 00:19:4B:12:33:AC (Sagem Communication)
 Host 192.168.1.11 appears to be up.
 MAC Address: 00:12:BF:AF:23:04 (Intel Corporate)
 Nmap done: 254 IP addresses (2 hosts up) scanned in 6.240 seconds

Proposer un fichier xml en sortie (Interressant pour des rapports de scan), en activant la détection de l'OS(-0), tout en forcant la présence de l'hôte(-P0), celà au travers d'un scan banal(déconseillé si vous voulez être furtif!) :

 bt ~ # nmap -n -0 -P0 192.168.1.11 -oX rscan-11.xml

L'attaque par decoys(ou leurres) génére de faux paquets, afin de tromper la cible sur la provenance du scan. Celà permet de se noyer dans la masse, et de surcharger la cible de log. Les IP qui serviront de leurres sont suivis de l'option -D, la cible du scan est ici 192.168.1.11 :

 bt ~ # nmap -n -D192.168.1.10,192.168.1.59 192.168.1.11 

Scan de type OS et services de détection:

 bt ~ # nmap -vv -A 127.0.0.1
 
 Starting Nmap 4.20 ( http://insecure.org ) at 2007-08-03 02:25 CEST
 Initiating SYN Stealth Scan at 02:25
 Scanning bt.example.net (127.0.0.1) [1697 ports]
 Discovered open port 25/tcp on 127.0.0.1
 Discovered open port 113/tcp on 127.0.0.1
 Discovered open port 631/tcp on 127.0.0.1
 Discovered open port 6000/tcp on 127.0.0.1
 Discovered open port 37/tcp on 127.0.0.1
 Discovered open port 587/tcp on 127.0.0.1
 Completed SYN Stealth Scan at 02:25, 0.08s elapsed (1697 total ports)
 Initiating Service scan at 02:25
 Scanning 6 services on bt.example.net (127.0.0.1)
 Completed Service scan at 02:25, 6.01s elapsed (6 services on 1 host)
 Initiating OS detection (try #1) against bt.example.net (127.0.0.1)
 Host bt.example.net (127.0.0.1) appears to be up ... good.
 Interesting ports on bt.example.net (127.0.0.1):
 Not shown: 1691 closed ports
 PORT     STATE SERVICE VERSION
 25/tcp   open  smtp    Sendmail 8.13.8/8.13.8
 37/tcp   open  time     (32 bits)
 113/tcp  open  ident   OpenBSD identd
 587/tcp  open  smtp    Sendmail 8.13.8/8.13.8
 631/tcp  open  ipp     CUPS 1.1
 6000/tcp open  X11      (access denied)
 Device type: general purpose
 Running: Linux 2.6.X
 OS details: Linux 2.6.17-10.33 (Ubuntu)
 OS Fingerprint:
 OS:SCAN(V=4.20%D=8/3%OT=25%CT=1%CU=32915%PV=N%DS=0%G=Y%TM=46B27600%P=i686-p
 OS:c-linux-gnu)SEQ(SP=CD%GCD=1%ISR=CD%TI=Z%II=I%TS=8)OPS(O1=M400CST11NW2%O2
 OS:=M400CST11NW2%O3=M400CNNT11NW2%O4=M400CST11NW2%O5=M400CST11NW2%O6=M400CS
 OS:T11)WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000%W6=8000)ECN(R=Y%DF=Y%T=4
 OS:0%W=8018%O=M400CNNSNW2%CC=N%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2
 OS:(R=N)T3(R=Y%DF=Y%T=40%W=8000%S=O%A=S+%F=AS%O=M400CST11NW2%RD=0%Q=)T4(R=Y
 OS:%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR
 OS:%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40
 OS:%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%TOS=C0%IPL=164%UN=0%RIPL=
 OS:G%RID=G%RIPCK=G%RUCK=G%RUL=G%RUD=G)IE(R=Y%DFI=N%T=40%TOSI=S%CD=S%SI=S%DL
 OS:I=S)
 
 Uptime: 0.823 days (since Thu Aug  2 06:40:57 2007)
 Network Distance: 0 hops
 TCP Sequence Prediction: Difficulty=205 (Good luck!)
 IPID Sequence Generation: All zeros
 Service Info: OSs: Unix, OpenBSD
 
 OS and Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ .
 Nmap finished: 1 IP address (1 host up) scanned in 7.481 seconds
               Raw packets sent: 1716 (76.266KB) | Rcvd: 3441 (145.712KB)

Utilisation de la sortie grepable pour afficher uniquement les IP avec le port défini ouvert:

 bt ~ # nmap -p80 -oG - 10.0.0.0/24 | awk '/open/{print $2}'
 
 10.0.0.1
 10.0.0.2
 10.0.0.3
 10.0.0.4
 10.0.0.10
 10.0.0.12

[modifier] Références