diff --git a/theorie-information-cryptologie/tp3/main.tex b/theorie-information-cryptologie/tp3/main.tex index 21e79eb..0acb10d 100644 --- a/theorie-information-cryptologie/tp3/main.tex +++ b/theorie-information-cryptologie/tp3/main.tex @@ -92,6 +92,12 @@ \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] @@ -131,11 +137,19 @@ 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) @@ -192,11 +206,19 @@ ..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) @@ -226,11 +248,20 @@ 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) @@ -265,14 +296,12 @@ \begin{enumerate} \item Attaque par dictionnaire offline --- - L'attaque par dictionnaire est une méthode utilisée pour pénétrer par effraction dans un ordinateur ou un serveur protégé par un mot de passe, en essayant systématiquement tous les mots d'un dictionnaire donné. - Cette méthode repose sur le fait que de nombreuses personnes utilisent des mots de passe courants (par exemple~: un prénom, une couleur ou le nom d'un animal). - Ce type d'attaque peut également servir à rechercher la clé nécessaire pour déchiffrer un message ou document codé. + 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 --- - Dans l'ensemble, cette procédure de prise de contact permet de s'identifier et de se connecter rapidement, ainsi que d'établir une nouvelle clé de chiffrement pour chaque connexion. - C'est ce qui assure la protection des données sur les connexions Wi-Fi. - Toutes les connexions Wi-Fi protégées utilisent la prise de contact en quatre étapes. 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. @@ -282,4 +311,218 @@ \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:~# cat hostapd_wpa-entreprise.conf + interface=wlan0 + driver=nl80211 + + hw_mode=g + channel=1 + ssid=efrei-entreprise + + wpa=2 + wpa_psk_radius=1 + wpa_key_mgmt=WPA-EAP + wpa_pairwise=CCMP + rsn_pairwise=CCMP + + own_ip_addr=127.0.0.1 + ieee8021x=1 + + auth_algs=3 + + auth_server_addr=172.16.0.2 + auth_server_port=1812 + auth_server_shared_secret=testing123 + \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{% + L’Authentification fait référence à la capacité que l’équipement aura de vérifier l’identité de l’utilisateur. + C’est 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{L’Authorization fait quant à lui référence aux ressources auxquelles l’utilisateur va pouvoir accéder, et les opérations qu’il va être en mesure d’effectuer.} + + \emph{L’Accounting concerne les données et les informations se rapportant au profil de l’utilisateur.} + + \item Interdire l'accès de votre utilisateur pour une plage horaire de votre choix. + + \end{itemize} + +\end{enumerate} + \end{document} diff --git a/theorie-information-cryptologie/tp3/radtest.pcap b/theorie-information-cryptologie/tp3/radtest.pcap new file mode 100644 index 0000000..1758309 Binary files /dev/null and b/theorie-information-cryptologie/tp3/radtest.pcap differ diff --git a/theorie-information-cryptologie/tp3/wpa-entreprise.pcap b/theorie-information-cryptologie/tp3/wpa-entreprise.pcap new file mode 100644 index 0000000..1da6892 Binary files /dev/null and b/theorie-information-cryptologie/tp3/wpa-entreprise.pcap differ diff --git a/theorie-information-cryptologie/tp3/dump.pcap b/theorie-information-cryptologie/tp3/wpa-personnel.pcap similarity index 100% rename from theorie-information-cryptologie/tp3/dump.pcap rename to theorie-information-cryptologie/tp3/wpa-personnel.pcap