APP下载

基于模糊测试的GOOSE协议解析漏洞挖掘方法

2022-04-26刘林彬苗泉强李俊娥

中国电力 2022年4期
关键词:字段测试用例测控

刘林彬,苗泉强,李俊娥

(1. 空天信息安全与可信计算教育部重点实验室(武汉大学 国家网络安全学院),湖北 武汉 430072;2. 光电对抗测试评估技术重点实验室,河南 洛阳 471000)

0 引言

电网形态正在向以新能源为主体的新型电力系统演进。新能源大规模并网、亿万级智能化终端设备大量接入,使系统对通信技术的依赖程度日趋增强,广泛分布的新能源场站也为攻击者入侵电力系统提供了更多途径。新型电力系统以数据为核心生产要素,实现源网荷储各环节数据融合,其中发电侧要达到“全面可观、精确可测、高度可控”的目标。光伏、储能等分布式能源系统和风电场等新能源场站依据IEC 61850系列标准建设站内监控系统[1-3],实现大量终端设备的状态监测、遥控和数据测量。

IEC 61850标准使不同厂家的智能电子设备(intelligent electric device,IED)之间实现互相操作和信息共享,其中面向通用对象变电站事件(generic object-oriented substation event,GOOSE)协议主要用于间隔层和过程层多个IED间实时信息的可靠传递,包括开关位置、跳合闸命令、告警信息、间隔互锁等[4]。由于使用组播通信且没有加密、认证等安全措施,攻击者可以轻易篡改或伪造GOOSE报文,使IED误动、拒动或拒绝服务,对继电保护、间隔层逻辑互锁等环节造成严重安全威胁[5-8]。在智能变电站实验室环境下的实际测试也显示,畸形报文攻击很容易造成嵌入式终端拒绝服务。目前DL/T 860.10—2006等一致性测试标准主要检测IED是否符合通信标准,而没有测试IED对畸形报文的处理能力[9]。因此研究终端上线前的安全性测试方法,挖掘其GOOSE协议解析程序可能存在的漏洞,对于新能源场站的安全运行是十分必要的。

模糊测试是一种基于缺陷注入的自动化漏洞挖掘技术[10],通过构造畸形的输入数据使得被测目标发生异常,从而发现被测试目标存在的安全问题。针对传统网络协议的模糊测试研究目前已经比较成熟,出现了Peach、Sulley和Spike等成熟的模糊测试框架。然而,由于工控协议种类繁多,不同厂商对协议有不同的实现方式[11],且工控设备多为嵌入式终端,计算和存储能力较弱,传统网络协议的模糊测试方法无法直接适用于工控协议。

针对工控协议的模糊测试研究也取得了一定的成果。Wurldtech公司提出BlackPeer框架支持对 Modbus TCP协议栈的模糊测试[12],ProFuzz专门针对Profinet协议族进行测试[13],Devarajan在Sulley基础上实现了对间控制中心通信协议(intercontrol center communications protocol,ICCP)、Modbus、分布式网络协议 3(distributed network protocol 3,DNP3)等工控协议的模糊测试[14],文献[15-17]基于Peach实现了Modbus TCP和S7协议模糊测试系统,文献[18]考虑工控协议字段依赖性特点提出一种跨字段的制造报文规范(manufacturing message specification,MMS)协议模糊测试方法,文献[19-20]分别提出了针对工控系统和工控协议的通用漏洞挖掘框架。同时,国内外也出现了一些商用平台支持工控协议的模糊测试。国内,威努特公司自研的工控漏洞挖掘平台[21]可对Modbus、IEC 104、IEC 61850等工控协议进行模糊测试。国外,美国Mu Dynamic公司开发的测试组件Mu[22]支持 Modbus TCP、DNP3和 IEC 61850等常见工控协议。然而,上述研究成果部分基于现有模糊测试框架进行改进,缺乏对工控协议的针对性设计,或是未充分考虑嵌入式终端计算和存储能力的限制;此外,上述研究中的模糊测试异常监测方法大多需要传输控制协议/网际协议(TCP/IP)的支持,无法适用于GOOSE和采样值(sampled value,SV)这类不使用TCP/IP的工控协议。目前针对GOOSE协议的模糊测试研究较少,威努特的工控漏洞挖掘平台虽然支持GOOSE协议的测试,但仅针对协议的范式语法,测试深度不够,挖掘的漏洞类型也相对有限。

因此,本文基于模糊测试提出GOOSE协议解析漏洞挖掘方法,在对GOOSE报文格式进行深入解析的基础上,给出基于报文字段类型、ASN.1编码方式和比特翻转的报文变异策略,以及针对嵌入式终端和GOOSE协议传输机制的异常监测方法,并在智能变电站实验室环境中进行了测试,验证了本文所提方法的有效性,并提出相应的防范建议。

1 GOOSE报文变异方法

模糊测试的测试用例产生方式可以分为生成和变异两大类。本文采用变异方式构造测试用例,通过捕获网络中正常通信的GOOSE报文,根据变异策略修改报文中的数据值, 来构造测试用例。

1.1 GOOSE协议报文结构、TLV介绍

与其他大多数工控协议相比,GOOSE协议的特殊之处在于,GOOSE报文直接封装到以太网介质访问控制(medium access control,MAC)帧中传输,没有使用TCP/IP协议。GOOSE报文的封装方式如图1所示,其中应用协议数据单元(application protocol data unit,APDU)包括可视化字符串类型、32位无符号整型、复合类型和其他类型字段。

图1 GOOSE报文的封装方式Fig. 1 GOOSE message encapsulation mode

GOOSE报文的APDU使用ASN.1编码。ASN.1中基本编码规则的格式是标识-长度-值(tag-lengthvalue,TLV)三元组[23],其中Tag、Length和Value都是8位组,Value可根据需要再次构造为一个三元组,Value的类型在Tag中标识,Value包含的8位组个数在Length中定义。APDU域中各个字段的TLV格式详见图1,每个字段都有一个固定的Tag。

1.2 GOOSE报文变异策略

基于变异的测试用例构造方法,通常基于正常的输入数据(如网络数据包),依据一定的漏洞知识来变异其中的部分数据来构造测试用例。本文分别基于GOOSE报文字段类型、ASN.1编码方式和比特翻转设计变异策略。

1.2.1 基于 GOOSE 报文字段类型的变异策略

为了不破坏以太网帧的基本结构,确保报文在以太网中正常传输,报文变异主要在APDU域内。根据传统网络协议中常见的漏洞类型(缓存区溢出漏洞、整数漏洞和格式化字符串漏洞等)和GOOSE报文的特点,本文提出的基于GOOSE报文字段类型的变异策略包括数值变异策略、字符串变异策略和allData字段变异策略。

(1)数值变异策略。数值变异策略针对整数漏洞,具体包括整数溢出、符号错误和截断错误。利用整数漏洞,攻击者可以实施诸如拒绝服务等攻击行为。对于报文中的整型字段,重点用整数边界值对其进行变异,另外考虑到变异的随机性,随机数也应作为变异选项。数值变异策略如表1所示。

表1 数值变异策略Table 1 Numerical mutation strategy

(2)字符串变异策略。对于字符串类型字段,本文采用了几种常见且容易触发漏洞的变异方式,其中超长字符串容易触发堆溢出漏洞,插入特殊字符容易使终端在解析非预期字符时出现异常,包含格式化字符串的输入可能会导致应用进程崩溃。另外,在单一GOOSE报文中,只使用了一种G O O S E服务,报文中的G o I D、gocbRef、dataSet等字段值在变电站配置描述文件(substation configuration description,SCD)中定义,该文件描述了所有IED的通信参数配置信息。因此,必须对在SCD文件中定义了而未在当前报文字段中使用的正常值进行测试。字符串变异策略如表2所示。

表2 字符串变异策略Table 2 String mutation strategy

(3)allData字段变异策略。allData字段是GOOSE协议中定义的复合数据类型字段,数据集中数据成员类型可以是整形、字符串和布尔量等,并且可以嵌套复合数据,数据集成员的个数在numDatSetEntries字段中表示。正常情况下,allData字段的嵌套层数是有限的,构造多层嵌套的allData数据集成员,可以测试终端的解析能力。另外,删除或增加一定数量的数据集成员,使成员个数与numDatSetEntries值不一致,将可能导致终端错误解析allData字段以外的其他数据或者丢失部分数据集成员,引起解析异常。allData字段变异策略如表3所示。

表3 allData字段变异策略Table 3 Mutation strategy of allData field

1.2.2 基于 ASN.1编码方式的变异策略

ASN.1编码方式使得应用层的数据具有统一的表示方法,基于ASN.1编码方式的变异策略,可以测试终端能否处理非正常编码数据。Tag值变异,可能导致解析字段值的时候按照错误的类型进行解析,而Length值变异,使得在解析字段值的时候,可能将下一个TLV的部分数据作为本字段的数据进行解析,或者只解析部分Value数据。基于ASN.1编码的变异策略如表4所示。

表4 基于ASN.1编码方式的变异策略Table 4 Mutation strategy based on ASN.1 encoding

1.2.3 基于比特翻转的变异策略

比特翻转是指数据中的一个或多个比特发生位翻转如1变为0或0变为1,这种现象在中央处理器(CPU)工作不稳定或者通信信道受到干扰的情况下容易发生。发生比特翻转后的数据,具有触发未知漏洞的可能性。基于比特翻转的变异策略如表5所示,每个变异规则按“bitflip 翻转量/步长”的形式表示。

表5 基于比特翻转的变异策略Table 5 Mutation strategy based on bit flip

1.3 GOOSE测试用例构造方法

GOOSE测试用例利用1.2节提出的变异策略对解析后的GOOSE报文字段进行变异后产生。本文设计了单字段变异和多字段组合变异2种方法来构造GOOSE测试用例。

(2)多字段组合变异。根据GOOSE协议规约中字段间的关联关系确定多字段组合方式,如GOOSE接收机制中接收GOOSE报文后,关联检查goID、gocbRef、dataSet和confRev等参数是否匹配,根据stNum和sqNum关联比较,判断接收的报文是重传报文还是变位报文;版本配置号字段confRev表示数据集引用名字段dataSet配置改变次数;当dataSet字段为NULL时,ndsCom字段值应为TRUE,表示此控制块需要进一步配置。基于此可确定的多字段组合至少包括(goID,gocbRef,dataSet,confRev)(stNum,sqNum)(confRev,dataSet)和(dataSet,ndsCom)。

多字段组合变异在单字段变异之后进行,首先排除单字段变异导致目标设备异常带来的影响。因此,在多字段组合变异之前,使用集合记录所有引起目标设备异常的测试用例所采用的变异操作。每个多字段组合包含个 字段,对于字段,其单字段变异所使用的变异操作集合为。在多字段组合变异中,可使用的变异操作集合为多字段组合的变异操作集合为,对每个多字段组合,逐一使用组合变异操作进行变异,每次组合变异产生一个测试用例。

2 电网嵌入式终端异常监测方法

传统网络协议模糊测试中常用的异常检测手段主要有基于返回信息的异常分析、第三方调试器监控和日志记录跟踪3种方法[11]。但由于GOOSE协议是订阅发布式,非请求应答式,故不会有返回信息。另外,在电网嵌入式终端上安装第三方调试程序并不可行,且由于计算和存储等能力受限,难以对嵌入式终端的异常状态进行日志记录与审计。为此,本文提出基于GOOSE心跳报文和系统运行信息的异常监测方法,利用GOOSE协议的传输机制和终端在运行过程中的可观测的状态信息进行异常监测,而无须在终端上安装额外的监测程序。

2.1 基于心跳报文的异常监测方法

GOOSE协议使用一种时间逐渐加长的重传机制来保证通信可靠性。报文发送过程中变位报文和心跳报文结合,传输机制如图2所示。当新的事件发生,先发送第一帧报文,再发送两次重传报文,此时的最短重传时间为T1,随后重传时间T2、T3逐渐加长,分别以T2和T3的间隔重传一次报文,最后重传时间增至最大值T0,传输达到稳态。稳态情况下持续重传报文,直到新事件发生。GOOSE告警机制规定:在2倍允许生存时间内(一般为4T0)没有收到下一帧重传报文,则判断通信中断。在实际的智能变电站中T0通常取3 s或5 s,根据此机制,当4T0时间内没有接收到被测终端的心跳报文时,则判断被测终端发生异常导致通信中断。

图2 GOOSE传输机制Fig. 2 GOOSE transmission mechanism

2.2 基于系统运行信息的异常监测方法

基于心跳报文的异常监测方法适用于被测终端发生如宕机等严重异常现象。实际中,还存在其他异常现象,如通信模块异常、进程中断等,这些情况下终端的心跳报文依然正常,此时则需要依据下列系统运行信息进行辅助监测。

(1)数据采集与监控系统(supervisory control and data acquisition,SCADA)后台告警信息。位于智能变电站站控层的SCADA系统对现场的运行设备进行监视和控制,并提供各类信号报警功能。

(2)设备操作面板告警信息。智能变电站中测控装置等设备通常配置了一块操作面板,提供设备操作、设备状态信息查看和异常告警等功能。

(3)设备指示灯告警。变电站所有设备都具有“运行”和“告警”等指示灯,可用于异常判断。

3 GOOSE协议解析漏洞挖掘系统架构与测试流程

3.1 系统架构

GOOSE协议解析漏洞挖掘系统架构如图3所示,包含的主要功能模块如下。

图3 GOOSE协议解析漏洞挖掘系统架构Fig. 3 Architecture of GOOSE protocol parsing vulnerabilities mining system

(1)报文捕获模块:捕获过程层网络中被测终端接收的GOOSE报文,以.pcap格式存储,作为报文样本构造模块的输入。

(2)报文样本构造模块:解析存储的GOOSE报文字段值,根据GOOSE协议规范构造报文样本。

(3)报文变异模块:包含3个变异器,每个变异器都有对外接口,以供测试用例构造模块调用。

(4)测试用例构造模块:利用报文变异模块提供的接口对报文样本进行单字段和多字段变异,构造测试用例集合,以1 s的间隔发送至被测终端,同时维护一个暂存已发送测试用例的报文队列。

(5)异常监测模块:结合心跳报文和系统运行信息监测被测终端异常情况,若模块监测到心跳报文异常,自动存储引起异常的测试用例,若终端面板或者监控后台显示异常,则需手动存储。存储引起异常的测试用例之前,以10 s的间隔重新发送队列中的报文,若被测终端再次发生异常,则准确定位到引起异常的测试用例。

3.2 测试流程

使用本文所提出的GOOSE协议解析漏洞挖掘方法进行实验测试的流程如图4所示。

图4 测试流程Fig. 4 Flowchart of test

(1)测试准备阶段,分析SCD文件,确定被测终端发布和订阅的GOOSE服务,将被测终端订阅的GOOSE报文作为样本报文,发布的GOOSE报文作为心跳报文,利用网络捕包工具分析样本报文的组播MAC地址和心跳报文的源MAC地址。

(2)测试执行阶段,使用本文设计的模糊测试系统根据步骤(1)中记录的样本报文组播MAC地址捕获样本报文,执行模糊测试,系统自动完成样本报文的解析和变异,构造测试用例发送至待测终端,系统自身维护一个30个报文的序列,利用第2节所提出的异常监测方法监测被测终端的运行情况。

(3)异常处理阶段,若发现被测终端出现异常,则重新发送当前已发送报文序列,观测设备是否再次发生异常,并记录再次引起异常的测试用例,以便进行详细分析。

4 实验与分析

4.1 实验环境

为验证本文所提出模糊测试方法能否有效挖掘电网嵌入式终端在解析GOOSE协议时存在的漏洞,及系统架构与测试流程的合理性,本文实现了图3所示模糊测试系统,并按照3.2节的测试流程,在依据IEC 61850“三层两网”结构建设的智能变电站实验室环境中进行了测试。如图5所示的实验拓扑结构中,监控主机运行SCADA系统,可监控各个设备的运行状态,并向间隔层测控装置下发MMS控制命令报文控制刀闸动作。位于间隔层的测控装置接收MMS控制命令报文,并向过程层智能终端发送GOOSE控制命令。位于过程层的智能终端执行控制命令,直接控制刀闸,并向测控装置上送刀闸的状态信息。模糊测试主机通过光电转换器接入过程层交换机的镜像端口。本实验选择测控装置和智能终端作为模糊测试目标,它们代表了GOOSE通信中两类最重要的终端。

图5 实验系统拓扑Fig. 5 Topology of experiment system

经过查询SCD文件,该测控装置和智能终端之间GOOSE服务的“发布-订阅”关系如图6所示。其中,智能终端订阅了测控装置发布的GOOSE 0 x1053服务,测控装置订阅了智能终端发布的 GOOSE 0 x104 E 服务。

图6 智能终端和测控装置“发布-订阅”关系Fig. 6“Publish-subscribe” diagram of intelligent terminal and measurement and control equipment

4.2 测试结果

对测控装置和智能终端的测试结果如表6所示,本次测试共发送GOOSE测试用例18895个,每种类型变异策略所对应的测试用例数量统计如表7所示,测试共耗时将近6 h。

表6 测控装置和智能终端的模糊测试结果Table 6 Fuzzing results of measurement and control equipment and intelligent terminal

表7 测试用例数量Table 7 The number of test cases

(1)测控装置测试结果。对测控装置进行模糊测试时,观察到监控后台和测控装置操作面板上出现“GOOSE网中断”告警,如图7和图8所示。此时,监控后台下发刀闸开合指令后显示“执行失败”,但刀闸状态已发生预期变化。若手动开合刀闸,不能在监控后台观测到刀闸状态变化。测控装置重启后,功能恢复正常。

图7 监控后台“GOOSE网中断”告警信号Fig. 7“GOOSE network interruption” alarm signals of the monitoring system

图8 操作面板“GOOSE网中断”告警信号Fig. 8“GOOSE network interruption” alarm signals of operation panel

(2)智能终端测试结果。对智能终端进行模糊测试时,观察到监控后台出现“GOOSE网中断”告警,如图7所示,智能终端面板上“运行灯”灭,“告警灯”亮,其他指示灯均显示异常,如图9所示。此时,监控后台下发刀闸开合指令后显示“执行失败”,刀闸状态未发生预期变化。若手动进行刀闸开合,可以在监控后台观测到刀闸状态变化。智能终端重启后,功能恢复正常。

图9 智能终端指示灯异常Fig. 9 Abnormal indicator light of intelligent terminal

4.3 结果分析

分析测试结果之前,需要了解变电站综合自动化系统中的遥控功能,一次遥控操作如图10所示。

图10 遥控流程Fig. 10 Flowchart of remote control

4.3.1 测控装置测试结果分析

本文对测控装置进行模糊测试时使用的样本报文为 GOOSE 0 x104 E,此报文由智能终端发送给测控装置,用于上送刀闸变位信息。经调研,该测控装置采用模块化设计,此业务报文由智能开入模块接收并处理。畸形报文导致智能开入模块发生异常,使得测控装置不能正确接收智能终端上送的刀闸变位信息,而监控后台此时接收到的仍然是遥控命令执行前的状态信息,因此在将变位信息与遥控命令作对比时判断为“执行失败”。但由于测控装置的其他功能模块工作正常,监控后台下发的遥控执行命令被正常处理,刀闸状态发生变化。实际运行中,若测控装置受到此类畸形报文攻击,监控后台将不能正常观测一次设备的正确状态,影响运维人员的判断和操作,并且此故障状态仅能通过重启测控装置解除,可能造成更大的损失。

图11 a)为本次测试使用的样本报文中all-Data数据集字段,包含24个数据,数据类型包括bit-string(位串)和utc-time(UTC时间)。在本次测试中,发现引起测控装置异常的畸形报文总共有3个,分别由allData数据集中第17、21、23个数据变异而来,均为bi-string类型。图11 b)为样本报文的allData数据集字段第23个数据发生变异得到的畸形报文。具体为该数据第一个字节的最低一位比特发生翻转,由原本的“x84”变异为“x85”。在GOOSE协议规范中,allData数据集中的数据使用ASN.1编码为TLV的格式,发生变异的字节“x84”为bit-string类型字段的标识,而变异后的“x85”为integer类型(整型)字段的标识。测控装置的智能开入模块在处理此畸形报文时将原本的bit-string类型的数据解析为integer类型,而模块内缺乏相应的异常数据处理机制,因此发生异常。

图11 测控装置模糊测试的GOOSE报文的allData字段Fig. 11 AllData field of GOOSE message used for fuzzing of measurement and control equipment

4.3.2 智能终端测试结果分析

本文对智能终端进行模糊测试时使用的样本报文为 GOOSE 0 x1 053,次报文由测控装置发送给智能终端,携带遥控执行命令。经调研,该智能终端同样使用模块化设计,此业务报文由开出模块接收并处理。畸形报文导致开出模块发生异常后,智能终端不能正确处理测控装置下发的遥控执行命令,因此刀闸状态未发生预期变化。此时,刀闸状态和遥控命令的预期状态不一致,监控后台判断为“执行失败”。但由于智能终端的其他模块工作正常,手动改变刀闸状态后,刀闸状态信息可以正常上送,监控后台可以观测到刀闸状态变化。实际运行中,若智能终端受到此类畸形报文攻击,一次设备将不能执行监控后台的控制命令,且此故障状态仅能通过重启智能终端解除,可能造成更大的损失。

图12为对智能终端进行模糊测试时使用的样本报文,该报文为测控装置向智能终端发送的携带遥控执行命令的GOOSE报文。引起智能终端异常的畸形报文由goID字段变异产生,畸形报文如图13所示。具体变异为goID字段第2个字节的最高两位比特同时发生翻转,由原本的“x17”变异为“xd7”。在GOOSE协议规范中,报文的每个字段经ASN.1编码为TLV的格式,发生变异的字节为g o I D字段T L V的Length部分,该字节代表goID字段内容的字节数。智能终端的开出模块在解析此畸形报文的goID字段时,按照错误的长度“xd7”进行解析,即将goID字段的后续字段解析为goID字段的内容,解析发生错误导致智能终端发生异常。

图12 智能终端模糊测试使用的GOOSE样本报文Fig. 12 GOOSE sample message used for fuzzing of intelligent terminal

图13 引起智能终端异常的GOOSE测试用例Fig. 13 GOOSE test case causing abnormality of intelligent terminal

4.4 畸形报文攻击防范建议

防范上述畸形报文攻击可从终端生产厂家和系统运维2个方面着手。

对终端生产厂家来说,应加强出厂前安全测试并做好漏洞修补,特别是对业务相关的模块进行改进。一方面,需严格按照IEC 61850一致性测试标准,对接收GOOSE报文中stNum和sqNum进行检查,并结合SCD文件中对通信业务的定义,检查接收报文的各个字段是否符合SCD文件中的配置,确保终端能直接丢弃不符合规范的报文。另一方面,利用本文提出的畸形报文构造方法对终端进行否定测试,对发现的问题通过改进程序予以解决,保证终端在解析畸形报文时具有错误处理措施,以弥补一致性测试缺少对数值越界、格式化字符串、编码异常和比特翻转等类型畸形数据测试的缺陷。

对系统运维单位来说,可在系统中部署额外的报文检测装置进行畸形报文检测和过滤。智能变电站中,一个通信环境中的电力业务往往是固定的,检测装置可通过学习当前环境中的通信报文,记录报文中的参数和报文携带的数据量、数据类型等特征,实现对畸形报文的判别和过滤。

5 结论

深入挖掘电网嵌入式终端可能存在的安全漏洞,分析漏洞产生的原因,及时提出整改建议,既可以帮助厂家在终端上线前进行漏洞修补,也可以指导新能源场站安全防护措施的部署。

本文针对现有工控协议模糊测试方法无法适用于GOOSE协议和未考虑到嵌入式终端系统特点的问题,提出了基于模糊测试的GOOSE协议解析漏洞挖掘方法。通过深入分析GOOSE协议格式、字段类型和编码方法,提出了3种变异策略,能较为全面地发现GOOSE协议解析过程中可能存在的漏洞;考虑电网嵌入式终端计算和存储能力的限制,提出了两种异常监测方法,可从多个角度对模糊测试过程中嵌入式终端发生的异常情况进行监测;为了便于本文方法的实施,论文给出了系统架构和测试流程;在智能变电站实验室环境中,对某厂家智能终端和测控装置进行了实验测试,成功发现2个未公开安全漏洞,验证了本方法的有效性。

本文方法可用于新能源场站和智能变电站嵌入式终端的GOOSE协议解析漏洞挖掘,对标准(IEC 61850)中的MMS协议和SV协议漏洞挖掘也具有参考意义;实验测试发现的2个GOOSE协议解析漏洞及其防范建议,可直接作为终端整改和运行防护的依据。后续将对更多类型的终端进行测试,提出具有针对性的安全防护方案,以保障新能源场站和智能变电站的安全运行,满足新型电力系统对发电侧数据的“可观、可测、可控”需求。

猜你喜欢

字段测试用例测控
带钩或不带钩选择方框批量自动换
测试用例自动生成技术综述
回归测试中测试用例优化技术研究与探索
昆山祺迈测控设备有限公司
浅谈台湾原版中文图书的编目经验
基于现代测控技术及其应用分析
虚拟仪器技术在农业装备测控中的应用
向着新航程进发——远望7号测控船首航记录
无正题名文献著录方法评述
无正题名文献著录方法评述