8.1.2 SSH

安全外壳(Secure Shell,SSH)成为安全远程管理骨干协议已经多年(至少比Telnet安全)。它使用加密保护验证和后续的数据传输,从而避免了Telnet遭受的简单窃听攻击。SSH协议有两个版本——版本1(SSH1)和版本2(SSH2)。SSH1已经被SSH Communications Security(该协议的原始开发商)所废弃,安全性低于SSH2,不应该再使用。我们建议在系统上使用SSH2而完全禁用SSH1。要知道,和所有软件一样,在某些SSH实现中也已经发现了漏洞,所以名称中的“安全”并不意味着你可以忘记那些最佳实践,比如了解最新的安全通告和补丁。

SSH提供多种验证方法。最常用的是密码验证——用户使用密码进行验证,还有公钥验证,这种方法基于数字签名的使用;验证使用用户的公钥和私钥进行。使用公钥验证时,安全存储私钥并使用密码短语进行加密非常重要。

有趣的是,SSH还通过安全拷贝(Secure Copy,scp)实用工具支持文件传输,对于同时想要管理Web服务器内容的人来说更有吸引力。我们在接下来的Web内容管理小节中会再次谈到scp。

因为常用作远程管理工具,所以我们在执行Web应用审计时总是将SSH(TCP端口22)包含在发现和枚举扫描中。在非标准端口上(例如TCP 2222)查找SSH服务器也是明智的,因为系统管理员中,修改默认端口避开检测是非常常见的做法(再次提供了低效的“不公开的安全性”)。使用密码验证时,SSH仍然容易遭到密码猜测攻击,在进行Web审计时,尝试一些较明显的猜测(root:[NULL]、root:root、root:admin、admin:[NULL])或者使用包含常见词(加上可能出现在目标网站上的词和电子邮件地址就更好了)的字典进行猜测总是没有坏处的。建立这样的字典可以手工进行,或者使用Robin Wood的CeWL(Custom Word List Generator,自定义单词列表生成器)之类的工具。如果SSH服务器使用公钥校验,可能受到Debian OpenSSL可预测随机数生成器漏洞的影响,这个漏洞可能使攻击者能侵害用户账户,进行流量解密和中间人攻击。监测和利用这个问题的方法以及公钥校验的一般信息可以参见本章结尾处的“参考与延伸阅读”小节。