如您所知,人是一个懒惰的生物。 选择强密码时甚至更是如此。
我认为每个管理员都曾经遇到过使用轻密码和标准密码的问题。 在公司管理高层中经常发现这种现象。 是的,是的,这是那些有权访问机密或商业信息的人,因此消除密码泄露/黑客入侵和进一步事件的后果是非常不希望的。
在我的实践中,有一种情况是,在启用了密码策略的Active Directory域中,会计人员会独立地想到“ Pas $ w0rd1234”形式的密码完全可以满足该策略的要求。 结果是此密码在各地广泛使用。 他有时仅在一组数字上有所不同。
我确实希望不仅能够包括密码策略和定义字符集,而且能够按字典进行过滤。 排除使用这种密码的可能性。
Microsoft会通过链接告知我们,任何知道如何正确保存编译器(IDE)并知道如何发音C ++的人,都可以根据自己的意愿编译和使用所需的库。 您的谦卑的仆人无能为力,因此我不得不寻找现成的解决方案。
经过一小时的搜索,解决了两个问题。 当然,我说的是开源解决方案。 毕竟,付费选项-往返。
选件编号1。 OpenPasswordFilter最早在第二年就没有提交。本机安装程序每隔两次运行一次,您必须手动对其进行修复。 创建自己的单独服务。 更新密码文件时,DLL不会自动获取更改的内容,您需要停止服务,等待超时,编辑文件,启动服务。
不要冰!选件编号2。 PassFiltEx该项目活跃,活跃,甚至不需要踢冰冷的身体。
安装筛选器涉及复制两个文件并创建多个注册表项。 密码文件未处于锁定状态,也就是说,它是可编辑的,并且根据项目作者的想法,只需每分钟读取一次即可。 另外,借助其他注册表项,您还可以配置过滤器本身,甚至配置密码策略的细微差别。
这样啊
给出:Active Directory域test.local
Windows 8.1测试工作站(对于任务条件而言微不足道)
PassFiltEx密码过滤器
- 从链接下载最新的PassFiltEx版本
- 将PassFiltEx.dll复制到C:\ Windows \ System32 (或%SystemRoot%\ System32 )。
将PassFiltExBlacklist.txt复制到C:\ Windows \ System32 (或%SystemRoot%\ System32 )。 如有必要,请使用我们的模板进行补充。

- 编辑注册表分支: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Lsa => 通知包
将PassFiltEx添加到列表的末尾。 (不需要扩展名。)用于验证的软件包的完整列表看起来像这样的“ rassfm scecli PassFiltEx ”。

- 我们重新启动域控制器。
- 我们对所有域控制器重复上述过程。
您还可以添加以下注册表项,从而使您在使用此过滤器时更具灵活性:
部分:
HKLM \ SOFTWARE \ PassFiltEx-自动创建。
- HKLM \软件\ PassFiltEx \ BlacklistFileName ,REG_SZ,默认值:PassFiltExBlacklist.txt
BlacklistFileName-允许您使用密码模板指定文件的自定义路径。 如果此注册表项为空或不存在,则使用默认路径,即%SystemRoot%\ System32 。 您甚至可以指定网络路径,但是您需要记住,模板文件必须具有读取,写入,删除和更改的明确权限。
- HKLM \ SOFTWARE \ PassFiltEx \ TokenPercentageOfPassword ,REG_DWORD,默认值:60
TokenPercentageOfPassword-允许您在新密码中指定掩码出现的百分比。 默认值为60%。 例如,如果指定发生百分比为60,并且模板文件中存在starwars行,则密码为Starwars1!。 将被拒绝,而密码starwars1!DarthVader88将被接受,因为密码中字符串出现的百分比小于60%
- HKLM \ SOFTWARE \ PassFiltEx \ RequireCharClasses ,REG_DWORD,默认值:0
RequireCharClasses-与标准ActiveDirectory密码复杂性要求相比, 增强了密码要求。 内置的复杂性要求需要5种可能的不同字符中的3种:大写,小写,数字,特殊和Unicode。 使用此注册表项,您可以设置密码复杂性要求。 可以指定的值是一组位,每位都是2的相应幂。
即-1 =小写,2 =大写,4 =数字,8 =特殊字符,以及16 = Unicode字符。
因此,值为7时,要求为“大写和小写AND数字”,值为31时,要求为“大写和小写AND数字以及特殊字符和特殊字符Unicode”。
您甚至可以结合使用-19 =“大写,小写和 Unicode字符”。

编译模板文件时的许多规则:
- 模式不区分大小写。 因此,将将starwars和StarWarS文件中的条目确定为相同的值。
- 黑名单文件每60秒重新读取一次,因此您可以轻松地对其进行编辑,一分钟后,新数据将已被过滤器使用。
- 当前不支持模式验证的Unicode支持。 也就是说,您可以在密码中使用Unicode字符,但是过滤器将不起作用。 这并不重要,因为我还没有看到使用Unicode密码的用户。
- 建议不要在模板文件中使用空行。 在调试中,从文件中加载数据时会看到错误。 过滤器有效,但是为什么要额外过滤呢?
为了进行调试,存档中有一些批处理文件,可让您创建日志,然后使用例如
Microsoft Message Analyzer对其进行解析
。此密码筛选器使用Windows事件跟踪。
此密码过滤器的ETW提供程序是
07d83223-7594-4852-babc-784803fdf6c5 。 因此,例如,您可以在下次重启后配置事件跟踪:
logman create trace autosession\PassFiltEx -o %SystemRoot%\Debug\PassFiltEx.etl -p "{07d83223-7594-4852-babc-784803fdf6c5}" 0xFFFFFFFF -ets
跟踪将在下一次系统重新引导后开始。 停止:
logman stop PassFiltEx -ets && logman delete autosession\PassFiltEx -ets
所有这些命令都在
StartTracingAtBoot.cmd和
StopTracingAtBoot.cmd脚本中指定。
对于过滤器的一次性检查,可以使用
StartTracing.cmd和
StopTracing.cmd 。
为了方便地在
Microsoft消息分析器中读取此过滤器的调试
信息,建议使用以下设置:


当您停止日志并在
Microsoft Message Analyzer中进行解析时,一切看起来都像这样:

在这里,您可以看到有人尝试为用户设置密码-调试中的魔术字
SET告诉我们有关此信息。 由于密码存在于模板文件中,并且输入的文本中超过30%匹配,因此密码被拒绝。
成功更改密码后,我们看到以下内容:

给最终用户带来一些不便。 当您尝试更改属于模板文件列表的密码时,如果未通过密码策略,则屏幕上的消息与标准消息的
智能和敏锐度没有区别。

因此,请做好电话和尖叫的准备:“我按原样输入了密码,但是它不起作用。”
总结
该库允许您禁止在Active Directory域中使用简单或标准密码。 说不! 形式的密码:“ P @ ssw0rd”,“ Qwerty123”,“ ADm1n098”。
是的,当然,用户会更加爱上您,因为他们担心自己的安全性以及提出愤怒的密码的需求。 并且,也许是您将添加密码的呼叫和寻求帮助的次数。 但是安全是有代价的。
链接到使用的资源:Microsoft关于自定义密码过滤器库的文章:
密码过滤器PassFiltEx:
PassFiltEx发布链接:
最新版本密码列表:
DanielMiessler列表:
链接。来自weakpass.com的词表:
链接。berzerk0回购中的单词表:
链接。Microsoft邮件分析器:
Microsoft邮件分析器。