nmap ssh扫描漏洞

nmap扫描SSH漏洞:别急着打补丁,描漏先看清你的描漏暴露面

凌晨两点,一台CentOS 7服务器被爆破成功。描漏日志显示攻击者用hydra跑了整整六小时字典,描漏最后靠一个“admin123”进了门。描漏事后复盘时发现,描漏这台机器根本没装fail2ban,描漏SSH端口裸奔在公网上,描漏版本还是描漏OpenSSH 5.3——一个十年前的版本,CVE-2016-0777的描漏漏洞足够让攻击者直接读取内存密钥。你问nmap能干什么?描漏它能在爆破发生前,就把这些信息全摆在你桌上。描漏

用nmap扫SSH服务,描漏最基础的描漏就是探测版本号。命令很简单:nmap -sV -p 22 目标IP。描漏但别小看这个“-sV”,它背后是nmap的指纹库在比对banner。有一次我扫一个内网段,发现三台Ubuntu 18.04显示OpenSSH 7.6p1,但其中一台的banner末尾多了个“(Ubuntu Linux; protocol 2.0)”后缀——这细节说明它可能被定制过,或者有人改了编译参数。版本号只是起点,真正要留意的是“逾期未更新”的标记。

光有版本还不够,得看它支不支持弱算法。SSH协议里,如果服务器允许ssh-rsa或者diffie-hellman-group1-sha1这种老古董,那等于给中间人攻击留了后门。nmap的脚本--script ssh2-enum-algos能列出所有支持的算法。我拿它扫过一家金融机构的跳板机,结果发现对方还开着ssh-dss——DSA密钥长度只有1024位,用普通GPU跑几个小时就能破解私钥。当时对方IT主管还嘴硬,说“内部网络没事”,直到我给他看了Shodan上同IP段的历史扫描记录,他才闭嘴。

更隐蔽的问题是SSH服务本身的配置缺陷。用--script ssh-auth-methods可以枚举登录方式。有一次我扫描某云厂商的托管主机,发现一台实例允许password认证的同时,还开了keyboard-interactive。这俩叠加意味着什么?攻击者可以用密码尝试,但每次输入都会被服务器二次确认——这反而给爆破提供了更准确的反馈信号,因为错误密码会被直接拒绝,而正确密码会触发下一步交互。nmap能把这个流程拆开,告诉你“这台机器不设防”。

真正让人头疼的是那些藏在非标准端口的SSH。默认22端口扫不到,不代表服务不存在。用nmap -p- --open -T4 目标全端口扫描,再配合--script ssh-hostkey去识别主机密钥类型。我遇到过一台邮件服务器把SSH开在2222端口,还用了个自签名的RSA-2048密钥。nmap能直接告诉你这个密钥的指纹和长度——2048位在2024年已经算边缘化了,但更关键的是它自签名,意味着中间人攻击的验证链断裂。

最后说个实操细节。扫描时别光看结果,要结合时间戳和源IP判断。nmap的-O系统探测有时候会误判,但配合SSH版本能提高准确率。比如扫到OpenSSH_8.9p1,系统多半是Ubuntu 22.04或Debian 12;而OpenSSH_7.4p1大概率是RHEL 7。这种组合判断能帮你快速定位哪些机器该优先处理——毕竟,一个跑着老版本SSH的Windows Server 2012,比Linux更危险,因为它的补丁周期早就停了。

扫描只是开始,别指望nmap能直接“修”漏洞。它更像一个侦察兵,告诉你“敌人在哪、拿什么武器”。至于怎么打——那是fail2ban、密钥轮换和防火墙规则的事。但至少,别等到凌晨两点的爆破日志砸到你脸上,才想起自己连SSH版本都没查过。