2001年,漏洞主红色代码蠕虫在互联网上横扫,自本十几万台服务器一夜之间沦为肉鸡。漏洞主事后分析报告指出,自本漏洞源头是漏洞主IIS 4.0/5.0的索引服务缓冲区溢出——一个微软自己都知道存在了半年的缺陷。这种“自己人留后门”的自本戏码,在www服务器领域从来不是漏洞主孤例。
Apache占着全球web服务器近三分之一的自本份额,可它的漏洞主默认配置里,Options Indexes这个指令让目录浏览功能敞开着。自本你随便扫一个没改配置的漏洞主Apache站点,就能像逛超市一样把它的自本文件结构看个底朝天。更讽刺的漏洞主是,官方文档明确写着“此选项仅用于调试目的自本”。但有多少管理员会去读那几千页的漏洞主英文手册?
Nginx以高性能著称,它的alias指令配置错误能导致路径穿越。比如location /files { alias /home/user/; },如果请求/files../secret.txt,某些版本会直接绕过限制读到上级目录。这类问题在Stack Overflow上被问了不下百次,可依然每年都有新站中招。为什么?因为开发者的第一需求是“让功能跑起来”,安全永远是第二优先级。
再说说那些看似无害的“小功能”。IIS 6.0的.asp分号截断漏洞,攻击者只要在文件名后加个分号和任意字符,就能绕过扩展名过滤上传恶意脚本。这个洞2009年被公布,到2013年还有人在利用它入侵政府网站。服务器厂商的补丁出了好几个,但架不住运维人员图省事,直接禁用更新服务。
我自己做过个实验:用默认配置装了三台不同品牌的服务器,放公网裸奔24小时。结果Apache被扫描器探测到版本号后,立刻有针对性攻击尝试;Nginx遭遇了目录爆破;IIS更直接,有人尝试用编码绕过上传webshell。三台机器没跑任何业务代码,纯粹是干净的系统——漏洞全来自软件自身,跟应用层一点关系没有。
这里有个反直觉的真相:服务器软件的复杂度越高,隐藏的自我攻击面就越大。Apache有超过60个模块默认加载,Nginx的第三方模块数量破千,IIS虽然闭源但功能集成度极高。每个模块都是一扇窗,厂商为了功能完整,往往把窗口全打开,至于窗帘拉不拉,那是用户的事。
所以别总怪黑客手段高明。大多数攻击用的都是公开了好几年的CVE漏洞,甚至直接翻官方文档就能找到利用方法。www服务器最大的漏洞,恰恰是它“什么都想干”的设计哲学——功能越全,默认配置越宽松,留给管理员的坑就越深。这不是某个厂商的错,是整个web架构演进时留下的通病。
要我说,哪天服务器厂商敢把默认配置改成“最小权限+强制安全审计”,这些老掉牙的漏洞至少能少一半。可惜,他们更在意的是“开箱即用”的卖点,而不是“开箱即安全”的口碑。