Authentification 802.1x dans un environnement AD CS en Server Core

Contents

Contexte et objectifs

Le but de cette infrastructure est d’implĂ©menter une authentification 802.1X au sein d’une PKI dans un environnement AD DS et AD CS respectant la distinction entre 3 tiers.

Phase 1 - Active Directory DS

clic yes

Entrer le mot de passe une premiÚre fois puis appuyer sur TAB pour accéder à la deuxiÚme ligne

Vous arrivez sur cette fenĂȘtre lĂ 

Pour entrer dans la console Powershell, taper 15, puis entrer cette commande pour mettre en français la disposition du clavier :

powershell

Set-WinUserLanguageList -LanguageList "fr-FR"
#ou
Set-WinUserLanguageList -LanguageList fr-FR -Force

Tapez 8 pour rentrer dans l’administration du rĂ©seau. VĂ©rifiez que vous obteniez bien une adresse IP. Il faut dĂ©sormais rentrer sa propre IP en tant que serveur DNS.

Taper 7 puis E pour activer le RDP :

A partir de maintenant, on va pouvoir administrer le Windows Server qui est un AD DS en devenir depuis la machine d’administration. On passe Ă  l’installation de la VM d’administration

Lancer un PowerShell (Taper 15) et Install-WindowsFeature AD-Domain-Services –IncludeManagementTools -Verbose pour installer le rîle Windows

Pour vĂ©rifier c’est bien installĂ© :

powershell

Get-WindowsFeature -Name *AD*

Lors de l’installation de la forĂȘt, l’ordinateur devient dĂ©sormais ContrĂŽleur de domaine.

powershell

Install-ADDSForest -DomainName auteqia.local

Phase 2 - VM d’administration

Installatin d’un Windows Server avec un environnement graphique.

Pourquoi Windows Server ? Car c’est une VM de rebond sur laquelle il y aura parfois plusieurs connexions simultanĂ©es. Windows Server gĂšre multiples connexions RDP en simultanĂ© tandis que Windows standard non.

AprĂšs avoir activĂ© le RDP, changĂ© le nom d’hĂŽte, vĂ©rifiĂ© les paramĂštres rĂ©seaux et redĂ©marrĂ© la machine, on va pouvoir rejoindre le domaine. Veiller Ă  bien mettre le serveur de nom de domaine correspondant Ă  l’AD dans les paramĂštres rĂ©seaux.

Ajoutons la machine dans le domaine:

Une fois l’ordinateur joint au domaine, redĂ©marrer.

On va pouvoir ajouter le serveur Ă  administrer depuis notre machine d’administration.

powershell

Get-WindowsFeature | Where{ $_.Name -like "RSAT-*" }

Ce qui donne :

Pour installer les features nécessaires :

powershell

Install-WindowsFeature -Name "RSAT-AD-Tools" -IncludeAllSubFeature -IncludeManagementTools

[!NOTE] Attention Il faudra se connecter avec un utilisateur administrateur du domaine sur la machine

Sur le gestionnaire de serveur, aller sur Dashboard et “Add other servers to manage”

Cliquer sur Add Other servers to manage

Ici on va ajouter le DC en double cliquant dessus

On peut dĂ©sormais voir les rĂŽles que l’on peut administrer Ă  distance ici

Lancer la MMC, puis ajouter un composant (snap-in)

Ajouter “Computer Management”

DĂ©sormais, on peut administrer nos utilisateurs et ordinateurs du domaine Ă  partir de notre machine d’administration, en ayant notre ContrĂŽleur de Domaine en Windows Core.

Voici les documentations de l’ANSSI en matiĂšre d’Active Directory :

Ce modĂšle d’administration dĂ©coupe en trois tiers (niveau en français) l’administration allant du tier 2, le moins privilĂ©giĂ© au tier 0 servant Ă  l’administration d’un contrĂŽleur de domaine.

On y voit notamment dans le deuxiÚme document une référence au tiering

Notre machine DC01 vient se placer dans le tier 0 tandis que notre machine d’administration vient se placer dans le tier 1. Ces tiers peuvent prendre la forme d’UnitĂ© d’Organisation (OU, Organisational Unit en anglais) sur lesquelles des GPO peuvent s’appliquer de maniĂšre Ă  gĂ©rer les permissions.

Tier PrivilĂšges et RĂŽles Exemples
Tier 0 Administration du domaine & des DCs, contrĂŽle total sur AD ContrĂŽleurs de domaine (DC), Administrateurs de domaine, Serveurs PKI
Tier 1 Administration des serveurs et applications sensibles Serveurs membres AD, VM d’administration, Administrateurs serveurs
Tier 2 Comptes utilisateur standard et postes de travail Postes utilisateurs, Comptes bureautiques
  • le Tier 1 correspond aux serveurs sensibles , qui requiĂšrent une administration sĂ©curisĂ©e .
  • Administrer un serveur Windows AD ne doit PAS ĂȘtre fait depuis Tier 2 (postes utilisateurs).

Pour se faire, nous allons séparer par des OU les différents tiers pour arriver à cette organisation là :

Pour l’instant, nous crĂ©ons simplement les OU et nous les peuplons, l’application des GPO viendra aprĂšs la mise en place de la PKI. Actuellement, notre machine SERVERADMIN se situe dans Computers, je vais le glisser dans Ordinateurs\Tier 1

De maniÚre à ce que ça nous donne ceci :

Phase 3 - Autorités de certification

Nous allons pouvoir dĂ©ployer nos deux Windows Server core 2022 qui seront respectivement l’AutoritĂ© de certification racine et l’autoritĂ© de certification intermĂ©diaire.

Notre schéma est simple :

  • La CA (certification authority) racine est la source de confiance principale, elle agit sur tout le domaine par l’intermĂ©diaire de la CA intermĂ©diaire
  • La CA intermĂ©diaire est autorisĂ©e Ă  dĂ©ployer des certificats sous la confiance de l’autoritĂ© racine
  • Les postes et utilisateurs auront donc un certificat issu par la CA intermĂ©diaire, qui elle mĂȘme voit son certificat issu par la CA racine

Nous pouvons imaginer ce schema :

Lien de l’article

Notre autoritĂ© de certification racine n’est pas dans l’Active Directory et doit ĂȘtre Ă©teint 99% du temps. En effet, elle intervient pour renouveler le certificat de l’autoritĂ© intermĂ©diaire Ă  chaque fin de validitĂ© de certificat (5 ans dans notre cas). Au contraire, l’autoritĂ© de certification intermĂ©diaire doit se situer dans l’Active Directory, dans le Tier 0.

AprĂšs avoir installĂ© le serveur Windows Core 2022, changĂ© le nom d’hĂŽte, vĂ©rifiĂ© les paramĂštres rĂ©seaux, nous pouvons installer le rĂŽle. N’oubliez pas d’activer le RDP, ça nous sera utile par la suite.

Notre machine s’appelle donc ROOTCA

powershell

Install-WindowsFeature ADCS-Cert-Authority -IncludeManagementTools

powershell

Install-AdcsCertificationAuthority -CAType StandaloneRootCA -CACommonName "CAROOT" -KeyLength 4096 -HashAlgorithm SHA256 -ValidityPeriod Years -ValidityPeriodUnits 10 -Force

Notre AutoritĂ© de certification s’appellera CAROOT (Ă  ne pas confondre avec ROOTCA qui est le nom d’hĂŽte) et portera son certificat valide pendant 10 ans.

On peut désormais voir le certificat de la CAROOT dans C:\CAConfig

Il se peut que vous ayez des problĂšmes Ă  cette Ă©tape, voici quelques commandes utiles :

Lister les certificats sur la machine : certutil -viewstore root

Lister les autorités de certifications stockées : certutil -store CA

Confirmer que la CA est bien installée : certutil -cainfo

VĂ©rifier l’Ă©tat du service : Get-Service -Name CertSvc

AprĂšs avoir installĂ© notre CAROOT, nous devons install un serveur Windows Core 2022, changer le nom d’hĂŽte, vĂ©rifier les paramĂštres rĂ©seaux et nous pouvons l’ajouter du domaine. Attention, la machine doit possĂ©der le DC01 en tant que serveur DNS. N’oubliez pas d’activer le RDP, ça nous sera utile pour la suite. Notre machine s’appelle donc CASUB01.

Taper 1 pour rentrer dans la configuration du domaine

Une fois ajoutĂ©e au domaine, la machine doit ĂȘtre dĂ©placĂ©e dans l’OU Ordinateurs\Tier 0

Tout comme la CAROOT :

powershell

Install-WindowsFeature ADCS-Cert-Authority -IncludeManagementTools

Une fois le rÎle installé, il faut le paramétrer.

Une fois ajoutĂ©e dans la gestion des serveurs, on peut configurer l’ADCS depuis notre machine d’administration :

Sur la SUBCA01

powershell

cd C:\
mkdir share
mv "C:\.\CASUB01.auteqia.local_auteqia-CASUB01-CA.req" "C:\share"
New-SmbShare -Name "share" -Path "C:\share" -FullAccess "Domain Admins"

Maintenant sur la ROOTCA :

powershell

Copy-Item -Path "\\CASUB01\share\CASUB01.auteqia.local_auteqia-CASUB01-CA.req" -Destination "C:\" #possible de faire par IP plutĂŽt que nom d'hĂŽte

Sur la ROOTCA :

Sur la CAROOT, il faut dĂ©sormais signer la requĂȘte de certificat de la SUBCA01 :

powershell

certreq -submit C:\CASUB01.auteqia.local_auteqia-CASUB01-CA.req C:\CASUB01-Cert.crt

Une pop-up va apparaĂźtre, cliquer sur OK.

La requĂȘte est dĂ©sormais en attente

Vous recevez un message disant que “Le certificat est en attente” (status: pending ). La RequestID est de 4.

Ce message signifie que la requĂȘte CSR de la Sub CA a bien Ă©tĂ© soumise, mais doit ĂȘtre approuvĂ©e manuellement par un administrateur sur la Root CA.

On peut donc désormais signer notre certificat qui est en attente :

bash

certutil -resubmit 4

Et retrouver le certificat signé :

powershell

certreq -retrieve 4 C:\CASUB01-Cert.crt

Le certificat de la SUBCA01 signé est désormais disponible ici : C:\SUBCA01-Cert.crt

On peut faire le mĂȘme cheminement que pour le premier transfert, sur la ROOTCA :

powershell

Copy-Item -Path "C:\CASUB01-Cert.crt" -Destination "\\CASUB01\share\"

De la mĂȘme maniĂšre, en passant par SMB, le fichier C:\CAConfig\CAROOT_CAROOT.crt. Pour le transfĂ©rer :

Sur la CAROOT :

powershell

Copy-item -Path .\CAConfig\CAROOT_CAROOT.crt -Destination "\\SUBCA01\share\"

Une fois le fichier transfĂ©rĂ© sur la CASUB01, il faut l’ajouter au magasin “Trusted Root Certification Authorities” :

powershell

certutil -addstore -f "Root" "C:\share\CAROOT_CAROOT.crt"

Et publier le certificat de la CAROOT dans l’AD :

powershell

certutil -f -dspublish .\CAROOT_CAROOT.crt RootCA

De cette maniÚre, la chaßne de confiance est déployée à tous les ordinateurs et utilisateurs du domaine.

On peut vérifier notre schéma de confiance :

Ensuite, on peut importer le certificat de la SUBCA01 signé :

powershell

certutil -installcert C:\share\CASUB01-Cert.crt

Cette erreur signifie que le serveur de rĂ©vocation des certificats (CRL - Certificate Revocation List) n’est pas accessible lors de la vĂ©rification de la chaĂźne de certification. Cela empĂȘche le systĂšme d’authentifier correctement le certificat , car il ne peut pas confirmer s’il a Ă©tĂ© rĂ©voquĂ© ou non.

Sur la ROOTCA on peut vĂ©rifier qu’il existe bien une CRL

On va la copier depuis la ROOTCA vers la CASUB01 :

powershell

Copy-Item -Path "C:\Windows\System32\CertSrv\CertEnroll\CAROOT.crl" -Destination "\\CASUB01\share\"

powershell

certutil -dsPublish -f .\CAROOT.crl CAROOT 

powershell

certutil -addstore -f "Root" C:\share\CAROOT.crl

Il faut donc redémarrer le service :

powershell

Restart-Service CertSvc
#ou
Start-Service CertSvc

Pour pouvoir administrer le rĂŽle d’autoritĂ© de certification, il faut installer les RSAT-ADCS :

powershell

Install-WindowsFeature RSAT-ADCS

le rĂŽle Certification Authority est dĂ©sormais accessible depuis la MMC du serveur d’administration

Nous pouvons donc administrer la CA intermĂ©diaire depuis notre VM d’administration

Pour pouvoir prĂ©tendre Ă  une authentification 802.1x, qu’elle soit filaire ou sans fil, le serveur NPS (RADIUS) qui verra prochainement la lumiĂšre du jour doit pouvoir s’authentifier avec un modĂšle de certificat spĂ©cifique : RAS and IAS Server.

Pour pouvoir publier un modĂšle de certificat, il faut cloner le modĂšle existant. Pour y parvenir, il faut cliquer sur Certificate Template, puis Manage.

Dans les modÚles, on y voit celui qui nous intéresse :

Clic droit, puis dupliquer le modÚle. Une fois dedans, il faut aller dans Security, et permettre aux membres du groupes RAS and IAS Servers de demander automatiquement un certificat de ce type. A savoir, le serveur NPS sera directement ajouté en tant que membre de ce groupe.

Et lui donner un petit nom

On peut en profiter pour dupliquer le modĂšle de certificat Utilisateur, qui sera utilisĂ© pour s’authentifier. On procĂšde de la mĂȘme maniĂšre : Authenticated Users dispose du droit de lecture sur le modĂšle et Domain Users dispose du droit de lecture, d’enroll et d’autoenroll.

Une fois ça fait, il faudra publier les modÚles :

DĂ©sormais, les deux modĂšles de certificats sont autorisĂ©s Ă  ĂȘtre utilisĂ©s.

Pour que les utilisateurs du domaine ainsi que le serveur NPS (membre du groupe RAS et IAS) puisse demander automatiquement des certificats, il faut crĂ©er une GPO dans l’Active Directory qui le permet.

Installer les outils de gestion de GPO :

powershell

Install-WindowsFeature GPMC -IncludeManagementTools

Lancer la MMC, et sĂ©lectionner Group Policy Management. On voit ici que les deux composants de la MMC sont accessibles depuis la mĂȘme interface

On va placer une GPO au niveau de l’OU Utilisateurs

On notera ici que le groupe sur lequel s’applique la GPO est “Domain Users” et non pas “Authenticated Users”.

Il faut modifier la GPO pour activer l’autoenrollement

Appliquer la GPO. Tous les utilisateurs du domaine dans l’OU Utilisateurs et celles en dessous pourront autoenroll Ă  un certificat.

On va procĂ©der de la mĂȘme maniĂšre pour la GPO qui servira au serveur NPS. Ce dernier se trouve dans le Tier 1 (se rĂ©fĂ©rer aux guides de l’ANSSI sur le Tiering).

Il faut activer le mĂȘme paramĂštre mais dans Computer Configuration cette fois ci :

Phase 4 - Serveur NPS (RADIUS)

[!NOTE] Attention Le rĂŽle NPS n’est pas disponible en Windows Server Core. Il faut donc installer un Windows Server avec une interface graphique

AprĂšs avoir vĂ©rifiĂ© l’adresse IP, changĂ© le nom de la machine, ajoutĂ© l’AD en DNS et ajoutĂ© dans le domaine, nous pouvons installer le NPS.

Dans la gestion des serveurs, on peut ajouter un rÎle au serveur NPS fraßchement ajouté

Suivre les configurations par défaut

Il devrait apparaĂźtre le rĂŽle NPAS dans le Server Manager :

[!WARNING] Le tiering Pensez Ă  glisser le serveur NPS dans l’OU Computers\Tier 1

Pensez Ă  installer les RSAT liĂ©s au NPS sur la machine d’administration:

powershell

Install-WindowsFeature -Name NetworkPolicyAndAccessServices -IncludeManagementTools

Dans la MMC, ouvrez Network Policy Server

Attention, il se peut que le pare-feu Windows pose un problĂšme lors de la connexion Ă  distance. En effet, le profil pare-feu de domaine peut poser problĂšme quant Ă  la connexion Ă  distance.

Pour rappel :

Nom Protocole Ports Usage
RPC pour NPS Remote Management TCP 135, 137 Communication Remote Procedure Call
RPC Dynamic Ports pour DCOM et WMI TCP 49152-65535 Plage dynamique utilisée par Windows pour RPC/DCOM
WMI pour Administration Ă  Distance TCP 5985, 5986 Windows Management Instrumentation (WinRM)
NetBIOS Name Service UDP 137 Recherche de noms NetBIOS
NetBIOS Datagram Service UDP 138 Utilisé pour la diffusion NetBIOS
NetBIOS Session Service TCP 139 Utilisé pour les sessions NetBIOS
DNS (si NPS utilise DNS) UDP/TCP 53 RĂ©solution DNS
SMB TCP 445 Server Message Block

powershell

New-NetFirewallRule -DisplayName "Allow SMB for NPS Remote Management (TCP)" -Direction Inbound -Protocol TCP -LocalPort 445 -Action Allow -Profile Domain

Une fois ça fait et le composant de la MMC attachĂ©, clic droit et Register server in Active Directory. De cette maniĂšre, le serveur sera autorisĂ© Ă  requĂȘter dans l’AD. Attention, il se peut que ce soit grisĂ©, dans ce cas il faut passer en RDP sur le NPS et l’activer directement depuis l’hĂŽte.

Ensuite, sélectionner RADIUS server for 802.1X Wireless or Wired Connections

Puis Configure 802.1X.

Choisissez si votre infrastructure 802.1x (du moins, cette stratégie réseau là) sera en filaire ou sans fil.

Un client au sens RADIUS est un appareil qui relayera l’authentification de l’utilisateur final. Dans notre cas, cela peut ĂȘtre un pare-feu (dans le cas d’un multi-site), un switch ou bien une borne wifi. Dans mon cas, j’opterai pour la derniĂšre solution.

ConsidĂ©rons que notre infrastructure est composĂ©e d’un seul point d’accĂšs, Auteqia-AP

qui est l’implĂ©mentation EAP-TLS de Microsoft

Ici nous sommes face Ă  un choix de taille. Il faut choisir entre :

  • Microsoft: Smart Card or other certificate : L’utilisateur s’identifie avec un certificat, nĂ©cessite une PKI, s’effectue avec TLS, le NPS valide le certificat auprĂšs de la CA.
  • Microsoft: Protected EAP (PEAP) : PEAP encapsule EAP-MSCHAPv2 ou EAP-TLS dans un tunnel TLS sĂ©curisĂ©, peut s’authentifier avec un mot de passe ou un certificat
  • Microsoft: Secured password (EAP-MSCHAP v2) : MSCHAPv2 authentifie les utilisateurs en comparant des hashes de mot de passe, pas de certificat,

Dans notre cas, nous choisirons le premier Microsoft: Smart Card or other certificate car nous disposons d’une PKI et tout ce qu’il faut pour pouvoir se baser sur cette mĂ©thode d’authentification.

Cliquer sur Configure pour bien vĂ©rifier que le NPS reçoit un certificat (via la GPO d’autoenrollment)

Choisir pour quel groupe s’applique la stratĂ©gie rĂ©seau RADIUS, dans mon cas Domain Users

DĂ©cocher toutes les mĂ©thodes d’authentification moins sĂ©curisĂ©es.

Il est désormais le moment de passer à la partie Wifi/ContrÎleur wifi.

Phase 5 - Hardening par GPO du domaine (optionnel)

Attention, dans un environnement avec beaucoup de postes, des serveurs “legacy”, des comptes de services et des applications connectĂ©es, ces GPO pourraient littĂ©ralement casser l’AD DS. Elles sont donc Ă  appliquer avec prĂ©cautions.

L’authentification NTLM est vulnĂ©rable aux attaques NTLM Relay et Pass-the-Hash . Il est recommandĂ© de dĂ©sactiver NTLM et de forcer Kerberos. La GPO s’applique Ă  Domain Controllers et Domain Computers. J’appliquerai cette GPO Ă  la racine du domaine.

Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options

  • Network security: Restrict NTLM: Incoming NTLM traffic → Deny all
  • Network security: LAN Manager authentication level → Send NTLMv2 response only, refuse LM & NTLM
  • Network security: Restrict NTLM: Audit NTLM authentication in this domain → Enable Audit (before full enforcement)

Le Pass-the-Hash (PtH) consiste Ă  rĂ©utiliser des hashs NTLM volĂ©s pour s’authentifier. S’applique au Domain Computers.

Computer Configuration → Windows Settings → Security Settings → Local Policies → Security Options

  • Network Security : Do not store LAN Manager hash value on next password change → Enabled
  • Interactive logon: Number of previous logons to cache → Set to 0 (Prevents offline credential theft)

S’applique aux Domain Computers et Domain Controler.

Computer Configuration → Windows Settings → Security Settings → Account Policies → Kerberos Policy

  • Maximum lifetime for user ticket → 4 hours
  • Maximum lifetime for service ticket → 10 minutes

PrĂ©vient du Credential Dumping from LSASS (Mitigate PtH, PtT, Mimikatz). S’applique sur tous les ordinateurs du domaine.

Computer Configuration → Administrative Templates → System → Device Guard

  • Turn On Virtualization Based Security -> Enable without lock

Si vous voulez pouvoir désactiver Credential Guard à distance, sélectionnez Enabled without lock.

S’applique aux Domain Controler et aux Domain Computers.

Computer Configuration → Windows Settings → **Security → Advanced Audit Policy Configuration → Audit Policies

  • Logon / Logoff -> Audit Logon → Success & Failure
  • Account Logon -> Audit Kerberos Authentication Service → Success & Failure

Phase 6 - Client Windows 802.1x

Selon votre matĂ©riel et si vous avez optĂ© pour un 802.1x sans fil, vous pourrez paramĂ©trer un SSID sur vos bornes ou contrĂŽleur WiFi avec des paramĂštres 802.1X, plus particuliĂšrement un serveur RADIUS vers lequel le SSID communique pour relayer l’authentification. C’est ici que se place le protocole EAP.

Une fois le SSID paramĂ©trĂ©, on peut passer au test sur un client Windows. Pour y parvenir, j’ai crĂ©Ă© un utilisateur auteqia et une OU Lambda dans laquelle se placeront les utilisateurs non-privilĂ©giĂ©s du domaine. Si tout s’est bien passĂ©, notre utilisateur a rĂ©cupĂ©rĂ© son certificat automatiquement et l’a mit dans son magasin de certificat personnel. Il n’y a plus qu’Ă  lancer la connexion au WiFi !

Audit de l’infrastructure Ă  clĂ© publique

Dans le but de vĂ©rifier si je n’ai pas laissĂ© de mauvaises configuration derriĂšre moi, je vais lancer une succession d’outil fait pour le pentest d’environnement Active Directory (et donc AD CS).

Lister les modĂšles de certificats disponibles

powershell

Certify.exe find /vulnerable

Demander un certificat Ă  partir d’un template vulnĂ©rable

powershell

Certify.exe request /ca:<CA_SERVER> /template:<VULNERABLE_TEMPLATE>

Convertir un certificat en format utilisable pour Kerberos

powershell

Rubeus.exe asktgt /user:auteqia /certificate:<CERT_FILE> /password: /domain:<DOMAIN>
  • GĂ©nĂšre un TGT Ă  partir d’un certificat valide.

Utiliser le TGT

powershell

Rubeus.exe ptt /ticket:<TGT_FILE>

Lister les utilisateurs et groupes Active Directory

powershell

python3 GetADUsers.py -dc-ip <DC_IP> <DOMAIN>/<USER>:<PASSWORD>

Exploiter Kerberos avec PKINIT (si un certificat valide est obtenu)

powershell

python3 getTGT.py -cert-pfx <CERTIFICATE.pfx> <DOMAIN>/<USER>

powershell

SharpHound.exe -c All
  • Cela collecte toutes les informations pertinentes sur AD, y compris celles liĂ©es aux autoritĂ©s de certification et aux permissions des utilisateurs sur la PKI.

Axe d’amĂ©lioration

  • Hardening des ordinateurs du domaine par GPO plus poussĂ©
  • Appliquer l’administration par tier (cas rĂ©el)
  • Faire la procĂ©dure de renouvellement des certificats ROOT et SUB