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

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

      (一)





前言


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

北京威努特技术有限公司(简称:威努特)是国内工控安全行业领军者,是中国国有资本风险投资基金旗下企业。凭借卓越的技术创新能力成为全球六家荣获国际自动化协会ISASecure 认证企业之一和首批国家级专精特新“小巨人”企业。

威努特依托率先独创的工业网络“白环境”核心技术理念,以自主研发的全系列工控安全产品为基础,为电力、轨道交通、石油石化、市政、烟草、智能制造、军工等国家重要行业用户提供全生命周期纵深防御解决方案和专业化的安全服务,迄今已为国内及“一带一路”沿线国家的6000多家行业客户实现了业务安全合规运行。

作为中国工控安全国家队,威努特积极推动产业集群建设构建生态圈发展,牵头和参与工控安全领域国家、行业标准制定和重大活动网络安全保障工作,始终以保护我国关键信息基础设施安全为己任,致力成为建设网络强国的中坚力量!

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

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

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

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

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

渠道合作咨询   田先生 15611262709

稿件合作   微信:shushu12121   

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

版权声明:admin 发表于 2024年1月9日 上午8:04。
转载请注明:工控IDS规则构建及验证实战 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...