22端口漏洞
2016年10月,端口漏洞Mirai僵尸网络放出了一份源代码。端口漏洞这份代码里有个扫描模块,端口漏洞专门找开放22端口的端口漏洞设备,然后尝试用一份内置的端口漏洞弱密码字典去登录。字典不长,端口漏洞六十来个常见组合,端口漏洞admin/admin、端口漏洞root/123456、端口漏洞pi/raspberry之类。端口漏洞就这么点东西,端口漏洞几天之内搞瘫了大半个美国的端口漏洞网络。Dyn的端口漏洞DNS服务器被海量请求淹没,Twitter、端口漏洞Netflix、端口漏洞Reddit全部掉线。攻击流量从哪来的?摄像头、路由器、DVR录像机。这些设备都有一个共同点:开着22端口,跑着SSH服务,密码从出厂就没改过。 22端口是SSH的默认端口。SSH本身没什么问题,它是远程管理Linux服务器最常用的工具,加密传输,比telnet那种明文协议安全得多。问题出在“默认”两个字上。默认端口意味着扫描成本极低,nmap扫一遍全网,22端口开放的主机列表几小时就能拉出来。默认配置意味着很多系统允许root直接登录,密码认证开着,失败次数不限。默认密码意味着大量物联网设备出厂时用的是同一套凭证,用户插上电就开始裸奔。 我自己的服务器上,22端口每天要挨几千次暴力破解。这不是夸张。随便装个fail2ban,看日志就知道,攻击来源遍布全球,俄罗斯、巴西、越南、美国的IP轮着来。尝试的用户名从root、admin、test到oracle、postgres,密码从password到P@ssw0rd,字典跑得比我还勤快。有一次我故意把一台测试机的SSH密码设成“123456”,开放了不到四个小时,就被登录了。登录之后对方干了什么?装了个挖矿程序,CPU跑满,风扇狂转。 SSH的设计初衷是给可信网络环境用的。1995年Tatu Ylönen写第一版的时候,互联网还很小,大家互相认识,默认信任。三十年后,互联网上每一台暴露的服务器都在被自动扫描。协议本身没变,环境变了。密码认证是最大的软肋,因为人选的密码永远不够随机。即使你觉得自己设的密码够复杂,面对离线字典攻击或者针对性的社工库,也只是时间问题。 另一个问题是密钥管理。很多人用SSH密钥登录,觉得比密码安全。但私钥文件权限设成644、没加passphrase、或者从旧机器迁移时直接复制过去的,比比皆是。我见过一个案例,开发把私钥提交到了GitHub公开仓库,三天后服务器就被种了后门。攻击者甚至没改密码,就静静躺着,等数据攒够了再一次性拖走。 物联网设备更糟。厂商为了省事,固件里直接写死SSH凭证,用户根本没有修改的入口。Mirai的作者就是利用了这一点。他们不需要破解什么高级加密,只是把默认用户名密码组合试一遍,就能控制几十万台设备。这些设备算力不强,但数量堆起来,发起DDoS攻击绰绰有余。 最直接的办法:别把22端口暴露在公网上。如果必须远程管理,套一层VPN,或者用防火墙限制来源IP。云服务商的安全组功能都支持这个,花五分钟配一下,扫描量能降九成。 如果非开不可,关掉密码认证,只用密钥登录。生成密钥时加passphrase,私钥文件权限设成600。改默认端口也有点用,能过滤掉大部分无差别扫描,但别指望靠这个挡住针对性的攻击。fail2ban装一个,失败几次就封IP,聊胜于无。 对于物联网设备,普通用户能做的有限。买之前查一下厂商有没有已知的SSH漏洞,固件能不能升级。已经买回来的,看看管理后台有没有关闭SSH的选项。很多设备根本不需要远程命令行,厂商开着只是为了调试方便,用户完全用不到。 22端口本身不是漏洞。漏洞是懒惰的配置、缺失的更新、和对默认设置的盲目信任。Mirai爆发快十年了,同样的事情还在发生。每次看到新的一轮SSH爆破日志,我都觉得这个行业在安全上的进步,比想象中慢得多。为什么22端口成了重灾区
能做什么
-
上一篇
-
下一篇