问题在于,本地帐户通常不会过期,不会检查其复杂性,并且仍然具有特权访问权限。另外,密码策略并不总是允许灵活配置需求,例如,它们并不禁止使用字典密码(记住每个人都喜欢的P @ ssw0rd)。
在QIWI,我们遇到了类似的问题,为了解决这些问题,我们尝试了不同的解决方案来进行全面的数据库扫描。 las,它们的主要目的只是检查DBMS的配置,仅此而已。同时,这种扫描仪的价格相当可观。
而且,如果我们通常谈论可以检查您的基础结构是否存在漏洞的安全扫描程序,则您需要拥有一套此类扫描程序,这非常昂贵。
在这篇文章中,我将讨论我们用于任务的内容,以及在此过程中我们如何得出结论,即制作自己的东西更好,更容易。我将与大家分享解决方案。
我们使用相当不错的流行扫描仪。但是要实现我们所需的功能很困难-我们必须为每个数据库创建审核文件(因为我们在DBMS中具有不同的配置),再创建许多要扫描的帐户,然后添加新帐户,然后再次手动更改审核员。
此外,该扫描仪不知道如何离线破解密码,这是一个问题。这就是为什么。
暴力破解可以通过两种模式进行:在线和离线。如果我们正在谈论在线暴力,那么这是对用户登录和主动暴力攻击的模仿。 Hydra就是这样一种程序,它支持大多数DBMS。该方法在大多数情况下适用于进行渗透测试以及检测默认帐户和密码。但是不适合常规检查和非默认帐户(用户和服务)。因为如果有适当的安全策略,这种情况下的帐户将被阻止。
与在线暴力不同,其离线版本是卸载登录名和密码哈希,然后使用诸如hashcat或Ripper的实用程序执行暴力。数据库上没有负载,并且没有用蛮力锁定帐户的风险。而且,您还可以使用具有数百万个条目的字典:对于在线暴力,这几乎是不可能的。
我们做我们的
由于使用当前的扫描仪很难实现所描述的功能,并且购买另一台扫描仪很昂贵,因此想到了自己制作扫描仪的想法。
因此,我们拥有自己的扫描器,用于离线蛮力本地帐户。
该扫描仪支持MS SQL,Oracle和PostgreSQL。当然,存在一些技术难题,例如,以hashcat支持的格式提取哈希。但是主要的困难是了解如何使用找到的结果:如何在不影响生产力的情况下更改密码,如何确保此类密码不会再次出现等。
但是,我们将其保留在本文范围之外。
使用django管理面板时,用户界面没有太大改善。看起来像这样:
- 可以查看数据库列表并添加新数据库
- 您可以看到每个帐户的暴力状态
- 您可以看到扫描结果
- 如果弱密码匹配,则在结果中显示此密码(密码哈希,猜测密码和帐户名)
- 您可以设置扫描时间
主要优点
- 知道如何在离线模式下玩
- 有字典检查
- 全部免费
如果您不确定是否需要部署这样的扫描程序,可以尝试从本地帐户中手动获取密码哈希,并通过hashcat运行它们。请求
示例:
oracle 11g
select user#, name, spare4 from sys.user$ where spare4 is not null;
Microsoft SQL Server(2005年以上):
select name, cast (name+'|'+master.dbo.fn_VarBinToHexStr(password_hash) as varchar(1000)) FROM master.sys.sql_logins
我们的扫描仪不会替代功能完善的安全扫描仪,但是它将是重要且令人愉快的补充。现在,每个人都可以使用它:github.com/qiwi/bruteforce
如果您对部署有任何疑问或困难,请在github上创建一个问题,我们一定会回答。
非常感谢您的实施苏达姆 和 斯列茹克