基于分散化序列的联网ICS设备搜索技术
2018-11-22刘知竹刘吉元
刘知竹,冯 璐,荀 鹏,刘吉元
(1.国防科技大学 计算机学院,湖南 长沙 410073; 2.长沙学院 电子信息与电气工程学院,湖南 长沙 410022)
0 引 言
作为关键基础设施的工业控制系统(industrial control system,ICS)在网络空间中是重要的资源,其包含监控和数据采集系统(supervisory control and data acquisition,SCADA)、可编程逻辑控制器(programmable logic controller,PLC)等,在电气、化工以及核能等领域应用广泛[1]。与传统的IT系统相比,工业控制系统具有信息物理融合性质[2],主要面向对生产过程的控制而非对信息的管理,因此ICS的安全与生产生活关系更为密切。近年来,通过全网扫描的方式,大量的在线应用及物理设备被发现,其中也包括ICS设备[3-4]。对于被探测发现的ICS设备,一方面可以基于漏洞扫描工具等分析该类设备的网络安全态势[5];另一方面,由于部分ICS通信协议的认证机制不完善,外网节点基于相应协议下的特定指令也可获得设备信息,因此可以提取该类设备的属性并在此基础上展开数据统计与分析,这是网络空间测绘的一种有效方法[6-8]。
全网扫描的一种典型应用是联网设备搜索引擎,目前有国外的Censys、Shodan,以及国内的ZoomEye、O’Shadan和FOFA等,它们将网络中的应用与设备信息汇集形成数据库,为相关研究提供参考。Censys来自密歇根大学的Internet-Wide Scanning Research项目,其使用的ZMap扫描器以及ZDb数据库性能高于同类工具,具有较高的工作效率[9-10]。Shodan是最早出现的联网设备搜索引擎,其扫描节点跨地域分布,并且对ICS设备具有成熟的搜索能力[11-12]。这些搜索引擎均能发现ICS设备,因此可以基于工控蜜罐分析它们的行为特征。根据文献[12]的统计,大部分搜索行为存在重复扫描的情况,即单个扫描节点高频度地扫描目标,或者多个扫描节点在短期内扫描同一个目标;此外,针对不同ICS协议的扫描频率也不同。这都使得搜索效率降低,同时搜索行为也容易被发现。
基于此,文中提出一种基于分散化序列的联网ICS设备搜索技术,能够在搜索整个IPv4网络空间中ICS物理设备的同时,避免短期内对单个IPv4地址及其TCP端口的重复扫描。同时,扫描节点在按照经过分散化的IPv4地址顺序依次扫描时,能够在短时间内对一个小规模网段仅扫描其中一个IPv4地址。文中对分散化序列进行了参数定义,并在此基础上设计了一种分散化序列的启发式生成算法,并通过实验对其进行分析与验证。
1 联网ICS设备搜索机制
由于ICS通信协议位于特定的TCP端口上,因此通过端口扫描可以初步判定目标是否属于ICS设备,然后基于对应协议获取目标信息。为了搜索整个IPv4空间中所有ICS设备,需要扫描每个地址下的所有ICS协议端口。假设全网扫描由多个分布式扫描节点完成,则可以将IPv4地址分片后均衡地调度给它们,扫描任务的集合可以表示为矩阵[wij],如图1所示。
图1 扫描任务集合
其中IPv4地址被均分为{Si|1≤i≤n},分片长度为l,各种ICS协议的TCP端口集合为{pj|1≤j≤m},wij是地址与端口序偶的向量,其表达式为:
wij=[
(1)
扫描节点不断地选取序偶
μij=[
l(i-1)+1≤n1<… (2) δj=[μ1j…μnj]T (3) (4) l(i-1)+1≤n1<… (5) (6) 对于任务调度机制,设扫描节点集为A,每个节点α的实时并行任务数量为thd(α),上限为mthd(α),则每次调度任务时,从可执行任务并且thd最小的扫描节点集合A'中随机选取节点分配任务。该节点集合的表达式为: (7) 综上,全网扫描的过程如下: 步骤4:返回步骤2。 首先对分散化序列进行定义。设S为一段具有单调性的序列,若Q(S)为其置换并满足:(1)Q(S)中的相邻元素在S中的数值差距大于s1;(2)S中任何数值差距小于s2的元素在Q(S)中的位置相距大于s3。则称Q(S)为S的一个满足参数 基于该定义,在设置一定参数的条件下,当扫描节点从Q(S)依次取地址扫描时,能够在遍历S中所有地址的同时降低对小规模网段的扫描频度。其中s1和s2表征了扫描行为在空间上的分散化程度,s3表征了扫描行为在时间上的分散化程度。参数值越高则分散化程度越好,但是参数值过高会使得相应的置换序列不存在。 这里给出一种对分散化地址序列的启发式生成算法,能够快速地产生满足参数条件的序列Q(S)以及剩余地址序列R(S)。当选取合适的参数时,能够使得R(S)的元素数量较少,从而能够使扫描行为满足分散化条件的同时近似地覆盖对S的扫描。假设扫描节点扫描一次用时为Δt,对小规模网段的扫描时间间隔为t,则算法的基本流程为: 输入:地址序列S,序列长度l,距离间隔s1、s2,单次扫描用时Δt,时间间隔t。 步骤1:初始化地址序列Q←[],序列G1←[],序列G2←[],距离s3←⎣t/Δt」,地址q←θ。 步骤2:将G2中的所有元素减1。 在批次为720,学习率为0.03的实验条件下,对网络输入步长问题进行实验,以RMSE作为评价指标,实验结果如表2所示。 步骤3:若G2中存在元素为0,则将G1和G2中相应下标的两个元素同时去除。 步骤4:若q≠θ,取邻域Ns1(q)=(q-s1,q+s1),若l为0或S-Ns1(q)为空,输出Q以及R←S,退出。 步骤6:返回步骤2。 输出:地址序列Q,剩余地址序列R。 扫描节点在遍历Q(S)时,若取出了有效地址addr,则对其端口p执行扫描;若取出了无效地址θ,则待机Δt。 本节对提出的联网ICS设备搜索技术进行实验分析。首先测试相关ICS协议下获取信息的机制,然后分析分散化序列生成算法的参数对序列效果的影响,最后模拟全网扫描并统计扫描行为的特征。 该小节测试Modbus和Siemens S7两种协议下获取ICS设备信息的机制,以验证在发现ICS协议端口开启后能够提取出设备信息。 Modbus协议工作在TCP的502端口,其报文类型分为请求、应答和异常应答,报文内容由地址码、功能码和数据组成[13]。其中地址码标识Modbus网络中的设备单元,功能码说明指令能够实现的功能,包括获取设备信息、读写设备的存储器等。根据文献[13],基于0x2B功能码并设置子功能码为0x0E时可请求设备信息,基于0x11功能码可读取Modbus网络中设备单元的名称和运行状态。协议交互的基本流程为: 步骤1:依次向地址码为0x01至0x20的对应单元发送功能码为0x2B,子功能码为0x0E,描述类别参数为0x01的报文,请求目标回复基本的设备信息。若某个地址码对应的单元回复了设备信息,则向该单元再分别发送描述类别参数为0x02和0x03的报文,尝试获取更详细的设备信息,然后结束该步骤。 步骤2:依次向地址码为0x01至0xFF的对应单元发送功能码为0x11的请求报文,请求目标回复名称和运行状态。 从搜索引擎FOFA选取150个已知开启502端口的IPv4地址,基于上述机制进行交互。结果显示141个地址回复了设备信息,样例如表1所示。 表1 某IPv4地址回复的Modbus设备部分信息 3.1.2 Siemens S7 Siemens S7协议工作在TCP的102端口,并位于TPKT和COTP协议之上[14]。当设置功能码为0x43并且子功能码为0x01时,可以请求设备返回各类程序块(Block)的数量,这些程序块中存放着设备的代码与数据。当设置功能码为0x44并且子功能码为0x01时,可以读取系统状态列表(system status list,SSL)[15],其中描述类别参数为0x0011时能够获取保存模块标识(module identification)的SSL;描述类别参数为0x001c时能够获取保存组件标识(component identification)的SSL,其中均包括设备信息。协议交互的基本流程为: 步骤1:发送功能码为0x44,子功能码为0x01,描述类别参数为0x0011的报文,请求目标回复关于模块标识的系统状态列表。 步骤2:发送功能码为0x44,子功能码为0x01,描述类别参数为0x001c的报文,请求目标回复关于组建标识的系统状态列表。 步骤3:发送功能码为0x43,子功能码为0x01的报文,请求目标回复程序块数量的统计信息。 从搜索引擎FOFA选取150个已知开启102端口的IPv4地址,基于上述机制进行交互。结果显示140个地址回复了设备信息,样例如表2所示。 表2 某IPv4地址回复的Siemens S7设备部分信息 该小节分析参数对分散化序列生成效果的影响以及最优参数的取值,显然参数的值越高,分散化的效果越好,但是过高会影响算法,使得序列中的空地址数量|Θ|以及剩余地址数量|R|过多。为了评测序列的生成效果,考虑在执行普通任务Q'(w)时扫描有效地址用时占总任务用时的百分比r,其反映了执行任务时的工作效率。 (8) 首先分析参数s1,选取3组初始参数后调节s1观察序列效果的变化,每组参数下运行5次后取平均值,结果如图2所示。当s1位于序列地址总数n的一定比例之前|R|逐渐增长,|Θ|在一定区间内变动;一定比例之后|R|和|Θ|急剧提高,此时r也迅速降低。这说明在不超过一定阈值的情况下增大s1对序列效果不会造成明显的影响,并且阈值位于n·40%左右。 接下来分析参数s2和s3=⎣t/Δt」,选取4组初始参数后调节s2观察序列效果的变化,每组参数下运行5次后取平均值,结果如图3所示。随着s2的增长,|Θ|和r起初保持稳定,在s2超过一定阈值之后开始线性变化,并且s3越大阈值越小,同时变化速度越快;|R|非线性递减,超过一定阈值后再次保持稳定,并且s3越大阈值越小,同时递减速度越快。因此,可以发现s2和s3位于阈值点时算法效果最好。 图2 相关指标随s1增长时的变化 图3 相关指标随s2增长时的变化 该小节基于文中的搜索技术初步模拟了全网扫描,并统计对蜜罐地址的扫描行为。实验不考虑私有IPv4地址等特殊情况,认为所有IPv4地址均具备扫描价值。假设使用10个扫描节点在IPv4空间中搜索15种ICS协议设备,其中每种协议位于不同TCP端口上;每个扫描节点拥有1 200个扫描线程,执行一次端口扫描用时Δt=0.5 s;地址分片长度l=131 072,参数s1=81 920,s2=640,s3=⎣t/Δt」=270。 首先随机生成一个地址addr,然后基于算法生成45次序列,统计每次产生的剩余地址数和空地址数,以及addr在生成序列中的位置。根据剩余地址数和空地址的平均情况,模拟出整个扫描任务矩阵以及补充任务集合,然后将任务依次调度给扫描节点,每次调度时从空闲线程数最多的扫描节点中随机选取。最后模拟了3轮全网扫描,并从中取出addr所在的45个任务,统计出它被扫描时的时间点以及扫描节点,结果如图4所示。 图4 模拟扫描活动统计 在每轮全网扫描中,addr的15个ICS端口分别被扫描1次,并且扫描的时间间隔均衡,搜索效率较高。全网扫描的周期可以通过参数调整,在此次模拟中为32.6天。 针对已有联网设备搜索对ICS设备重复扫描的问题,提出一种基于分散化序列的联网ICS设备搜索技术,设计出分散化序列的启发式生成算法,并通过实验测试了两种ICS协议下的设备信息获取机制,分析了算法参数对生成的序列效果影响,模拟了全网扫描并统计出对单个IPv4地址的扫描行为特点。实验结果表明,该方法能够在分布式扫描全网ICS设备的同时避免重复扫描,提高了搜索效率。2 分散化序列及其生成算法
3 实验分析
3.1 协议交互测试
3.2 算法参数分析
3.3 模拟搜索测试
4 结束语