技术分享

来自Kcon 2015的会议总结(Exploit PLC on the internet)

关于Kcon 2015

Exploit PLC on the internet是Kcon 2015的最后一个议题,其实我最终想阐述的问题是用户直接将PLC接入到互联网是非常危险的,针对私有协议的探测可以有效的发现连接到互联网的工控设备,并且这些设备是可以直接通过软件进行远程管理与配置的,当然通过对协议的了解也可以轻松的帮助我们构建Fuzz测试工具,并对设备的功能进行测试。

关于Kcon 2015的互动展示区

为了验证PLC接入互联网后会产生的各种风险,在余弦的建议和赞助下我们使用S7-300(313C)的PLC构建了一个简单的流水灯逻辑场景,并在Kcon会场外设置了工控Hack的环节,在该环节中主要通过如下三种黑盒手段验证了可能带来的风险:
1、通过S7协议对CPU内不同数据区的点值进行Fuzz,从而达到间接达到修改PLC内部程序逻辑。
2、通过S7协议替换CPU内程序的MC7字节码,从而直接达到修改PLC内部程序逻辑。
3、通过S7协议对CPU的工作状态(RUN/STOP)进行操作,从而直接达到PLC程序的停止运行。

关于将PLC直接连接到互联网的情况

用户将PLC直接连接到互联网往往来自于一些现场实际的需求。通过互联网能够进行跨地域的远程数据传输与远程设备管理,可以极大的方便用户监控数据状态和管理。用户在实现功能时往往也是最直接通过路由器的端口映射功能将PLC的特定通信端口发布在公网,如果路由器上没有设置访问控制的ACL,这将直接导致所有人可以从互联网操作到设备。

如下图,用户往往直接在路由器上将特定协议的端口映射到公网,这是致使被网络空间搜索引擎探测到的重要原因。

route_set

 

 

 

 

如下图,我们在验证一些数据时确实能发现实际的风险问题。

video_1

关于扫描与发现

如今针对互联网的全网探测扫描越来越多,扫描识别的方式都基于设备与外部通信的以太网TCP/UDP通信协议,如Modbus、IEC104、DNP3、S7协议、FINS协议等。无状态扫描的出现将加快全网探测的速度,如果用户还是使用了传统的路由器端口映射的方式来实现远程传输和管理,被扫描识别的几率是非常高的。

如下图,是对TCP/102端口的西门子S7协议的一个图形化统计。

ics_s7_map

关于利用方式

PLC内部往往存在一些有意思功能,比如自定义Socket通信的功能。在8月的blackhat的议题中,便有使用S7的通信功能块在特定s7-300的plc上构建了一个socks5协议,这种利用方式的出现直接可以让攻击者经由暴露在公网的plc直接攻击内网的其他服务,绕过网络边界。

测试工具的构建

在本次议题中我提到了基于西门子S7协议实现的协议仿真工具和Fuzz测试工具。利用协议仿真技术我们可以实现一个低交互的蜜罐,通过部署到公网的VPS,用于收集主动扫描S7协议的IP和具体操作,辅助我们发现新的扫描识别手段和攻击来源。另外也可以根据S7-300 PLC的特性通过S7协议构建用于Fuzz数据变量的测试工具。

议题PPT

目前Kcon 2015议题的PPT都已公开(Github)
PDF下载:Exploit PLC on the internet

展望

我们期待用户在设计解决方案时考虑通信安全因素,使用VPN或访问控制、以及针对工控协议深度解析的防火墙等解决方案,从而避免由信息安全带来的风险和问题。

About Z-0ne

Leave a Reply

Your email address will not be published. Required fields are marked *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据