efrei/theorie-information-cryptologie/tp3/main.tex

527 lines
22 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[a4paper,french,12pt]{article}
\title{Théorie de l'information et Cryptologie\\TP3\\Étude du standard WPA2 et authentification EAP}
\author{Adam Belghith, Alexandre Chen, Tunui Franken}
\date{Dernière compilation~: \today{} à \currenttime}
\usepackage{styles}
\usepackage{enumitem}
\begin{document}
\maketitle
\clearpage
\tableofcontents
\clearpage
\section{Configuration et analyse de WPA Personnel}
\begin{enumerate}
\item Sur votre VM Linux, charger le module \texttt{mac80211\_hwsim} en spécifiant quatre cartes réseau sans fil.
\begin{console}[gobble=12]
root@client:~# modprobe mac80211_hwsim radios=4
root@client:~# cat /etc/network/interfaces
auto enp1s0
iface enp1s0 inet dhcp
auto enp7s0
iface enp7s0 inet static
address 172.16.0.3/24
auto wlan0
iface wlan0 inet static
address 10.0.0.3/24
auto wlan1
iface wlan1 inet static
address 10.0.0.1/24
gateway 10.0.0.3
auto wlan2
iface wlan2 inet static
address 10.0.0.2/24
gateway 10.0.0.3
\end{console}
\item Installer \texttt{hostapd} et configurer un SSID avec WPA-Personnel.
\begin{console}[gobble=12]
root@client:~# apt install hostapd
root@client:~# ln -s /etc/hostapd/hostapd_wpa-personnel.conf /etc/hostapd/hostapd.conf
root@client:~# cat /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
hw_mode=g
channel=1
ssid=efrei
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_passphrase=123456789
root@client:~# systemctl start hostapd.service
\end{console}
\item Configurer la VM afin de capturer tous les échanges sur votre réseau dans un fichier de capture.
\begin{console}[gobble=12]
root@client:~# tshark -i any -w dump.pcap
\end{console}
\item Configurer le \texttt{wpa\_supplicant} sur \texttt{wlan1} et \texttt{wlan2} pour se connecter à votre réseau.
\begin{console}[gobble=12]
root@client:~# apt install wpasupplicant
root@client:~# cat /etc/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
network={
ssid="efrei"
scan_ssid=1
key_mgmt=WPA-PSK
psk="123456789"
pairwse=CCMP
group=CCMP
}
root@client:~# wpa_supplicant -Dnl80211 -iwlan1 -c /etc/wpa_supplicant.conf
root@client:~# wpa_supplicant -Dnl80211 -iwlan2 -c /etc/wpa_supplicant.conf
\end{console}
\item Analyser la capture obtenue et expliquer le 4-way handshake.
\emph{%
Le 4-way handshake est un échange de 4 messages entre le supplicant et le point d'accès, initié par le point d'accès.
}
\clearpage
Message 1~:
\begin{lstlisting}[gobble=12]
Frame 754: 115 bytes on wire (920 bits), 115 bytes captured (920 bits) on interface any, id 0
Linux cooked capture v1
Packet type: Unicast to us (0)
Link-layer address type: Ethernet (1)
Link-layer address length: 6
Source: 02:00:00:00:00:00 (02:00:00:00:00:00)
Unused: 0000
Protocol: 802.1X Authentication (0x888e)
802.1X Authentication
Version: 802.1X-2004 (2)
Type: Key (3)
Length: 95
Key Descriptor Type: EAPOL RSN Key (2)
[Message number: 1]
Key Information: 0x008a
.... .... .... .010 = Key Descriptor Version: AES Cipher, HMAC-SHA1 MIC (2)
.... .... .... 1... = Key Type: Pairwise Key
.... .... ..00 .... = Key Index: 0
.... .... .0.. .... = Install: Not set
.... .... 1... .... = Key ACK: Set
.... ...0 .... .... = Key MIC: Not set
.... ..0. .... .... = Secure: Not set
.... .0.. .... .... = Error: Not set
.... 0... .... .... = Request: Not set
...0 .... .... .... = Encrypted Key Data: Not set
..0. .... .... .... = SMK Message: Not set
Key Length: 16
Replay Counter: 1
WPA Key Nonce: cda107b49a0ef2da75bd0889e8b1253776f298970d87e822966c6e06c641d3f4
Key IV: 00000000000000000000000000000000
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: 00000000000000000000000000000000
WPA Key Data Length: 0
\end{lstlisting}
\clearpage
Message 2~:
\begin{lstlisting}[gobble=12]
Frame 758: 137 bytes on wire (1096 bits), 137 bytes captured (1096 bits) on interface any, id 0
Linux cooked capture v1
Packet type: Sent by us (4)
Link-layer address type: Ethernet (1)
Link-layer address length: 6
Source: 02:00:00:00:01:00 (02:00:00:00:01:00)
Unused: 0000
Protocol: 802.1X Authentication (0x888e)
802.1X Authentication
Version: 802.1X-2001 (1)
Type: Key (3)
Length: 117
Key Descriptor Type: EAPOL RSN Key (2)
[Message number: 2]
Key Information: 0x010a
.... .... .... .010 = Key Descriptor Version: AES Cipher, HMAC-SHA1 MIC (2)
.... .... .... 1... = Key Type: Pairwise Key
.... .... ..00 .... = Key Index: 0
.... .... .0.. .... = Install: Not set
.... .... 0... .... = Key ACK: Not set
.... ...1 .... .... = Key MIC: Set
.... ..0. .... .... = Secure: Not set
.... .0.. .... .... = Error: Not set
.... 0... .... .... = Request: Not set
...0 .... .... .... = Encrypted Key Data: Not set
..0. .... .... .... = SMK Message: Not set
Key Length: 0
Replay Counter: 1
WPA Key Nonce: e298738e74499d46f0d3e6a205b919d27805253a7b903c885fcca59452b15b22
Key IV: 00000000000000000000000000000000
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: f7eef9e81c60061ace2bb92997d2eacb
WPA Key Data Length: 22
WPA Key Data: 30140100000fac040100000fac040100000fac020000
Tag: RSN Information
Tag Number: RSN Information (48)
Tag length: 20
RSN Version: 1
Group Cipher Suite: 00:0f:ac (Ieee 802.11) AES (CCM)
Group Cipher Suite OUI: 00:0f:ac (Ieee 802.11)
Group Cipher Suite type: AES (CCM) (4)
Pairwise Cipher Suite Count: 1
Pairwise Cipher Suite List 00:0f:ac (Ieee 802.11) AES (CCM)
Pairwise Cipher Suite: 00:0f:ac (Ieee 802.11) AES (CCM)
Pairwise Cipher Suite OUI: 00:0f:ac (Ieee 802.11)
Pairwise Cipher Suite type: AES (CCM) (4)
Auth Key Management (AKM) Suite Count: 1
Auth Key Management (AKM) List 00:0f:ac (Ieee 802.11) PSK
Auth Key Management (AKM) Suite: 00:0f:ac (Ieee 802.11) PSK
Auth Key Management (AKM) OUI: 00:0f:ac (Ieee 802.11)
Auth Key Management (AKM) type: PSK (2)
RSN Capabilities: 0x0000
.... .... .... ...0 = RSN Pre-Auth capabilities: Transmitter does not support pre-authentication
.... .... .... ..0. = RSN No Pairwise capabilities: Transmitter can support WEP default key 0 simultaneously with Pairwise key
.... .... .... 00.. = RSN PTKSA Replay Counter capabilities: 1 replay counter per PTKSA/GTKSA/STAKeySA (0x0)
.... .... ..00 .... = RSN GTKSA Replay Counter capabilities: 1 replay counter per PTKSA/GTKSA/STAKeySA (0x0)
.... .... .0.. .... = Management Frame Protection Required: False
.... .... 0... .... = Management Frame Protection Capable: False
.... ...0 .... .... = Joint Multi-band RSNA: False
.... ..0. .... .... = PeerKey Enabled: False
..0. .... .... .... = Extended Key ID for Individually Addressed Frames: Not supported
\end{lstlisting}
\clearpage
Message 3~:
\begin{lstlisting}[gobble=12]
Frame 760: 171 bytes on wire (1368 bits), 171 bytes captured (1368 bits) on interface any, id 0
Linux cooked capture v1
Packet type: Sent by us (4)
Link-layer address type: Ethernet (1)
Link-layer address length: 6
Source: 02:00:00:00:00:00 (02:00:00:00:00:00)
Unused: 0000
Protocol: 802.1X Authentication (0x888e)
802.1X Authentication
Version: 802.1X-2004 (2)
Type: Key (3)
Length: 151
Key Descriptor Type: EAPOL RSN Key (2)
[Message number: 3]
Key Information: 0x13ca
.... .... .... .010 = Key Descriptor Version: AES Cipher, HMAC-SHA1 MIC (2)
.... .... .... 1... = Key Type: Pairwise Key
.... .... ..00 .... = Key Index: 0
.... .... .1.. .... = Install: Set
.... .... 1... .... = Key ACK: Set
.... ...1 .... .... = Key MIC: Set
.... ..1. .... .... = Secure: Set
.... .0.. .... .... = Error: Not set
.... 0... .... .... = Request: Not set
...1 .... .... .... = Encrypted Key Data: Set
..0. .... .... .... = SMK Message: Not set
Key Length: 16
Replay Counter: 2
WPA Key Nonce: cda107b49a0ef2da75bd0889e8b1253776f298970d87e822966c6e06c641d3f4
Key IV: 00000000000000000000000000000000
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: 7e2b2c4ae7a91c06bfe9d1434299f9cc
WPA Key Data Length: 56
WPA Key Data: ef3988737eef5c60062066a5f2cfa74485002f72c67af9fe17cb2033e346475649cf185c...
\end{lstlisting}
\clearpage
Message 4~:
\begin{lstlisting}[gobble=12]
Frame 762: 115 bytes on wire (920 bits), 115 bytes captured (920 bits) on interface any, id 0
Linux cooked capture v1
Linux cooked capture v1
Packet type: Sent by us (4)
Link-layer address type: Ethernet (1)
Link-layer address length: 6
Source: 02:00:00:00:01:00 (02:00:00:00:01:00)
Unused: 0000
Protocol: 802.1X Authentication (0x888e)
802.1X Authentication
Version: 802.1X-2001 (1)
Type: Key (3)
Length: 95
Key Descriptor Type: EAPOL RSN Key (2)
[Message number: 4]
Key Information: 0x030a
.... .... .... .010 = Key Descriptor Version: AES Cipher, HMAC-SHA1 MIC (2)
.... .... .... 1... = Key Type: Pairwise Key
.... .... ..00 .... = Key Index: 0
.... .... .0.. .... = Install: Not set
.... .... 0... .... = Key ACK: Not set
.... ...1 .... .... = Key MIC: Set
.... ..1. .... .... = Secure: Set
.... .0.. .... .... = Error: Not set
.... 0... .... .... = Request: Not set
...0 .... .... .... = Encrypted Key Data: Not set
..0. .... .... .... = SMK Message: Not set
Key Length: 0
Replay Counter: 2
WPA Key Nonce: 0000000000000000000000000000000000000000000000000000000000000000
Key IV: 00000000000000000000000000000000
WPA Key RSC: 0000000000000000
WPA Key ID: 0000000000000000
WPA Key MIC: cf5f8a057624eca76dbc40a16bcd7fc5
WPA Key Data Length: 0
\end{lstlisting}
\item Expliquer les deux vulnérabilités conceptuelles sur le 4-way handshake~:
\begin{enumerate}
\item Attaque par dictionnaire offline ---
Une attaque par dictionnaire offline est réalisée en obtenant un texte chiffré généré à l'aide de la clé dérivée du mot de passe, et en essayant chaque mot de passe contre le texte chiffré.
Cette catégorie d'attaque est invisible pour le KDC et peut être exécutée beaucoup plus rapidement qu'une attaque en ligne.
L'attaque sera généralement beaucoup plus longue avec les types de chiffrement plus récents (en particulier ceux basés sur AES), car ces types de chiffrement utilisent une fonction chaîne à clé beaucoup plus coûteuse.
Cependant, la meilleure défense consiste à refuser à l'attaquant l'accès à un texte chiffré utile.
\item KRACK ---
L'attaque KRACK affecte la troisième étape de la prise de contact, permettant ainsi à l'attaquant de manipuler et de rejouer la clé de chiffrement WPA2 pour la déjouer en installant une clé déjà en cours d'utilisation.
Lorsque la clé est réinstallée, d'autres paramètres qui lui sont associés (le nombre de paquets de transmission incrémentiel appelé le nonce et le compteur de rejeu) sont définis sur leurs valeurs d'origine.
Plutôt que de passer à la quatrième étape de la prise de contact, le nonce se réinitialise pour continuer à rejouer les transmissions de la troisième étape.
Cela configure le protocole de chiffrement pour l'attaque et, selon la façon dont les attaquants rejouent les transmissions de la troisième étape, ils peuvent désactiver la sécurité Wi-Fi.
\end{enumerate}
\end{enumerate}
\section{Installation et configuration de FreeRadius}
\begin{enumerate}
\item Installer FreeRadius sur une VM Linux.
\begin{console}[gobble=12]
root@radius:~# apt install freeradius
\end{console}
\begin{itemize}
\item Quel est le répertoire d'installation de FreeRadius~?
\emph{Les fichiers attenant à FreeRadius sont dans \texttt{/etc/freeradius/3.0/}.}
\item Sur quels ports le serveur écoute-t-il les requêtes~?
\emph{Le serveur écoute sur les ports 1812 et 1813 en UDP\@.}
\item Sous quel compte le serveur est lancé et pourquoi~?
\emph{Le serveur est lancé par l'utilisateur \texttt{freerad}, pour respecter le principe du Moindre Privilège.}
\item Lancer FreeRadius en mode debug et vérifier son bon fonctionnement.
\begin{console}[gobble=20]
root@radius:~# systemctl stop freeradius.service
root@radius:~# freeradius -X
\end{console}
\emph{Cela fonctionne~!}
\end{itemize}
\item Ouvrez le fichier de configuration \texttt{clients.conf}.
\begin{itemize}
\item Que déclare-t-on dans ce fichier~?
\emph{Ce fichier est utilisé pour déclarer les clients (réseaux et postes) qui pourront joindre le serveur FreeRadius.}
\item Assurez vous que le client localhost est bien présent.
\emph{\texttt{localhost} est bien présent, noyé au milieu des commentaires explicatifs.}
\item Le paramètre \texttt{secret} est \texttt{testing123} par défaut.
À quoi sert ce paramètre~?
\emph{Il s'agit d'une Pre-Shared Key, que le client devra utiliser pour l'authentification.}
\item Comment s'authentifie le point d'accès auprès du serveur~?
\emph{Grâce au paramètre \texttt{secret} cité précédemment.}
\end{itemize}
\item Ouvrez le fichier \texttt{users} se trouvant dans le même répertoire et rajoutez un nouvel utilisateur.
\begin{itemize}
\item Quelle est la syntaxe de la déclaration de cet utilisateur~?
\emph{La syntaxe minimale pour définir un utilisateur est la suivante, d'autres exemples sont dans les commentaires du fichier.}
\begin{console}[gobble=20]
bob Cleartext-Password := "hello"
Reply-Message := "Hello, %{User-Name}"
\end{console}
\item Peut-on utiliser le fichier \texttt{/etc/passwd} comme source des utilisateurs~?
\emph{Oui~: le module FreeRadius \texttt{passwd} est activé par défaut (dans \texttt{/etc/freeradius/3.0/mods-enabled/passwd}) et permet ce type d'authentification.}
\end{itemize}
\item Relancer votre serveur freeradius en mode debug.
\begin{itemize}
\item Tester l'authentification avec la commande \texttt{radtest}.
\begin{console}[gobble=20]
root@radius:~# radtest bob hello localhost 0 testing123
\end{console}
\item Capturer les paquets et faites une analyse des AVP (Attribute-Value Pair) échangés.
\emph{Requête~:}
\begin{lstlisting}[gobble=20]
Attribute Value Pairs
AVP: t=User-Name(1) l=5 val=bob
AVP: t=User-Password(2) l=18 val=Encrypted
Type: 2
Length: 18
User-Password (encrypted): 6c9776bba39cb185ed3ae15d7142f3d6
AVP: t=NAS-IP-Address(4) l=6 val=192.168.122.41
AVP: t=NAS-Port(5) l=6 val=0
AVP: t=Message-Authenticator(80) l=18 val=2ef7473c4e075d4e549d5784d432dc21
\end{lstlisting}
\emph{%
Nous voyons le User-Name \texttt{bob} en texte clair, mais le mot de passe est hashé.
D'autres paramètres correspondent à ceux fournis en ligne de commande (NAS-IP-Address, NAS-Port, Message-Authenticator).
}
\emph{Réponse~:}
\begin{lstlisting}[gobble=20]
Attribute Value Pairs
AVP: t=Reply-Message(18) l=12 val=Hello, bob
\end{lstlisting}
\emph{On retrouve la \texttt{Reply-Message} définie dans le fichier de configuration \texttt{users}.}
\end{itemize}
\end{enumerate}
\section{Configuration et analyse de WPA-Entreprise}
\begin{enumerate}
\item Configuration du point d'accès AP~:
\begin{itemize}
\item Configurer \texttt{hostapd} pour annoncer WPA-Entreprise aux stations sans fil.
Configurer les paramètres FreeRadius dans hostapd.
\begin{console}[gobble=20]
root@client:~# ln -s /etc/hostapd/hostapd_wpa-entreprise.conf /etc/hostapd/hostapd.conf
root@client:~# cat /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=efrei-entreprise
wpa_pairwise=CCMP
rsn_pairwise=CCMP
own_ip_addr=127.0.0.1
ieee8021x=1
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-EAP
auth_server_addr=172.16.0.2
auth_server_port=1812
auth_server_shared_secret=testing123
root@client:~# systemctl start hostapd.service
\end{console}
\item Dans quel fichier configure-t-on l'addresse IP de l'AP dans FreeRadius~?
\emph{Cela se configure dans le fichier \texttt{/etc/freeradius/3.0/clients.conf}~:}
\begin{console}[gobble=20]
client private {
ipaddr = 172.16.0.0/24
secret = testing123
}
\end{console}
\end{itemize}
\item Configuration du \texttt{wpa\_supplicant} et capture Wireshark~:
\begin{itemize}
\item Configurer \texttt{wpa\_supplicant} afin de se connecter à votre SSID en utilisant la méthode EAP/PEAP\@.
\begin{console}[gobble=20]
network={
ssid="efrei-entreprise"
scan_ssid=1
key_mgmt=WPA-EAP
eap=PEAP
identity="bob"
password="hello"
phase1="peaplabel=0"
phase2="auth=MSCHAPV2"
}
\end{console}
\end{itemize}
\item FreeRadius est un serveur AAA\@.
\begin{itemize}
\item Que signifie ce terme~?
\emph{Cet acronyme veut dire que le serveur gère l'Authentification, l'Authorisation et la gestion des comptes (Accounting).}
\emph{%
LAuthentification fait référence à la capacité que léquipement aura de vérifier lidentité de lutilisateur.
Cest un processus qui va décider si un utilisateur donné peut accéder au réseau ou à léquipement sur lequel AAA est configuré.
}
\emph{LAuthorization fait quant à lui référence aux ressources auxquelles lutilisateur va pouvoir accéder, et les opérations quil va être en mesure deffectuer.}
\emph{LAccounting concerne les données et les informations se rapportant au profil de lutilisateur.}
\item Interdire l'accès de votre utilisateur pour une plage horaire de votre choix.
\end{itemize}
\end{enumerate}
\end{document}