1
有一个漂亮的U盘安静地躺在地面上,也不知道是谁把它遗忘在那里。
不知道过了多久,U盘被一个人捡了起来,这个人想知道U盘中有什么内容,于是好奇地把它插入了自己的Windows笔记本电脑。
U盘打开了,里边除了几个风景图片之外,什么都没有。这个人有点失望,把U盘拔了出来,扔到了桌子上。
他并不知道的是,U盘中有一个蠕虫病毒,在U盘插入电脑的时候,蠕虫立刻运行,把自己复制到了电脑上。
这个蠕虫是怎么做到的呢?它有三种办法,一个不行就尝试另外一个, 其中有两种方法都利用了 0day 漏洞 !
什么是0day漏洞?它是黑客世界非常少见、非常宝贵的东西,因为这种漏洞是软件公司和杀毒公司都没有发现的, 也就是说,根本没有补丁, 这种漏洞通常可以远程执行代码,或者提升到管理员权限。
笔记本电脑中安装有杀毒软件,可是这个蠕虫被设计得非常精妙,杀毒软件根本发现不了它。
蠕虫进入了电脑, 又利用了两个0day漏洞!它获取了管理员的权限。然后它把自己很好地隐藏起来了,没有人、没有杀毒软件能查找到它。
顺便提一下, 0day漏洞可以在黑市买卖,每个都价值几十万美元,这个蠕虫居然利用了四个,真是“土豪”啊。
这个蠕虫检查了一下,笔记本电脑可以上网,于是它悄悄地访问了两个网站,告诉服务器自己已经成功潜伏到了某个电脑中,与此同时,它也下载了最新的版本,把自己给更新了。
但是,这蠕虫什么破坏都没有做, 只是静悄悄地潜伏在那里,等待着合适的机会再施展自己的能力。
2
又不知道过了多久,这个人带着笔记本去了一个工厂,他是这个工厂的外包员工,下午的时候,工厂的甲方人员给了他U盘,要从他这里复制一个文件。
大错就此酿成!
这个蠕虫立刻感知到有U盘插入了电脑,它毫不迟疑,果断地把自己复制到了新的U盘当中。
为了能做到这一点,它安装了一个精巧设计的、假的设备驱动。但是设备驱动如果没有合法的数字签名,操作系统就不会认可,会提示用户“有诈”,这就暴露了。
这难不倒蠕虫,因为它的制造者在它问世之前,送了它一个大礼包:Realtek公司和JMicron这两家公司的密钥!这样就可以对驱动进行数字签名了。
熟悉非对称加密和RSA的同学都知道,RSA有两个key ,一个是public key ,一个是private key 。public key 任何人都可以获取,但是private key那可一定要保管好,一旦丢失,你的加密系统就完蛋了。
Private key可是Realtek和JMicron的核心资产, 肯定被严加保护, 这个蠕虫的制造者到底是怎么获取的, 没人知道。
U盘被工厂甲方的人带走了,蠕虫将要开始新的征程。
3
这个工厂生成的产品很重要,它的网络是和外界物理隔离的,一般情况下无法通过网络进行黑客攻击。
可是由于工作人员的疏忽, 现在携带资料的U盘被插到了内网的Winows电脑上。
蠕虫没有被突如其来的喜讯冲昏头脑,它非常冷静,立即按照第一幕的情景,入驻了这个内网的电脑。
然后它没有闲着,立刻向内网的其他计算机进行复制,这一次,它使用了两个已知的漏洞 (哪儿有那么多的0day漏洞让你使用呢?):一个和网络打印机相关,一个和网络文件相关。
很快这个内部局域网的所有电脑都被蠕虫感染了,这个蠕虫潜伏得如此之好,根本没人发现它的存在。
蠕虫没有做任何锁定硬盘文件勒索钱财的“小破坏”,对它来说,这太小儿科了,太没技术含量。它根本不屑于去干。它牢记着自己的使命,在这个网络的计算机中耐心寻找一个东西。
终于,它找到了:西门工控软件Step 7
这个蠕虫二话不说,开始利用第5个0day漏洞,这一次的漏洞不属于微软,而是由西门子的工控软件背锅。
西门子的Step7 在工控领域中使用得非常广泛,如果失控,后果不堪设想。
但是这个蠕虫仅仅是把自己复制到了一个可编程的逻辑控制器(PLC)当中,在这里安营扎寨,并没有大肆破坏。
在这里,它开始搜寻两家特定公司的电机,即变频驱动机,这种机器用于工业离心机,通过离心机可以提纯各种化学物质,比如:
铀
蠕虫的正式任务即将拉开帷幕!
4
现在蠕虫完全控制了离心机,它可以为所欲为:把离心机关掉,或者干脆破坏掉---只要让它超过最大速度旋转即可。
但是这个蠕虫病毒可不会这么蛮干,它是最聪明的病毒,它有自己的计划:做好清理,隐藏自己。(来自《三体》的歌者:别抢我的台词)
一旦它控制了工厂的所有离心机, 这个病毒居然进入了休眠!
到了某个时候,它会悄悄唤醒自己,随机挑选一些离心机,修改参数,让这个离心机旋转得慢那么一点点,或者快那么一点点。
于此同时,它还增加离心机中的气压,离心机中的气体是六氟化铀, 压力的增加使得六氟化铀固化,离心机中居然出现了“小小的石头” !很快就会被损坏。
但是,离心机的状态有传感器检测, 一旦有异常,就会触发报警系统。
病毒放出了最后的大杀招,充分展示了自己的天才:它以21秒为周期,记录离心机正常运转时传感器的数据,然后在攻击执行时以固定的循环重复着21秒钟的数据。
它的创造者肯定看过美国大片《生死时速》 :
现在我们知道了,这是一个负责提纯铀的工厂,工厂运转得很好,只是有些电机的声音听起来不太对头, 但是监控数据显示一切正常。
在工厂的控制室,操作人员开始检查系统的运行数据,一切都很正常,他放下心,向上司汇报以后,站起来去倒了一杯咖啡,然后继续工作。
很快,悲催的事情发生了,离心机开始坏掉了,没有规律,非常随机,铀的产量暴跌,工厂无法生产出足够的浓缩铀,接下来也就无法去生产那个威力巨大的武器了。
(图中的红圈即为坏掉的离心机)
工程师们赶紧替换新的离心机,可是崭新的离心机在工厂中安装好,投入使用,没用多久便又坏掉了!
工程师们一遍一遍地检查,就是发现不了问题,他们抓狂了, 这TM到底是怎么回事?!
与此同时,那一只,不,是一群潜伏在PLC中的蠕虫杀手们冷冷地看着这一切,它们走过了异常曲折的道路,用了U盘+多个0day漏洞+数字证书才来到高度设防的工厂,终于完成了创造者交代的的任务。
在不久的将来,它们将拥有一个震惊世界的名字:Stuxnet (震网病毒)!
后记:本文的前两节是我的杜撰,主要想说明蠕虫如何进入物理隔离的内网。Stuxnet是世界上第一个网络武器,也是世界上最复杂的蠕虫病毒,它要攻击的是真正的工业设备:离心机,而离心机被安装在高度设防的工厂中,网络和外界都是物理隔离的。这个病毒不仅利用了社会工程学的手段,还利用了多个0day漏洞,伪造了数字证书, 病毒的编写者不但要精通计算机系统和网络,还要精通工业控制设备和软件,这样的工作绝非单打独斗的黑客可以完成。
我看到震网病毒之后,马上想起了几年前和360公司的某个大牛交流时他说的话:黑客是躲不过的,之所以还没盯上你,主要是你的价值太小了。
参考资料:
https://www.wired.com/images_blogs/threatlevel/2010/11/w32_stuxnet_dossier.pdf
https://www.langner.com/wp-content/uploads/2017/03/to-kill-a-centrifuge.pdf
如需转载,请通过作者微信公众号coderising获取授权。