PI Services

Le blog des collaborateurs de PI Services

[Powershell] Ecrire dans un Excel distant.

Exécuter Excel sur un poste Distant.

Quel est l'interêt ?

En dehors du fait qu'installer Excel sur un serveur n'est pas forcément une bonne pratique, dans mon cas cela me permet d'automatiser à 100% mes scripts Powershell, ces derniers fournissent des rapports détaillés à mes interlocuteurs, sans que je n'ai besoin de faire quelques modifications que ce soit (contrairement à un CSV).
Ainsi les scripts tournent de nuit et permettent à chacun de trouver son rapport le matin en arrivant, et ce même pendant mes vacances.

Comment ça marche

Pour exécuter Excel sur un poste distant via Powershell il faudra cumuler 2 paramètres.

  1. Activer CredSSP pour la délégation des identifiants.
  2. Autoriser le compte d'exécution à se servir de l'application Excel à Distance.

Voyons comment réaliser cela.

1- Activer CredSSP

J'ai déjà traité le sujet ICI.

2- Gestion Excel Distant

Attention la modification que nous allons réaliser n'est pas sans conséquence, comme nous pourrons le voir après, l'application Excel devient vraiment limitée pour tout autre utilisateur que celui qui sera déclaré.

Pour pouvoir autoriser le compte d'exécution à se servir de l'application Excel à distance, nous aurons besoin de la MMC.

Sur la machine qui traitera le fichier Excel :

  • Ouvrir la MMC > Ajouter ou supprimer des composants logiciels enfichables > Services de composants.

  • Développer Services de composants > Ordinateurs > Poste de travail > Configuration DCOM

  • Sur "Microsoft Excel Application" faites clic droit "propriétés", dans la fenêtre sélectionnez l'onglet "Identité"

  • Cochez la case "Cet utilisateur" puis faites "parcourir", sélectionnez "Tout l'annuaire" et enfin recherchez le compte d'exécution du script.

  • Entrez le mot de passe de votre compte d'exécution et faites "Appliquer".

Maintenant que le paramètre est fixé seul le compte définit est "autorisé" à se servir de l'application Microsoft Excel, l'expérience pour tout autre utilisateur est vraiment dégradé (pas d'impression, de sauvegarde, message d'erreur...); par conséquent si vous souhaitez pouvoir continuer à utiliser Excel, je vous invite à repasser sur "L'utilisateur exécutant" et n'activer la fonction que lors de l'exécution du script (pour ma part je ne l'active sur mon poste que la nuit).

Exemple de message d'erreur.

 

Annexe

En annexe un petit article sur la gestion d'Excel en Powershell :

https://blog.piservices.fr/post/2013/03/27/Powershell-Creation-de28099objets-personnalises

 

[Powershell] CredSSP : Credential Security Service Provider.

CredSSP qu'est ce que c'est ?

CredSSP : Credential Security Service Provider.

A quoi cela sert-il ?

A déléguer des identifiants pour une session distante, plus précisément, CredSSP vous permet de fournir une authentification de bout en bout au travers de plusieurs sessions distantes.

Exemple :

Depuis un Serveur A un script Powershell ouvre une session distante sur un Serveur B, ce dernier traite ses instructions puis ouvre une session distante pour requêter un Serveur C et y déposer ses résultats sur un partage.

Lors de l'ouverture de la session distante entre A et B Windows utilise les identifiants fournis, mais lors de l'ouverture de la session distante depuis B vers C, Windows considère qu'il s'agit d'une usurpation Kerberos (car par défaut WinRm n'autorise pas la délégation des identifiants).

Afin de palier  cela que ce soit pour un "Invoke-Command" ou un "New-PSSession" vous devrez ajouter "-Authentication CredSSP"; cet ajout vous permettra de déléguer les identifiants pour la seconde session distante.

Mise en oeuvre :

Et non, on ne peut pas utiliser l'option CredSSP sans prérequis, voici ceux à mettre en place.

Sur le Serveur A on va activer CredSSP "Client" via la commande suivante :

Enable-WSManCredSSP -Role Client -DelegateComputer ServerB.mondomaine.com -Force

On peut vérifier que cela à bien fonctionné à l'aide de la commande suivante :

Get-WSManCredSSP

Puis sur le Server B on va activer CredSSP "Server" via la commande suivante :

Enable-WSManCredSSP -Role Server -Force

vérifions.

Et voilà nous devrions donc pouvoir exécuter la commande initiale depuis le serveur A, vérifions cela sans oublier d'ajouter "-Authentication CredSSP".

Enter-PSSession -ComputerName lab01-wsus1.LAB.ORG -Credential Lab\Adminmad -Authentication Credssp

Jusque la tout fonctionne, essayons donc maintenant de requêter vers le serveur C.

Invoke-Command -ComputerName Lab01-wsus2.lab.org -ScriptBlock {Get-WindowsFeature | Where-Object {$_.Name -like "UpdateServices"}}

C'est bien fonctionnel, bien entendu comme ce changement est lié à la sécurité, il est préconisé de désactiver cette option après usage.

On peut utiliser les commandes :

Disable-WSManCredSSP –Role Client # Sur le serveur A
Disable-WSManCredSSP –Role Server # Sur le serveur B

Ou directement depuis le serveur A :

Invoke-Command –ComputerName ServerB –ScriptBlock { Disable-WSManCredSSP –Role Server }
Disable-WSManCredSSP –Role Client

 

Annexes :

Vous pouvez aussi le faire sur plusieurs Serveurs : 

Enable-WSManCredSSP -Role "Client" -DelegateComputer "ServerB.mondomaine.com", "ServerC.mondomaine.com", "ServerD.mondomaine.com" -Force

Ou sur toutes les machines du domaine :

Enable-WSManCredSSP -Role "Client" -DelegateComputer "*.mondomaine.com" -Force

 Pour plus d'informations:

https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-6 

https://msdn.microsoft.com/en-us/library/windows/desktop/bb931352(v=vs.85).aspx

Sécurité : Windows KB pour Ransomware – PETYA

Le rançongiciel Petya est apparu fin juin en Ukraine pour ensuite se propager rapidement partout dans le monde.

Il s’agirait d’une variante de WannaCrypt qui était apparu en début d’année.

 

Se protéger

Si vous n’avez pas encore été infectée, vous devez vérifier que vos postes disposent des dernières mises à jour et de les installer si ce n’est pas le cas.

Pour agir rapidement vous pouvez installer uniquement la KB qui correspond à votre système d’exploitation en regardant la liste sur cette article https://blog.piservices.fr/post/2017/05/30/securite-kb-pour-wanna-cry et de se rendre sur le catalogue de Microsoft pour le télécharger http://www.catalog.update.microsoft.com/home.aspx.

 

Vérifier avec WSUS

Si vous disposez d’un serveur WSUS vous pouvez vérifier depuis la console si votre parc informatique est protégé. Pour se faire il faut se rendre dans l’onglet Updates -> Security Updates -> Search

clip_image002

Dans la fenêtre qui apparaît vous devez rentrer la KB souhaitez par exemple : 4012212

clip_image003

Lorsque vous regardé le report de la KB (en double cliquant dessus) vous verrez :

  • La description de la KB
  • Les groupes qui approuvent cette KB
  • L’état de déploiement par rapport à vos machines

clip_image004

Microsoft a également sorti un script qui permet de savoir si votre machine dispose du patch ou non. Le seul prérequis est de disposer au minimum de Windows PowerShell 2.0. https://support.microsoft.com/fr-be/help/4023262/how-to-verify-that-ms17-010-is-installed

Voici le script :

[reflection.assembly]::LoadWithPartialName("System.Version")
$os = Get-WmiObject -class Win32_OperatingSystem
$osName = $os.Caption
$s = "%systemroot%\system32\drivers\srv.sys"
$v = [System.Environment]::ExpandEnvironmentVariables($s)
If (Test-Path "$v")     {     Try         {         $versionInfo = (Get-Item $v).VersionInfo         $versionString = "$($versionInfo.FileMajorPart).$($versionInfo.FileMinorPart).$($versionInfo.FileBuildPart).$($versionInfo.FilePrivatePart)"         $fileVersion = New-Object System.Version($versionString)         }     Catch         {         Write-Host "Unable to retrieve file version info, please verify vulnerability state manually." -ForegroundColor Yellow         Return         }     }
Else     {     Write-Host "Srv.sys does not exist, please verify vulnerability state manually." -ForegroundColor Yellow     Return     }
if ($osName.Contains("Vista") -or ($osName.Contains("2008") -and -not $osName.Contains("R2")))     {     if ($versionString.Split('.')[3][0] -eq "1")         {         $currentOS = "$osName GDR"         $expectedVersion = New-Object System.Version("6.0.6002.19743")         }      elseif ($versionString.Split('.')[3][0] -eq "2")         {         $currentOS = "$osName LDR"         $expectedVersion = New-Object System.Version("6.0.6002.24067")         }     else         {         $currentOS = "$osName"         $expectedVersion = New-Object System.Version("9.9.9999.99999")         }     }
elseif ($osName.Contains("Windows 7") -or ($osName.Contains("2008 R2")))     {     $currentOS = "$osName LDR"     $expectedVersion = New-Object System.Version("6.1.7601.23689")     }
elseif ($osName.Contains("Windows 8.1") -or $osName.Contains("2012 R2"))     {     $currentOS = "$osName LDR"     $expectedVersion = New-Object System.Version("6.3.9600.18604")     }
elseif ($osName.Contains("Windows 8") -or $osName.Contains("2012"))     {     $currentOS = "$osName LDR"     $expectedVersion = New-Object System.Version("6.2.9200.22099")     }
elseif ($osName.Contains("Windows 10"))     {     if ($os.BuildNumber -eq "10240")         {         $currentOS = "$osName TH1"         $expectedVersion = New-Object System.Version("10.0.10240.17319")         }     elseif ($os.BuildNumber -eq "10586")         {         $currentOS = "$osName TH2"         $expectedVersion = New-Object System.Version("10.0.10586.839")         }     elseif ($os.BuildNumber -eq "14393")         {         $currentOS = "$($osName) RS1"         $expectedVersion = New-Object System.Version("10.0.14393.953")         }     elseif ($os.BuildNumber -eq "15063")         {         $currentOS = "$osName RS2"         "No need to Patch. RS2 is released as patched. "         return         }     }
elseif ($osName.Contains("2016"))     {     $currentOS = "$osName"     $expectedVersion = New-Object System.Version("10.0.14393.953")     }
elseif ($osName.Contains("Windows XP"))     {     $currentOS = "$osName"     $expectedVersion = New-Object System.Version("5.1.2600.7208")     }
elseif ($osName.Contains("Server 2003"))     {     $currentOS = "$osName"     $expectedVersion = New-Object System.Version("5.2.3790.6021")     }
else     {     Write-Host "Unable to determine OS applicability, please verify vulnerability state manually." -ForegroundColor Yellow     $currentOS = "$osName"     $expectedVersion = New-Object System.Version("9.9.9999.99999")     }
Write-Host "`n`nCurrent OS: $currentOS (Build Number $($os.BuildNumber))" -ForegroundColor Cyan
Write-Host "`nExpected Version of srv.sys: $($expectedVersion.ToString())" -ForegroundColor Cyan
Write-Host "`nActual Version of srv.sys: $($fileVersion.ToString())" -ForegroundColor Cyan
If ($($fileVersion.CompareTo($expectedVersion)) -lt 0)     {     Write-Host "`n`n"     Write-Host "System is NOT Patched" -ForegroundColor Red     }
Else     {     Write-Host "`n`n"     Write-Host "System is Patched" -ForegroundColor Green     }
#

Voici le résultat de se script exécuté sur un poste patché et non patché.

clip_image005

clip_image006

 

Information :

Si vous êtes déjà touché par le rançongiciel, la première chose à faire est d’isoler tous les équipements identifiés comme étant contaminés en les débranchant du réseau afin de contenir l’action du programme. De plus vous devez si possible mettre en veille prolongé la machine ou de la mettre hors tension pour arrêter l’action du programme et de ne surtout pas payer la rançon.

Vous pouvez lire également deux notes de l’Agence Nationale de la Sécurité des Systèmes d’Information (ANSSI) qui permet de savoir quelle attitude adopter avant et après une attaque rançongiciel.

http://www.cert.ssi.gouv.fr/site/CERTFR-2017-INF-001/CERTFR-2017-INF-001.html

http://www.ssi.gouv.fr/actualite/alerte-campagne-de-rancongiciel-3/

Sécurité : Windows KB pour Wanna Cry

 

Suite à l'attaque du virus Wanna Cry, tout le monde a souhaité corriger la faille de sécurité au plus vite.

Avec tout ce qu'on a pu lire ou trouver sur internet on ne sait plus vraiment qui fait quoi et si nous sommes réellement protégé.

Liste des KB de Sécurité

Voici la liste des KB de sécurité couvrants la faille (pour information les KB se remplacent d'un mois à l'autre : exemple la KB du mois d'avril remplace celle de Mars):

  1. Pour Windows XP, Vista, 8, Windows Server 2003 et 2008 : 
    1. Mars 2017
      1. KB4012598
  2. Pour Windows 7 SP1 et Windows Server 2008 R2 SP1:
    1. Mars 2017
      1. Security only update : KB4012212
      2. Monthly Rollup : KB4012215
      3. Preview of Monthly Rollup : KB4012218
    2. Avril 2017
      1. Security only update : KB4015546
      2. Monthly Rollup : KB4015549
      3. Preview of Monthly Rollup : KB4015552
    3. Mai 2017
      1. Security only update : KB4019263
      2. Monthly Rollup : KB4019264
      3. Preview of Monthly Rollup : KB4019265
  3. Pour Windows Server 2012 :
    1. Mars 2017
      1. Security only update : KB4012214
      2. Monthly Rollup : KB4012217
      3. Preview of Monthly Rollup : KB4012220
    2. Avril 2017
      1. Security only update : KB4015548
      2. Monthly Rollup : KB4015551
      3. Preview of Monthly Rollup : KB4015554
    3. Mai 2017
      1. Security only update : KB4019214
      2. Monthly Rollup : KB4019216
      3. Preview of Monthly Rollup : KB4019218
  4. Pour Windows 8.1 et Windows 2012 R2 :
    1. Mars 2017
      1. Security only update : KB4012213
      2. Monthly Rollup : KB4012216
      3. Preview of Monthly Rollup : KB4012219
    2. Avril 2017
      1. Security only update : KB4015547
      2. Monthly Rollup : KB4015550
      3. Preview of Monthly Rollup : KB4015553
    3. Mai 2017
      1. Security only update : KB4019213
      2. Monthly Rollup : KB4019215
      3. Preview of Monthly Rollup : KB4019217
  5. Pour Windows 10 (Release 1511) :
    1. Mars 2017
      1. KB4013198
      2. KB4016636
    2. Avril 2017
      1. KB4015219
    3. Mai 2017
      1. KB4019473
  6. Pour Windows 10 (Release 1607) :
    1. Mars 2017 
      1. KB4013429
      2. KB4015438
      3. KB4016635
    2. Avril 2017
      1. KB4015217
    3. Mai 2017
      1. KB4019472
      2. KB4023680
  7. Pour Windows 10 LTSB : 
    1. Mars 2017 
      1. KB4012606
      2. KB4016637
    2. Avril 2017
      1. KB4015221
    3. Mai 2017
      1. KB4019474

En espérant que cela pourra vous servir.

Pour télécharger les KB : http://www.catalog.update.microsoft.com/home.aspx

 

 

Identifier le certificat correspondant à l’attribut AD UserCertificate ou cACertificate

Dans le cadre de la gestion des certificats dans Active Directory, il arrive que l’on retrouve des valeurs de ce type pour les attributs UserCertificate ou CaCertificate:

 image

Ce type de champ est difficilement lisible et cela peut donc complexifier la tâche lorsque l’on veut supprimer un certificat déployé en doublon, ou tout simplement un certificat avec des informations erronées.

Pour rapidement différencier les certificats il suffit de suivre les étapes suivantes:

Copier le contenu Hexadécimal dans un fichier texte :

image

image

image

Exécuter la commande suivante :

Certutil –decodehex C:\Temp\HexValue.txt C:\Temp\OutputCert.cer

image

Le résultat de la commande est un fichier .cer que l’on peut ouvrir et qui contiendra les attributs du certificat de manière lisible, ces opérations doivent être répétées sur les différentes entrées pour chaque certificat à identifier.

image

image

Activer le démarrage automatique AppLocker sur Windows Server 2016

AppLocker est une fonctionnalité permettant de spécifier les utilisateurs ou groupes de votre organisation pouvant exécuter des applications particulières en fonction de l’identité unique des fichiers. Si vous utilisez AppLocker, vous pouvez créer des règles pour autoriser ou refuser l’exécution d’applications.

AppLocker peut, par exemple, être utilisé dans le cadre d’un déploiement d’une infrastructure PKI d’entreprise à deux niveaux afin de sécuriser l’autorité de certification racine.

Cependant, sur la version Windows Server 2016 et  il n’est actuellement pas possible de programmer le démarrage automatique du service AppIDSvc via l’interface graphique, ni même par GPO comme indiqué par Microsoft.

L’erreur suivante apparait quand on essaye d’appliquer le paramètre “Démarrage automatique” :

image

Afin que le service AppIDSvc se lance de manière automatique à chaque démarrage il faut modifier la clé de registre suivante:

Valeur: Start=2

Clé: HKLM\SYSTEM\CurrentControlSet\Services\AppIDSvc

image

Une fois la clé modifiée, redémarrez le service.

Le service est maintenant en démarrage automatique:

image

SQL Server – Chiffrer les connexions Client/Serveur

Introduction

Afin d’améliorer la sécurité des connexions réalisées depuis les clients SQL vers une base, il est possible d’activer la fonction de chiffrement de SQL (Encryption) depuis SQL Server Configuration Manager.

Cette fonctionnalité permet de chiffrer la connexion entre le client et le serveur afin d’éviter l’interception et la lecture des commandes réalisées par le client.

Prérequis

  • Un certificat avec sa clé privée délivré pour l’authentification server d’installé sur le serveur SQL (le certificat doit avoir pour nom le même que celui utilisé dans la source de donnée du client, souvent il s’agit du FQDN du serveur),
  • Dans le cas d’une utilisation d’un cluster, le nom du certificat doit être correspondre au nom DNS utilisé par le cluster, le certificat devras être installé sur tous les nœuds du cluster,
  • Le compte de service utilisé par le service SQL Server doit avoir les droits Read sur la clé privée du certificat,
  • Le client doit être en mesure de valider et de faire confiance à l’autorité ayant délivré le certificat,
  • Une fenêtre d’interruption de l’instance SQL.

Réalisation

1. Depuis SQL Server Configuration Manager, faire un clic-droit sur l’instance souhaitée et sélectionner “Properties”

image

2. Depuis l’onglet certificate, sélectionner le certificat à utiliser pour le chiffrement des connexions,

image

3. Depuis l’onglet Flags, passer la valeur de “ForceEncryption” à ‘'Yes”,

image

4. Rebooter l’instance.

Verification

Un test réalisé à l’aide d’un outil de capture réseau, et d’un client SQL permet de prouver le chiffrement des connexions :

  • Avant

image

  • Après

image

Le Service Pack 2 pour Windows 7 SP1 et Windows Server 2008 R2 SP1

Suite à l'interrogation d'un client à propos des différentes versions d'OS et de leurs Services Pack, force m'a été de constater que le "Convenience Rollup Update for Windows 7 SP1 and Windows Server 2008 R2 SP1" paru en avril 2016, soit 5 ans après le SP1 (février 2011), n'était pas fourni directement par Microsoft via Windows update.

En effet, ce qui s'apparente à un service pack mais qui n'en est pas un, n'est mis à disposition que sur le "Microsoft Catalog Update".

Ce "CRU" de 316 à 476Mo selon le package, contient un peu plus de 200 mises à jour soit toutes celles depuis le SP1 jusqu'au mois de mai 2016 (à l'heure ou j'écris ces lignes). 

 

Prérequis :

Pour pouvoir installer le Rollup package vous devrez disposer des éléments suivants:

  1. Service Pack 1 for Windows 7 or Windows Server 2008 R2 (KB976932)
  2. April 2015 servicing stack update for Windows 7 and Windows Server 2008 R2 (KB3020369)
  3. 4Go d'espace libre sur le disque
  4. Utiliser Internet Explorer pour le téléchargement (Vous aurez un message comme ci-dessous avec les autres navigateurs)

Sans Internet Explorer

 

Téléchargement :

Pour télécharger le package utilisez Internet Explorer puis rendez vous sur l'URL : Microsoft Catalog Update

Ici un Pop-up vous invitant à installer un module complémentaire apparaît, cliquez sur "installer"

Module à installer

Ensuite à l'aide du menu contextuel recherchez la KB3125574 (vous n'êtes pas obligé d'écrire KB le numéro suffit).

KB3125574

3 packages s'offrent à vous : 

  1. Le premier pour Windows 7 SP1 32 bits
  2. Le deuxième pour Windows Serveur 2008 R2 SP1 64 bits
  3. Le troisième pour Windows 7 SP1 64bits

Sélectionnez celui ou ceux qui vous intéressent à l'aide du bouton "Ajouter"

Packages

Puis cliquez sur "Afficher le panier"

 Panier

Et enfin "Télécharger". Download

Une fenêtre s'ouvre pour afin que vous puissiez indiquer le répertoire de destination de votre téléchargement, à la suite de quoi le téléchargement débutera automatiquement.

Directory

En cours

Fin

 

Une fois ce dernier terminé il ne vous reste plus qu'a vous rendre dans le répertoire que vous avez indiqué plus tôt; dedans se trouvera un ou plusieurs répertoires portant le nom du ou des packages récupérés.

CRU

 

Vous n'aurez plus qu'à ouvrir le "Package autonome Microsoft Update (.msu)" précédemment téléchargé et attendre sagement que les mises à jours s'installent.

Package autonome Microsoft Update (.msu)

Nota bene :

Microsoft n'a prévu aucun correctif pour le navigateur "Internet Explorer", la firme américaine vous propose simplement de télécharger et installer la dernière version disponible et bien entendu de faire les mises à jours via Windows update.

 

 

https://support.microsoft.com/en-us/kb/3125574

https://support.microsoft.com/en-us/kb/3156417

 

 

 

DirectAccess : Déploiement de l'authentification forte

Introduction

DirectAccess a grandement évolué depuis sa première version sous Windows 2008 R2. Microsoft a simplifié le déploiement ce rôle tout en ajoutant des fonctionnalités supplémentaires. Ainsi, depuis Windows Server 2012, DirectAccess supporte l'authentification forte via une SmartCard ou un OTP (One Time Password). C'est le sujet de cet article où nous allons aborder plusieurs aspects de cette fonctionnalité. Tout d'abord, nous verrons le fonctionnement et les contraintes imposées sur ce type de déploiement, avant d’en réaliser un déploiement. L'usage de la Smartcard et de l'OTP sera détaillé.

La plateforme utilisée sera Windows 2012 R2. La partie OTP est composé d'un serveur multiOTP et d'un serveur radius Tekradius qui sont tous les deux gratuits et permettent de réaliser un environnement de test simplement. Nous partirons du principe que DirectAccess est déjà déployé et fonctionnel. Seuls le déploiement du service OTP et l'ajout du support de l'authentification forte dans l'infrastructure DirectAccess seront détaillés. Enfin, une infrastructure de PKI est nécessaire pour réaliser ce type de déploiement. Dans cet article, cette dernière est implémentée sur Windows 2012 R2.

Fonctionnement

Généralités

Lorsque l'utilisateur se connecte sur son ordinateur, DirectAccess tente de savoir s'il est sur le réseau interne comme dans un fonctionnement classique. Lorsque le tunnel infrastructure est monté, l'utilisateur est invité à entrer des informations d'authentification supplémentaires. Cela peut être une smartcard ou un code à usage unique (OTP). Si la fonctionnalité OTP est activée, cela active aussi obligatoirement l'authentification par smartcard (l'inverse n'étant pas réciproque). Il existe ensuite deux possibilités. S'il s'agit d'une authentification par carte à puce alors l'authentification est réalisé directement avec le certificat utilisateur.

Dans le cadre d'une authentification par OTP, les paramètres d'authentification entrés sont transmis en SSL au serveur DirectAccess avec une demande de certificat par carte à puce. En effet, cette fonctionnalité se base sur une authentification par certificat de type carte à puce (même avec un OTP). Le certificat généré possède une durée de vie très courte. Comme dans une demande de certificat par carte à puce classique, celle-ci sera signée par une entité possédant un certificat d'enrollment, c’est-à-dire donnant la possibilité de signer des demandes de certificats de carte à puce au nom d'un autre utilisateur. Dans le cadre de DirectAccess, ce seront les serveurs DirectAccess qui posséderont ces certificats d'enrollment et pourront dont signer les demandes de certificats des clients DirectAccess. Le serveur DirectAccess vérifie le code à usage unique auprès du serveur OTP. Ce dernier doit fonctionné avec un serveur radius. Le serveur DirectAccess s'adresse au serveur radius pour effectuer la vérification de l'authentification. Si le code à usage unique est correct, il signe la demande de certificat et la transmet au client DirectAccess. Le client transmet cette demande signée à l'autorité de certification et stocke le certificat associé. Le client se comporte désormais comme un client authentifié via carte à puce.

Voici un schéma récapitulatif de la cinématique de connexion pour l’OTP :

image

1 et 2/ Connexion à l’annuaire Active Directory via le tunnel infrastructure.

3/ Des paramètres d’authentification supplémentaires sont demandés pour monter le tunnel utilisateur

4/ Envoie du code à usage unique récupéré sur un périphérique (smartphone par exemple) et d’une demande de certificat de logon OTP via une connexion SSL avec le serveur DirectAccess.

5 et 6/ Communication du serveur DirectAccess avec le serveur Radius

7/ Le serveur radius contacte le serveur OTP pour vérifier le code à usage unique.

8 et 9/ Le serveur radius remonte le succès ou l’échec de l’authentification auprès du serveur DirectAccess

10/ Si l’authentification a réussi, le serveur DirectAccess signe la demande de certificat de logon OTP avec son certificat d’enrollment et l’envoie au client DirectAccess.

11 et 12/ Le client DirectAccess envoie la demande de certificat signée à l’autorité de certification au travers du serveur DirectAccess. L’autorité de certification renvoie le certificat de logon OTP associé.

13/ Le client DirectAccess récupère le certificat, le stocke et réalise une authentification Kerberos (non représentée ici) via carte à puce pour monter le tunnel utilisateur.

Si l’authentification par carte à puce est réalisée alors le schéma s’arrête à l’étape 4 et cette dernière se déroule au travers du tunnel infrastructure.

Contraintes

Comme vu dans son fonctionnement, ce type de déploiement nécessite forcément une infrastructure de PKI. L'option force tunneling (non activée par défaut) ne peut pas être activée dans un déploiement avec l'OTP car ce type d'authentification nécessite une connexion SSL en dehors du tunnel IPSec pour que le client puisse transmettre ces paramètres d'authentification supplémentaires. De plus, lors d'un déploiement utilisant IPHTTPS avec des équipements réseaux se trouvant entre le client et le(s) serveur(s) DirectAccess (comme un load balancer), ceux-ci ne doivent pas décrypter le flux SSL (fonctionnement en mode path through).

Client Windows 8

Pour les clients utilisant cette version de Windows, l'activation de l'authentification OTP ne permet plus d'utiliser le “null encryption” sur les connexions IPHTTPS. Pour rappel, cela permet d'éviter une double encryption (IPSec et flux IPHTTPS). Cela peut donc affecter les performances des connexions utilisateurs.

Clients Windows 7

Les clients Windows 7 doivent obligatoirement posséder le DirectAccess Connectivity Assistant v2.0 (http://www.microsoft.com/en-us/download/details.aspx?id=29039). Un popup permettant d'insérer des paramètres d'authentification supplémentaires apparait lorsque cela est nécessaire. Sa configuration est détaillé dans l’article suivant : http://blog.piservices.fr/post/DirectAccess-Conseils-et-Astuces.aspx.

Déploiement

Généralités

Si vous ne souhaitez configurer que l'authentification par Smartcard alors vous pouvez vous rendre directement sur le chapitre nommé “Configuration de DirectAccess”. Les autres chapitres sont dédiés au déploiement de l'authentification par OTP.

Installation et configuration de multiOTP

Tout d'abord, il faut commencer par récupérer les binaires de multiOTP sur le site suivant : http://www.multiotp.net/. Une fois l'archive extraite, la configuration peut être réalisée via une invite de commande. Celle-ci va nous permettre de réaliser une synchronisation des comptes utilisateurs Active Directory afin qu'ils soient présent dans multiOTP. Ci-dessous, vous trouverez les commandes à exécuter commentées :

Nous pouvons ensuite lancer une synchronisation via la commande suivante :

 

Cette dernière affichera les utilisateurs créés ainsi que les éventuelles erreurs de synchronisation. Cette commande est à insérer dans une tâche planifiée pour exécuter une synchronisation à intervalle régulier. Pour chaque utilisateur, un fichier est créé dans le sous dossiers “Users” de multiOTP.

Dans ce déploiement les utilisateurs récupère le code à usage unique via Google Authenticator (qui peut s'installer sur tous les téléphones mobiles android, windows phone et iOS). Pour configurer le client Google Authenticator, il est nécessaire de générer un QR Code pour chaque utilisateur que ce dernier scannera avec son téléphone. Pour se faire, il faut exécuter la commande ci-dessous :

 

NB : Pensez à remplacer NOM_USER par le nom de l'utilisateur pour lequel vous générer le QR Code et NOM_FICHIER par le nom du fichier image. Le fichier peut être envoyé à l'utilisateur afin qu'il puisse ajouter son compte dans Google Authenticator. L'OTP est normalement opérationnelle. Vous pouvez effectuer des tests de connexion avec la commande suivante :

 

NB : Pensez à remplacer NOM_USER par le nom de l'utilisateur et CODE par le le code à usage unique fourni par Google Authenticator.

Si l'opération réussi, vous obtenez un résultat similaire à l'image ci-dessous :

02

Astuce : Si vous vous trompez souvent de code (6 échecs) alors votre compte peut être bloqué ou votre authentification retardée de 300 secondes (3 échecs). Pour débloquer un compte il faut lancer la commande suivante :

 

Vous pouvez modifier le comportement de multiOTP (nombre de fois avant que le compte ne soit bloqué ou que l'authentification soit retardée ainsi que le délai avant la prochaine tentative de connexion) via les commandes ci-dessous :

Installation et configuration de TekRadius

Cette étape consiste à configurer un serveur radius avec lequel DirectAcces va communiquer. Ce dernier doit pouvoir s'intégrer avec multiOTP et est donc installé sur le même serveur que celui-ci. Pour rappel, c'est par lui que transite la vérification du code à usage unique. Les deux serveurs recommandés avec multiOTP sont FreeRadius et TekRadius LT. J'ai choisi le second qui est supporté nativement sur Windows (FreeRadius est un portage linux) et qui bénéficie d'une interface graphique permettant de la configurer simplement. Les binaires peuvent être récupérés sur http://www.kaplansoft.com/download.html.

Il faut ensuite exécuter le fichier setupe.exe afin d'installer l'outil.

01

La configuration principale se fait dans l'onglet “user” de l'interface qui s’ouvre en cliquant sur “TekRadius LT Manager”. Il faut créer un utilisateur par défaut (que l'on doit nommé “default”) puis ajouter le lancement d'un programme externe lorsqu'une requête sera effectuée par le serveur DirectAccess. Le programme lancé sera multiOTP. Dans la section “Attribute”, il faut sélectionner l'option “Check”, puis définir l'action effectuée à “External-Executable” et enfin insérez la commande exécutée par TekRadius comme suit : C:\multiotp\multiotp.exe %ietf|1% %ietf|2% (il est supposé ici que multiOTP est déployé dans “C:\multiOTP\”).

02

Dans l'onglet client, il faut ajouter notre server DirectAcces afin que ce dernier soit autorisé à communiquer avec TekRadius. Il faut insérer l'IP du serveur DirectAccess puis le secret (code utilisé pour communiquer) et enfin cliquez sur le bouton “Add/Update”.

03

Enfin dans la section “Service Parameters” de l'onglet “Settings” , on peut changer le port utilisé par TekRadius (par défaut 1812 UDP&TCP) ainsi que le niveau de trace généré par l'outil (je vous conseille de le définir à Debug dans un premier temps afin de valider la configuration, cela permet d'identifier clairement les éventuelles erreurs de configuration). On termine la configuration en cliquant sur le bouton “Save Settings” et en lançant le service via le bouton à gauche de ce dernier.

04

Le serveur TekRadius est à présent opérationnel.

Configuration des modèles de certificats

Certificat d'enrollment (signature des demandes de certificat OTP) :

Lancer la console de gestion des modèles de certificat. Choisir le modèle “Computer” puis dupliquer le (clic droit “Duplicate template”).

01

Dans l'onglet “Compatibility”, définissez à Windows 2012 R2 la valeur du champ “Certification Authority” et à Windows 8.1 / Windows Server 2012 R2 celle du champ “Certificat Recipient”. Cette valeur est à adapter selon le système d'exploitation utilisé sur votre autorité de certification et vos serveurs DirectAccess.

02

Dans l'onglet “General”, définissez un nom ainsi que la durée de vie du certificat et la période avant son expiration durant laquelle le serveur DirectAccess pour renouveler son certificat.

03

Dans l'onglet “Security”, ajouter vos serveurs DirectAccess (via le bouton “Add”) et donner leurs les permissions de lecteur (“Read”), d'enrollement (“Enroll”) et d'autoenrollement (“Autoenroll”).

04

Pour les utilisateurs authentifiés (“Authenticated Users”), laissez uniquement la permission de lecture.05

 

Supprimez la permission d'enrollement (“Enroll”) sur le groupe des ordinateurs du domaine (“Domain computers”).

06

Enfin, pour les groupes administrateurs du domaine (“Domain Admins”) et administrateur de l'entreprise, définissez la permission à contrôle total (“Full Control”).

0807

Dans l'onglet “Subject Name”, sélectionner l'option “DNS name” dans la liste déroulante “Subject Name format” et cocher la case “DNS name” sous “Include this information in alternate subject name” afin d'ajouter le nom DNS de l'ordinateur trouvé dans l'annuaire Active Directory en tant que sujet du certificat mais aussi comme SAN (subject alternative name).

09

Enfin, dans “Extensions”, il faut sélectionner le champ “Application Policies” et supprimer toutes les entrées existantes. Il est ensuite nécessaire de cliquer sur “Add” puis “New” et d'ajouter un nom ainsi que la valeur “1.3.6.1.4.1.311.81.1.1” dans le champ “Object Identifier”. La création de ce modèle est terminée.

101112

Certificat OTP :

Dans la console de gestion des modèles de certificat. Choisir le modèle “Smartcard Logon” puis dupliquer le (clic droit “Duplicate template”).

Dans l'onglet “Compatibility”, définissez à Windows 2012 R2 la valeur du champ “Certification Authority” et à Windows 7 / Windows Server 2008 R2 celle du champ “Certificat Recipient”. Cela correspond à la version du système d'exploitation minimale pour nos clients DirectAccess. Si vous n'utiliser pas de client sous Windows 7, vous pouvez changer cette valeur à Windows 8 ou Windows 8.1 en fonction de vos besoins.

13

Dans l'onglet “General”, définissez un nom ainsi que la durée de vie du certificat. La période de renouvellement doit être nulle.

14

Dans l'onglet “Security”, il faut définir les permissions du groupe des utilisateurs authentifiés (“Authenticated Users”) à “Read” et “Enroll”.

15

Il est aussi nécessaire de donner les permissions de contrôle total (“Full Control”) aux groupes administrateurs du domaine et administrateurs de l'entreprise.

1617

Dans l'onglet “Subject Name”, sélectionnez l'option “Full Distinguished Name” dans la liste déroulante “Subject Name format” et cocher la case “User principal name (UPN)” sous “Include this information in alternate subject name”.

18

Dans l'onglet “Server”, cocher la case “Do not store certificates and requests in the CA database” afin de ne pas polluer la base de donnée de l'infrastructure PKI lors des connexions des clients DirectAccess.

19

Dans l'onglet “Issuance Requirements”, vérifier que la case “This number of authorized signatures" est cochée et insérez la valeur 1. Vérifiez que le champ “Policy type required in signature” possède la valeur “Application Policy” et choisissez le modèle créé précédemment (DirectAccess OTP RA) pour le champ “Application Policy”. Cela permet de définir le certificat ayant le droit de signer des requêtes de certificat.

20

Enfin, dans “Extensions”, il faut sélectionner le champ “Application Policies” et supprimer toutes les entrées existantes sauf “Smart Card Logon”. La création de ce second modèle est terminée.

20post

Ajout des modèles à l'infrastructure PKI :

Dans la console de gestion de l'autorité de certification (“Certificate Authority”), il est nécessaire de publier les modèles qui viennent d'être créé. Cette opération se réalise dans l'onglet “Certificate Templates”. Il suffit de faire un clic droit et de choisir l'option “Certificate Template to Issue”. Il faut sélectionner les deux modèles créés précédemment et valider avec le bouton “OK”.

21

Enfin, afin d'autoriser la PKI à ne pas stocker certaines demandes de certificat ou certains certificat, il faut exécuter la commande ci-dessous :

Il vous sera ensuite demandé de redémarrer le service Active Directory Certificate Services pour que le changement soit pris en compte.

22

Configuration de DirectAccess

Nous pouvons maintenant configurer DirectAccess afin qu'elle fonctionne avec l'authentification forte (Smartcard ou OTP).

Pour réaliser cette étape, il faut se rendre dans la console “Remote Access Management” permettant de configurer son infrastructure DirectAccess. Dans la section “Configuration”, il faut éditer l'étape 2 nommée “Remote Access Server” (Bouton “Edit”).

01

Lorsque l'assistant s'ouvre, il faut ajouter des paramètres sur l'onglet nommé “Authentication”. Par défaut, la case “Active Directory Credential” est sélectionnée dans “User Authentication”. Pour activer uniquement l'authentification par carte à puce, il suffit de sélectionner la case “Two-factor authentication” et la configuration est terminée. Si vous souhaitez également activer l'authentification par OTP, il faut cocher la case “Use OTP”. Cela activera des onglets de configuration supplémentaires.

02

Dans la section “OTP Radius Server”, il faut indiquer le nom DNS ou l'IP du serveur TekRadius que nous avons installé précédemment ainsi que le secret (via le bouton “Change”) que nous avons défini dans la section client de l'outil et enfin le port s'il ne s'agit pas de celui par défaut (1812).

03

04

Dans l'onglet “OTP CA Servers”, il convient de renseigner l'autorité de certification délivrant les certificats dont nous avons créé les modèles (l'ajout se fait via le bouton “Add”).

05

NB : Vous pouvez rencontrez une erreur indiquant qu’aucune autorité de certification n’a pu être détectée. Il s’agit d’un bug de l’assistant graphique corrigé par un hotfix disponible en suivant ce lien : https://support.microsoft.com/fr-fr/kb/3047733 (Toutefois, il reste possible de réaliser la configuration via Powershell sans le hotfix).

image

Dans l'onglet “OTP Certificate Templates”, il faut indiquer le modèle utilisé pour l'authentification par OTP puis le modèle permettant de signer les requêtes de certificat OTP.

06

Par défaut, tous les utilisateurs doivent s'authentifier via carte à puce ou OTP. Cependant, vous pouvez spécifier un groupe d'utilisateurs pouvant s'authentifier uniquement grâce à l'authentification intégré dans la section “OTP Exemptions”. Vous pouvez ensuite valider cet assistant.

07

Dans l'étape 3 de la configuration de DirectAccess, il est nécessaire d'effectuer une modification lorsque l'on configure l'OTP. Il faut autoriser les clients DirectAccess à contacter l'autorité de certification délivrant les certificats pour l'authentification par OTP avant qu'il n'est accès aux ressources internes de l'entreprise. Cela leur permet d'obtenir le certificat pour monter le tunnel utilisateur. Dans la section “Management” de l'assistant, il convient d'indiquer le nom DNS de l'autorité de certification sur laquelle nous avons ajouté les modèles précédemment créés.

08pre

Il est ensuite nécessaire d'appliquer le changement de configuration (ce bouton apparait en dessous de la vue globale de configuration de DirectAccess).

08

Pour vérifier que le service est fonctionnel, nous pouvons nous rendre dans l'onglet “Operations Status” de la console de gestion d'accès à distance.

09

Il est aussi possible de vérifier qu'un site IIS a été créé sur le serveur. Ce dernier est nommé “DAOtpSite”.

10

Enfin, en ouvrant un navigateur sur le serveur, on peut vérifier que ce site est fonctionnel via l'url : https://localhost/DAOtpauth.dll

11

Vous pouvez maintenant mettre à jour les stratégies de groupes de vos postes clients (gpupdate /force) et tester l'authentification en vous connectant à distance.

test win 7

Si vous rencontrez des erreurs sur l'OTP, n'hésitez pas à regarder le journal d'évènements “OTPCredentialProvider” (dans “Applications and Services Logs”) de votre poste client ainsi que les traces générés par TekRadius sur le serveur radius (présent dans le répertoire Logs du dossier d'installation de TekRadius). Nous pouvons d'ailleurs remarqué qu'un utilisateur nommé DAProbeUser tente de s'authentifier à intervalle régulier. Comme ce dernier n'existe pas dans multiOTP, une erreur est remontée. Ce comportement est tout à fait normal. Il s'agit simplement du sonde DirectAccess permettant de tester la disponibilité de l'OTP.

01

NB : Vous pouvez rencontrez l'erreur 0x80040001 sur votre client lorsque vous tentez de vous authentifier via OTP. Il s'agit d'un bug qui se corrige en installant la KB suivante :

  • Windows 8 : https://support.microsoft.com/en-us/kb/2973071

  • Windows 7 : https://support.microsoft.com/en-us/kb/2939489

    event viewer win 7