前言
MAC1100 PLC可编程逻辑控制器(PLC)是大连计控(DCCE)可编程逻辑控制器(PLC)系列中的一款产品。
早在2018年6月,CNVD官网通报了DCCE MAC1100 PLC存在任意程序覆盖漏洞 ,其编号为CNVD-2018-19112。DCCE MAC1100 PLC存在任意程序覆盖漏洞,漏洞源于MAC1100 PLC可编程逻辑控制器向PLC下载程序时未验证相关权限,攻击者可通过远程下载程序的数据包,利用漏洞覆盖任意程序。
通过对DCCE PLC的学习,成功复现了此漏洞,笔者将其记录下来以供大家学习与交流~
一、PLC编程与工程
PLC编程是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或生产过程。可编程序控制器及其有关设备,都应按易于使工业控制系统形成一个整体,易于扩充其功能的原则设计。
简言之,对于PLC工程可以理解为:PLC在程序执行阶段按用户程序指令存放的先后顺序扫描执行每条指令,经相应的运算和处理后,其结果再写入输出状态寄存器中,输出状态寄存器中所有的内容随着程序的执行而改变。
编写PLC工程所用语言大概有五种,分别是梯形图语言、指令表语言、功能模块图语言、顺序功能流程图语言和结构文本化语言。
二、漏洞复现
2.1 环境需求
此次实验笔者用到了Mac 1100PLC、PLC_Config编程软件、PLC工程示例等。
2.2 复现过程
1、下载一个空程序并获取其数据包
首先下载一个空的PLC工程到PLC,并将该下载过程进行Wireshark抓包,其目的是获取PLC下载空工程的流量进行重放。
声明:为了减少PC机与PLC之间数据包的交互,用户可以在下载程序时根据需求进行网络注释、子程序指令注释、带符号变量的下载。
通过上述Wireshark抓取到的数据包,可以看到MAIN关键字,即一个PLC工程/空工程的入口函数,与C语言编程类似。
PLC工程下载流程 (1)将PLC控制器切换为STOP状态; (2)清空PLC原有工程; (3)写入新下载的工程; (4)重启PLC
CPU的状态为RUN; (5)将编程软件切换为监视模式;
2、下载正常工作的PLC程序至PLC
为了复现此实验,需要下载一段正常工作的PLC工程到PLC中,而Dcce Mac 1100的编程软件PLC_Config支持S7-200工程的导入。因此,这里直接在CSDN下载了S7-200的工程示例(以剪板机控制工程为例),下载的s7-200工程为.mwp格式,此处需要用到“STEP-7MicroWIN V4.0 SP9完整版”软件将.mwp导出为PLC_Config支持的.awl格式。