SSH安全加固一二三

Posted by c4pr1c3 on August 2, 2010

今天车东大侠在GReader上分享了一篇文章《为什么要用公钥/私钥而不是密码去做SSH身份验证》,联系到最近越来越恶劣的网络环境,我越发觉得有必要把我的一些SSH安全方法分享一下,以降低SSH通道被恶意破坏的概率,提高攻击者的攻击代价。

0. 系统自动更新

这个世界上没有什么漏洞会比一个系统级的远程溢出漏洞更可怕的了!虽然此类漏洞如今是越来越少被公开,越来越少被发现。但本着不怕一万,就怕万一的安全指导原则。小概率、高危险的漏洞只能依靠及时的系统更新来帮助我们修复了。

除此之外,应用软件级别的漏洞也可以通过系统自动更新来杜绝。

以下的安全加固主要是从应用程序配置的角度来谈SSH的安全加固,配置既包括SSH本身的配置参数,也包括使用第三方软件来对SSH进行额外的安全配置。

1. 更换默认的SSH端口

有句大俗话,叫”不怕贼偷就怕贼惦记”。对于信息安全来说,就是“只要给我足够的时间,任何系统都会被发现漏洞,并被攻破”。如果使用默认的22端口来使用SSH,其主要不安全因素体现在2点:

(1) 互联网上每时每刻都有人在做端口扫描,在nmap的默认扫描设置里,22端口作为常用端口会在默认的扫描选项条件下被用于端口扫描、连接尝试、操作系统探测等。所以,如果你使用默认的22端口,就是等于告诉“贼”:“来吧,我在用SSH服务。试试看暴力破解我的口令?”

(2) 有一个英文单词叫censorship,有一种技术叫DPI,有一种设备叫IDS。造句就是:censorship会使用基于DPI技术的IDS来偷窥你!如果你使用默认的22端口,那么IDS会非常开心,因为这等于是帮助它节省了DPI的开销!

2. sshd设置中的不安全因素

# 建议更换默认端口
Port 22
# 建议只监听需要的端口,默认是监听所有可用的本机IP地址
#ListenAddress ::
#ListenAddress 0.0.0.0
# 建议只使用SSH协议版本2
Protocol 2
# 建议使用更长的服务器密钥长度,如2048
ServerKeyBits 768
# Authentication:
# 默认登录超时时间一般为120秒,建议缩短该时间到30
LoginGraceTime 120
# 建议禁止Root用户直接登录,将yes改为no
PermitRootLogin yes
# 如果你不需要基于口令的登录方式,可以将yes改为no
#PasswordAuthentication yes

3. 使用第三方安全加固工具

目前来说,针对SSH协议的最轻便的攻击手段就是暴力口令破解。因此,使用第三方安全加固工具的主要目的也就是对抗暴力破解攻击。现有的第三方SSH暴力破解对抗工具从技术实现手段来说,主要有两大类。分别是基于日志审计触发机制和基于PAM的插件机制。基于日志审计触发机制的代表工具分别是fail2bandenyhosts,但这两款工具都曾经暴露出一些漏洞,其中主要的漏洞原理都是日志注入技术。相比较而言,pam_abl是更为安全的一种防止暴力破解口令攻击的工具。

最后推荐Google “ssh security best practice

第一条结果就非常值得仔细阅读:http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html

参考资料

  1. http://www.rackaid.com/resources/how-to-harden-or-secure-ssh-for-improved-security/
  2. http://www.rackaid.com/resources/rise-in-ssh-brute-force-attacks/
  3. http://www.ossec.net/main/attacking-log-analysis-tools



为什么要用公钥/私钥而不是密码去做SSH身份验证