APP下载

基于分散化序列的联网ICS设备搜索技术

2018-11-22刘知竹刘吉元

计算机技术与发展 2018年11期
关键词:全网端口节点

刘知竹,冯 璐,荀 鹏,刘吉元

(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=[]T

(1)

扫描节点不断地选取序偶执行扫描,可以等价为从它负责的分片S的一个置换上依次取出地址addr,然后扫描其端口p。若这一过程能够确保不在短时间内扫描邻近的多个地址,即邻近的地址在置换后的地址序列上相距较远,则称这段地址序列具备分散化性质。分散化序列的启发式生成算法在第2节阐述,该算法对连续地址序列S进行处理后能生成满足分散化性质的序列Q(S)和剩余序列R(S)。对于每个任务wij,经算法处理后余下的剩余地址与端口序偶构成剩余任务μij,并定义补充任务δj保存剩余任务矩阵[μij]的列向量,其表达式为:

μij=[]T,

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。

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。

3 实验分析

本节对提出的联网ICS设备搜索技术进行实验分析。首先测试相关ICS协议下获取信息的机制,然后分析分散化序列生成算法的参数对序列效果的影响,最后模拟全网扫描并统计扫描行为的特征。

3.1 协议交互测试

该小节测试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设备部分信息

3.2 算法参数分析

该小节分析参数对分散化序列生成效果的影响以及最优参数的取值,显然参数的值越高,分散化的效果越好,但是过高会影响算法,使得序列中的空地址数量|Θ|以及剩余地址数量|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增长时的变化

3.3 模拟搜索测试

该小节基于文中的搜索技术初步模拟了全网扫描,并统计对蜜罐地址的扫描行为。实验不考虑私有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天。

4 结束语

针对已有联网设备搜索对ICS设备重复扫描的问题,提出一种基于分散化序列的联网ICS设备搜索技术,设计出分散化序列的启发式生成算法,并通过实验测试了两种ICS协议下的设备信息获取机制,分析了算法参数对生成的序列效果影响,模拟了全网扫描并统计出对单个IPv4地址的扫描行为特点。实验结果表明,该方法能够在分布式扫描全网ICS设备的同时避免重复扫描,提高了搜索效率。

猜你喜欢

全网端口节点
一种有源二端口网络参数计算方法
一种端口故障的解决方案
双十一带货6500万,他凭什么?——靠一句“把价格打下来”,牛肉哥火遍全网
概念格的一种并行构造算法
结合概率路由的机会网络自私节点检测算法
采用贪婪启发式的异构WSNs 部分覆盖算法*
多按键情况下,单片机端口不足的解决方法
现有网络架构及迁移方案
Crosstalk between gut microbiota and antidiabetic drug action
范雨彤最新歌曲《这不是我要的故事》全网上线