去年冬天,网络我帮一个朋友排查他小电商站点的本身异常流量。日志里全是存安来自越南和巴西的IP,每秒几百次请求,全缺目标全是网络登录接口。他以为是本身被竞争对手盯上了,其实不是存安——只是他的服务器暴露了SSH默认端口,被自动化脚本扫到,全缺拉进了一个僵尸网络。网络这事让我重新翻了翻网络协议栈的本身底层设计。很多缺陷不是存安“漏洞”,而是全缺当初就没打算防谁。
TCP/IP协议族诞生于一个信任环境。网络上世纪七十年代,本身ARPANET上的存安节点都是军方和大学实验室,彼此认识。IP层只负责把包扔出去,不验证源地址。这意味着任何人可以伪造源IP发起SYN洪水,或者把攻击流量反射到无辜的第三方。这种“无状态”设计让路由器转发效率极高,代价是安全责任全推给了终端。今天你随便找个VPS,用hping3就能构造源地址是白宫的包,网络本身不会拦你。
DNS是另一个重灾区。它默认用UDP,无连接、无加密、无认证。2016年Mirai僵尸网络打垮Dyn DNS,半个美国的推特和奈飞都挂了。攻击者没有入侵Dyn的服务器,只是用伪造源IP的DNS查询把流量引向受害者。更早的Kaminsky漏洞则允许缓存投毒——你查bank.com,解析器可能给你返回一个攻击者的IP。DNSSEC能解决一部分,但部署率至今不到四成,因为运维嫌麻烦。
BGP路由协议更离谱。它基于“我信你”的邻居关系,没有内置机制验证某个AS是否有权宣告某个IP段。2008年巴基斯坦电信想屏蔽YouTube,结果错误宣告了YouTube的整个前缀,全球流量绕道巴基斯坦,YouTube瘫痪两小时。2018年,一个尼日利亚ISP错误宣告了谷歌的IP段,把大量流量引到非洲。这类事件叫“路由劫持”,网络运营商之间靠君子协定和RPKI慢慢补,但RPKI的采用率同样低得可怜。
HTTP协议本身也不安全。明文传输意味着任何中间节点——咖啡店路由器、ISP、甚至同网段的室友——都能看到你的Cookie和表单内容。HTTPS解决了传输加密,但证书信任链依赖几十个根CA。某个CA被入侵或被迫签发假证书,整个信任模型就塌了。2011年DigiNotar被黑,攻击者签发了谷歌域名的假证书,荷兰政府直接接管了这家CA。
还有ARP。局域网里,任何主机都能发ARP响应说“我是网关”。我曾在大学宿舍用一条arpspoof命令,让整个楼层的人断网十分钟。交换机不做端口隔离的话,这招至今有效。IPv6的NDP协议有类似问题,SEND协议想解决,但配置复杂到没人用。
这些缺陷有个共同点:它们都是“设计时没考虑恶意行为”。网络最初的目标是连通性和鲁棒性,不是安全性。后来打补丁的方式也很别扭——IPsec太重,TLS只保护应用层,DNSSEC需要全链路改造。你没法在现有架构上缝出一个安全网络,只能一层层套壳。
我自己的判断是:别指望网络层变安全。它已经太大了,改不动。真正的防线在终端和身份验证上。零信任架构之所以火,就是因为大家终于承认——内网和外网一样脏。你唯一能信的是自己的设备和加密密钥,而不是IP地址或者路由表。