1
概 述
AB PLC,即由Allen-Bradley(罗克韦尔自动化公司旗下的品牌)生产的可编程逻辑控制器(PLC),广泛应用于自动化控制系统中,尤其是在工业自动化领域。作为全球自动化设备制造的领导者之一,Allen-Bradley PLC 凭借其卓越的性能、可靠性和易用性,成为许多大型工厂、生产线、机械设备等工业自动化应用的首选。
EtherNet/IP和 CIP是工业自动化领域常用的协议,它们由罗克韦尔自动化公司及其前身 Allen-Bradley 推广和发展,特别适用于实时数据交换、设备控制以及自动化系统中的设备间通讯。EtherNet/IP 是基于标准的 Ethernet 协议(即 TCP/IP 协议族)之上的工业协议,专为工业控制网络设计,用于高效、实时的数据传输。它在 TCP/IP 协议之上定义了应用层的通信规范,允许设备(如PLC、传感器、执行器等)在工业网络中进行数据交换。CIP即 Common Industrial Protocol,是一种工业协议,用于设备间的通讯,确保各类工业设备的互联互通。CIP 为 EtherNet/IP 提供了应用层的定义,使得设备能够进行标准化的通讯和数据交换。
网上公开的CIP协议资料不多,我们结合自身研究,对AB PLC从硬件、协议、上位机逆向等不同角度进行了分析,最后开发了攻击脚本用于演示。
2
分 析
2.1.硬件分析
AB-PLC种类繁多,主要包含MicroLogix、CompactLogix、ControlLogix三个系列,分别对应小、中、大型PLC,形态不同,使用场景也各异。对于实验研究,通常选用小型PLC,本文选择的是Micro850。
Micro850外观如下图所示,设备包含一个网口、串口、USB接口以及一些插件模块。
Micro850外观
对设备拆解后,可以看到PLC模块化设计明显,由上下两块板相连,底板主要负责处理电源和一些I/O控制等。
核心功能在上层主控板中,从正面能看到有扩展模块插槽、存储芯片(4M大小的W29 Nor Flash)以及各种通信接口等。
拆解-正面(Micro850)
背面PCB上有连接底板的插槽,还包括MCU及SDRAM、FPGA等各种控制芯片。
拆解-背面(Micro850)
在对设备初步分析后,接下来我们说说PLC的通信协议。
2.2.协议分析
在我们研究的众多PLC中,国外PLC常见的协议包括S7(西门子家族)、Modbus、UMAS协议(施耐德)等,国产PLC用Modbus较多,而AB PLC使用的是CIP协议。
2.2.1.CIP与EtherNet/IP
EtherNet/IP是一种将 CIP协议封装在以太网中的通信协议,说CIP是EtherNet/IP最重要的一部分也不为过。它通过对 CIP 帧进行封装,实现了在以太网上传输 CIP 数据。定义了一套面向对象的通信模型。在CIP中,每个设备被视为一组对象的集合,每个对象都有其属性、服务和行为。
CIP协议通常监听的端口是44818,Wireshark已支持解析该协议。
2.2.2.通信流程
整个通信过程大概分为如下几个阶段:TCP建立连接,创建会话Session,创建CIP连接管理,CIP连接监听,CIP连接断开,TCP断开。
一个会话开始到结束大概会经过如下过程,首先通过TCP三次握手建立连接,当TCP连接建立后会通过EtherNet/IP协议会发送一个创建Session请求包,服务端会返回一个相应数据包。当会话建立后客户端会发送一个CIP forward Open请求会话,服务端响应。CIP建立完成后即可进行相应的命令、数据等信号传输。传输完成后客户端发送forward Close请求,最后断开TCP连接完成会话。
Wireshark捕获的流量如下图所示:
EtherNet/IP协议头部结构:头部包括指令,长度信息,会话句柄,状态等信息。
Command specific Data部分包括接口句柄,Item数据项等信息。
Wireshark查看数据包如下:
2.2.3.常见字段含义
2.2.4.CIP部分对象
2.2.5.CIP部分服务
2.3.上位机逆向分析
通过对CIP协议深入研究后发现大多厂·商都会扩展自己的CIP协议,例如Service、Class不在规范里,像AB就会使用0x4D的Service,0x350的Class。
因此要研究协议特定功能码含义,需要从具体代码入手。通常可以从PLC固件和上位机软件(编程软件)入手,从分析成本来看显然上位机更优。
Micro850使用的是Connected Components Workbench,以下简称CCW,可以看到是VisualStudio风格的UI,基于WPF .NET框架开发,界面如图所示:
鉴于篇幅,本文主要对密码认证部分协议进行分析阐述,认证时输入密码如图所示:
逆向分析前,首选找到CCW的主程序CCW.Shell.exe,通过Dnspy对其静态分析,由于代码量比较大,不容易定位关键函数,于是另辟蹊径。简单研究后发现,与PLC建立连接的是RSLINX.EXE,而非主程序。
使用Windbg附加RSLINX.EXE进程,对send函数下断点,点击连接PLC后程序断下,此时主程序处于阻塞状态说明两者存在进程通信。
再次打开Windbg(32位)附加CCW.Shell.exe进程,先通过对Native层进行调试跟踪,切换Wow64后查看栈如图所示,包含大量.NET的JIT代码:
于是使用.loadby sos clr加载clr插件(注:这里必须使用32位Windbg),再切换到0号线程,最后使用!ClrStack查看.NET虚拟机栈如下所示:
显然RA.CCW.Micro800Controller.ConnectedController.ConnectToDevice()就是我们需要重点关注的函数。
由于程序没有混淆和反调试,省去一些工作量。所以直接使用DnsSpy附加CCW.Shell.exe进程,通过进一步调试和静态分析,能够定位到如下关键代码:
CreateChallengeKey函数用于创建ChallengeKey,显然该AB PLC使用了Challenge-Response挑战响应认证协议。
根据Capability的值选择使用MD5还是SHA256 Hash算法。
再结合Attribute的值来构建Challenge值,由于篇幅原因,一些细节不再赘述,感兴趣的读者可以自行分析。
最后对认证过程进行总结如图:
3
攻击演示
对于AB PLC,存在运行模式和编程模式(停止状态),可以相互切换,我们分析了这部分协议,再结合上文的密码认证算法,最终实现了对PLC的启停控制。
值得注意是如果攻击者尝试爆破密码,认证失败3次后PLC会进入锁定状态,10分钟后解除,因此常规爆破方式不可行。
最后我们测试了Micro850和Micro820,通过脚本成功对PLC实施攻击。如下图所示,当PLC停止时RUN灯会闪烁。
4
总 结
AB PLC在工业领域广泛应用,是各制造行业重要关键基础设备,通过资产测绘在互联网发现近万个资产,数量较大。就目前研究而言PLC协议方面存在薄弱之处,攻击者可以通过一定的攻击方式对PLC进行攻击,可导致PLC控制的硬件设备故障,造成严重后果。因此我们应该培养安全防范意识,对设备进行定期安全检查,减少被攻击的风险。
珞安科技
Luo An Ke Ji
北京珞安科技有限责任公司(简称:珞安科技)成立于2016年,是专注工业网络空间安全的创新型高科技企业和国家专精特新“小巨人”企业,并于2022年行业内率先通过CMMI5级认证。
珞安科技拥有业内顶尖工控安全专家团队、工业网络空间安全研究实验室和四大研发中心,坚持自主研发和技术创新,以零信任理念和体系化思想为指导,打造“实战化、易部署、易维护”工控网络安全产品体系,覆盖工控安全、业务安全和工业互联网安全,构建了全方位的工业网络空间安全防护体系。
依托强大的技术原厂商实力,积极开展安全服务和安全运营,业务遍布20多个行业的2000余家工业企业。在全国设有20+分子公司及办事处,提供7*24h安全应急服务响应,保障国家关键信息基础设施安全稳定运行。