基于B/S架构的工业主机卫士软件设计与实现

2022-02-14 12:13任军锋杨立源
自动化仪表 2022年1期
关键词:白名单网卡卫士

任军锋,杨立源

(上海工业自动化仪表研究院有限公司,上海 200233)

0 引言

随着“中国制造2025”行动纲领的推出和近年工业互联网的迅速发展,全球各地爆发的工业互联网安全事故让越来越多的人意识到,工业生产环境不再是信息孤岛,工业生产环境的系统安全防护已经迫在眉睫。工业生产环境一旦遭到攻击,造成的损失往往是巨大的。伊朗核电站遭受的震网病毒和富士康工厂遭受的勒索病毒,都是很好的例证。在整个工业互联网安全防御中,主机的安全防护是工业互联网的最后一道防线。

工业生产环境的主机系统中,运行软件和运行环境相对固定,但是未知软件程序的威胁却是不可预知的。因此,工业现场的主机不适用黑名单规则,而适用白名单规则[1]。以当前安全的基础软件环境为基准点,分别按照可执行的控制文件(包含COM、EXE、OCX、DLL文件)、网卡设备和U盘设备生成多组白名单规则。采用国密SM3算法生成各条白名单规则的指纹信息。主机卫士软件将实时监控本机系统运行情况,根据配置的白名单规则,实时对运行过程中产生的进程事件、U盘插拔事件、网卡启用/禁用事件进行行为审计,并对不在白名单内的行为事件生成实时告警信息。同时,主机卫士支持切换审计和保护两种模式。审计模式下,系统对白名单规则外的事件只生成告警信息,而不会阻断该行为。保护模式下,系统对白名单规则外的事件既阻断该事件行为,又生成阻断的告警信息。

1 需求分析和技术选择

1.1 需求分析

工业主机卫士的主要功能是基于白名单规则对可执行文件、U盘和网卡等进行实时监控。该产品支持审计和保护两种模式。用户可以通过Web页面对指定的、已安装主机卫士的主机设置白名单规则;通过切换主机卫士模式,可在Web页面查看到实时的告警事件和阻断事件信息。该需求需要分六步实现。①主机卫士与管理平台通信接口服务:选择性能健壮,耦合度低,简洁易用。②浏览器/服务器(browser/server,B/S)分布式架构设计的扩展性:采用Web层、中间件层、主机层三层架构。③白名单规则的设计。④消息应用程序编程接口(application programming interface,API)结构流程设计:消息收发必须经过确认,设置快、慢消息队列,以防止消息拥堵。⑤阻断进程和U盘网卡外设的技术方式:选择Windows API Hook技术,开发便捷,易于扩展,且能在真正运行前阻断。⑥数据存储:选择轻量、便捷存储的数据库,以节约主机资源。

1.2 技术选择

与其他缓存产品相比,Redis消息中间件有以下特点:①支持数据持久化;②支持key-value、列表、集合结构的存储;③支持数据备份及主从模式部署。主机卫士软件系统和管理平台可以自由设计消息结构,通过该Redis消息中间件传递数据,降低了系统和平台的端耦合度。主机卫士软件系统和管理平台的接口开发都不受平台和开发语言的影响,提高了程序的兼容性和可用性[2]。

1.2.1 国密SM3加密算法

SM3加密算法是我国自主设计的密码杂凑算法,适用于商用密码中数字签名和验证消息认证码的生成与验证,以及随机数的生成,可满足多种密码应用的安全需求[3]。在白名单规则的指纹信息生成部分,主机卫士采用了SM3算法,安全性优于MD5和SHA-1算法。

SQLite数据库是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的结构化查询语言(structured query language,SQL)数据库引擎。它具有不依赖服务、无需安装、跨平台、支持标准SQL语句等特点,是轻量级数据库。主机卫士软件中主要存储白名单规则信息和模式配置信息。SQLite数据库完全能满足需求且使用便捷[4]。

1.2.2 Windows API Hook技术

Hook技术是对Windows 的 API 进行拦截的技术,可以截获系统中的消息流,如键盘和鼠标输入等。根据处理消息范围的不同,拦截技术可分为Local Hook和Remote Hook。①Local Hook仅能阻断属于自身进程的事件,使用范围有限[5]。②Remote Hook不仅可以阻断自身进程事件,还可以阻断其他进程事件。根据主机卫士白名单外进程事件阻断的需求,Remote Hook更适用[6]。远线程插入技术可以通过动态库的方式实现。Windows系统中新进程的创建都会调用CreateProces()函数,通过写一个新的函数CreateProcessNew()注入进程,替换原来调用的CreateProcess()函数在进程内存中的位置。如果可执行文件在白名单内,则CreateProcessNew()函数正常调用CreateProcess()函数;反之,则阻止调用Create Process()函数,以达到阻断创建新进程的目的[7]。

2 软件架构设计与实现

2.1 系统架构图

系统架构如图1所示。整个系统分为Web业务层、中间件服务层和主机群层。Web服务器通过Redis通道将控制指令和规则策略下发到指定的主机节点。主机节点在收到指令和规则策略后,配置主机安全策略,更新本地主机数据库信息。主机实时监控本机运行过中的风险事件和行为,上传消息至Redis消息中间件。Web业务层从中间件服务层获取相关数据信息后,实时存入主机卫士管理平台数据库(data base,DB)。用户可以通过终端Web浏览器实时查看各主机节点的安全事件详情。

图1 系统架构图Fig.1 System structure diagram

以上架构的层次设计可以保证程序有较好的扩展性和跨平台兼容性。当主机节点数据量增加时,只需增加相应的Web服务器即可满足一般的扩展需求。中间件服务层的设计也让系统具备跨平台兼容性。例如:主机卫士管理平台可以支持Linux和Windows这两种操作系统,但是主机卫士软件系统不需要因为管理平台操作系统的不一样而去开发、维护多套程序。软件系统与管理平台的通信只与Redis消息中间件接口相关,节约了开发和维护成本。

2.2 通信接口流程图

通信接口流程如图2所示。由图2可知,主机卫士中有独立的线程处理数据上传和数据接收。对于不同的业务数据,处理线程和队列分为快、慢两种。这样既可以保证配置规则及时下发、及时响应需要快速响应的消息,又可以保证大批量实时告警信息的正常上传。多线程和队列的配合使用,大大提高了程序各环节处理数据的并发能力,优化了程序性能。

图2 通信接口流程图Fig.2 Flowchart of communication interface

2.3 技术要点分析

2.3.1 接口通信设计

接口通信设计满足消息中转传输功能要求,同时接口不依赖平台和开发语言,具有持久化特点。例如:主机卫士软件系统和管理平台的通信接口部分,主要使用Redis消息中间件,上传数据告警信息,下发管理平台配置信息。确定接口后,主机卫士软件系统和管理平台可以并行开发。主机卫士软件系统和管理平台可以各自专注于自身业务功能,而无需关注通信层问题。而且Redis具有持久化特点,即使管理平台临时发生故障,软件系统上传的数据也不会丢失,从而保证了数据的完整性。

2.3.2 B/S分布式架构

设计系统时要考虑实际使用场景和后期可扩展性。传统的主机卫士是单机版的装机软件。对于主机分散的工厂生产环境,没有统一的管理平台,只能靠用户查看来获取每台主机的告警信息,工作效率极低。采用B/S架构模式,一个Web服务器可以同时管理多台主机卫士节点。一次部署完成后,只要通过管理平台就能进行统一监控,节约了人力成本。B/S分布式架构采用Web层、中间件层、主机三级架构。当主机数量增多、出现性能瓶颈时,只需增加服务器设备,部署中间件和Web服务器,就能快速解决性能瓶颈。

2.3.3 白名单规则的设计

基于白名单规则控制主机安全,就必须保证生成的白名单指纹具有唯一性和安全性。对于可执行文件,不能依赖于文件名和路径,而需要根据文件内容生成白名单。SM3算法满足此需求。文件内容、U盘的系列号、网卡的媒体访问控制(media access control,MAC)地址都可以作为SM3算法的自变量来生成指纹信息。

2.3.4 消息API结构和流程设计

通过Redis传输的消息结构设计要具有统一的格式和规范。所有的请求消息必须有响应,确认消息已送达。在消息结构中要区分快发送的消息和慢发送的消息。告警信息数据量大,时效性要求略低。因此,可将该类数据加入慢发送队列。主机上传的状态数据、响应消息和管理平台下发的白名单规则数据,时效性要求高,由Web页面实时等待反馈。因此,将这些数据加入快发送队列。快、慢两种发送方式的协作,可保证系统稳定、流畅地运行。

2.3.5 阻断进程和U盘网卡外设的技术方式

对于阻断可执行文件白名单外的进程,需要在进程启动前就终止进程。Windows API Hook的远程动态链接库(dynamic link library,DLL)注入方式可以满足该功能。创建参数与CreateProcess()函数相同的新函数CreateProcessNew(),生成待注入的阻断DLL文件。针对32位进程和64位进程注入,需要分别生成32位和64位阻断DLL。

调用Windows API 函数HANDLE WINAPI CreateRemoteThread(),将动态库远程注入指定进程,例如explorer.exe、taskmgr.exe等。

EnumProcessModules()函数则可以列出启动该进程所依赖的DLL、OCX文件,阻断不在白名单内的DLL、OCX文件的调用和运行[7]。

USB阻断API函数为BOOL WINAPI DeviceloControl()。网卡阻断API函数为INetConnection类的virtual HRESULT STDMETHODCALLTYPE Disconnect(void)=0[8]。

2.4 消息接口设计

Redis消息接口请求内容:

request =

{

"message_id":"99882121",

#消息ID

"strategy":

{

"strategy_type":1,

#策略类型:1文件,2 USB,3网卡

"strategy_id":554,

#策略编号

"c_tag":"2",

#动作类型:2新建,3模式切换

"content":["C:\dest"],

#策略内容,与策略类型相关

"sourceip":"192.168.2.108",

#接收策略的主机卫士IP

"event":2

#事件类型

}

}

Redis消息接口响应内容:

response =

{

"message_id":"99882121",

#消息ID

"sourceip":"192.168.2.108",

#响应的主机卫士IP

"status":1,

#收到请求:0否,1是

"result":{}

#响应结果

}

2.5 部署测试

按照以上的系统架构设计软件,在编码开发完成后,需要对整个软件需求的功能进行部署测试。建议至少准备三台主机设备:一台Linux服务器和两台Windows系统计算机。Linux服务器部署主机卫士管理平台、Windows系统计算机,并安装主机卫士软件。部署测试主要包含四个部分。

①生成白名单规则功能测试:该功能是本系统软件的基本功能。用户可以通过指定IP设备和路径自动生成主机卫士的可执行文件白名单,通过推荐U盘和网卡的指纹信息生成外设USB和网卡的白名单规则,简单易用。

②主机卫士审计模式测试:使用管理平台将主机卫士界面切换到审计模式下,使系统可以实时生成白名单外的进程和USB、网卡的告警信息。同时,白名单规则内的程序和外设可以正常运行、加载。

③主机卫士保护模式测试:管理平台将主机卫士界面切换到保护模式下,系统可以实时生成白名单外的进程和USB、网卡的告警信息,同时阻断白名单规则内的程序和外设的运行和加载。

④系统可靠性、健壮性测试:该测试是指主机卫士需要对主机设备进行7×24 h的实时告警和防护,保证主机卫士软件的正常工作。

3 结论

工业互联网是新一代信息技术 (information technology,IT)与传统工业操作技术(operation technology,OT)全方位深度融合所形成的产业和应用生态。为了管理和控制的一体化,实现生产和管理的高效率、高效益,工业企业深度融合IT/OT,在拓展了工业控制系统发展空间的同时,也带来了一系列的工业网络安全问题[9]。

本文基于B/S架构的工业主机卫士软件设计,为解决工业场景下的主机安全问题提供了有效的解决思路。通过详细的需求调研、分析数据、设计开发、部署测试,很好地满足了工业场景下主机防护的基本需求,是主机类产品研发的全新的实例。下一步还可以对主机的EventID等事件进行审计分析。本文所提出的软件设计方法,对实际问题的解决有一定参考价值。

猜你喜欢
白名单网卡卫士
铁道小卫士
风中小卫士
我是环保小卫士
核电厂仪控系统安全防护策略研究及应用
UAC提示太烦 教你做个白名单
部署Linux虚拟机出现的网络故障
2019年“移动互联网应用自律白名单”出炉
Server 2016网卡组合模式
移动互联网白名单认证向中小企业开放
挑战Killer网卡Realtek网游专用Dragon网卡