Vous êtes sur la page 1sur 11

MISE EN PLACE DE LAPS & KeePass

Version 1.0 du 26/12/2023

AUTEUR : JM SIMON

1|M I S E EN P LAC E D E LAPS & K EEPA SS


SOMMAIRE

Le Prérequis ........................................................................................................................................3
Serveur Active Directory .................................................................................................................3
Installation de LAPS ............................................................................................................................3
Extension ADMPWD (LAPS) .............................................................................................................3
Extension POSHKEEPASS .....................................................................................................................8

2|M I S E EN P LAC E D E LAPS & K EEPA SS


Le Prérequis
Serveur Active Directory

Pour que LAPS puisse fonctionner il faut l’intégrer sur un serveur Active Directory pour qu’il modifie le
schéma de l’Active Directory.

Installation de LAPS
Extension ADMPWD (LAPS)

Cette « Extension » disponible pour Powershell est une extension de l’annuaire Active Directory, elle
permet de centraliser et sécuriser l’ensemble des serveurs Windows ayant un compte d’administration
en locale.

Installation de l’extension

L’extension LAPS va nous permettre de définir un nouveau mot de passe totalement aléatoire tous les
x temps. Puis peut être récupérer sur le serveur LAPS et avec une commande PowerShell.

Installation client :

LAPS est fourni comme un fichier MSI qui


permet d’installer les composants clients
et serveurs. L’installation par défaut
n’installe que les composants clients.
Concrètement, la partie cliente de LAPS
est un CSE (Client Side Extension) : c’est
une extension qui vient s’enregistrer
auprès du service client de stratégies de
groupe de Windows. On n’installe donc
pas de nouveau service à gérer, mais bien
un composant de l’OS.

3|M I S E EN P LAC E D E LAPS & K EEPA SS


Installation serveur :

Sur un serveur membre, nous allons


installer les composants LAPS, on aura
besoin dans un premier temps d’un compte
avec les droits d’administrateur local sur le
serveur, ensuite on doit disposer des droits
d’administrateurs du schéma, puis
finalement des droits d’administration sur
l’unité d’organisation qu’on veut
administrer.

On installe l’environnement, et procède à l’installation de l’extension en utilisant la commande

Import-module AdmPwd.PS
Update-AdmPwdADSchema

On va ensuite attribuer aux machines le droit de modifier ces attributs pour leur propre compte
machine :

Set-AdmPwdComputerSelfPermission -OrgUnit "OU=InfraDemo,DC=w2k12-demo,DC=net"

On remplacera par le distinguished name de l’OU où l’on déploie la solution.


Une fois l’opération effectuée, on ouvre une GPO et l’on accède aux paramètres :

4|M I S E EN P LAC E D E LAPS & K EEPA SS


Ceux-ci permettent d’activer ou inhiber LAPS,
de définir l’intervalle de changement de mots
de passe, ses critères de complexité ainsi que
le nom du compte administrateur si celui-ci
n’est pas « administrator ».

Une fois les paramètres changés, on


redémarre la machine membre et la magie
doit opérer. On peut accéder au mot de passe
de plusieurs manières :

En PowerShell :

5|M I S E EN P LAC E D E LAPS & K EEPA SS


KeePass

KeePass est un gestionnaire de mots de passe, qui sauvegarde les mots


de passe dans un fichier chiffré sous forme de base de données. Cette
base est accessible avec différents systèmes d’authentification allant
du simple mot de passe à la double authentification. Il peut être
accompagné d'une clé sous la forme d'un fichier .key pour renforcer la sécurité d'accès au fichier
chiffré. Ce logiciel s’utilise comme un serveur local sur un terminal, il est principalement affecté sur le
serveur d’annuaire (Active Directory) pour avoir directement la source des informations en local.

KeePass existe sous deux versions différentes. La première utilise deux algorithmes de chiffrement :
AES (avec une clé de 256 bits) et Twofish (avec des blocs de 128 bits et une clé de 256 bits). La deuxième
n'utilise qu'AES (avec une clé de 256 bits). Dans notre contexte et en vue de l’importance des
informations stockées, il est logique d’intégrer la solution AES qui associe deux technologies de
chiffrement.

L’interface de KeePass :

Liste des mots de passes du groupe


en question

Groupes de gestion des mots de


passes

Toutes ces entrées peuvent être ajoutées


via l’interface graphique du logiciel, mais
le but de la tâche est d’entrée les mots de
passes de façons automatique via un
script PowerShell pouvant récupérer les
sessions locales Windows.

6|M I S E EN P LAC E D E LAPS & K EEPA SS


Créer une nouvelle base de données

▪ Depuis l’interface du logiciel, sélectionnez « New » pour créer


une nouvelle base de données.

▪ Définissez dans quel dossier la base de données va être


enregistrée. Elle pourra être déplacée par la suite.

Plusieurs méthodes d’authentification


peuvent être mises en place. Plus
exactement 3, 1-l’authentification via un
mot de passe, 2-via un fichier qui contient
une clé de déchiffrage (Clé privée), 3-via
une session Windows. Les trois méthodes
d’authentifications peuvent être choisies
pour renforcer la sécurité.

Dans notre cas nous utilisons le mot de passe et la clé de déchiffrement. Une double authentification
nous permet déjà un minimum de sécurité. Au moment de la connexion à cette base de données il
nous faudra fournir le chemin d’accès au fichier .key contenant notre clé privée et notre mot de passe.

La base de données est à présent prête à accueillir nos données, il est possible de créer des groupes
pour organiser les utilisateurs.

7|M I S E EN P LAC E D E LAPS & K EEPA SS


Extension POSHKEEPASS

Cette extension ajoute une nouvelle bibliothèque d’instruction à Powershell pour pouvoir échanger
des informations de connexions, gestion, import, export, … depuis une base de données KeePass.

Téléchargement du module : https://github.com/PSKeePass/PoShKeePass

A placer dans le dossier C:\Windows\System32\WindowsPowershell\v1.0\Module

Scripting

$import = "true"

# On récupère la liste des modules installés sur powershell

$modules = Get-Module
$nmodules = $modules.Name

# On parcourt cette liste pour trouver si le module au nom de "PoShKeePass" existe

foreach ($module in $nmodules) {


if ($module -eq "PoShKeePass") {
$import = "false"
}
}

#Si il n'existe pas alors on installe le module

if ($import -eq "true") {


Import-Module PoShKeePass -force
}

Le script permet de connaitre si le module est déjà présente pour ne pas le réinstaller à chaque
exécution. Il permet aussi de loger une éventuelle erreur lors de l’installation du module pour éviter
toute incompréhension.

8|M I S E EN P LAC E D E LAPS & K EEPA SS


Configuration module (Script) :

Le module PoShKeePass a besoin d’une configuration avant de pouvoir communiquer avec la base de
données KeePass. Cette configuration renseigne le nom de la configuration (à définir), le chemin
d’accès à la base de données et la clé de décryptage pour avoir l’accès à la base de données.

$config = Get-KeePassDatabaseConfiguration
$config = $config.Name

# Si aucune configuration n'est présente dans le module alors on lance la création de la


configuration sinon il nous retourne une erreur dans un log

if ($config -eq $null) {


try {
New-KeePassDatabaseConfiguration -DatabaseProfileName $DatabaseProfileName -
DatabasePath $DatabasePath -KeyPath $KeyPath
} catch {
Add-content $outfile "Le script à été lancé le $Date"
Add-content $outfile "-------------- FAIL -------------------"
Add-content $outfile "Une erreur est survenu lors de la création du fichier de
configuration"
Add-content $outfile 'Vérifier la valeur de la variable $DatabasePath et $KeyPath'
exit
}
}

Le script permet de connaitre si une configuration est déjà présent pour ne pas le réinstaller à chaque
exécution. Il permet aussi de loger une éventuelle erreur lors de l’installation du module pour éviter
toute incompréhension.

9|M I S E EN P LAC E D E LAPS & K EEPA SS


Création du groupe (Script) :

Il a été demandé qu’un nouveau groupe soit créé toutes les semaines, un groupe portant le numéro
de semaine auquel le script est lancé pour conserver chaque mot de passe en fin de semaine.

# Récupération du numéro de semaine

$semaine = get-date -uformat %V


try{
$double = Get-KeePassGroup -DatabaseProfileName $DatabaseProfileName -AsPlainText
} catch {
Add-content $outfile "Le script à été lancé le $Date"
Add-content $outfile "-------------------- FAIL ---------------------------"
Add-content $outfile "/!\ Le nom du serveur KeePass ne correspond pas /!\"
Add-content $outfile 'Vérifier la valeur de la variable $DatabaseProfileName'
exit
}
$double = $double.Name

# Si le nom du groupe n'existe pas alors on lance la création du groupe sinon il nous
retourne une erreur dans un log

foreach($undouble in $double) {
if($undouble -eq "$KPEGroup $semaine") {
Add-content $outfile "Le script à été lancé le $Date"
Add-content $outfile "------------------- FAIL ---------------------"
Add-content $outfile "Un même dossier portant le même numéro de semaine existe
déjà"
Add-content $outfile "Le script ne peut être lancé qu'une seul fois par semaine "
exit
}
}

New-KeePassGroup -DatabaseProfileName $DatabaseProfileName -KeePassGroupParentPath


DBPASSERV -KeePassGroupName "$KPEGroup $semaine"

10 | M I S E E N P L A C E D E L A P S & K E E P A S S
Réception et envoie des informations (Script) :

# Liste des serveurs à inclure dans le script

$getpass = Get-KeePassEntry -AsPlainText -DatabaseProfileName $DatabaseProfileName


$Groupe = "$DatabaseProfileName/$KPEGroup $semaine"

foreach ($unserveur in $serveur) {

# Parcours des comptes du serveur en question

$list = Get-AdmPwdManagedAccounts -ForestDnsName $ForestDnsName -ComputerName


$unserveur

foreach ($unlist in $list) {

# Déclaration des variables

$CN = $unlist.ComputerName
$Name = $unlist.Name
$Execpt = $unlist.IsException

# Si l'utilisateur n'est pas une exception on execute le code

if ($Execpt = "False") {

# Recupéré le mot de passes des comptes du serveur

$result = Get-AdmPwdPassword -ComputerName $CN -AccountName $Name -


ForestDnsName vdm.fr.thav.thales
$password = $result.Password

# On convertit le mot de passe en chaine de caractère sécurisé pour importer


dans KeePass

$SecurePass = ConvertTo-SecureString $password -AsPlainText -Force


}

New-KeePassEntry -DatabaseProfileName $DatabaseProfileName -KeePassEntryGroupPath


$Groupe -Title $CN -UserName $Name -KeePassPassword $SecurePass

}
}

Le script est maintenant complété.

11 | M I S E E N P L A C E D E L A P S & K E E P A S S

Vous aimerez peut-être aussi