前不久笔者应邀到某公司做网络渗透,这家公司的网络是由windows2003服务器和XP系统搭建的小型Active Directory,其中一台服务器连接着内网数据库,所有服务器都开放了远程终端。经过渗透测试,笔者发现了一些很严重的常见安全性问题,其中最值得一提的就是密码安全管理问题。
在测试WEB的时候,出现了SQL注入漏洞,也由此进一步获得了连接数据库的密码。然而数据库的机器可能故意放在DMZ区,所以不能上网。笔者在WEB网站中查找到了WEB管理员的密码,却发现和刚才获得的连接数据库密码明显有相同之处。WEB 管理员的密码是web@123456(123456代表的是朋友公司的名字),而连接数据库的密码是sql@123456。发现了这一点共同之处后,根据经验,笔者抱着侥幸的心理直接登陆终端输入密码webserver@123456,竟然成功了。就这样获得了WEB服务器的管理员权限。在之后的渗透过程中,笔者测试mail服务器的时候直接输入mailserver@123456,竟然也成功了。有了这样一个“公式”,接下来的测试就轻松多了,把服务器根据情况把密码重新组合,就这样把余下的服务器直接被轻松拿下。最后在其中一台服务器笔者还意外的“获得”了一个记录所有服务器的密码的XSL文档,这个XLS文档密码还包括了域名的密码。
笔者以往的经验表明,其实这样的情况非常普遍,假如读者是一位网管,可以回想一下,在读者所处的企业或所管理的服务器有没有这样的类似问题。但是正是因为这种密码的缺陷,给企业服务器或者内网带来灾难。
密码的安全一直以来都是一个难题。其实,针对这种情况,每个企业都可以更有效地管理自己的密码。以下是笔者就密码管理给朋友公司的管理员提出的建议,也给广大的网管朋友提个醒:
一、 所有的服务器必须设置安全复杂的密码
二、 定期更改密码
主要是防止那些不慎落入黑客手中老密码再次被利用。
三、 新密码必须脱胎换骨,和旧密码毫无关联
更改密码时,切忌直接从老密码变换而来,尤其是那种只改变一个字母的做法。当管理员更改密码时,应该假设当前密码已经被人破解。类似webserver1@123456、web1@123456、mailserver1@123456这样的密码更改,要猜出来简直是太容易了。
四、 不使用常见单词和弱密码
比如password、qwer1234等,这类密码是绝对不能使用的。
五、 使用无规律可循的密码
就像在这次的测试中,笔者就是遵循着朋友公司的密码的规律,进入服务器的。所以产生密码的时候,不能使用有规律可循的密码。
六、 记录密码档的文档必须加密。
以下是微软官方提供的《确定与密码策略相关的设置》
• “强制密码历史”确定互不相同的新密码的个数,在重新使用旧密码之前,用户必须使用过这么多的密码。此设置值可介于 0 和 24 之间;如果该值设置为 0,则强制密码历史被禁用。对多数组织而言,将该值设置为 24 个密码。
• “密码最长使用期限”确定在要求用户更改密码之前用户可以使用该密码的天数。其值介于 0 和 999 之间;如果该值设置为 0,则密码从不过期。将值设得太低,则可能给用户带来不便;设得太高或者禁用,则为潜在攻击者提供更多时间来破解密码。对多数组织而言,将该值设置为 42 天。
• “密码最短使用期限”确定用户可以更改新密码之前这些新密码必须保留的天数。此设置被设计为与“强制密码历史”设置一起使用,这样用户就不能很快地重置有次数要求的密码并更改回旧密码。该设置值可以介于 0 和 999 之间;如果设置为 0,用户可以立即更改新密码。建议将该值设为 2 天。
• “密码长度最小值”确定密码最少可以有多少个字符。尽管 Windows 2000、Windows XP 和 Windows Server 2003 最多可支持 127 个字符的密码,但是该设置值只能介于 0 和 14 个字符之间。如果设置为 0,则允许用户使用空白密码,因此您不应使用 0 值。建议将该值设置为 8 个字符。
• “密码必须符合复杂性要求”确定是否加强密码的复杂性。如果启用该设置,则用户密码符合以下要求:
• 密码长度至少有 6 个字符。
• 密码至少包含以下 5 类字符中的 3 类字符:
• 英语大写字母 (A – Z)
• 英语小写字母 (a – z)
• 10 个基数数字 (0 – 9)
• 非字母数字(例如:!、$、# 或 %)
• Unicode 字符
• 密码不得包含三个或三个以上来自用户帐户名中的字符。
如果帐户名长度少于 3 个字符,此检查便不会被执行,因为密码被拒绝的可能性相当高。检查用户全名时,有几个字符被看作分隔符,分隔符将名称分隔成单独的标记,这些分隔符为:逗号、句点、短划线/连字符、下划线、空格、磅字符和制表符。对于每个标记,如果长度有 3 个或以上的字符,则在密码中搜索该标记;如果存在该标记,则拒绝更改密码。例如,姓名“Erin M. Hagens”将拆分为三个标记:“Erin”、“M”和“Hagens”。由于第二个标记的长度只有一个字符,从而被忽略。因此,该用户密码中任何位置都不能包含“erin”或“hagens”子字符串。所有这些检查都区分大小写形式。