阅读: 3
一、前言
近年来,国内外的工控安全事件频出,越来越多国家级APT组织的攻击目标开始转向工控领域,检测工控系统中的入侵行为具有重大意义。本文从实战出发,研究对施耐德的启停攻击过程,搭建开源Snort框架来完成对施耐德M580的攻击检测。
二、Snort框架
Snort是一款优秀的开源入侵检测系统,在IT系统中已经有广泛应用,该框架的优点如下:
- 开源而且免费,相对于昂贵的工控安全设备来说是非常合适的。
- 支持插件扩展,用户可以编写工控协议插件来支持工控协议的解析。
- 多平台支持,不仅支持linux,还支持windows下的部署。
- 友好的规则语法,用户可以很轻松地使用snort规则语法来编写检测规则来检测对应的入侵行为。
- 活跃的开源社区,用户可以很容易获取到大量的snort规则集合,这些规则集合一直在不断更新和丰富。
Snort官网地址如下所示:https://www.snort.org/
三、攻击M580
为了编写出检测规则,我们先从最简单的启停攻击着手。顾名思义,启停攻击就是直接对PLC进行启动和停止操作。
使用Unity Pro对该PLC进行启动/停止操作:
众所周知,UMAS是基于modbus的90功能码的,所以下面描述略过了这部分的数据包头部。
启动PLC数据报文如下,UMAS功能码为0x40:
停止PLC数据报文如下,UMAS功能码为0x41:
请求数据包格式如下所示:
报文字段 | 长度(字节) | 描述 |
sessionkey | 1 | 会话密钥 |
functioncode | 1 | UMAS的协议功能码 |
data | 变长 | 协议数据,不同功能码有不同的数据部分 |
攻击流程如下:
先通过0x10获取session key,再通过0x40/0x41对PLC进行操作,为了入侵让检测系统检测这一行为,我们关注点是在操作这一部分,只要功能码能匹配上,即可判断是对应的行为。
四、攻击检测
4.1 测试规则
在虚拟机中安装snort工具,安装目录为C:\Snort,首先在C:\Snort\rules文件下新建一个规则文件”umas.rules”,写入检测规则并保存:
并在配置文件C:\Snort\etc\snort.conf文件启用该规则,删除掉其他规则防止干扰,如下所示:
运行snort对包含启停的umas.pcap进行检测,看是否能检测到攻击流量:
Snort.exe -c c:\Snort\etc\snort.conf -r umas.pcap -l c:\Snort\log
参数解释:-c:配置文件路径 -r: pcap数据包路径 -l: 输出日志文件路径
打开c:\Snort\log下的告警日志文件:
内容如下,说明成功命中了umas.rules的规则:
4.2 检测攻击
在上面我们已经测试了编写的规则已经可以检测流量中针对M580的启停操作,当然,我们直接可以从网卡中抓取流量,实时检测攻击。
运行:snort -W
选择网卡4,运行如下命令开始启动IDS检测流量:
Snort.exe -c c:\Snort\etc\snort.conf -l c:\Snort\log -I 4
五、总结
本文通过编写Snort规则来完成对施耐德M580的攻击检测,当然网上的安全研究人员也公开了大量的工控相关的Snort规则,感兴趣的用户可以自行下载。Snort不仅可以检测相关恶意流量,还可以联动防火墙还可以直接阻断恶意行为,具体操作方法可以自行探究。
版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。