游客发表
2017年5月,操作常全球超过20万台电脑在几天内被同一个勒索软件锁死,系统医院手术被迫取消,高危加油站无法收款,漏洞高校实验室的操作常数据被加密成了一堆乱码。WannaCry利用的系统不是什么新鲜手法——它钻的是Windows SMB协议里一个已经发布补丁两个月的漏洞(MS17-010)。问题在于,高危太多机器没打补丁。漏洞
这件事说明一个很朴素的操作常道理:操作系统漏洞的危险程度,不取决于技术多复杂,系统而取决于有多少机器暴露在攻击面下。高危
Linux内核的操作常Dirty COW(CVE-2016-5195)是个经典案例。这个漏洞从2007年就存在于内核代码里,系统直到2016年才被修复。高危攻击者利用写时复制(Copy-on-Write)机制里的竞态条件,可以在只读内存上写入数据,直接拿到root权限。一个普通用户账号,配合几行exploit代码,整台服务器的控制权就到手了。
Windows上类似的东西也不少。CVE-2021-1732是Win32k组件里的提权漏洞,影响Windows 10和Server 2019。攻击者通过构造特定的窗口消息触发内核内存越界写入,本地普通用户就能提升到SYSTEM权限。这类漏洞常被APT组织当作攻击链中的一环——先通过钓鱼拿到一个低权限shell,再用提权漏洞横扫内网。
远程代码执行(RCE)漏洞是运维人员最怕看到的东西。因为它意味着攻击者不需要你点任何东西,不需要你打开任何文件,只要你的服务在监听,他就可能打进来。
Windows的SMB协议在这方面堪称“重灾区”。MS08-067(CVE-2008-4250)让Conficker蠕虫席卷了数百万台机器。MS17-010(CVE-2017-0144)又被Shadow Brokers泄露,直接催生了WannaCry和NotPetya两场灾难。这两个漏洞的根因类似:SMB协议在处理特制请求时没有正确验证数据长度,导致缓冲区溢出,攻击者可以远程执行任意代码。
Apache Log4j的Log4Shell(CVE-2021-44228)虽然严格来说不是操作系统漏洞,但它波及的范围之广——从云服务到工业控制系统——说明现代软件栈里任何一层出问题,都可能让底层的操作系统防线形同虚设。攻击者通过构造 ${ jndi:ldap://...} 这样的字符串,就能让目标服务器加载并执行远程代码。
操作系统代码量太大了。Linux内核有超过3000万行代码,Windows更是以亿计。在这么多代码里找内存安全问题,就像在大海里捞针。C语言本身不提供内存安全保证,指针运算、手动内存管理,稍有不慎就是缓冲区溢出或释放后使用(UAF)。
更麻烦的是,很多漏洞存在于几十年前写的老代码里。这些代码可能当时运行在完全隔离的网络上,没人想到有一天会被暴露在互联网上。SMB协议的设计年代,网络信任模型和现在完全不同。
还有个现实问题:补丁打了不代表问题解决了。企业环境里,一台服务器重启可能意味着几个小时的服务中断。工控系统、医疗设备上的嵌入式Windows,厂商根本不让你随便更新。WannaCry爆发时,英国NHS大量机器还在跑Windows XP——微软早在2014年就停止支持了。
没有银弹。但有几件事确实能降低风险:缩小攻击面,关掉不需要的服务和端口;及时打补丁,哪怕做不到实时,至少别拖几个月;对关键系统做网络隔离,别让一台被攻陷的机器能直接摸到核心资产;启用操作系统的强制访问控制机制,比如SELinux或AppArmor,它们能在内核漏洞被利用后增加额外的阻碍。
漏洞不会消失。内核代码还在增长,攻击者的工具也在进化。能做的,是让自己不成为最容易的那个目标。
友情链接