网络空间资产探测关键技术研究
引用本文:罗强,段梦军,吴治霖.网络空间资产探测关键技术研究[J].通信技术,2021,54(9):2235-2241. 作者简介 罗强,学士,工程师,主要研究方向为通信; 段梦军,硕士,工程师,主要研究方向为网络测绘。 吴治霖,硕士,高级工程师,主要研究方向为电子工程。 选自《通信技术》2021年第9期(为便于排版,已省去原文参考文献)
摘要
如今,网络空间日益复杂,越来越多的终端设备如智能手机、打印机、网络摄像头、数字媒体设备等也加入到网络空间中。通过网络空间资产探测,可以及时发现潜在的安全风险,避免被不法之徒攻击。基于此,论述了国内外网络空间资产探测相关研究成果,并简要介绍了网络探测中的常用的网络空间资产主动探测方法及其关键技术,归纳和梳理了主动探测的优点和缺点,为网络空间资产探测技术研究人员提供借鉴。
引言
随着网络的不断发展以及用户对网络使用需求的急剧增长,网络规模不断扩大、网络空间趋于复杂。通过网络空间资产探测,可以及时发现潜在的安全风险,避免被不法之徒攻击。在国家把网络空间安全概念提升到一个重要的层次时,其更显重要。在网络攻防对抗中,首先得了解网络,要了解网络空间,就需要对网络空间进行资产探测。
网络空间资产探测技术作为网络安全的重要基础技术,是通过主动或被动探测的方法,来绘制网络空间上设备的网络节点和网络连接关系图,为网络设备进行画像。
近年来,网络资产探测技术已成为网络安全领域的研究热点,各国都对此进行了深入研究。如美国国防部先进研究项目局(Defense Advanced Research Projects Agency,DRAPA)驱动的X计划,旨在通过快速绘制网络战场地图,提高国家网络战能力,协助制定作战计划,促进网络战任务的高效推进。美国国土资源部(United States Department of Homeland Security,DHS)驱动的SHINE计划,通过Shodan等网络空间扫描引擎监控美国关键基础设施网络资源的安全状态,在本地网络空间地址列表上进行安全态势感知,并定期向工业控制系统应急小组(Industrial Control Systems Cyber Emergency Response Team,ICS-CERT)推送安全通知,确保关键基础设施网络安全的安全。
我国目前也已在进行相关方面的研究。我国已经实现对网络空间网际互连协议(Internet Protocol,IP)地址的扫描,达到资源探测的目的,且能够对每个IP地址的资源进行识别。但相较于目前国外的技术能力,还需进一步突破基于指纹比对的网络组件精准探测技术。基于指纹库的网络设备组件识别技术,是网络空间探测系统的核心技术。该技术可对设备的特定端口进行请求,判断端口是否开放,并根据端口返回信息,并利用自主研制的指纹比对技术,结合自主研制的指纹库,对设备类型及所使用的组件进行识别。
在工业控制服务探测方面,国内专门针对网络空间工业控制服务深度探测技术研究起步相对较晚。目前,通过网络的主动探测技术可以为一些重要的工业控制系统提供在线监测和识别能力,并可以支持典型的数据采集与监视控制系统(Supervisory control and data acquisition,SCADA)、可编程逻辑控制器(Programmable logic controller,PLC)等工业控制系统(设备),Modbus等工业控制协议,以及与工业控制相关的通用网络服务。但与国外相比,我国的工业控制服务探测技术还存在许多问题,如支持工控设备/协议等服务数量不足、感知深度不足。与网络空间大量存在的标准化的信息系统不同,工业控制系统及相关服务存在大量非标准私有的控制协议组件,或同一种工控协议存在多个未公开版本的情况,大多数工业控制服务细节掌握在相关厂家自己手里。
目前,我国需要进一步对相关联网特征进行深入研究,精准提取其指纹信息,提供感知广度和扫描效率。同时还需要结合不同网络资产特点,加强对海量联网设备信息高效率扫描、隐蔽式探测和被动式感知等联网服务态势感知技术的研究,确保全方位、多角度的对网络空间存在的网络资产服务进行准确感知和高效测绘。
本文主要介绍了目前网络资产探测常用方法,归纳和梳理了主动探测的优点和缺点,重点分析了网络资产探测技术所涉及的关键技术。
1. 基于ICMP存活主机发现技术
如果与目标主机处于同一网段,使用地址解析协议(Address Resolution Protocol,ARP)扫描技术就是最佳的选择。该方法具有速度快,扫描结果精确的特点,且没有任何安全措施阻止正常的ARP包。但当与目标主机处于不同网段,则考虑使用其他协议。
互联网中经常会出现各种错误,为了发现和处理这些错误,互联网控制报文协议(Internet Control Message Protocol,ICMP)应运而生。相比APR简单明了的工作模式,ICMP则要复杂很多,但ICMP同样是互联网中不可或缺的协议。ICMP协议位于传输控制协议/网际互连协议(Transmission Control Protocol/Internet Protocol,TCP/IP)族中的网络层,它的目的是在IP主机、路由器之间传递控制消息。同样这种协议也可以用来实现存活主机发现。
表1 ICMP报文类型
从表1可以看出,ICMP的报文可以分为差错和查询两类。查询报文是用一对请求和应答定义的。也就是说,主机A为了获得一些信息,可以向主机B发送ICMP数据包,主机B在收到这个数据包之后,会给出应答。这一点正好符合本文进行存活主机扫描的要求,所以这里的ICMP存活主机发现技术使用的就是查询报文。
1.1 利用ICMP响应请求和应答探测存活主机
响应请求和应答是用来测试发送与接收两端链路及目标主机TCP/IP协议是否正常,只要接收就是正常。日常使用最多的ping命令就是利用了响应请求和应答。主机A向主机B发送ICMP报文,如果途中没有异常,则主机B返回ICMP报文,说明主机B为存活主机。但ping工具使用率较高,所以许多用于防护主机的防火墙设备都隔绝ICMP数据通过。
1.2 通过时间戳请求和应答进行存活主机探测
由于Ping方式被很多网络屏蔽,因此另寻他法。ICMP时间戳请求允许系统查询另一个系统的当前时间,返回的建议值是自午夜起的毫秒数,即协调世界时(Coordinated Universal Time,UTC)。如果想知道B主机是否在线,还可以向B主机发送一个ICMP时间戳请求,如果得到应答的话就可以视为B主机在线。当然,其实数据包内容并不重要,重要的是是否收到了回应。
1.3 通过ICMP地址掩码进行存活主机探测
ICMP地址掩码请求由源主机发送给无盘系统,以便在启动过程中获得自己的子网掩码。尽管互联网工程任务组(the Internet Engineering Task Force,IETF)发布的一系列备忘录(Request For Comments,RFC)规定除非系统是地址掩码的授权代理,否则它不能发送地址掩码响应。但是,大多数主机在收到请求时都会发送响应。如果想知道主机B是否在线,您还可以向主机B发送ICMP掩码地址请求,如果您得到响应,可以视作主机B在线。
2. 基于TCP存活主机发现技术
TCP协议是一种可靠的传输协议,连接到TCP/IP协议套件中的各层允许以字节流的形式发送和接收数据。为了使服务器和客户机以不同的速度生成和使用数据,TCP提供了发送和两个接收服务。此外,TCP提供全双工服务,数据同时能双向流动。通信的每一方都有两个缓冲器来发送和接收数据。TCP向消息中添加一个渐进式确认序列号,以告诉发送方接收方希望接收下一个字节。如果在指定的时间内没有收到确认信息,则会再次发送数据包,从而确保TCP是可靠的传输层协议。
通常,Ping扫描使用TCP ACK和ICMP Echo请求来响应目标是否存活。当目标主机的防火墙阻止这些请求时,可以使用TCP SYN Ping扫描来判断目标主机是否处于存活状态,但在某些情况下,防火墙会丢弃RST包。在这种情况下,扫描结果将不准确。此时,需要指定一个端口或端口范围,以避免这种情况。TCP ACK Ping扫描与TCP SYN Ping扫描是非常类似的,唯一的区别是设置TCP的标志位是ACK而不是SYN。此探测方法可以探测阻止SYN数据包或ICMP回显请求的主机。虽然许多防火墙将阻止SYN数据包,但是TCP ACK Ping扫描和TCP SYN Ping扫描的结合可以大大提高通过防火墙的概率。发送1个ACK标志的TCP包给目标主机,如果目标主机不是存活状态则不响应该请求,如果目标主机在线则会返回一个RST包。
3. 基于UDP存活主机发现技术
用户数据报协议(User Datagram Protocol,UDP)也是一个位于传输层的协议,它完成的工作与TCP是相同的。然而,由于UDP协议是非面向连接导向的,UDP端口的探测不能像TCP端口的探测那样依赖于连接建立过程,也就是说,不能尝试telnet等TCP协议类型命令,这也导致了UDP端口扫描的可靠性不高。因此,虽然UDP协议比TCP协议简单,但是扫描UDP端口是相当困难的。
当一个UDP端口收到一个UDP数据包时,如果该端口关闭,它将向发送端回一个ICMP端口无法访问的数据包;如果它是开放的,它将忽略数据包,也就是说,它将被丢弃而不返回任何信息。
这样做的好处是可以完成对UDP端口的探测,但缺点是扫描结果的可靠性相对较低。因为当一个UDP数据包被发送而没有收到响应时,可能是因为UDP端口打开了,也可能是因为数据包在传输过程中丢失了。此外,扫描速度非常慢。原因是RFC1812限制了ICMP错误消息的生成速度。例如,Linux将ICMP数据包的生成速率限制为每4 s 80次。当超过此限制时,它将暂停1/4 s。
4. 端口、服务本扫描
端口探测根据协议划分可以分为TCP端口探测和UDP端口探测。由于TCP技术相对UDP技术要复杂一些,所以TCP的探测手段也比UDP多。图1为端口扫描的方式。
图1 端口扫描方法
其中,同步序列编号(Synchronize Sequence Numbers,SYN)扫描是最为流行的一种扫描方式,扫描方式速度极快,可以在一秒钟扫描上千个端口,SYN扫描也不容易被网络中的安全设备所发现。
如图3所示为服务及版本探测探测流程图。在探测流程中,先执行端口探测,端口探测同时也是服务和版本探测的基础,通过端口探测可以排除离线网络设备和关闭的端口,从而缩小了后续探测任务的规模,提高识别效率。本文采用基于半连接TCP SYN的方法,如图2所示。其扫描原理是向目标主机的端口发送SYN包请求连接,目标接收到SYN包后用SYN/ACK响应,探测主机接收到SYN/ACK断开连接后用RST包请求代替ACK响应。这样,三方握手就没有完成,无法建立正常的TCP连接。因此,此扫描不会记录在系统日志中,且这种扫描技术通常不会在目标主机上留下扫描痕迹。
图2 半连接TCP SYN扫描原理
服务和版本探测是通过服务Banner信息进行指纹比对,从而实现对网络空间中的服务和版本的识别。由于每种服务都有着不同的Banner信息,因此可以对服务和版本探测进行识别。客户端与服务器连接后,服务器会向客户端反馈一些信息,这些信息中可能包含所需的服务和版本信息。
在数据处理过程中对扫描的IP地址和端口数据进行分类。分类是将具有相同开放端口的IP地址分类为1个类别,然后针对每个类别,使用多线程方法分别执行服务和版本探测。在服务和版本探测中,通过端口来判断某些服务是不准确的,因为服务可以通过端口映射来改变。banner信息使用软件本身返回的信息为服务和版本探测提供基础。信息的差异可以帮助完成对网络中服务和版本的探测。在这个过程中,由于需要记录发送数据包的状态信息,所以需要使用传统的探测方法来探测整个过程中的服务和版本。
完成端口扫描后,如果开放端口为TCP端口,先建立连接并等待6 s,一些常见的服务如FTP、SSH等则会发送一些banner信息,这个过程称为空探针。将收到的banner信息和服务指纹进行匹配,假如服务完全匹配成功,则该端口的服务识别到此结束,如果未成功则继续扫描。空探针匹配失败或者UDP 探测端口,则会按照指纹顺序进行探测和识别。如果都匹配失败,则判断指纹中是否有回退指令,并按照回退指令发送探测包,并利用响应数据进行指纹匹配,直到匹配指纹结束。
图3 服务及版本探测探测流程
5. 操作系统扫描
操作系统探测是根据应用层获取的banner信息和TCP/IP指纹特征探测操作系统。根据应用层获取的banner信息,可以直接获取一些终端设备的操作系统。当banner与指纹匹配时,就可以完成对这部分设备的操作系统探测。例如,可以根据一些Web服务的HTTP报头信息来获取操作系统的具体信息。
操作系统的探测可以分为两类:传统的操作系统识别技术和基于TCP/IP协议栈指纹的操作系统识别技术。传统的操作系统标识又分为两类:一种是使用操作系统提供的Telnet、文件传输协议(File Transfer Protocol,FTP)和Ping。当客户端使用Telnet和FTP命令时,服务器返回包含操作系统类型的特定信息,另一种是通过Ping探测目标主机操作系统的方法,根据返回的生存时间(Time To Live,TTL)值确定操作系统的类型,因为TCP协议栈在通信时没有指定TTL跳转值。不同的操作系统中,TTL值是不同的,如表2所示。通过TTL判断操作系统的方法虽然简单,但是TTL的值是可以进行更改的,所以结果可信度不高。
表2 常用操作系统的TTL和窗口大小
目前,应用最广泛的操作系统识别方法是基于TCP/IP协议栈指纹的,因为TCP/IP协议栈的设计不同,可以利用这些不同的特征来识别操作系统。一般分为主动探测和被动探测两种方法。
5.1 主动探测
客户端主动向目标主机发送信息。目标主机响应此信息并使用一些信息进行响应。通过分析返回的信息,可以知道远程主机的操作系统类型。这些信息可以等于主机通过Telnet和FTP等正常网络程序交换的信息,也可以是一些精心构造的、正常的或不完整的数据包。
5.2 被动探测
并不向目标系统发送任何数据包,而是通过各种抓包工具来手机流经网络的数据报文,再从这些报文中得到目标计算机的操作系统信息。
主动探测对探测IP具有针对性的特点,而且方便部署,所以在操作系统探测中较为常用。可以通过目标系统对探针的不同反应,发现不同操作系统的差异。通过向目标主机发送特定格式的探针(数据包)来查看目标主机的响应数据,这一过程就是操作系统指纹分析的过程。数据包进行调整的部分包括窗口大小、窗口字段、分片标识、时间戳、序号以及其他一些细节,例如TTL等。
主动探测通过发送多达16个探针的操作系统指扫描包,这些探针利用了TCP、UDP、ICMP等各种协议。基于主动探测操作系统识别流程如下文所述。
- 向目标主机端口连续发送6个带有SYN标志的TCP数据包,响应数据构成SEQ、OPS、WIN、T1等指纹特征值。
- 发送两个不同的ICMP echo请求,响应数据构成IE指纹特征值;
- 发送一个UDP包给一个关闭的端口,响应数据构成U1指纹特征值;
- 发送带ECN位的TCP请求,响应数据构成ECN指纹特征值;
- 最后一组是发送6个不同的TCP包,这6个TCP包的响应结果将对应T2到T7的各项指纹特征值,其中T2、T3、T4会发给打开的TCP端口,T5、T6、T7会发给关闭的TCP端口;
- 结果处理。对返回的数据包进行计算和组织,形成向量,然后将生成的向量结果与指纹数据库文件中的结果进行匹配,以确定被探测主机的操作系统类型。这就完成了单个操作系统的探测过程。
操作系统指纹通过主动探测获取的TCP/IP响应包进行指纹抽取,抽取字段主要包括SCAN、SEQ、WIN、ECN、T1~T7、U1和IE等,指纹示例如下文所示。
每一次扫描结果都用%作为分隔符。
SCAN字段中显示的是使用的主机扫描的信息。其中:D=9/2表示扫描日期;OT=80%CT=7指出在指纹识别过程中使用的TCP端口;CU=31290指出了在指纹识别过程中使用的UDP端口;PV=N表示目标IP地址不属于私有地址;DS=4指出了从探测点到目标主机的距离跳数;G=Y指出这次扫描效果较好;TM=57C9147B指出扫描所消耗的时间;P表示探测主机的操作系统类型。
SEQ字段中:SP=102表示TCP的初始序列号(ISN);GCD=1表示TCP的增量;ISR=10C表示ISN的序率;TI=Z给出了SEQ探针回应数据包中IP头部的ID值;这里面的Z表示所有IP数据包中的id字段都设置为0;II=I给出了ICMP探针回应数据包中IP头部的ID值;TS=7给出了返回的TCP数据包时间戳的信息。
OPS字段中:如O1=M5B4表示TCP数据包每次能够传输的最大数据分段;ST11表示ACK的可选信息和数据包的时间戳内容;N表示为空操作;W0表示窗口大小。
WIN字段中的测试表示6个探针返回值的初始化窗口大小。
ECN字段中:R=Y表示目标是否对探测端进行了回应;DF=Y表示IP数据包的分段标志位是否被设置;T=40表示回应数据包IP中的TTL值;W=3354表示TCP初始化窗口的大小信息;O=M5B4NNS表示TCP选项的信息;CC=Y表示目标的拥塞控制能力;Y表示目标支持ECN。
第1个TCP探针回应为T1;第2个探针是设置了DF位的内容为空的数据包。这个数据包的窗口大小为128,回应为T2;第3个TCP探针是一个设置了FIN、URG、PSH以及SYN标识的数据包,这个数据包的大小为256,回应为T3;第4个探针是一个设置了ACK的TCP包,这个包同样也设置了DF位,大小为1024,回应为T4;第5个探针是一个窗口大小为31 337的数据包,回应为T5;第6个数据包和第4个数据相似,但窗口为32 768,而且这个数据包通常是发往关闭的端口,回应为T6;发送的第7个数据包设置了FIN、URG和PSH标志位,这个探针同样发往一个关闭的端口,窗口大小为65 532,回应为T7;
U1的结果是根据UDP数据包探测返回的结果,这个探针的数据部分是300个C字符,回应为U1。
IE探测基于ICMP协议响应结果。
主动探测的优点是对探测IP具有针对性,即使这些目标不主动生成流量或流量不通过探测节点,也可以通过构造探测包对其进行探测,探测载荷的部署节点也更加灵活。然而,主动探测也有一定的局限性,当目标监测到探测行为可能会主动屏蔽来历不明的探测包,这样就无法获得准确的探测结果。通过主动探测也无法准确获得某些网络节点之间的拓扑连接关系。
此外,主动探测会产生额外的探测流量,导致网络负载增加,所以主动探测将不可避免地干扰网络的当前状态,导致探测结果出现一定偏差。
6. 结语
设备资产识别对网络安全评估与威胁预警有着重要的意义,网络空间已成为国民经济和社会生活的重要场所,网络技术已成为考察和衡量国家核心技术的重要指标,网络安全已成为国家安全的重要构成。
网络资产探测是认识、研究网络空间的根基,研究网络资产探测有助于加强网络安全事件应急指挥能力建设。国内可实现对网络空间IP地址的扫描,达到网络资源探测的目的,能够对每个IP地址的资源进行识别,但相对于国外的技术能力,还需进一步突破精准探测等关键技术。