审核用户在AD中的密码强度
Active Directory域中用户密码的复杂性是用户数据和整个域的关键安全元素之一。作为一个容易记住的规则,用户更容易记住密码。因此,它们大大降低了对其帐户的黑客保护级别。在本文中,我们将展示如何使用PowerShell在activedirectory中审核用户的密码强度。
为了测试用户密码对攻击的抵抗力,我们将使用第三方PowerShell模块DSInternals。此模块包含许多cmdlet,这些cmdlet允许在联机或者脱机模式下对AD数据库执行不同的操作(直接使用ntds.dit公司). 特别是,我们对Test PasswordQuality cmdlet感兴趣,它允许检测具有弱、相似、标准或者空白密码的用户。
显然,用户密码不能以纯文本的形式从AD数据库中获得,但当将AD用户的密码哈希值与词典中单词的哈希值进行比较时,我们可以检测(或者比较)用户密码。
如何安装DSInternals模块
在PowerShell 5中,可以从官方PowerShell脚本库在线安装DSInternals,如下所示:
Install-Module DSInternals
在早期的PowerShell版本或者独立系统中,必须从GitHub下载带有最新模块版本的.zip存档文件(https://github.com/MichaelGrafnetter/DSInternals/releases). 撰写本文时,最新版本是 DSInternals v2.16.1.将此存档文件解压缩到包含PowerShell模块的目录之一:
C: \Windows\system32\WindowsPowerShell\v1.0\Modules\DSInternals
C: \Users%username%\Documents\WindowsPowerShell\Modules\DSInternals
或者使用以下命令导入模块:
Import-Module C:\distr\PS\DSInternals\DSInternals.psd1
可用的cmdlet列表可以通过以下方式获得:
Get-Command -Module DSInternals
密码字典
然后我们需要一个包含常用或者“坏”密码字典的文件。你可以从网上下载或者自己创作。将对照此字典中的密码检查Active directory中的用户帐户。让我们把密码保存在文本文件中 密码dict.txt.
使用Test PasswordQuality对AD密码进行审计
在以下变量中,使用密码、域名和域控制器名称指定文件的路径。
$DictFile = "C:\distr\PS\DSInternals\PasswordDict.txt"
$DC = "lon-dc01"
$Domain = "DC=theitroad,DC=loc"
然后从字典文件中获取所有密码的NT哈希值,将其与AD用户的密码哈希值进行比较:
$Dict = Get-Content $DictFile | ConvertTo-NTHashDictionary
然后使用 Get-ADReplAccountcmdlet,获取AD对象的列表、它们的NT和LM哈希的数据,以及哈希历史记录。之后,每个用户的密码哈希值将与字典文件中的哈希值进行比较。
Get-ADReplAccount -All -Server $DC -NamingContext $Domain |
Test-PasswordQuality -WeakPasswordHashes $Dict -ShowPlainTextPasswords -Includ