Comment gérer Active Directory Certificates Services avec PowerShell ?

Salut à tous

Synthèse du besoin
Gérer une autorité de certification Microsoft hébergé sur un serveur Windows 2008 R2 Enterprise SP1 avec PowerShell. Le but est de :
1. Exporter automatiquement tout nouveau certificat émis au format PFX via la fonctionnalité d’agent de récupération / archivage de clés privées.
2. Générer un rapport avec la liste des certificats révoqués.
3. Générer un rapport avec la liste des certificats qui vont expirés.

A savoir
Il n’existe pas de module PowerShell fournis par Microsoft pour gérer Active Directory Certificates Services avec Windows 2008 R2 (contrairement à Windows 2012).
En faisant quelques recherches sur Internet, j’ai découvert le module PowerShell PSPKI. Ce dernier est vraiment très bien fait.

Solution
Nous allons nous appuyer sur les fonctionnalités de l’audit et le module PowerShell PSPKI pour répondre aux besoins.

Etape 1 : activation de l’audit au niveau de la PKI et des GPO
Il faut activer l’audit comme expliqué dans l’article Microsoft ci-dessous :
http://technet.microsoft.com/fr-fr/library/cc772451.aspx

Etape 2 : installation du module PSPKI
Installer le module PSPKI disponible sur le serveur Active Directory Certificates Services ou sur votre serveur d’administration.
http://poweradmin.se/blog/2011/08/09/adcs-certificate-expiration-report-tool/
http://pspki.codeplex.com/

Etape 3 : autoriser l’exécution des scripts PowerShell non signés
Entrer la commande PowerShell ci dessous :
Set-ExecutionPolicy Unrestricted
Une solution alternative est de signer vos scripts (plus sécurisés).

Etape 4 : activer l’archivage des clés privées au niveau de l’autorité de certification
L’autorité de certification doit être configurée pour déployer le modèle de certificat Agent de récupération des clés privées. Le modèle par défaut a été modifiée afin de ne pas demander d’approbation à la génération du certificat. Seuls les membres du groupe Admins du domaine peuvent effectuer une demande pour ce modèle de certificats.
Un compte utilisateur AdminPKI a été créé. Ce compte a été défini en tant que membre du groupe Admins du domaine. Le mot de passe de ce compte a été défini pour ne jamais expirer. Un certificat basé sur le modèle Key Recovery Agent a été généré pour ce compte.
L’autorité de certification a ensuite été configurée pour archiver les clés privées avec ce certificat (au niveau des propriétés de l’autorité de certification). Une procédure pas à pas est fournis par Microsoft à ces emplacements :
http://technet.microsoft.com/en-us/library/cc753011.aspx
http://technet.microsoft.com/en-us/library/cc730721.aspx
http://technet.microsoft.com/en-us/library/cc770588.aspx

Etape 5 : Associer un script à l’événement d’audit correspondant à la génération d’un certificat
Le script ci dessous permet de générer un fichier PFX du dernier certificat émis par l’autorité de certification via la fonctionnalité d’archivage des clés privées.
Copier pour cela le script ci-dessous dans le fichier c:\script.ps1.
# Importation du module PSPKI
Import-Module PSPKI
# Liste tous les certificats émis
$base = Get-CertificationAuthority -Name TPNAT | Get-IssuedRequest | Select-Object SerialNumber
# Retrouve le numéro de séries du derniers certificats émis
$SerialNumber = $($base[$($base.count)-1]).SerialNumber
$tmpfile = “c:\$SerialNumber.tmp”
# Exportation du certificat au format PFX vers c:\valeur-numero-serie.pfx.
Certutil -getkey $SerialNumber $tmpfile
$pfx = “c:\$SerialNumber.pfx”
Certutil -p P@ssword -recoverkey $tmpfile $pfx

Quand un nouveau certificat est généré, l’événement suivant est généré (car on a activé l’audit).
Log Name:      Security
Source:        Microsoft-Windows-Security-Auditing
Date:          02/09/2013 16:49:03
Event ID:      4887
Task Category: Certification Services
Level:         Information
Keywords:      Audit Success
User:          N/A
Computer:      WIN-M4TUIL6MDL0.tpnat.intra
Description:
Certificate Services approved a certificate request and issued a certificate. 
Request ID: 50
Requester: TPNAT\Administrator
Attributes: 
cdc:WIN-M4TUIL6MDL0.tpnat.intra
rmd:WIN-M4TUIL6MDL0.tpnat.intra
ccm:WIN-M4TUIL6MDL0.tpnat.intra
Disposition: 3
SKI:  da 47 3a c8 b9 73 f4 86 83 03 34 9a 15 1a a8 cc 8c 10 be f1
Subject: E=Administrator@tpnat.intra, CN=Administrator, CN=Users, DC=tpnat, DC=intra

On va donc associer le script ci-dessous à cet événement. Sélectionner l’événement dans le journal et cliquer dans le menu action sur associer une tâche.
Entrer c:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -file c:\script.ps1.
A cette étape, on vient de remplir le premier objectif.

Etape 6 : générer un rapport avec la liste des certificats révoqués
La solution ci-dessous s’appuie sur le module PowerShell PSPKI.
Créer le fichier c:\certificats-revoques.ps1 et copier le contenu suivant dans ce fichier.
Import-Module PSPKI
Get-CertificationAuthority -Name TPNAT | Get-RevokedRequest | Select-Object Request.RequestID,CommonName, SerialNumber, Request.RevokedReason | Export-Csv –Path c:\revoque.csv -Encoding UTF8 –UseCulture
On obtient un fichier CSV c:\revoque.csv en résultat. il faut supprimer la première ligne (en tête PowerShell).
A cette étape, on vient  de remplir le second objectif.
 
Etape 7 : générer un rapport avec la liste des certificats qui vont expirés
On s’appuie toujours sur le module PowerShell PSPKI.
Créer le fichier c:\rapport.ps1 et copier le contenu du script ci-dessous :
param(
  [string] $computername = “$ENV:COMPUTERNAME”,
  [string] $reportfile = “$ENV:USERPROFILE\Desktop\PKIRAPPORT.html”
   )
# Variables
$caname = $computername.ToLower()
$domaindns = $ENV:USERDNSDOMAIN.ToLower()
$todaysdate = Get-Date
$findaldate = $todaysdate.AddMonths(36)

# Vérifie que PSPKI est installé.
if(Get-Module -ListAvailable -Name PSPKI | Where-Object { $_.name -eq “PSPKI” })

  # Vérifie que PSPKI est chargé
  if (!(Get-Module -Name PSPKI | Where-Object { $_.name -eq “PSPKI” })) 
  {
    Write-Host “Importation du module PSPKI” -ForegroundColor “Yellow”
    Import-Module -Name PSPKI
  }
  # Génère le rapport
  $htmlpre = “<P>Generated by user: $ENV:USERNAME</P><P>Les certificats vont suivant expirés avant $findaldate</P>”
  $htmlpost = “<P>Certificate expiration information retrived from $caname.$domaindns</P>”
  $htmltitle = “Autorité de certification : $caname.$domaindns”
  $htmlinput = Get-CertificationAuthority “$caname.$domaindns” | Get-IssuedRequest -Filter “NotAfter -ge $(Get-Date)”, “NotAfter -le $findaldate”
  $htmlinput | ConvertTo-Html -Body (Get-Date) “Report date:” -Property RequestID,RequesterName,CommonName,NotBefore,NotAfter,SerialNumber -Pre $htmlpre -Post $htmlpost -Title $htmltitle | Out-File -FilePath $reportfile
  # Chargement du rapport
  Invoke-Item $reportfile
  }
else
{
  Write-Host “PSPKI is not installed. Please install it from http://pspki.codeplex.com/ ” -ForegroundColor “Yellow” 
}
On vient de remplir le troisième objectifs.
Merci PowerShell / PSPKI.

A+
Guillaume MATHIEU
Consultant PROSERVIA
La connaissance s’accroît quand on la partage.
http://msreport.free.fr

Publié dans Annuaire, Certificats, PowerShell, Sécurité, Scripts, Windows Server 2008 R2 | Laisser un commentaire

Comment est chiffré / retrouver le mot de passe d’un compte utilisateur -> désactiver le chiffrement LMHASH !

Salut à tous

Cet article a pour but de vous présenter :
– Comment est chiffré le mot de passe dans un domaine Active Directory et quels sont les risques en terme de sécurité du chiffrement LMHASH ?
– La procédure pour récupérer le mot de passe d’un compte utilisateur en déchiffrant le mot de passe au format LMHASH.
– La procédure pour supprimer le chiffrement LMHASH.

1. Comment est chiffré le mot de passe dans un domaine Active Directory et quels sont les risques en terme de sécurité du chiffrement LMHASH ?
Les mots de passe d’un annuaire Active Directory sont chiffrés via deux méthodes :
– Le LMHASH (si mot de passe de moins de 15 caractères). Cette algorithme de chiffrement n’est plus fiable. En copiant le HASH sur un site web spécialisé comme http://www.objectif-securite.ch/, il est possible de retrouver la valeur du mot de passe.
– Le NTHASH : cette méthode est sécurisée.
Le mot de passe au format LMHASH est converti en majuscule et découpé en deux blocs de 7 octets (1 octet = 1 caractère). Les caractères non renseignés sont remplacés par des bits à 0.
Les attributs qui gèrent les mots de passe dans Active Directory sont protégés en lecture d’où le fait que l’attribut dBCSPwd (mot de passe au format LMHASH) et lmPwdHistory (historique des mots de passe au format LMHASH) apparaissent en non défini avec ADSIEDIT.
Nous allons voir dans la partie suivant comment créer une copie de l’annuaire et de la monter comme une simple base LDAP. L’outil NTDSXtract permettra d’extraire  la valeur des attributs dBCSPwd et lmPwdHistory.

2. La procédure pour récupérer le mot de passe d’un compte utilisateur en déchiffrant le mot de passe au format LMHASH :

2.1 Créer un média (IFM) de l’annuaire Active Directory :
La première étape est de créer un snapshot de l’annuaire Active Directory (il faut un contrôleur de domaine Windows 2008 R2). Pour ceux, sous Windows 2003, partir d’une sauvegarde de votre contrôleur de domaine (restaurer vers un emplacement différent).
Pour cela, ouvrir une session avec un compte utilisateur membre du groupe Admins du domaine et taper les commandes suivants :
Ntdsutil
Activate instance ntds
Ifm
Create full c:\ifm

2.2 Installer une machine sous Linux (RedHat Enterprise) :
Pour cette article, j’ai installé une machine virtuelle sous Debian 6 connectée au réseau d’entreprise.
Installer ensuite les VMware Tools. Pour cela :
apt-get install autoconf
apt-get install gcc-4.3*
apt-get install linux-headers-$(uname -r)
Dans le menu VM | Install VMware Tools.
Copier le fichier VMTools dans un répertoire de travail cp /media/cdrom/VMwareTools-8.4.2-261058.tar.gz /usr/local/src
Se positionner dans le répertoire cd /usr/local/src
Décompresser le fichier VMTools tar xzf /usr/local/src/VMwareTools-8.4.2-261058.tar.gz
Se positionner dans le répertoire cd /usr/local/src/vmware-tools-distrib/
Lancer le script ./vmware-install.pl
Répondre par défaut aux questions (touche entrée)
Les VMTools doivent s’installer et le cdrom virtuel se démonte automatiquement.
Redémarrer.
Pour plus d’informations sur l’installation des VMware Tools, voir l’article suivant :
http://eric.coquard.free.fr/Blog/files/86b7d124a6befcd0f4f1c2470c8dc04a-35.html
Installer GCC pour pouvoir compiler des sources en tapant la commande :
apt-get install gcc
apt-get install make

2.3 Télécharger et installer LIBESEDB :
LIBESEDB permet de monter une base de données ESE (Extensible Storage Engine). Pour rappel, Active Directory est une base ESE.
Télécharger LIBESEDB à cette adresse :
http://code.google.com/p/libesedb/
Dans le cadre de cet article, nous téléchargeons le fichier libesedb-alpha-20120102.tar.
Ouvrir une session sur le serveur Debian 6.
Aller dans Applications | Accessoires puis Terminal Administrateur.
S’authentifier en tant que root.
Aller dans le répertoire avec le fichier TAR et l’extraire.
tar -xvf libesedb-alpha-20120102.tar
Aller dans le répertoire LIBESEDB. Dans notre cas /home/gmathieu/Téléchargements/libesedb20120102.
Lancer la configuration des sources.
./configure
Compiler ensuite le programme en tapant la commande suivante :
make
Une fois la compilation terminée, taper la commande suivante pour installer l’application :
Make install

2.4 Télécharger et installer NTDSXtract :
Télécharger NTDSXtract à l’adresse suivante :
http://www.ntdsxtract.com/downloads/ntdsxtract/ntdsxtract_v1_0.zip

2.5 Récupération du LMHASH :
Copier le dossier c:\ifm dans /home/gmathieu/Téléchargement
cd /home/gmathieu/Téléchargements/libesedb-20120102/esedbtools
./esedbexport /home/gmathieu/Téléchargements/ifm/Active\ Directory/ntds.dit
La commande doit renvoyer ce résultat :
esedbexport 20120102
Opening file.
Exporting table 1 (MSysObjects) out of 11.
Exporting table 2 (MSysObjectsShadow) out of 11.
Exporting table 3 (MSysUnicodeFixupVer2) out of 11.
Exporting table 4 (datatable) out of 11.
Exporting table 5 (hiddentable) out of 11.
Exporting table 6 (link_table) out of 11.
Exporting table 7 (quota_rebuild_progress_table) out of 11.
Exporting table 8 (quota_table) out of 11.
Exporting table 9 (sdpropcounttable) out of 11.
Exporting table 10 (sdproptable) out of 11.
Exporting table 11 (sd_table) out of 11.
Export completed.
Elle génère un répertoire /ntds.dit.export dans le dossier esedbtools avec les fichiers suivants :
2745173 -rw-r–r– 1 root root 10400205 17 août  20:38 datatable.3
2745174 -rw-r–r– 1 root root      693 17 août  20:38 hiddentable.4
2745175 -rw-r–r– 1 root root    14680 17 août  20:38 link_table.5
2745170 -rw-r–r– 1 root root    75538 17 août  20:38 MSysObjects.0
2745171 -rw-r–r– 1 root root    75538 17 août  20:38 MSysObjectsShadow.1
2745172 -rw-r–r– 1 root root      103 17 août  20:38 MSysUnicodeFixupVer2.2
2745176 -rw-r–r– 1 root root       80 17 août  20:38 quota_rebuild_progress_table.6
2745177 -rw-r–r– 1 root root     1301 17 août  20:38 quota_table.7
2745178 -rw-r–r– 1 root root       14 17 août  20:38 sdpropcounttable.8
2745179 -rw-r–r– 1 root root       96 17 août  20:38 sdproptable.9
2745180 -rw-r–r– 1 root root    54996 17 août  20:38 sd_table.10
On va maintenant utiliser l’outil NTDSXtract pour récupérer le LMHASH.
Taper la commande suivante :
cp datatable.* “/home/gmathieu/Téléchargements/NTDSXtract 1.0”
cp link_table.* “/home/gmathieu/Téléchargements/NTDSXtract 1.0”
cp /home/gmathieu/Téléchargements/ifm/registry/*
“/home/gmathieu/Téléchargements/NTDSXtract 1.0”
cd “/home/gmathieu/Téléchargements/NTDSXtract 1.0”
python ./dsusers.py datatable.3 link_table.5 –passwordhashes SYSTEM 
La commande renvoie ce résultat :
Running with options:
Extracting password hashes
Initialising engine…
Scanning database – 100% -> 3717 records processed
Searching for Schema object – 100% -> 12 records processed
Extracting schema information – 100% -> 1549 records processed
Extracting object links… 
List of users:
==============
Record ID:           5768
User name:           Guillaume Mathieu
User principal name: guillaume.mathieu@tphat.intra
SAM Account name:    guillaume.mathieu
SAM Account type:    SAM_NORMAL_USER_ACCOUNT
GUID: 1eaee5d6-5f8f-4e8c-a840-31caddad6755
SID:  S-1-5-21-2163606747-459301225-4249714960-1121
When created:         2013-08-05 08:12:08
When changed:         2013-08-17 18:20:58
Account expires:      Never
Password last set:    2013-08-17 18:20:58.095203
Last logon:           2013-08-15 12:30:01.708144
Last logon timestamp: 2013-08-12 18:41:32.890748
Bad password time     2013-08-15 12:29:32.988494
Logon count:          18
Bad password count:   0
User Account Control:
NORMAL_ACCOUNT
PWD Never Expires
Ancestors:
$ROOT_OBJECT$ intra tphat Utilisateurs Guillaume Mathieu
Password hashes:
Guillaume Mathieu:$NT$13b29964cc2480b4ef454c59562e675c:::
Guillaume Mathieu:11cb3f697332ae4c4a3b108f3fa6cb6d:::
Avec la commande suivante on a même l’historique des mots de passe au format LMHASH :
python ./dsusers.py datatable.3 link_table.5 –passwordhashes SYSTEM –passwordhistory SYSTEM

MAJ 16/01/2015 : attention c’est 2 caractères “-” dans la commande avant  passwordhashes

Le résultat ci-dessous :
Record ID:           5768
User name:           Guillaume Mathieu
User principal name: guillaume.mathieu@tphat.intra
SAM Account name:    guillaume.mathieu
SAM Account type:    SAM_NORMAL_USER_ACCOUNT
GUID: 1eaee5d6-5f8f-4e8c-a840-31caddad6755
SID:  S-1-5-21-2163606747-459301225-4249714960-1121
When created:         2013-08-05 08:12:08
When changed:         2013-08-17 18:20:58
Account expires:      Never
Password last set:    2013-08-17 18:20:58.095203
Last logon:           2013-08-15 12:30:01.708144
Last logon timestamp: 2013-08-12 18:41:32.890748
Bad password time     2013-08-15 12:29:32.988494
Logon count:          18
Bad password count:   0
User Account Control:
            NORMAL_ACCOUNT
            PWD Never Expires
Ancestors:
            $ROOT_OBJECT$ intra tphat Utilisateurs Guillaume Mathieu
Password hashes:
            Guillaume Mathieu:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu:11cb3f697332ae4c4a3b108f3fa6cb6d:::
Password history:
            Guillaume Mathieu_nthistory0:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_nthistory1:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_nthistory2:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_nthistory3:$NT$13b29964cc2480b4ef454c59562e675c:::
            Guillaume Mathieu_lmhistory0:11cb3f697332ae4c4a3b108f3fa6cb6d:::
            Guillaume Mathieu_lmhistory1:11cb3f697332ae4c4a3b108f3fa6cb6d:::
            Guillaume Mathieu_lmhistory2:99d1842dae7bad31a5615a0b1741a415:::
            Guillaume Mathieu_lmhistory3:ce2f42bb6280ebf4b01331c7e77ec962:::
Dans l’exemple ci-dessous, on a plusieurs fois le même mot de passe car l’administrateur a réinitialisé le mot de passe depuis la console Utilisateurs et Ordinateurs Active Directory.

2.6 Convertir le LMHASH en mot de passe :
Se connecter sur le site objectif sécurité et entrer le LMHASH :
http://www.objectif-securite.ch/ophcrack.php
Dans le cas du compte guillaume.mathieu, on a deux lignes Password Hashes :
Password hashes:
Guillaume Mathieu:$NT$13b29964cc2480b4ef454c59562e675c:::
Guillaume Mathieu:11cb3f697332ae4c4a3b108f3fa6cb6d:::
La ligne avec $NT$1 correspond au NTPASSORD.
La second ligne correspond au LMHASH.
Copier le LMHASH sous cette forme (11cb3f697332ae4c4a3b108f3fa6cb6d) à cette adresse :
http://www.objectif-securite.ch/ophcrack.php
On retrouve le mot de passe en majuscule.
L’application du site web se sert du NTHASH pour déterminer les caractères en majuscule.

3. La procédure pour supprimer le chiffrement LMHASH :
Maintenant que l’on a compris les danger du LMHASH, on va voir :
– Les prérequis pour désactiver le LMHASH
– Comment désactiver le LMHASH ?

3.1 Les prérequis pour désactiver le LMHASH :
Avant de désactiver le LMHASH, vérifier les points suivants :
– Vous ne disposez pas de machine sous Windows 95 / 98 ou Windows NT4 antérieur au SP3.
– Vous ne disposez pas de serveur SAMBA antérieur à la version 3.
– Vous ne disposez pas de cluster sous Windows 2000 ou Windows 2003.
– Pas de machine Apple sous Outlook 2001 en mode Exchange.
Pour les cluster Windows 2003 (MSCS) : il existe un correctif (KB 890761).
Pour les cluster Windows 2000 : vous devez être en SP3 minimum (KB 272129). La KB 828861 semble aussi indiquer qu’il faut obligatoirement sous Windows 2000 Server configurer le mot de passe du service cluster avec au moins 15 caractères si le LMHASH est désactivé. Le correctif ne semble en effet n’exister que pour Windows 2003.
Je vous invite à lire ces articles :
http://support.microsoft.com/kb/272129/en-us
http://support.microsoft.com/kb/299656/en-us
http://support.microsoft.com/kb/828861/en-us
http://support.microsoft.com/kb/890761/en-us
http://support.microsoft.com/kb/895092/en-us
http://www.markwilson.co.uk/blog/2004/06/problems-with-microsoft-clusters.htm
http://blogs.technet.com/b/askcore/archive/2011/08/11/windows-2003-server-cluster-and-access-denied-errors.aspx

3.2 Comment désactiver le LMHASH ?
Pour désactiver le LMHASH, vous pouvez appliquer une de ces deux méthodes :
– Activer la GPO « Network security: Do not store LAN Manager hash value on next password change ». Lancer la console GPMC.MSC. Editer la Default Domain Controller Policy. Aller dans Computer Configuration | Policies | Windows Settings | Security Settings. Configurer le paramètre « Do not store LAN Manager hash value on next password change » à Enabled.
– Définir un mot de passe supérieur à 15 caractères.
Attention, cela désactive le chiffrement LMHASH au prochain changement de mot de passe !
Il faut donc changer le mot de passe de tous les comptes utilisateurs et de tous les comptes ordinateurs au moins une fois.
Pour supprimer l’historique des mots de passe, il faut changer le mot de passe un nombre de fois correspondant à l’historique des mots de passe !
Remarque :
Le paramètre « No LMHASH » est activé par défaut sur les contrôleurs de domaine Windows 2008 R2. Donc attention quand vous migrez vos contrôleurs de domaine vers Windows 2008 R2.
Pour plus d’informations :
http://support.microsoft.com/kb/299656/en-us
http://support.microsoft.com/kb/946405/en-us

MAJ 21/08/2013 : l’outil Lm2ntcrack.exe permet de récupérer le mot de passe avec les majuscules et minuscules. Pour cela taper la commande suivante :
Lm2ntcrack.exe –l=”UPPERCASE_PASSWORD” –n=”NTHASH”

PS : merci à Mathieu W. et Damien W. pour la découverte du LMHASH.
http://www.xmco.fr/lm2ntcrack/lm2ntcrack-current_win32.zip

A+
Guillaume MATHIEU
Consultant PROSERVIA (ManPowerGroup Solutions)
La connaissance s’accroît quand on la partage
http://msreport.free.fr 

Publié dans Active Directory, Annuaire, Linux, Outils, Sécurité, Système, Windows 2000 Pro, Windows 2000 Server, Windows 2003 Server, Windows NT4, Windows Server 2008, Windows Server 2008 R2, Windows Seven, Windows Vista | Marqué avec , , , , , , , , , | Laisser un commentaire

Problème de plantage / fige sous Windows 7 -> désactiver le LPM (Link Power Management) !

Salut à tous

Je souhaite partager avec vous un retour d’expérience avec les disques SSD.
Suite à la mise à jour des drivers de mon contrôleur SATA Intel (le fameux Intel RST : Rapid Storage Technology), mon ordinateur portable Dell E6500 plantait de manière aléatoire, le plantage se présentant sous forme d’un fige progressif de ma machine, plus d’explorateur, plus de Gestionnaire de tâches et puis fige complet de la souris / clavier après une ou deux minutes de galère.
Après investigation, il s’avère que le problème provient de la fonctionnalité Link Power Management. Cette dernière désactive automatiquement mes disques durs quand ces derniers ne sont pas utilisés ! Sauf que mon contrôleur SATA semble très mal gérer cette fonctionnalité avec un SSD.

Pour désactiver LPM (Link Power Management) :
– Lancer Intel Rapid Storage Technology.
– Cliquer sur l’onglet performance.
– Configurer Link Power Management sur Disable en cliquant sur le lien Disabled.

Il est aussi possible de désactiver le LPM via l’ajout de cette entrée de registre.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\iaStor\Parameters\Port0]
“LPM”=dword:00000000
“LPMDSTATE”=dword:00000000
“DIPM”=dword:00000000

Cette entrée de registre désactive LPM pour le contrôleur SATA 0.
Pour déterminer le contrôleur SATA utilisé par votre disque SSD :
– Lancer Intel Rapid Storage Technology.
– Cliquer sur l’onglet Manage.
– Cliquer sur votre disque .
– Lire la valeur du Port : 0 dans mon cas.

Merci au rédacteur de cette article !
https://guizmo.biz/2011/12/31/intel-rapid-blow-up-technology

A+

Guillaume MATHIEU
Consultant PROSERVIA
La connaissance s’accroît quand on la partage
http://msreport.free.fr

Publié dans Bug, Freeze, Performance, Système, Troubleshouting, Windows Seven, Windows Vista | Marqué avec , , , | Laisser un commentaire

Lister toutes les authentifications réussies sur un contrôleur de domaine avec un script PowerShell

Salut à tous

Objectifs du script :
Lister toutes les authentifications réussies sur un contrôleur de domaine.
Déterminer l’IP de la machine depuis laquelle la demande d’authentification est effectuée, le nom de l’utilisateur et le protocole d’authentification (Kerberos, NTLM, LM).

Comment fonctionne le script :
Le script s’appuie sur la fonctionnalité d’audit des connexions Active Directory d’un contrôleur de domaine. Un prérequis à la bonne exécution du script est de valider que l’audit des ouvertures de session est activé. Je vous invite donc à lire cet article :
http://technet.microsoft.com/fr-FR/library/dd772712(WS.10).aspx
Quand un utilisateur / machine s’authentifie sur un contrôleur de domaine Windows 2008 R2, un événement ID 4624 est généré dans le journal Sécurité.
Le script récupère tous les événements avec l’ID 4624 et génère un fichier CSV en sortie.
Log Name: Security
Source: Microsoft-Windows-Security-Auditing
Date: 15/08/2013 14:25:00
Event ID: 4624
Task Category: Logon
Level: Information
Keywords: Audit Success
User: N/A
Computer: FR77VM0002.tphat.intra
Description:
An account was successfully logged on.
Subject:
Security ID: NULL SID
Account Name: –
Account Domain: –
Logon ID: 0x0
Logon Type: 3
New Logon:
Security ID: TPHAT\guillaume.mathieu
Account Name: guillaume.mathieu
Account Domain: TPHAT
Logon ID: 0x214a99
Logon GUID: {f1fa32df-0809-7c7b-2f69-7c3b3003e0a1}
Process Information:
Process ID: 0x0
Process Name: –
Network Information:
Workstation Name:
Source Network Address: 192.168.93.5
Source Port: 49411
Detailed Authentication Information:
Logon Process: Kerberos
Authentication Package: Kerberos
Transited Services: –
Package Name (NTLM only): –
Key Length: 0
This event is generated when a logon session is created. It is generated on the computer that was accessed.
The subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.
The logon type field indicates the kind of logon that occurred. The most common types are 2 (interactive) and 3 (network).
The New Logon fields indicate the account for whom the new logon was created, i.e. the account that was logged on.
The network fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.
The authentication information fields provide detailed information about this specific logon request.
– Logon GUID is a unique identifier that can be used to correlate this event with a KDC event.
– Transited services indicate which intermediate services have participated in this logon request.
– Package name indicates which sub-protocol was used among the NTLM protocols.
– Key length indicates the length of the generated session key. This will be 0 if no session key was requested.

Code du script :
Créer le fichier C:\_adm\listconnexion.ps1 et copier le code disponible à cette adresse :
http://msreport.free.fr/articles/List-AD-Connections.txt
Le script génère un fichier c:\resultat.txt en sortie (exemple ci-dessous).

Heure;Utilisateur;IP;Protocole;Type authentification
08/15/2013 15:01:55;ANONYMOUS LOGON;192.168.93.5;NTLM;3
08/15/2013 15:01:55;ANONYMOUS LOGON;192.168.93.5;NTLM;3
08/15/2013 14:59:04;ANONYMOUS LOGON;192.168.94.1;NTLM;3
08/15/2013 14:59:04;ANONYMOUS LOGON;192.168.94.1;NTLM;3
08/15/2013 14:49:55;ANONYMOUS LOGON;192.168.93.5;NTLM;3
08/15/2013 14:49:55;ANONYMOUS LOGON;192.168.93.5;NTLM;3
08/15/2013 14:47:00;ANONYMOUS LOGON;192.168.94.1;NTLM;3
08/15/2013 14:47:00;ANONYMOUS LOGON;192.168.94.1;NTLM;3
08/15/2013 14:37:55;ANONYMOUS LOGON;192.168.93.5;NTLM;3
08/15/2013 14:37:55;ANONYMOUS LOGON;192.168.93.5;NTLM;3
08/15/2013 14:34:55;ANONYMOUS LOGON;192.168.94.1;NTLM;3
08/15/2013 14:34:55;ANONYMOUS LOGON;192.168.94.1;NTLM;3
08/15/2013 14:30:14;guillaume.mathieu;192.168.93.5;Kerberos;3
08/15/2013 14:30:02;guillaume.mathieu;192.168.93.5;Kerberos;3
08/15/2013 14:30:02;guillaume.mathieu;192.168.93.5;Kerberos;3
08/15/2013 14:30:02;guillaume.mathieu;192.168.93.5;Kerberos;3
08/15/2013 14:30:02;guillaume.mathieu;192.168.93.5;Kerberos;3

La ligne de code If (!($user.Contains(“$”))) permet de supprimer du fichier résultat toutes authentifications des comptes ordinateur (machines membres ou contrôleurs de domaine).

Axes d’amélioration :
Centraliser tous les journaux “Sécurité” des contrôleurs de domaine. Exécuter le script à 23h59 tous les jours et purger le contenu de la souscription à la fin du script.
Pour configurer une souscription, je vous invite à lire cet article :
http://msreport.free.fr/?p=222

A+

Guillaume MATHIEU
Consultant PROSERVIA
La connaissance s’accroît quand on la partage
http://msreport.free.fr

Publié dans Active Directory, Annuaire, Audit, PowerShell, Sécurité, Scripts, Système, Windows Server 2008, Windows Server 2008 R2 | 4 commentaires

Alerter les utilisateurs dont le mot de passe va expirer avec PowerShell

Salut à tous

Objectifs du script :
Alerter les utilisateurs dont le mot de passe va expirer dans moins de 3 jours.

Comment fonctionne le script :
Ce script est basé sur le module PowerShell Quest ActiveRoles Management Shell.
Il compare la date d’aujourd’hui avec la date d’expiration du mot de passe (attribut passwordexpires).
Si le mot de passe expire dans 1, 2 ou 3 jours il envoie un mail.
Il est à noter que l’attribut Passwordexpires n’existe pas dans l’annuaire Active Directory. C’est le plugin Quest qui le calcule cette valeur à partir de l’attribut pwdLastSet.

Code du script :
Créer le fichier C:\_adm\expiration-compteV2.ps1 et copier le contenu ci dessous dans ce fichier.
# Variables
# Changer l’adresse email de l’expéditeur
$MSender = expediteur@votredomainedemessagerie.fr
# Changer l’adresse IP du serveur de messagerie
$MServer = “192.168.0.1”
# Indiquer le chemin LDAP de votre annuaire
$Ldappath = “OU=Utilisateurs,DC=msreport,DC=intra”

# Fonction pour générer le mail
function Send-SMTPmail($to, $from, $subject, $body, $attachment, $cc, $bcc, $port, $timeout, $smtpserver, [switch] $html, [switch] $alert)
{
    if ($smtpserver -eq $null) {$smtpserver = $MServer}
    $mailer = new-object Net.Mail.SMTPclient($smtpserver)
    if ($port -ne $null) {$mailer.port = $port}
    if ($timeout -ne $null) {$mailer.timeout = $timeout}
    $msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
    if ($html) {$msg.IsBodyHTML = $true}
    if ($cc -ne $null) {$msg.cc.add($cc)}
    if ($bcc -ne $null) {$msg.bcc.add($bcc)}
    if ($alert) {$msg.Headers.Add(“message-id”, “<3bd50098e401463aa228377848493927-1>”)}
    if ($attachment -ne $null)
    {
        $attachment = new-object Net.Mail.Attachment($attachment)
        $msg.attachments.add($attachment)
    }
    $mailer.send($msg)

# Programme principal
# Chargement du module PowerShell Quest
add-PSSnapin -Name Quest.ActiveRoles.ADManagement -ErrorAction SilentlyContinue
$Today = get-date -format d
$users = Get-QADUser -enable -SizeLimit 0 -Searchroot $Ldappath | where-object {$_.PasswordNeverExpires -eq $false} | Select-Object name,mail,passwordexpires,samaccountname
foreach ($user in $users)
{
     if ($user.’passwordexpires’)
     {
        $usrmail = $user.mail
        $usrname = $user.name
        $usrlogin = $User.sAMAccountName
        $ExpiredDate = ($user.’passwordexpires’).adddays(-3)
        $today = (get-date).date
        #$today = (get-date -date 22/08/2012).date.adddays(-3)
        $difference = $ExpiredDate – $today
        if ($difference.Days -eq 3)
        {
               $MSubject = “Votre mot de passe va expirer dans 3 jours.”
               $Mbody = “Bonjour $usrname,<br><br>Votre <b>mot de passe de compte utilisateur ($usrlogin)</b> va expirer dans trois jours.<br><br>Merci de fermer votre session Windows et de vous authentifier de nouveau.”
               Send-SMTPmail -to $($user.mail) -from $MSender -subject $MSubject -cc $MSender -smtpserver $MServer -body $Mbody -html
            }
            elseif ($difference.Days -eq 2)
            {
               $MSubject = “Votre mot de passe va expirer dans 2 jours.”
               $Mbody = “Bonjour $usrname,<br><br>Votre <b>mot de passe de compte utilisateur ($usrlogin)</b> va expirer dans deux jours.<br><br>Merci de fermer votre session Windows et de vous authentifier de nouveau.”
               Send-SMTPmail -to $($user.mail) -from $MSender -subject $MSubject -cc $MSender -smtpserver $MServer -body $Mbody -html
            }
            elseif ($difference.Days -eq 1)
            {
                $MSubject = “Votre mot de passe va expirer dans 1 jour.”
                $Mbody = “Bonjour $usrname,<br><br>Votre <b>mot de passe de compte utilisateur ($usrlogin)</b> va expirer dans un jour.<br><br>Merci de fermer votre session Windows et de vous authentifier de nouveau.”
                Send-SMTPmail -to $($user.mail) -from $MSender -subject $MSubject -cc $MSender -smtpserver $MServer -body $Mbody -html
            }
     }
}

Pour planifier l’exécution du script :
Créer un fichier script.bat et coller le contenu suivant dans ce fichier :
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -psconsolefile “C:\Program Files\Quest Software\Management Shell for AD\ConsoleSettings.psc1” -command C:\_adm\expiration-compteV2.ps1
Utiliser le planificateur de tâche Windows pour exécuter l’outil une fois par jour à l’heure souhaitée.

A+
Guillaume MATHIEU
Consultant PROSERVIA
La connaissance s’accroît quand on la partage.

Publié dans Active Directory, ActiveRoles for Server, Annuaire, Outils, PowerShell, Scripts, Windows 2003 Server, Windows Server 2008, Windows Server 2008 R2 | Un commentaire