工控系统安全一直是工业领域的重要议题,随着工业互联网的普及和工控系统的复杂化,面临的安全挑战也日益严峻。为了应对不断变化的威胁,工控系统需要采取一系列的安全措施,其中工控入侵检测系统(Industrial Control System Intrusion Detection System,简称工控IDS)作为重要的安全组成部分,发挥着至关重要的作用。
本文主要介绍工控IDS规则编写及测试优化,以Snort规则为例,因其专业性较强,读懂、编写、测试规则会有一定的门槛。公网上有很多开源的Snort规则,这些规则存在很多问题,如存在错误、时效性、误报等,涉及工控方面的规则比较少,本文为解决此类问题,引入了一个更方便的Web形式的测试系统,依托于这个系统,对工控规则进行高效编写及测试优化。
(二)
工控IDS的作用与原理
工控IDS作为工业控制系统安全的重要组成部分,其作用主要体现在实时监测、检测和响应潜在的网络攻击。当工控IDS检测到潜在威胁或异常行为时,能够触发警报并采取相应的响应措施。这可能包括阻断恶意流量、隔离受感染的设备、记录事件日志等。及时的响应措施可以最小化潜在威胁造成的损害,并帮助系统尽快恢复正常状态。
工控IDS的基本原理是通过建立规则或者使用机器学习等技术,对系统中的网络流量和设备行为进行监测和分析。这些规则可以包含已知攻击特征、异常行为模式等。当系统检测到符合这些规则的行为时,就触发相应的警报。
通过这些作用和基本原理,工控IDS能够在实时性、准确性和自适应性等方面为工控系统提供强大的安全防护。在实际应用中,选择适合特定工控系统的IDS方案,并合理配置规则,是确保系统安全的关键一环。
(三)
工控IDS规则编写测试
在工控IDS中,规则的编写是确保系统能够准确、及时地检测潜在威胁的关键步骤。以下将以Snort规则为例,介绍工控IDS规则的基本编写方法,并重点介绍如何在Windows系统上使用Snort和BASE Web服务进行可视化的便捷高效测试。
3.1
Snort介绍及规则编写
Snort是一个轻量级的网络入侵检测系统,具有实时数据流量分析、网络数据包捕获的能力,通过编写规则文件,能够检测各种不同的攻击方式,对攻击进行实时告警。
Snort规则主要由规则头和规则选项组成。规则头定义了流量匹配的基本条件,包括动作、协议、源和目标地址/端口等元素。规则选项则提供了对规则的进一步定制,包括描述性消息、唯一标识符、版本号以及其他特定于协议或应用层的条件。通过这种结构,Snort能够灵活地配置以检测和响应不同类型的网络流量。
先写一个简单的规则,用于检测任意源IP和源端口UDP流量访问目标端口47808流量:
•alert:规则动作,表示当规则匹配时发出警报。
•udp:协议,指定规则应用于UDP协议流量。
•any any:源IP和端口,表示任意来源的UDP流量。
•any 47808:目标IP和端口,表示匹配流向本地网络47808端口的流量。
•-> :表示流量的方向,还有<>双向操作符(表示双向流量都可以进行匹配)。
•msg: "Detected Access to Port 47808";:规则消息,当规则匹配时显示的警报消息。
•sid: 1000001;:规则唯一标识符,用于标记规则的ID。
UDP 47808端口一般为BACnet协议默认端口,BACnet是用于智能建筑的通信协议,是国际标准化组织(ISO)、美国国家标准协会(ANSI)及美国采暖、制冷与空调工程师学会(ASHRAE)定义的通信协议。可用在暖通空调系统(HVAC,包括暖气、通风、空气调节),也可以用在照明控制、门禁系统、火警侦测系统及其相关设备。
BACnet读属性数据包示例:
修改上面的规则,写一个检测BACnet未授权读取属性规则:
如在测试环境,规则可改为如下格式:
3.2
Snort配置及规则测试
注:相关脚本代码可在公众号留言,联系管理员获取。
环境准备如下:
测试机1:用于测试 Snort 规则触发情况,其它 Windows 系统版本亦可。
测试机2:安装配置 Snort,运行 BACnet模拟器,其它 Windows 系统版本亦可。
脚本1:用于扫描探测指定网段BACnet设备并获取设备信息及相关点位数据。
脚本2:用于读取或修改指定BACnet设备指定点位信息值。
脚本3:使用Python编写的BACnet设备模拟器。
测试机2启动BACnet模拟器:
测试机1扫描获取BACnet设备信息(便于后续进行针对性测试):
可以看到IP为192.168.1.214存在一个BACnet设备,设备名称为:BAC0-SERVISYS,设备ID为:214。
注:以下配置项在测试机2上操作。
1.$BACNET_CLIENT 配置
修改D:\Snort\Snort\etc\snort.conf配置文件,增加如下内容(192.168.1.0/24为BACnet客户端网段):
2.配置规则文件路径
修改D:\Snort\Snort\etc\snort.conf配置文件,增加修改如下内容:
3.新增规则文件
创建D:\Snort\Snort\rules\local.rules文件,并将上面的规则内容写入到文件中:
1.测试机2查看网卡列表
Index 1 为待测试设备网卡。
Tips:低版本WinPcap或NPcap不显示具体的网卡设备名称,可借助WireShark Manage Interfaces功能结合Snort网卡显示列表确定具体的待测网卡。
2.测试机2命令行启动Snort并在控制台监控告警信息
-i 1:指定网卡编号1
-A console:将报警信息显示到控制台(命令终端)
-c:指定snort.conf配置文件
-l:指定日志目录
除此之外还有以下命令参数可供测试:
3.测试机1读取BACnet设备属性值
测试机1执行脚本2,在192.168.4.0/24网段读取测试机2上面的BACnet设备属性,同时在测试机2上观察Snort告警情况,可以看到触发规则告警:
从告警信息中可以看到是192.168.4.163:13579端口使用UDP协议访问了192.168.1.214:47808端口,规则中!$BACNET_CLIENT定义非192.168.1.0/24网段访问且符合BACnet请求头和读操作,即触发告警信息,所以触发了此告警。
3.3
适用于规则较多情况,可在Web端检索告警信息,查看并导出相关PCAP数据包等。
测试环境调整如下:
BASE:基于Web的Snort探针和规则管理系统。
测试机2修改Snort配置文件支持BASE系统:
在安装配置好AppServ+BASE环境情况下,修改Snort配置文件使其支持BASE系统,修改D:\Snort\Snort\etc\snort.conf,增加如下配置:
配置项与安装配置BASE系统时使用的数据库配置一致。
在测试机2重新启动Snort,使用如下命令:
重复前面在测试机1的操作步骤,观察告警情况,执行读取BACnet属性操作后,BASE Web系统首页告警情况如下:
告警信息总览:
查看单条告警信息:
从告警详情页面可以看到具体触发的数据包信息,并且可下载告警数据包数据便于后续分析或重放测试。
3.4
总结
通过Snort规则的编写学习,及在Windows环境下配置Snort测试环境和Web可视化系统,可在日常工作中高效分析测试Snort规则,编写优质的Snort规则。实践出真知。
(四)
工控IDS规则优化与维护
工控IDS规则的优化与维护是确保系统安全的关键环节。
优化包括对网络流量进行深度分析,精炼规则以提高检测准确性,并考虑特定工控协议和设备的定制化规则设计。
维护方面,及时更新规则库以适应新威胁,监测系统性能,防止规则冲突和误报,同时对工控网络拓扑和设备变更进行持续跟踪,确保规则的有效性和适用性。
此外,建立规则变更日志与审计机制,跟踪规则调整的原因与效果,形成经验总结,为工控IDS的优化提供可持续支持,提高检测效能与系统稳定性。
以上策略有助于保持工控IDS规则的有效性,并在面临新威胁时及时作出调整,确保工控系统持续得到有效保护。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!