工控IDS规则构建及验证实战

admin 2024年1月9日10:28:28评论15 views字数 3974阅读13分14秒阅读模式

      (一)

前言

工控系统安全一直是工业领域的重要议题,随着工业互联网的普及和工控系统的复杂化,面临的安全挑战也日益严峻。为了应对不断变化的威胁,工控系统需要采取一系列的安全措施,其中工控入侵检测系统(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介绍及规则编写

 

3.1.1 Snort 介绍

Snort是一个轻量级的网络入侵检测系统,具有实时数据流量分析、网络数据包捕获的能力,通过编写规则文件,能够检测各种不同的攻击方式,对攻击进行实时告警。

 

Snort规则主要由规则头和规则选项组成。规则头定义了流量匹配的基本条件,包括动作、协议、源和目标地址/端口等元素。规则选项则提供了对规则的进一步定制,包括描述性消息、唯一标识符、版本号以及其他特定于协议或应用层的条件。通过这种结构,Snort能够灵活地配置以检测和响应不同类型的网络流量。

 

工控IDS规则构建及验证实战

3.1.2 规则编写

先写一个简单的规则,用于检测任意源IP和源端口UDP流量访问目标端口47808流量:

 

工控IDS规则构建及验证实战

alert规则动作,表示当规则匹配时发出警报。

udp协议,指定规则应用于UDP协议流量。

any any源IP和端口,表示任意来源的UDP流量。

any 47808目标IP和端口,表示匹配流向本地网络47808端口的流量。

-> 表示流量的方向,还有<>双向操作符(表示双向流量都可以进行匹配)。

msg: "Detected Access to Port 47808";:规则消息,当规则匹配时显示的警报消息。

sid: 1000001;:规则唯一标识符,用于标记规则的ID。

rev: 1; :规则版本,默认使用1,如果规则有调整,可以增加1。

3.1.3 BACnet协议

UDP 47808端口一般为BACnet协议默认端口,BACnet是用于智能建筑的通信协议,是国际标准化组织(ISO)、美国国家标准协会(ANSI)及美国采暖、制冷与空调工程师学会(ASHRAE)定义的通信协议。可用在暖通空调系统(HVAC,包括暖气、通风、空气调节),也可以用在照明控制、门禁系统、火警侦测系统及其相关设备。

 

BACnet读属性数据包示例:

 

工控IDS规则构建及验证实战    

3.1.4 规则改进

 

修改上面的规则,写一个检测BACnet未授权读取属性规则:

 

工控IDS规则构建及验证实战

!$BACNET_CLIENT不是Snort配置文件中定义的BACNET_CLIENT源IP范围的任何地址,!$BACNET_CLIENT表示取反。BACNET_CLIENT需要先在snort.conf配置文件中定义。
content: "|81|"; depth: 1;:从数据包开头匹配包含十六进制字符串“81”的内容,深度为1个字节,offset默认为0,此处省略offset。此规则项用于匹配BACnet请求头第1个字节是否为“81”。
content: "|0c|"; offset: 10; depth: 1;:从数据包偏移量10的位置开始,匹配包含十六进制字符串“0c”的内容,深度为1个字节。offset和depth都为content选项的修饰符。此规则项用于匹配数据包第10个字节是否为“0c”,即是否为BACnet读属性操作。

如在测试环境,规则可改为如下格式:

 

工控IDS规则构建及验证实战

3.2

Snort配置及规则测试

  

3.2.1 环境准备

 

注:相关脚本代码可在公众号留言,联系管理员获取。

 

环境准备如下:

 

工控IDS规则构建及验证实战

测试机1:用于测试 Snort 规则触发情况,其它 Windows 系统版本亦可。

 

测试机2:安装配置 Snort,运行 BACnet模拟器,其它 Windows 系统版本亦可。

 

脚本1:用于扫描探测指定网段BACnet设备并获取设备信息及相关点位数据。

 

脚本2:用于读取或修改指定BACnet设备指定点位信息值。

 

脚本3:使用Python编写的BACnet设备模拟器。

 

测试机2启动BACnet模拟器:

 

工控IDS规则构建及验证实战

测试机1扫描获取BACnet设备信息(便于后续进行针对性测试):

 

工控IDS规则构建及验证实战

工控IDS规则构建及验证实战

可以看到IP为192.168.1.214存在一个BACnet设备,设备名称为:BAC0-SERVISYS,设备ID为:214。

 

3.2.2 规则配置

注:以下配置项在测试机2上操作。

 

1.$BACNET_CLIENT 配置

 

修改D:SnortSnortetcsnort.conf配置文件,增加如下内容(192.168.1.0/24为BACnet客户端网段):

 

工控IDS规则构建及验证实战

2.配置规则文件路径

 

修改D:SnortSnortetcsnort.conf配置文件,增加修改如下内容:

 

工控IDS规则构建及验证实战

3.新增规则文件

 

创建D:SnortSnortruleslocal.rules文件,并将上面的规则内容写入到文件中:

 

工控IDS规则构建及验证实战

3.2.3 规则测试

1.测试机2查看网卡列表

 

工控IDS规则构建及验证实战

工控IDS规则构建及验证实战

Index 1 为待测试设备网卡。

 

Tips:低版本WinPcap或NPcap不显示具体的网卡设备名称,可借助WireShark Manage Interfaces功能结合Snort网卡显示列表确定具体的待测网卡。

 

2.测试机2命令行启动Snort并在控制台监控告警信息

 

工控IDS规则构建及验证实战

-i 1:指定网卡编号1

 

 -A console将报警信息显示到控制台(命令终端)

 

-c指定snort.conf配置文件

 

-l指定日志目录

 

除此之外还有以下命令参数可供测试:

 

工控IDS规则构建及验证实战

3.测试机1读取BACnet设备属性值

测试机1执行脚本2,在192.168.4.0/24网段读取测试机2上面的BACnet设备属性,同时在测试机2上观察Snort告警情况,可以看到触发规则告警:

工控IDS规则构建及验证实战

从告警信息中可以看到是192.168.4.163:13579端口使用UDP协议访问了192.168.1.214:47808端口,规则中!$BACNET_CLIENT定义非192.168.1.0/24网段访问且符合BACnet请求头和读操作,即触发告警信息,所以触发了此告警。

 

3.3

Snort+BASE Web可视化配置测试

适用于规则较多情况,可在Web端检索告警信息,查看并导出相关PCAP数据包等。

 

3.3.1 环境准备

测试环境调整如下:

 

工控IDS规则构建及验证实战   
AppServ:PHP 网页架站工具组合包,包含Apache、PHP、MySQL、phpMyAdmin等软件。

 

BASE:基于Web的Snort探针和规则管理系统。

 

测试机2修改Snort配置文件支持BASE系统:

 

在安装配置好AppServ+BASE环境情况下,修改Snort配置文件使其支持BASE系统,修改D:SnortSnortetcsnort.conf,增加如下配置:

 

工控IDS规则构建及验证实战

配置项与安装配置BASE系统时使用的数据库配置一致。

 

3.3.2 启动Snort

在测试机2重新启动Snort,使用如下命令:

 

工控IDS规则构建及验证实战

3.3.3 告警测试

重复前面在测试机1的操作步骤,观察告警情况,执行读取BACnet属性操作后,BASE Web系统首页告警情况如下:

 

工控IDS规则构建及验证实战    

告警信息总览:

 

工控IDS规则构建及验证实战

查看单条告警信息:

 

工控IDS规则构建及验证实战

从告警详情页面可以看到具体触发的数据包信息,并且可下载告警数据包数据便于后续分析或重放测试。

 

工控IDS规则构建及验证实战

3.4

总结

  

通过Snort规则的编写学习,及在Windows环境下配置Snort测试环境和Web可视化系统,可在日常工作中高效分析测试Snort规则,编写优质的Snort规则。实践出真知。

 

(四)

工控IDS规则优化与维护

工控IDS规则的优化与维护是确保系统安全的关键环节。

 

优化包括对网络流量进行深度分析,精炼规则以提高检测准确性,并考虑特定工控协议和设备的定制化规则设计。

 

维护方面,及时更新规则库以适应新威胁,监测系统性能,防止规则冲突和误报,同时对工控网络拓扑和设备变更进行持续跟踪,确保规则的有效性和适用性。

 

此外,建立规则变更日志与审计机制,跟踪规则调整的原因与效果,形成经验总结,为工控IDS的优化提供可持续支持,提高检测效能与系统稳定性。

 

以上策略有助于保持工控IDS规则的有效性,并在面临新威胁时及时作出调整,确保工控系统持续得到有效保护。

 

原文始发于微信公众号(威努特工控安全):工控IDS规则构建及验证实战

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月9日10:28:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   工控IDS规则构建及验证实战http://cn-sec.com/archives/2377588.html

发表评论

匿名网友 填写信息