original in de Klaus Müller
de to en Hubert Kaißer
en to fr Georges Tarbouriech
--------------------------------
| Internet |
--------------------------------
|
|
----------------------------------
| Pare-feu |
----------------------------------
|
-------------
| Capteur |
-------------
|
-----------------
| LAN |
-----------------
Il ne s'agit que d'une possibilité qui sert à montrer que les capteurs ne se
situent pas entre la DMZ et le pare-feu. Si l'expression DMZ ne vous dit
rien, elle signifie "zone démilitarisée", autrement dit, une zone sécurisée
de tous les côtés.
--------------------------------
| Internet |
--------------------------------
|
----------------------------
| Capteur |
----------------------------
|
----------------------------
| Pare-feu |
----------------------------
|
-----------------
| LAN |
-----------------
Les capteurs sont souvent placés à l'extérieur du pare-feu externe comme
indiqué sur le graphique. La raison en est que le capteur peut recevoir et
analyser l'ensemble du trafic de l'Internet. Si vous placez le capteur ici,
il n'est pas certain que toutes les attaques soient filtrées et détectées,
par exemple les attaques TCP. Dans ce cas, vous devrez essayer de détecter
l'attaque en utilisant des signatures (vous en saurez plus sur les
signatures dans le chapitre correspondant).
Pourtant, cet emplacement est le préféré de nombreux experts parce qu'il
offre l'avantage d'écrire dans les logs et d'analyser les attaques (vers le
pare-feu...), ainsi l'administrateur voit ce qu'il doit modifier dans la
configuration du pare-feu.
-------------------
| Application |
-------------------
|
-------------------
| IDS |
-------------------
|
-------------------
| Utilisateur |
-------------------
-------------------------
| Internet |
-------------------------
|
-------------------------
| Pare-feu ext. |
-------------------------
|
-------------------------
| Pot de miel | <---- dans la DMZ
-------------------------
|
-------------------------
| Pare-feu int. |
-------------------------
....
Host (192.168.0.0) seems to be a subnet broadcast address (returned 1
extra pings).
Skipping host. Interesting ports on playground.yuma.net 192.168.0.1):
Port State Protocol Service
22 open tcp ssh
111 open tcp sunrpc
635 open tcp unknown
1024 open tcp unknown
2049 open tcp nfs
TCP Sequence Prediction: Class = random positive increments
Difficulty=3916950 (Good luck!)
Remote operating system guess:
Linux 2.1.122 - 2.1.132; 2.2.0-pre1 - 2.2.2
Interesting ports on vectra.yuma.net (192.168.0.5):
Port State Protocol Service
13 open tcp daytime
21 open tcp ftp
22 open tcp ssh
23 open tcp telnet
37 open tcp time
79 open tcp finger
111 open tcp sunrpc
113 open tcp auth
513 open tcp login
514 open tcp shell
TCP Sequence Prediction: Class = random positive increments
Difficulty = 17719 (Worthy challenge)
Remote operating system guess: OpenBSD 2.2. - 2.3
Nmap run completed -- 256 IP addresses (2 hosts up) scanned in 6 seconds
Principalement, vous obtenez ce qui suit :
[Socma]$ nmap -sT localhost Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ ) Interesting ports on Diablo (127.0.0.1): (The 1552 ports scanned but not shown below are in state: closed) Port State Service 21/tcp open ftp 23/tcp open telnet 80/tcp open http 111/tcp open sunrpc 113/tcp open auth 6000/tcp open X11 Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
02:10:15.804704 Diablo > Diablo: icmp: echo request
4500 001c 2db8 0000 3501 5a27 7f00 0001
7f00 0001 0800 fc95 fb69 0000
02:10:15.814704 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 0496 fb69 0000
02:10:15.814704 Diablo.58725 > Diablo.http: . ack 110306597 win 3072
4500 0028 d223 0000 2a06 c0aa 7f00 0001
7f00 0001 e565 0050 ad48 0003 0693 2525
5010 0c00 e718 0000
02:10:15.814704 Diablo.http > Diablo.58725: R 110306597:110306597(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 e565 0693 2525 0000 0000
5004 0000 a070 0000
02:10:16.114704 Diablo.1727 > Diablo.821: S 196002918:196002918(0)
win 32767 <mss 16396,sackOK,timestamp 213509[|tcp]> (DF)
4500 003c 8663 4000 4006 b656 7f00 0001
7f00 0001 06bf 0335 0bae c466 0000 0000
a002 7fff 739c 0000 0204 400c 0402 080a
0003 4205
02:10:16.114704 Diablo.821 > Diablo.1727: R 0:0(0) ack 196002919
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0335 06bf 0000 0000 0bae c467
5014 0000 d7c4 0000
02:10:16.114704 Diablo.1728 > Diablo.440: S 195504823:195504823(0)
win 32767 <mss 16396,sackOK,timestamp 213509[|tcp]> (DF)
4500 003c 68b2 4000 4006 d407 7f00 0001
7f00 0001 06c0 01b8 0ba7 2ab7 0000 0000
a002 7fff 0ecf 0000 0204 400c 0402 080a
0003 4205
[Socma]$ nmap -sU localhost Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ ) Interesting ports on Diablo (127.0.0.1): (The 1459 ports scanned but not shown below are in state: closed) Port State Service 111/udp open sunrpc Nmap run completed -- 1 IP address (1 host up) scanned in 4 seconds
10:41:55.954397 Diablo > Diablo: icmp: echo request
4500 001c cc8f 0000 2801 c84f 7f00 0001
7f00 0001 0800 8471 738e 0000
10:41:55.954397 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 8c71 738e 0000
10:41:55.964397 Diablo.63793 > Diablo.http: . ack 994287972 win 2048
4500 0028 79e3 0000 2506 1deb 7f00 0001
7f00 0001 f931 0050 06d8 0003 3b43 a164
5010 0800 cccd 0000
10:41:55.964397 Diablo.http > Diablo.63793: R 994287972:994287972(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 f931 3b43 a164 0000 0000
5004 0000 dbb4 0000
10:41:56.274397 Diablo.63773 > Diablo.15: udp 0
4500 001c 8a0b 0000 3011 02c4 7f00 0001
7f00 0001 f91d 000f 0008 08af
10:41:56.274397 Diablo > Diablo: icmp: Diablo udp port 15
unreachable (DF) [tos 0xc0]
45c0 0038 0000 4000 ff01 7d02 7f00 0001
7f00 0001 0303 fb18 0000 0000 4500 001c
8a0b 0000 3011 02c4 7f00 0001 7f00 0001
f91d 000f
10:41:56.274397 Diablo.63773 > Diablo.1459: udp 0
4500 001c 6c2f 0000 3011 20a0 7f00 0001
7f00 0001 f91d 05b3 0008 030b
10:41:56.274397 Diablo > Diablo: icmp: Diablo udp port 1459
unreachable (DF) [tos 0xc0]
45c0 0038 0100 4000 ff01 7c02 7f00 0001
7f00 0001 0303 fb18 0000 0000 4500 001c
6c2f 0000 3011 20a0 7f00 0001 7f00 0001
f91d 05b3
Une autre variante de scan UDP (scan UDPrecvfrom() et write()) consiste
à scanner chaque port deux fois. La méthode utilise ICMP et
"Port Unreachable", mais seul root reçoit ce message. Si vous scannez un
port fermé deux fois, vous obtenez après le second scan :
"Error 13 : Try Again"...
[Socma]$ nmap -sA localhost
Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ )
All 1558 scanned ports on Diablo (127.0.0.1) are: UNfiltered
Nmap run completed -- 1 IP address (1 host up) scanned in 6 seconds
The tcpdump trace:
10:45:51.864397 Diablo > Diablo: icmp: echo request
4500 001c 1617 0000 3901 6dc8 7f00 0001
7f00 0001 0800 113d e6c2 0000
10:45:51.864397 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 193d e6c2 0000
10:45:51.864397 Diablo.53119 > Diablo.http: . ack 2682022466 win 3072
4500 0028 0dda 0000 3206 7cf4 7f00 0001
7f00 0001 cf7f 0050 0650 0003 9fdc 6a42
5010 0c00 c590 0000
10:45:51.864397 Diablo.http > Diablo.53119: R 2682022466:2682022466(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 cf7f 9fdc 6a42 0000 0000
5004 0000 d7ef 0000
10:45:52.164397 Diablo.53099 > Diablo.14: . ack 2457451592 win 3072
4500 0028 218d 0000 3206 6941 7f00 0001
7f00 0001 cf6b 000e 5938 4710 9279 bc48
5010 0c00 e74d 0000
10:45:52.164397 Diablo.14 > Diablo.53099: R 2457451592:2457451592(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 000e cf6b 9279 bc48 0000 0000
5004 0000 93a2 0000
10:45:52.164397 Diablo.53099 > Diablo.imap3: . ack 2457451592 win 3072
4500 0028 a075 0000 3206 ea58 7f00 0001
7f00 0001 cf6b 00dc 5938 4710 9279 bc48
5010 0c00 e67f 0000
------------------ SYN ------------- | Host A | ---------------------------- > | Host B | ------------------ ------------- ------------------ ACK/SYN ------------- | Host A | <----------------------------| Host B | ------------------ ------------- ------------------ ACK ------------- | Host A | ---------------------------- > | Host B | ------------------ -------------
------------------ SYN ------------- | Host A | ---------------------------- > | Host B | ------------------ ------------- ------------------ ACK/SYN ------------- | Host A | <----------------------------| Host B | ------------------ -------------Ce diagramme ressemble au three-way-handshake mais avec une différence : il n'y a pas de connexion entre A et B. L'hôte B pense que la connexion existe alors qu'elle n'existe pas tant que A n'envoie pas un ACK supplémentaire à B (on appelle cela un port à moitié ouvert). Le scan SYN montré ci-dessus implique l'ouverture du port sur l'hôte cible (en raison du ACK/SYN), s'il était fermé on obtiendrait en retour un RST/ACK.
[Socma]$ nmap -sS localhost
Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ )
Interesting ports on Diablo (127.0.0.1):
(The 1552 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
23/tcp open telnet
80/tcp open http
111/tcp open sunrpc
113/tcp open auth
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 3 seconds
Trace tcpdump :
10:47:41.674397 Diablo > Diablo: icmp: echo request
4500 001c 8f08 0000 3501 f8d6 7f00 0001
7f00 0001 0800 99a9 5e56 0000
10:47:41.674397 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 a1a9 5e56 0000
10:47:41.674397 Diablo.58038 > Diablo.http: . ack 1561498752 win 3072
4500 0028 afe5 0000 3206 dae8 7f00 0001
7f00 0001 e2b6 0050 82b0 0003 5d12 9480
5010 0c00 4e85 0000
10:47:41.674397 Diablo.http > Diablo.58038: R 1561498752:1561498752(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 e2b6 5d12 9480 0000 0000
5004 0000 dd44 0000
10:47:41.984397 Diablo.58018 > Diablo.1488: S 2803535203:2803535203(0)
win 3072
4500 0028 a4f5 0000 3206 e5d8 7f00 0001
7f00 0001 e2a2 05d0 a71a 8d63 0000 0000
5002 0c00 88ef 0000
10:47:41.984397 Diablo.1488 > Diablo.58018: R 0:0(0) ack 2803535204
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 05d0 e2a2 0000 0000 a71a 8d64
5014 0000 94dc 0000
Voici maintenant d'autres types de scans : le FIN, le NULL et le XMAS. Le
scan FIN envoie seulement un message FIN à l'hôte cible, même s'il n'existe
pas de connexion entre eux. Si le port est fermé un RST est renvoyé, sinon,
rien ne se passe.
[Socma]$ nmap -sF localhost
Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ )
Interesting ports on Diablo (127.0.0.1):
(The 1552 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
23/tcp open telnet
80/tcp open http
111/tcp open sunrpc
113/tcp open auth
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 6 seconds
Trace tcpdump :
10:48:28.704397 Diablo > Diablo: icmp: echo request
4500 001c b29d 0000 3401 d641 7f00 0001
7f00 0001 0800 a1a7 5658 0000
10:48:28.704397 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 a9a7 5658 0000
10:48:28.704397 Diablo.52201 > Diablo.http: . ack 2873378189 win 4096
4500 0028 cbeb 0000 2b06 c5e2 7f00 0001
7f00 0001 cbe9 0050 9020 0003 ab44 458d
5010 1000 54a3 0000
10:48:28.704397 Diablo.http > Diablo.52201: R 2873378189:2873378189(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 cbe9 ab44 458d 0000 0000
5004 0000 f4d2 0000
10:48:29.004397 Diablo.52181 > Diablo.233: F 0:0(0) win 4096
4500 0028 10c6 0000 2b06 8108 7f00 0001
7f00 0001 cbd5 00e9 0000 0000 0000 0000
5001 1000 d522 0000
10:48:29.004397 Diablo.233 > Diablo.52181: R 0:0(0) ack 1 win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 00e9 cbd5 0000 0000 0000 0001
5014 0000 e50e 0000
Les scans NULL et XMAS offrent un intérêt particulier (surtout utilisés
conjoitement à une détection d'anomalie de protocole).
Il se nomme XMAS parce que tous les drapeaux sont actifs :
SYN, ACK, FIN, URG, PUSH. Comme pour les scans FIN, un RST est renvoyé si le
port est fermé.
[Socma]$ nmap -sX localhost
Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ )
Interesting ports on Diablo (127.0.0.1):
(The 1552 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
23/tcp open telnet
80/tcp open http
111/tcp open sunrpc
113/tcp open auth
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds
Trace tcpdump :
10:44:24.004397 Diablo > Diablo: icmp: echo request
4500 001c ffcc 0000 2a01 9312 7f00 0001
7f00 0001 0800 103d e7c2 0000
10:44:24.004397 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 183d e7c2 0000
10:44:24.004397 Diablo.36398 > Diablo.http: . ack 718216305 win 2048
4500 0028 2e28 0000 2906 65a6 7f00 0001
7f00 0001 8e2e 0050 9220 0003 2acf 1c71
5010 0800 41f0 0000
10:44:24.004397 Diablo.http > Diablo.36398: R 718216305:718216305(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 8e2e 2acf 1c71 0000 0000
5004 0000 dc1f 0000
10:44:24.304397 Diablo.36378 > Diablo.1996: FP 0:0(0) win 2048 urg 0
4500 0028 7651 0000 2906 1d7d 7f00 0001
7f00 0001 8e1a 07cc 0000 0000 0000 0000
5029 0800 13d3 0000
10:44:24.304397 Diablo.1996 > Diablo.36378: R 0:0(0) ack 1 win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 07cc 8e1a 0000 0000 0000 0001
5014 0000 1be7 0000
L'autre possibilité, nommée scan NULL, signifie qu'aucun drapeau n'est
actif, et si le port est fermé un RST est renvoyé.
[Socma]$ nmap -sN localhost
Starting nmap V. 2.54BETA36 ( www.insecure.org/nmap/ )
Interesting ports on Diablo (127.0.0.1):
(The 1552 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
23/tcp open telnet
80/tcp open http
111/tcp open sunrpc
113/tcp open auth
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds
Trace tcpdump :
10:43:37.594397 Diablo > Diablo: icmp: echo request
4500 001c 2ecf 0000 2c01 6210 7f00 0001
7f00 0001 0800 8f87 6878 0000
10:43:37.594397 Diablo > Diablo: icmp: echo reply (DF)
4500 001c 0000 4000 ff01 7dde 7f00 0001
7f00 0001 0000 9787 6878 0000
10:43:37.604397 Diablo.34607 > Diablo.http: . ack 1932747046 win 4096
4500 0028 ee0f 0000 3706 97be 7f00 0001
7f00 0001 872f 0050 5b20 0003 7333 6126
5010 1000 ead5 0000
10:43:37.604397 Diablo.http > Diablo.34607: R 1932747046:1932747046(0)
win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0050 872f 7333 6126 0000 0000
5004 0000 5605 0000
10:43:37.904397 Diablo.34587 > Diablo.408: . win 4096
4500 0028 e3bb 0000 3706 a212 7f00 0001
7f00 0001 871b 0198 0000 0000 0000 0000
5000 1000 192f 0000
10:43:37.904397 Diablo.408 > Diablo.34587: R 0:0(0) ack 0 win 0 (DF)
4500 0028 0000 4000 ff06 7dcd 7f00 0001
7f00 0001 0198 871b 0000 0000 0000 0000
5014 0000 291b 0000
Puisque le "three-way-handshake" complet n'est pas nécessaire, le scan
furtif est plus discret que le scan TCP (comme déjà mentionné). Un IDS
devrait toujours détecter ce genre d'anomalies (XMAS et NULL)... ---------- -------------- ---------- | VOUS | <------------> | Dumb host | <---------->| CIBLE | ---------- -------------- ----------Un Dumb host doit avoir un trafic aussi réduit que possible. Pourquoi est-il nécessaire d'utiliser un dumb host ? Ces questions mènent à la véritable attaque et aussi à l'explication de la nécessité d'un dumb host. Afin de découvrir si un port de "CIBLE" est ouvert ou fermé, vous devez examiner le champ ID de l'adresse IP du dumb host. Pour ce faire, vous devez lui envoyer un paquet (echo request) et grâce à sa réponse vous pouvez lire le champ ID (sa valeur). Vous pouvez donc envoyer un paquet à CIBLE dans lequel l'adresse source est celle du dumb host. La réponse est donc reçue par ce dumb host. S'il reçoit un SYN/ACK de CIBLE, ça signifie que le port est ouvert. Pour répondre, notre dumb host enverra un paquet dans lequel le drapeau RST est activé. S'il reçoit un RST/ACK de CIBLE, il ne répondra pas. Pour connaître les réponses que le dumb host a reçu de CIBLE, il faut envoyer un autre ping à dumb host. Si le port de la cible est ouvert et qu'il a répondu par RST, le champ ID de l'adresse IP du dumb host sera incrémenté. Si le port est fermé, rien ne se passe. En lisant la nouvelle valeur d'ID de l'adresse IP du dumb host, vous pouvez savoir si les ports sont ouverts ou fermés. La raison pour laquelle nous utilisons un dumb host (un hôte avec peu de trafic) devrait maintenant être plus claire. Si le trafic est trop important il sera beaucoup plus difficile de découvrir les ports ouverts (sur CIBLE), et la probabilité de commettre une erreur sera proportionnellement plus élevée.
--------------------------------------------------- | Type | Code | Checksum | --------------------------------------------------- | Representer | Sequence | --------------------------------------------------- | Originate Timestamp | --------------------------------------------------- | Receive Stamp | --------------------------------------------------- | Transmit Timestamp | ---------------------------------------------------Avant d'aborder l'utilisation de Time Stamp Request pour un attaquant voici quelques bases sur les "time stamps". Pour nous, seuls les trois derniers champs sont importants. Voici la partie correspondante de la RFC :
L'"Originate Timestamp" est l'heure à laquelle l'expéditeur a modifié pour la dernière fois le message avant de l'envoyer, le "Receive Timestamp" est l'heure à laquelle le destinataire l'a modifié dès réception et le "Transmit Timestamp" est l'heure à laquelle le destinataire l'a modifié avant envoi."
11:38:37.898253 Diablo > Diablo: icmp: time stamp query id 53763 seq 64548
(ttl 254, id 13170, len 40)
4500 0028 3372 0000 fe01 8b60 7f00 0001
7f00 0001 0d00 61fb d203 fc24 0211 c0ca
0000 0000 0000 0000
11:38:37.898253 Diablo > Diablo: icmp: time stamp reply id 53763 seq 64548 :
org 0x211c0ca recv 0x211c0ca xmit 0x211c0ca (DF) (ttl 255, id 0, len 40)
4500 0028 0000 4000 ff01 7dd2 7f00 0001
7f00 0001 0e00 db43 d203 fc24 0211 c0ca
0211 c0ca 0211 c0ca
ICMP Information Request / Reply (RFC 792): "Ce message peut être
envoyé avec le réseau source dans l'entête IP source et l'adresse de
destination avec les champs à zéro (ce qui signifie "ce" réseau). Le module
IP doit envoyer la réponse avec les adresses complètes. Ce message
est un moyen pour l'hôte de connaître le numéro du réseau sur lequel il se
trouve."
L'adresse de la source dans un message de demande d'information sera la destination du message de réponse. Pour former un message de réponse, les adresses source et destination sont simplement inversées.
------------------------------------------------------------------ | Type | Code | Checksum | ------------------------------------------------------------------ | Pointer | Sequence | ------------------------------------------------------------------C'est comme si vous ne pouviez envoyer une demande d'information qu'à l'intérieur d'un même réseau (voir ci-dessus), ce qui n'a pas de raison d'être. Certains systèmes d'exploitation répondent à une demande d'information. Dans une telle réponse on reçoit l'adresse IP de l'hôte et non le numéro du réseau.
11:42:35.608253 Diablo > Diablo: icmp: information request (ttl 255,
id 13170, len 28)
4500 001c 3372 0000 ff01 8a6c 7f00 0001
7f00 0001 0f00 1afc d603 0000
11:42:36.608253 Diablo > Diablo: icmp: information request (ttl 255,
id 13170, len 28)
4500 001c 3372 0000 ff01 8a6c 7f00 0001
7f00 0001 0f00 19fc d603 0100
ICMP Address Mask Request / Reply (RFC 950): l'Address Mask
Request (type 17) a été décrit dans une autre RFC. Pour plus ample
information, consultez la RFC950 et non la 792. Le rôle et l'utilisation
d'un "Address Mask Request" consiste à obtenir le masque de sous-réseau d'un
réseau donné. Si une passerelle reçoit une telle requête elle doit renvoyer
l'information correspondante au noeud concerné
(Address Mask Reply - type 18).
------------------------------------------------------------ | Type | Code | Checksum | ------------------------------------------------------------ | Flag | Sequence | ------------------------------------------------------------ | Address Mask | ------------------------------------------------------------Ceci permet, non seulement de découvrir les hôtes (connectés) du réseau mais aussi la configuration du réseau grâce à quelques tests supplémentaires.
11:45:26.678253 Diablo > Diablo: icmp: address mask request (ttl 254, id
13170, len 32)
4500 0020 3372 0000 fe01 8b68 7f00 0001
7f00 0001 1100 edd7 dc03 2524 0000 0000
J'espère que cette partie a montré les nombreuses possibilités destinées à
obtenir de l'information sur un réseau sans passer par le ping "habituel".
Les différentes RFC décrivent la plupart de ces astuces que vous devez prendre en
compte si vous voulez "supporter" les différents types de requêtes. Les
développeurs d'IDS devraient aussi considérer ces particularités. Si vous
devez les utiliser vous devez vérifier que tout se passe de manière conforme
(voir les RFC). Mais ce n'est pas tout comme vous le verrez dans la partie
suivante.
Si la passerelle ou l'hôte analysant un datagramme découvre un problème avec les paramètres de l'entête l'empêchant d'analyser correctement le datagramme, ce dernier doit être supprimé. Une des sources de ce type de problème peut venir d'arguments incorrects dans une option. La passerelle ou l'hôte peuvent aussi informer l'hôte source par l'intermédiaire du message de problème de paramètre. Ce message n'est envoyé que si l'erreur a abouti à la suppression du datagramme.
Un hôte DEVRAIT générer des messages de problème de paramètre. Un message de problème de paramètre DOIT être passé à la couche transport et il PEUT être envoyé à l'utilisateur. DISCUSSION: Le message de problème de paramètre ICMP est envoyé à l'hôte source si le problème n'est pas géré par un autre message ICMP. La réception de ce message indique en général une erreur de configuration distante ou locale.Dans l'ensemble, il s'agit d'un bon moyen de découvrir les hôtes d'un réseau.
4.3.3.5 Problème de paramètre Un routeur DOIT générer un message de problème de paramètre pour toute erreur non gérée par d'autres messages ICMP. Le champ de l'entête IP ou l'option IP contenant l'octet indiqué dans le champ du pointeur DOIT être inclus dans l'entête IP renvoyé par ce message ICMP. La section [4.3.2] décrit l'exception à cette règle.Pourtant, de nombreux routeurs interprètent cette section (et bien d'autres) différemment, ainsi ce problème de paramètre n'est pas toujours notifié.
Le message ICMP Destination Unreachable est envoyé par un routeur en réponse à un paquet qu'il ne peut pas acheminer parce que la destination est inaccessible ou que le service n'est pas disponible. Les exemples de tels cas comprennent les messages adressés à un hôte qui n'est pas connecté et qui par conséquent ne répond pas aux requêtes ARP et les messages adressés à des préfixes réseau pour lesquels le routeur ne possède pas de route valide. Un routeur DOIT être capable de générer des messages ICMP Destination Unreachable et DOIT choisir un code de réponse qui corresponde le mieux possible à la cause de la création de ce message. 0 = Network Unreachable (Réseau inaccessible) - généré par un routeur si aucune route vers le réseau de destination n'est disponible; 1 = Host Unreachable (Hôte inaccessible) - généré par un routeur si aucune route vers l'hôte de destination d'un réseau directement connecté n'est disponible (pas de réponses aux requêtes ARP); 2 = Protocol Unreachable (Protocole inaccessible) - généré si le protocole de transport défini dans un datagramme n'est pas supporté par la couche de transport de la destination finale; 3 = Port Unreachable (Port inaccessible) - généré si le protocole de transport défini (UDP par exemple) est incapable de "démultiplexer" le datagramme de la couche de transport de la destination finale et n'a pas de mécanisme pour en informer l'expéditeur; 4 = Fragmentation Needed and DF Set (Fragmentation nécessaire et drapeau DF actif)- généré si un routeur doit fragmenter un datagramme et ne peut y arriver parce que le drapeau DF est actif; 5 = Source Route Failed (Echec de la route source) - généré si le routeur ne peut pas acheminer un paquet vers le saut suivant dans une option de route source; 6 = Destination Network Unknown (Réseau de destination inconnu) - ce code ne DEVRAIT PAS être généré puisqu'il implique côté routeur que le réseau de destination n'existe pas (le code 0 net unreachable (réseau inaccessible) DEVRAIT être préféré au code 6); 7 = Destination Host Unknown (Hôte de destination inconnu) - généré seulement lorsqu'un routeur peut déterminer (selon la couche lien) que l'hôte de destination n'existe pas; 11 = Network Unreachable For Type Of Service (Réseau inaccessible pour le Type de Service) - généré par un routeur si la route vers le réseau de destination ou le Type de Service par défaut ne sont pas disponibles; 12 = Host Unreachable For Type Of Service (Hôte inaccessible pour le Type de Service)- généré si un routeur ne peut pas acheminer un paquet parce que sa (ses) route vers la destination ne correspond pas soit au Type de Service demandé dans le datagramme, soit au Type de Service par défaut (0).Si nous essayons, par exemple, d'envoyer un paquet à un port qui utilise un protocole n'existant pas, nous devrions recevoir une notification de Destination Unreachable avec un code de valeur 2 (Protocol Unreachable). Dans cet exemple, vous devez aussi savoir quels sont les protocoles admis. Vous les trouverez dans /etc/protocols. Après installation de l'un de mes hôtes, voici à quoi il ressemble :
-------------- /etc/protocols ----------------
# /etc/protocols:
# $Id: protocols,v 1.2 2001/01/29 17:29:30 notting Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
#
# See also http://www.isi.edu/in-notes/iana/assignments/protocol-numbers
ip 0 IP # internet protocol, pseudo protocol number
#hopopt 0 HOPOPT # hop-by-hop options for ipv6
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # internet group management protocol
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
cbt 7 CBT # CBT, Tony Ballardie
egp 8 EGP # exterior gateway protocol
igp 9 IGP # any private interior gateway
# (Cisco: for IGRP)
bbn-rcc 10 BBN-RCC-MON # BBN RCC Monitoring
nvp 11 NVP-II # Network Voice Protocol
pup 12 PUP # PARC universal packet protocol
argus 13 ARGUS # ARGUS
emcon 14 EMCON # EMCON
xnet 15 XNET # Cross Net Debugger
chaos 16 CHAOS # Chaos
udp 17 UDP # user datagram protocol
mux 18 MUX # Multiplexing protocol
dcn 19 DCN-MEAS # DCN Measurement Subsystems
hmp 20 HMP # host monitoring protocol
prm 21 PRM # packet radio measurement protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
trunk-1 23 TRUNK-1 # Trunk-1
trunk-2 24 TRUNK-2 # Trunk-2
leaf-1 25 LEAF-1 # Leaf-1
leaf-2 26 LEAF-2 # Leaf-2
rdp 27 RDP # "reliable datagram" protocol
irtp 28 IRTP # Internet Reliable Transaction Protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol Class 4
netblt 30 NETBLT # Bulk Data Transfer Protocol
mfe-nsp 31 MFE-NSP # MFE Network Services Protocol
merit-inp 32 MERIT-INP # MERIT Internodal Protocol
sep 33 SEP # Sequential Exchange Protocol
3pc 34 3PC # Third Party Connect Protocol
idpr 35 IDPR # Inter-Domain Policy Routing Protocol
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 38 IDPR-CMTP # IDPR Control Message Transport Proto
tp++ 39 TP++ # TP++ Transport Protocol
il 40 IL # IL Transport Protocol
ipv6 41 IPv6 # IPv6
sdrp 42 SDRP # Source Demand Routing Protocol
ipv6-route 43 IPv6-Route # Routing Header for IPv6
ipv6-frag 44 IPv6-Frag # Fragment Header for IPv6
idrp 45 IDRP # Inter-Domain Routing Protocol
rsvp 46 RSVP # Resource ReSerVation Protocol
gre 47 GRE # Generic Routing Encapsulation
mhrp 48 MHRP # Mobile Host Routing Protocol
bna 49 BNA # BNA
ipv6-crypt 50 IPv6-Crypt # Encryption Header for IPv6
ipv6-auth 51 IPv6-Auth # Authentication Header for IPv6
i-nlsp 52 I-NLSP # Integrated Net Layer Security TUBA
swipe 53 SWIPE # IP with Encryption
narp 54 NARP # NBMA Address Resolution Protocol
mobile 55 MOBILE # IP Mobility
tlsp 56 TLSP # Transport Layer Security Protocol
skip 57 SKIP # SKIP
ipv6-icmp 58 IPv6-ICMP # ICMP for IPv6
ipv6-nonxt 59 IPv6-NoNxt # No Next Header for IPv6
ipv6-opts 60 IPv6-Opts # Destination Options for IPv6
# 61 # any host internal protocol
cftp 62 CFTP # CFTP
# 63 # any local network
sat-expak 64 SAT-EXPAK # SATNET and Backroom EXPAK
kryptolan 65 KRYPTOLAN # Kryptolan
rvd 66 RVD # MIT Remote Virtual Disk Protocol
ippc 67 IPPC # Internet Pluribus Packet Core
# 68 # any distributed file system
sat-mon 69 SAT-MON # SATNET Monitoring
visa 70 VISA # VISA Protocol
ipcv 71 IPCV # Internet Packet Core Utility
cpnx 72 CPNX # Computer Protocol Network Executive
cphb 73 CPHB # Computer Protocol Heart Beat
wsn 74 WSN # Wang Span Network
pvp 75 PVP # Packet Video Protocol
br-sat-mon 76 BR-SAT-MON # Backroom SATNET Monitoring
sun-nd 77 SUN-ND # SUN ND PROTOCOL-Temporary
wb-mon 78 WB-MON # WIDEBAND Monitoring
wb-expak 79 WB-EXPAK # WIDEBAND EXPAK
iso-ip 80 ISO-IP # ISO Internet Protocol
vmtp 81 VMTP # Versatile Message Transport
secure-vmtp 82 SECURE-VMTP # SECURE-VMTP
vines 83 VINES # VINES
ttp 84 TTP # TTP
nsfnet-igp 85 NSFNET-IGP # NSFNET-IGP
dgp 86 DGP # Dissimilar Gateway Protocol
tcf 87 TCF # TCF
eigrp 88 EIGRP # Enhanced Interi
Pourquoi l'hôte ne renverrait-il pas un Protocol Unreachable (alors que vous
utilisez un protocole qui n'existe pas) ? Il peut y avoir deux raisons.
Soit,vous communiquez avec une machine sous AIX, HP-UX ou Digital Unix, soit
le jeu de règles de l'hôte n'autorise pas l'accès à ces ports. Vérifiez donc
d'abord le type d'hôte scanné (par la détection d'empreinte de l'OS, par
exemple) ou alors considérez que ces ports sont bloqués ou filtrés.
------------------ SYN ------------- | Host A | ------------------------------------ > | Host B | ------------------ ------------- ------------------ ACK/SYN ------------- | Host A | <------------------------------------| Host B | ------------------ ------------- ------------------ ACK ------------- | Host A | ------------------------------------ > | Host B | ------------------ -------------L'hôte A envoie un SYN à l'hôte B pour réclamer une connexion, B répond par un ACK/SYN et attend le ACK final avec lequel la connexion s'établit. Mais que se passe-t-il si le dernier ACK n'est pas envoyé ? Si B renvoie son SYN/ACK, l'ACK de A sera attendu dans la file d'attente de connexion de B. Si la connexion est établie (A a envoyé son ACK à B), la file d'attente sera purgée. Mais comme dans la plupart des cas, l'adresse IP est "empruntée", B ne recevra jamais d'ACK. Il est donc possible de "remplir" la file d'attente de connexion tant que l'hôte ne peut pas communiquer.
23/06/02 23:12:48 194.157.1.1 80 -> 194.157.1.1 23/06/02 23:14:57 194.157.1.1 31337 -> 194.157.1.1Comme vous pouvez le voir les adresses IP source et destination sont les mêmes. Une autre trace tcpdump :
12:35:26.916369 192.168.38.110.135>192.168.38.110.135: udp 46[tos0x3,ECT,CE]
4503 004a 96ac 0000 4011 15c7 c0a8 266e
c0a8 266e 0087 0087 0036 8433 6920 616d
206c 616d 6520 646f 7320 6b69 6420 6275
7420 6920 7265
12:35:26.916566 192.168.38.110.135>192.168.38.110.135: udp 46[tos0x3,ECT,CE]
4503 004a 2923 0000 4011 8350 c0a8 266e
c0a8 266e 0087 0087 0036 8433 6920 616d
206c 616d 6520 646f 7320 6b69 6420 6275
7420 6920 7265
12:35:26.916682 192.168.38.110.135>192.168.38.110.135:udp 46[tos0x3,ECT,CE]
4503 004a 50a0 0000 4011 5bd3 c0a8 266e
c0a8 266e 0087 0087 0036 8433 6920 616d
206c 616d 6520 646f 7320 6b69 6420 6275
7420 6920 7265
L'attaque suivante est aussi appelée Snork.
10:13:32.104203 10.10.10.10.53>192.168.1.3.53: udp 28(frag 242:36@0+)(ttl64)
4500 0038 00f2 2000 4011 8404 0a0a 0a0a
c0a8 0103 0035 0035 0024 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000
10:13:32.104272 10.10.10.10 >192.168.1.3: udp 28(frag 242:4@24)(ttl 64)
4500 0018 00f2 0003 4011 a421 0a0a 0a0a
c0a8 0103 0035 0035 0024 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
Ping of Death: 17:43:58.431 pinger > target: icmp echo request (frag 4321: 380@0+) 17:43:58.431 pinger > target: (frag 4321: 380@2656+) 17:43:58.431 pinger > target: (frag 4321: 380@3040+) 17:43:58.431 pinger > target: (frag 4321: 380@3416+)
09:28:28.666073 179.135.168.43>256.256.30.255: icmp: echo request (DF)
4500 001c c014 4000 1e01 6172 b387 a82b
c0a8 1eff 0800 f7ff 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000
09:28:28.696073 68.90.226.250>256.256.30.255: icmp: echo request (DF)
4500 001c c015 4000 1e01 95cf 445a e2fa
c0a8 1eff 0800 f7ff 0000 0000 3136 3803
3133 3503 3137 3907 696e 2d61 6464
09:28:28.726073 138.98.10.247>256.256.30.255: icmp: echo request (DF)
4500 001c c016 4000 1e01 27ca 8a62 0af7
c0a8 1eff 0800 f7ff 0000 0000 0332 3236
3938 0331 3638 0769 6e2d 6164 6472
09:28:28.756073 130.113.202.100 > 256.256.30.255: icmp: echo request (DF)
4500 001c c017 4000 1e01 704c 8271ca64
c0a8 1eff 0800 f7ff 0000 0000 0231 3002
3938 0331 3338 0769 6e2d 6164 6472
...
Il existe aussi depuis un certain temps, les attaques DDoS
(Distributed Denial of Service ou Déni de service distribué)). Comme le nom
l'indique, il s'agit d'une attaque DoS distribuée (par le réseau).
L'attaquant (le client), recherche les autres hôtes ou réseaux faciles à
exploiter. Les premiers hôtes touchés se nomment les gestionnaires
(handlers). Ces derniers "contaminent" d'autres hôtes ou réseaux nommés
agents;
---------
| YOU |
---------
|
---------------------------------
| | |
Handler Handler Handler
| | |
------ ------------------- ------------
| | | | | |
Agent Agent Agent Agent Agent Agent
Les agents lanceront les attaques ultérieurement.