当前,指纹识别技术已被或坏或好的广泛应用于ICT系统。攻击者通过扫描网络获取设备指纹来关联漏洞入侵系统,安全防护者则利用设备指纹来发现系统的脆弱性,检测系统的网络异常。在工业控制系统(ICS)中,指纹识别技术亦用于发现ICS系统脆弱性,检测攻击行为等方向。本文主要分析和总结了工控安全领域的被动指纹识别技术。
指纹识别是什么
在ICT领域里,指纹识别是利用不同信息描述运行于网络中的设备或者软件的一种技术。我们了解最多的是设备指纹,被用来远程识别设备的硬件,操作系统,运行软件(及其相关的版本号,配置参数)等信息。
指纹识别的常见应用场景
• 网络空间搜索:Shodan 是目前最流行的网络空间搜索引擎,它扫描HTTP, FTP, SSH, Telnet, SNMP and SIP 等协议,通过分析客户端与服务端交互过程中的信息,识别全网设备。目前较流行的威胁感知系统也是利用fingerprint devices技术探测网络空间设备。
• 资产管理:现实中,系统管理员很少了解资产的全部信息,或者了解到的是错误信息。导致这种现状出现可能是因为信息未能及时更新,或者是系统维护交由外包管理,或者是设备供应商提供了错误的配置信息。因此,ICS系统有必要提供信息保证高效的现场检查(site-inspection),系统管理员能够准确的了解系统的相关配置信息。
• 入侵检测:攻击者理论上可以通过注入命令或者假数据来侵扰ICS网络,如造成大面积停电等灾难性后果。一些设备由于老旧无法升级,甚者一些设备供应商不提供线上升级打补丁。安全工作人员能够及早的发现入侵行为显得尤为重要。
指纹提取方法的种类
指纹提取方法主要分为两类:主动式(active)和被动式(passive)。主动式指纹提取要求工具去主动扫描网络系统获取信息,被动式指纹提取方法则是通过尽可能少的网络侵扰(less intrusive),被动式的监听网络获取信息。通常,主动式指纹识别成功识别系统的概率更大些。这是因为主动式识别意味着收集所有生成fingerprint所需要的信息,而被动式识别只能收集会话通道信息。但主动式识别并不是任何时候都能够起作用,探测扫描更易造成网络繁忙,且易被检测。例如,在SCADA系统中,主动式扫描可能造成系统过载。主动调试会使设备处理的frame数量增长,PLCs和RTUs无法支持超出的流量,从而导致正常请求无法响应。而被动式监听网络由于收集信息复杂则存在指纹准确性问题。
ICS/SCADA环境特性
指纹识别技术应用于ICS领域的过程中,在相对传统网络有可利用的优势同时也伴随着挑战。ICS系统组件相对于常规互联网和公司局域网有着其固有的特性和缺陷。一方面,相较于传统IT系统,ICS系统中工控设备具有长生命周期,稳定的网络拓扑和会话;另一方面,信息采集方式面临着主动式或是被动式方法选择问题,设备多样化,长时间TCP会话连接等问题。设备供应商协议定制则是一把双刃剑,协议允许检测者对ICS系统进行定位(公开协议)或者识别特定设备(私有协议),而相对私有协议做报文分析因无文档而显得很困难。
指纹提取一般流程
尽管识别目标(如操作系统识别,硬件识别,特定软件识别等)和信息数据源(如包,网络流量,时间等)不同,所有的识别工具或方法都有共性的功能任务。因此,这里将所有识别工具工作模块抽象出来。指纹提取工具整体处理流程如图1所示。
• 数据源(Sources):任何一种指纹识别方法或者工具都会依赖于一种或者多种信息源。在ICS环境中,有多种不同信息可以作为指纹识别信息源,主要分为两种:TCP/IP协议(protocol)和网络会话(communication traffic)特征。TCP/IP协议特征在传统ICT指纹识别技术中应用最为广泛。但我们意识到一个主要问题。前文提到的ICS环境中长时间TCP会话连接不允许太多的TCP三次握手(也就意味着,没有SYN和SYN-ACK 包),由于这些初始阶段包中存储着识别所需信息,基于TCP/IP协议实现方法显得很低效。当然也有例外,一些ICS中使用的协议(如Modbus)提供入口函数,方便了指纹识别。而ICS环境中网络会话具有显著的稳定性和规律性,研究社区相信使用时间维度,网络流量特征和交互模式等数据源很适合ICS环境,避免使用TCP/IP协议所遇到的问题。
• 采集模块(Gathering) : 采集模块实现采集信息方法。这里更多的讨论被动式识别以避免任何可能的系统干涉。最好的解决方案是,对ICS系统组件做透明网络嗅探。被动式识别方法利用Wireshark等工具生成的PCAP文件或者直接生产线上sniffer做数据分析。它没有网络流量注入并且不响应即将到来的消息,这样能够保证ICS系统操作不被干扰。PLCScan和Modbuspatrol 等类似工具是个例外,因为Modbus提供了执行查询相关函数,采用主动式查询ICS系统的方式,对系统造成影响很小。另外,并不是所有的网络流数据都是有价值的,采集模块会过滤掉ICS网络会话无关数据和脏数据(如TCP重传,重复的ACK包等)。
• 生成模型(Model Generation) : 该模块组织整理并存储数据。主动式识别方法通过扫描查询获取到固定的数据结构或者详细信息列表,并不需要多余的规范说明。而基于时间,网络流量,会话交互模式等数据源的识别方法,需要处理完整的描述ICS系统行为特征集,无法通过一个简单的签名而缩小数据集。因此,被采用的特征集需要做系统的和完整的数据结构定义,描述概括ICS环境架构,属性,运行趋势等。
• 决策模型(Decision Models) : 生成模块的输出结果。为了解决生成模型中提到的数据结构定义,这里引入一个上下文环境模型(context model)的概念,用来描述系统的运行行为和设备的操作实现。而且,它能基于特征值和运行关系展现设备在系统中的角色。数据被采集后经过context model处理,获取更高水平的契合分析的信息。
• 预处理(Pre-processing) : 在经过采集模块(Gathering)处理后,会话信息会经受进一步的提炼。处理过程依赖于决策模型(Decision Model)的数据结构和分类(Classification)算法。最简单的例子是,预处理模块提取未知ICS环境数据,为后续比较建立签名信息。在其他的情况下,预处理模块通过context model提炼更高水平的信息。预处理模块同时需要过滤无用信息和标记不完整信息。
• 分类(Classification) : 分类模块确定指纹。标准TCP/IP协议栈分析方法中实现了一系列的比较算法,用来识别操作系统等信息。一些方法识别软件应用和硬件组件。当ICS协议提供方法扫描查询设备信息的时候,可以做全面的指纹信息分析。ICS系统中指纹的识别目标还包括供应商(vendor)识别,硬件识别(如device model),软件识别,组件类型(type)识别(如SCADA servers和PLCs),组件角色识别(主PLCs和普通PLCs),网络拓扑识别(PLCs与单个SCADA服务交互还是PLCs之间交互),生成处理流程信息(能源行业与水厂处理流程存在网络特征差异)等。
• 决策(Decision) :分类算法的输出,即指纹的生成结果。传统的比对匹配方法实现会涉及到结果集的更新。而在机器学习等数据建模的情况下,会对输出结果做监督/无监督学习训练,优化生成模型。
方法介绍
识别过程当中,你有没有为手工扫描识别所带来的大量时间消耗而困惑呢?端口扫描可能打断低计算能力或者过时设备的运行。在ICS环境中,我们总是更倾向于只使用被动式监控,最小化潜在的风险。目前已有些比较成熟的被动式识别工具(如ettercap, p0f, Satori and NetworkMiner),它们基于TCP/IP协议栈监听分析网络。但研究者们更倾向于采用透明的,无深度包检查(Deep Packet Inspection)的方式来识别ICS网络行为。这里选取了三个工控安全研究社区较新的,比较典型的识别方法做介绍。它们都是基于网络流量特征分析的被动式识别方法。我们从原理依据,数据源,classification算法,准确度,健壮性,通用性等几个维度对方法进行了解。
• 特征值系数评级:前文提到过,ICS环境中网络会话具有周期性,field devices端口连接SCADA端口相对固定。因此方法作者[ 2 ]提取了5个基础会话特征对特征值进行系数评级。这5个基础会话特征包括:
I. 源IP(S-IP)
II. 源端口(S-Port)
III. 目标IP(D-IP)
IV. 目标端口(D-Port)
V. 单位间隔段长度(1s)(SegSize)
依据这些基础特征来算出(具体算法详见参考文献[ 2 ])描述网络流量特征的五个特性系数,分别是:
A. 周期性(Periodicity)系数pR
B. 会话耐用性(Communication Durability)系数dR
C. 设备IP端口差异(Device Complexity Gap)系数cR
D. 网络服务访问频度(Network Service Popularity)系数uR
E. 段大小(Segment Size)系数sR
数据实验结果如图2所示,每行特征值通过方法作者设计的算法得到一个结果f值,一个排名等级Rank值。我们能够清晰的发现,不同设备IP,端口关联评分系数差异明显。我们可以通过评分系数找出SCADA端口,由SCADA端口找出SCADA设备。方法准确度通过F-score评估结果如图3所示。由F-score分数可以看出:一方面,方法能100%准确识别出field devices和master(precisiond1 = 1),而且能够完全识别出不同厂商定制的SCADA协议;另一方面,dataset1中,方法还无法完全准确识别系统HMI(recalld1 = 0.9434) 。F-score总体评分为F- scored1 = 0.9709, F-scored2 = 1 ,可以看出方法在可用性,通用性方面相对表现出色。
• 跨层响应时间(Cross-layer Response Times):本方法作者[ 1 ]依据ICS环境中,设备具有较低的计算能力,固定的CPU装载启动,简单的周期性网络流量等特性,设计了跨层响应时间算法(CLRT)识别方法。跨层响应时间能够判定出是攻击者通过自己的机器伪造响应,还是ICS环境CPU载荷或者应用配置变化行为。该方法通过一个时间片(如一天)内两个同源同向的包间隔时间为基本元素(图4),构成一个样本数据集,对样本集进行ANN算法和Bayes classifier算法处理,标识设备和软件。实验数据来源于两个正在运营的变电所环境数据,数据周期为5个月。某些情况下(样本时间周期差异,如1天或者一个月),该方法提炼指纹能达到99%的准确度(Accuracy)。健壮性(Robustness Against Forgery )方面,通过朴素贝叶斯分类算法的分析结果能够高度识别设备伪造攻击(图6 CLRT部分)。一方面,该方法要求SCADA协议使用“read”和“response”消息,但不是所有的SCADA协议都实现;另一方面,方法生成指纹的速度依赖于系统使用quick模式ACKs数量。
• 物理指纹(Physical Fingerprinting): 一个设备机械和物理的特性决定着它执行特定操作指令的时间,由此特点产生设备指纹。作者[ 1 ]给出了两种计算操作指令响应时间方法,一种是自动响应时间戳,即计算Ethernet层发现操作指令与发现响应时间差;一种是事件序列记录时间戳,即计算Ethernet层发现操作指令与应用层发现事件的时间差,如图5。同跨层响应时间(Cross-layer Response Times)识别方法相同的实验数据[ 1 ],实验环境显示:
① 不同供应商设备操作某些特定指令响应时间不同(自锁继电器打开时间相似,但关闭时间差异明显);
② 同设备操作指令不同操作响应时间不同。
通过对采集到的时间数据集(样本)进行FF-ANN算法和na ̈ıve Bayes classifier算法处理,标识设备,准确度(Accuracy)达到了92%。物理指纹方法在健壮性方面也有上佳表现,如图6 Physical fingerprinting部分。同时,物理指纹方法也依赖于SCADA协议包含时间响应操作,但不是所有的SCADA协议都支持。
结论
被动式识别方法由于尽可能小的干扰ICS生产环境,自动化等特点,已被工控业界更多接受,研究者们也对被动式识别投入更多热情。尽管目前已有一些成熟的基于TCP/IP协议栈被动式识别工具,但研究者们更倾向于使用网络流量特征分析方法来避免干扰正常工业生产。就目前研究者社区环境而言,基于网络流量特征的被动式识别方法在通用性,准确度方面还有待提高,仍有待完善并标准化。