一种针对拟态工业控制器的裁决及调度方法

2022-06-02 10:44杨汶佼刘星宇张兴明张汝云
信息安全研究 2022年6期
关键词:共模模拟量拟态

杨汶佼 刘星宇 张 奕 张兴明 张汝云

(之江实验室智能网络研究院 杭州 311100)

近年来,随着我国制造强国战略的全面推进,工业领域数字化、网络化、智能化的改造加快发展,逐渐成为我国实施制造强国和网络强国战略的重要保障.在我国,工业控制系统的应用超过80%为涉及国计民生的关键基础设施(如铁路、城市轨道交通、供水、供电等),其安全性关系生产安全和经济发展,是对现实世界造成直接影响的“大问题”[1].目前我国工控安全面临越来越严峻的安全形势,虽然近几年国产工控系统技术,尤其是在安全可靠性上有了长足的进步,但长期以来我国工控领域的嵌入式软件、总线协议、工控软件等核心技术仍未实现自主可控,特别是针对未知漏洞、未知后门的攻击基本没有安全防护能力,同时也面临着安全威胁加速渗透、攻击手段复杂多样等新挑战.目前,工业控制系统的安全防护还是基于传统的被动式防御理念,采用的防火墙、入侵检测、入侵防护系统等安全手段已经无法起到有效的防护作用.

文献[2-5]提出了网络空间拟态防御(cyberspace mimic defense, CMD)理论,将不可控的网络空间安全威胁问题转化为自主可控的网络空间服务鲁棒性控制问题,从内部构造机制出发将网络空间的被动防御转化为主动的内生安全[6].拟态防御技术以动态异构冗余(dynamic heterogeneous redundancy, DHR)为核心架构,该架构由输入代理、异构功能等价执行体、裁决器、输出代理等组成.裁决器作为各执行体的输入代理,将输入数据向各执行体进行发送,同时对各执行体的处理结果进行判决产生唯一输出[7].另外裁决器完成对各执行体的调度,并根据裁决结果对处于异常状态的执行体进行清洗恢复.拟态防御的核心思想是通过功能等价体的动态切换,使异构冗余架构的执行体具有动态化、随机化的属性,使攻击者的攻击难度和成本大幅提高.

1 相关研究

目前工控系统中的硬件控制器通常采用了冗余机制,但几乎都是同构的冗余,从硬件芯片型号到执行体中的执行程序都是相同结构、相同的代码.芯片、驱动程序、操作系统、执行程序中一旦有1个后门被利用或者漏洞被攻击成功,则整个控制器就被攻击成功了.针对以上问题,文献[8]提出了一种在工业控制领域应用的拟态安全处理机架构.该架构硬件部分由3套异构冗余处理机及其外围电路以及1个拟态调度器组成.软件部分包括设备驱动、中间件以及异构操作系统,但该系统在执行体调度时不存在随机性和动态性,且当某一执行体遭受攻击进入清洗恢复状态时,系统安全性能降级,此阶段该系统被攻击的风险大大提升.文献[9]提出了一种4异构冗余执行体的拟态架构,与文献[8]相比系统的随机性和动态性有所加强,但并没有考虑当遭受到共模攻击时,如何提升系统的安全增益.文献[10]提出了一种基于历史表现的执行体选择方法.文献[11]提出了一种基于拟态防御的差异化反馈调度判决方法,根据判决方法的可靠度系数及多数判决方法选出可信的执行体.但上述调度策略基于系统存在大量可利用的异构执行体,而拟态工业系统由于成本和开发难度的限制,很难做到支持大量可利用的异构执行体,因此上述调度策略在这种条件限制下不能取得理想的结果.另外工业系统中执行体输出的数据成分复杂,目前基于一致性的择多判决方法[12]并不能准确裁决.

因此,本文首先提出了针对工业现场协议的裁决方法,然后提出了一种在有限的异构资源下的基于共模防御系数的执行体调度方法,最后通过仿真实验将该方法与现有的随机调度算法进行对比,分析算法在安全性、降低共模攻击成功率以及在发生共模攻击后减少逃逸时间方面的性能.

2 基于混合数据类型工业协议的拟态裁决方法

在不同的工业应用场景中,尤其是在一些复杂的工业现场,工业控制系统需要接入大量不同类型的输入输出(input and output, IO)设备,包括开关量IO设备和模拟量IO设备,其中开关量IO设备的输入和输出为0或1,模拟量IO设备的输入和输出为数据量程,因此在工业控制系统对各类IO设备进行实时控制的工业协议中会混合有不同的数据类型.目前针对混合数据类型工业协议还没有特别高效和准确的拟态裁决方法,主要采用的是基于内容一致性的择多裁决方法.由于不同的模拟量IO设备具有不同的数据量程,异构主控制器中使用浮点数计算模拟量信号,由于异构主控制器的浮点数据计算精度存在差异,浮点数计算结果的二进制数值会不相同,因此在使用基于内容一致性的择多裁决方法对混合数据类型工业协议进行裁决时,对于开关量IO设备的控制数据有良好的裁决效果,但是对模拟量IO设备的控制数据无法进行准确的裁决,存在对主控制器的攻击误判甚至出现攻击逃逸等问题.本文针对上述问题,提出了一种应用于异构多执行体架构的拟态工业控制系统的基于混合数据类型工业协议的拟态裁决方法.

2.1 模拟量数据归一化

要实现对模拟量数据的裁决,首先需要对模拟量数据进行归一化处理,在每个控制周期主控制器单元需要对不同数据类型的IO实时控制数据进行归类,按照数字量和模拟量分别进行计算并组包,并在协议中的特定位置进行标记.每个控制周期各执行体在进行IO设备模拟量计算时,需要将不同IO设备的模拟量归一化为与物理意义无关的纯数字量,具体如式(1)所示:

(1)

其中Ri为归一化值,ri为实际IO设备模拟量数值,Fi为该IO设备的量程值,d为精确有效数字对应的放大系数,δi为各异构主控制器的浮点数计算误差.

计算各异构主控制器输出的归一化误差如式(2)所示:

δi=|Ri-avg(R1,R2,…,Rn)|,

(2)

其中δi为主控制器i的归一化误差,Ri为主控制器i的归一化值,avg(R1,R2,…,Rn)为所有主控制器单元归一化值的平均值.

2.2 裁决过程

结合各执行体当前状态和调度机制,从中选出3个执行体进入裁决池.将裁决池中执行体发送的IO控制数据进行解析,按照不同的数据类型,将数据分别放入不同的裁决区中进行裁决,数字量放入裁决区A,模拟量放入裁决区B,分别对裁决区A和裁决区B中的数据进行择多裁决,数字量和模拟量采取不同的判决方式.具体判决规则如下:

进行数字量类型数据判决时,判断3个执行体相同位号对应的数字量值是否一致,如果某1个与其他2个不同,则认为特殊的这个位号出错,若三者都不一致,则三者都出错.

进行模拟量类型数据判决时,先取3个执行体相同位号对应的模拟量的中值,假设{Q1,Q2,Q3}为3个执行体相同位号对应的模拟量,其中Q1≤Q2≤Q3,则中值为Q2;再计算其他2个值与中值的偏差,如果偏差大于误差配置值则认为该执行体位号对应的值出错,假设δ为误差配置值(通常异构主控制器的浮点数据计算精度优于0.01%),若Q2-δ≤Q1≤Q2,则Q1对应执行体的该位号正确,若Q1Q2+δ,则Q3对应执行体的该位号出错.

裁决时遍历所有裁决区数据,判断为出错的执行体,累加1个出错数,所有位号轮询后累积出错数最多的执行体判定为异常,出错最少的执行体判定为可信的执行体,出错数在中间的执行体判定为中间状态,若3个执行体出错数一致,则都判定为出错,取判定状态为正常的执行体的结果作为裁决结果.裁决结束后,将裁决区A和裁决区B的裁决结果相加作为最终的裁决结果,将裁决结果错误数最少的执行体所对应的IO设备控制数据标记为可信数据,将裁决结果错误数最多的执行体标记为异常;若裁决结果错误数最少的主控制器有多个,则随机选取其中的某个执行体,将其所对应的IO数据标记为可信数据.

3 基于共模防御系数的调度方法

根据拟态理论,在拟态系统中采用的异构执行体越多,获得的安全增益越大,但同时也伴随着系统的复杂度变大、成本变高、可维护性变差等问题[13].因此在实际的工程设计中需要对系统的复杂度和安全性进行折中.在本文的实际设计方案中,采用的是具有4个异构执行体的工控处理系统.在文献[9]中对4异构执行体处理机系统的安全增益进行了详细分析,经过择多判决后,系统的错误率降低得非常明显,超过2个数量级.本文在此基础上针对4个异构执行体的工控系统提出了一种基于共模防御系数的调度方法,旨在保证系统安全增益的同时能够减小共模攻击的成功率并缩短逃逸时间.

3.1 前提假设

假设1.由于系统内含有多异构执行体,系统的输入输出设计复杂,为便于分析,在本文中假设输入和输出部件不会对系统的安全增益产生影响.

假设2.为便于分析,假设对执行体中任一漏洞攻击成功则导致执行体失效,且这种失效在时间维度上可以看作是均匀的随机事件.

假设3.为便于分析,在简化模型中,假设对系统中不同执行体的攻击致失效率是相同的,且2个执行体间的失效是相互独立的.

假设4.为便于分析,任何攻击成功则导致失效的执行体,可在对执行体进行清洗后重新恢复.

3.2 相关定义

定义1.共模攻击.

VULi与VULj相互之间的重合部分称为VULi与VULj的共生漏洞.对于2个执行体间的共生漏洞,将其称为2阶共生漏洞.以此类推,将k个执行体间的漏洞称为k阶共生漏洞.利用共生漏洞发起的攻击称为共模攻击.

定义2.拟态逃逸.

定义3.恢复时间TH.

恢复时间TH为失效的执行体被裁决器清洗到其恢复进入工作状态并与其他执行体实现状态同步所需要的时间.

定义4.拟态逃逸时间TC.

从系统因受到针对共生漏洞的攻击导致系统出现拟态逃逸,到系统恢复到正常工作状态所需要的时间TC.

定义5.异构度σij.

在拟态防御中,执行体对象结构差异越大越能增加系统内部结构的复杂性,执行体之间存在共生漏洞的概率就越小.异构度包括许多方面,如编程语言、运行的操作系统平台、硬件架构等[15].异构度是用于描述异构程度的一种量化参数,数值越小代表结构差异越大,且σ∈(0,1].σij表示第i个执行体与第j个执行体之间的异构度.

定义6.执行体失效概率Pi.

定义7.共模防御系数μij.

μij表示第i个执行体与第j个执行体之间的共模防御系数,数值越小表示发生共模攻击的概率越低,系统初始化状态时,每个执行体间的共模防御系数就是各执行体间的异构度,正常运行时,裁决器根据执行体每次的输出情况,判断执行体是否受到共模攻击并更新共模防御系数.式(3)为共模防御系数的更新公式:

(3)

其中wij为第i个执行体与第j个执行体之间发生共模攻击的次数,当裁决器判定第i个执行体与第j个执行体发生共模攻击时,会将其加1.T为系统运行的周期数.a为常数,用来调节共模防御系数受异构度与共模攻击概率的影响程度.

共模防御系数的可行性说明:由上述的共模防御系数定义及更新机制可知,执行体的共模防御系数表示执行体间的异构程度以及一段时间内各异构体间受到共模攻击的频率,共模防御系数越小表明该执行体之间发生共模攻击的概率越低.根据式(4)可以得到当发生共模攻击时,选择共模防御系数较小的一组执行体比随机选择一组执行体发生共模攻击逃逸的概率要小.

(4)

3.3 调度策略

3.3.1 调度方式

本文设计的拟态工业控制系统含有4个异构的执行体,在正常工作时,策略控制与调度模块随机选取4个异构的执行体中的3个进入裁决池,裁决器按照第2节所述的裁决方法进行裁决,对裁决结果异常的执行体进行标记,当执行体被标记的异常数达到所设定的清洗阈值后,裁决器对该执行体进行清洗操作.系统正常工作时的调度方式如图1所示:

图1 系统正常工作时的调度方式

在每个裁决周期,裁决模块会监控各个执行体的运行状态,并将各执行体的工作状态反馈给策略控制与调度模块.在系统的运行过程中各执行体会产生以下4种状态:工作状态、清洗状态、考察状态、挂起状态.

工作状态:默认执行体的状态为“工作状态”,处于该状态时执行体参与系统的裁决调度.对于异常数达到清洗等级的执行体,裁决模块下发相应的清洗命令,同时将该执行体的状态记录为“清洗状态”.如果记录的某个执行体清洗次数达到“挂起”等级,裁决模块下发挂起命令,同时将该执行体的状态记录为“挂起状态”.挂起状态时需要告警通知维护人员干预.

清洗状态:当某一执行体进入到“清洗状态”后,该执行体不参与裁决调度,当裁决模块收到“清洗状态”的执行体发送的数据后,将该执行体的状态记录为“考察状态”.

考察状态:为了规避执行体恢复的震荡期而设置考察状态,标记为“考察状态”的执行体不参与裁决调度,考察周期数根据实际配置确定,当考察周期达到后将该执行体标记为“工作状态”.

挂起状态:被标记为“挂起状态”的执行体不参与裁决调度,同时该执行体也应该停止发送实时数据.如果该执行体被人工干预后重新工作,则裁决模块应将其标记为“考察状态”.

执行体各个状态间的切换示意图如图2所示:

图2 执行体状态切换示意图

当有执行体不处于“工作状态”,系统会因缺少可调度和裁决的执行体时,系统的安全等级会进行降级,不同的安全等级下系统的调度策略如表1所示:

表1 不同安全等级下系统的调度策略

3.3.2 共模攻击识别及处置

当裁决模块在进行裁决时,若出现裁决结果为2∶1(即某2个执行体裁决结果一致且与另一个不一致),则裁决模块会将备用的执行体加入重新进行裁决,具体调度如图3所示.

图3 加入备用执行体裁决示意图

若此时裁决结果为3∶1(即3个执行体裁决结果一致且与另一个不一致),则判定不一致的执行体状态异常,裁决模块对其进行清洗.

若裁决结果为2∶2(即4个执行体裁决结果两两一致),则裁决模块判定系统受到共模攻击,此时选取共模防御系数较小的一组执行体作为可信执行体,并从另一组执行体中随机选择1个执行体进行清洗.

待清洗的执行体恢复正常工作模式后,裁决模块重新对4个执行体进行裁决,若裁决结果为3∶1,则认为清洗的这一组执行体发生了共模攻击,且清洗选择正确,裁决模块更新这一组执行体的共模防御系数,同时将该组另一个执行体清洗.

若重新裁决后,裁决结果仍为2∶2,则判定未清洗的这一组执行体发生了共模攻击,且裁决模块未正确选择清洗对象,系统发生共模攻击逃逸,此时将发生共模攻击的这一组执行体全部清洗并更新这一组执行体的共模防御系数.

若裁决模块对某一执行体连续清洗次数超过一定的敏感度阈值γ后,则裁决模块判定未清洗的这3个执行体遭受了3阶共模攻击,且发生共模攻击逃逸,此时将发生共模攻击的这3个执行体全部清洗.当裁决模块判定系统受到3阶共模攻击超过敏感度阈值threshold后,系统在正常工作时会采用所有执行体都进行裁决的4余度调度策略,如图4所示:

图4 执行体4余度调度策略示意图

3.3.3 算法描述

综合上述共模攻击的识别及处置并结合拟态随机调度的策略,具体算法描述如下:

算法1.HPF(high pass factor)调度算法.

输入:调度集E(E1,E2,E3,E4)、敏感度threshold;

输出:裁决结果F.

① 初始化超阈值执行池列表,OverList=null;

② fori=1;i

③ 调度集E(E1,E2,E3,E4),从调度集中各执行体的输出结果随机选择3个结果构建结果池PoolList(x,y,m),剩下的1个执行体的输出结果为备份结果BackUpList(n);

④ 计算PoolList(x,y,m).δi;/*择多判决出各执行体输出结果*/

⑤ ifPoolList(x,y,m).δi==3∶0

returnPoolList(x,y,m);

⑥ elsePoolList(x,y,m).δi==2∶1;

PoolList(x,y,m).add(BackUpList(n));

/*将备份结果添加到结果池中*/

end if

returnMove(PoolList[x,y,m,n].μmax,OverList);/*将其中共模防御系数μ较大的执行体移出结果池并对其进行清洗*/

⑨PoolList[x,y,m].add(new(m));

/*将清洗过并重新上线的执行体n的结果数据加入结果池中*/

end if

returnPoolList[x,y,m,n].remove(n);

/*将占少数数据结果的执行体n移出结果池并对其进行清洗操作*/

returnPoolList[x,y].P(σ)=PoolList[x,y].P(σ)+p2;/*执行体x,y被共模攻击概率增加p2*/

end if

end if

/*发生共模攻击概率超过阈值次数加1*/

end if

结合基于混合数据类型工业协议的拟态裁决方法以及基于共模防御系数的调度算法,本文设计的针对拟态工业系统的调度裁决方法如图5所示:

图5 针对拟态工业系统的调度裁决方法

4 仿真实验

本文提出了一种面向拟态工业控制系统的调度方法与判决方法,为了验证该方法的有效性,本节对HPF调度算法进行了仿真分析,并与文献[9]提出的基于4个执行体的随机调度算法(Stochastic调度算法)进行了性能对比.

4.1 仿真环境

本文结合工程实际设计了一个具有4个异构执行体的工业控制系统模型,在仿真验证环节中仅保留最基本的控制节点要素,即控制器单元、仲裁器和模拟IO单元.为模拟拟态工业控制系统的异构特征,其中4个控制器单元采用不同架构的处理器.

仿真环境的硬件架构如图6所示.其中4个主控单元(执行体)与主备裁决器之间通过高速总线进行连接,主备裁决器与模拟IO之间通过环网连接,裁决器作为主控单元的输入输出代理,将主控单元的IO控制命令经过裁决后通过环网下发给各IO设备,同时将各IO设备通过环网上送给裁决器,并由裁决器分发给各主控单元.裁决器由FPGA实现,完成上文介绍的调度、判决和清洗策略,4个主控单元分别采用A7、M7、H7和龙芯架构.

4.2 仿真测试方法

工控系统往往需要处理许多敏感信息,包括温度信息、阀门开关、运行控制等,若工控系统中存在后门程序,则攻击者可以利用这些后门程序实现快速、精确定位与攻击.在本文仿真实验情景中,通过白盒测试的方法向执行体中植入后门程序进行测试验证.

我们通过简单的代码来模拟温度数据触发后门攻击,程序实现为当输入的温度数据为预先设置的值时即达到触发条件,其攻击触发结果为导致IO设备关机.分别在各个执行体的程序中注入可以造成共模攻击的后门程序,若输入的是某些特殊的温度数据则会触发相应的共模攻击.

仿真时假设攻击者攻击成功这一事件可视为服从失效率为λ的指数分布[16],其中λ表示攻击致失效的难度,概率密度用f(t)=λe-λt表示,则单个执行体失效概率为

(5)

通过式(5)可以说明攻击者在开始的一段时间内能够迅速了解系统状况,攻击成功的概率迅速增加,随着时间的增长,对于系统的了解程度逐渐变缓,攻击的成功率慢慢趋近于1.为了量化执行体结构的差异性,本文利用文献[17-18]中相似度度量方法,计算各执行体之间在芯片架构间的异构度M,所以4个异构执行体间异构度如表2所示.

表2 4个执行体间异构度

另外假设执行体的恢复时间TH为100个控制周期,4个执行体的攻击致失效难度λ1=λ2=λ3=λ4=0.01.

4.3 仿真结果

首先对基于混合数据类型工业协议的拟态裁决方法(简称“模拟裁决方法”)与常规直接数字式拟态裁决方法(简称“数字式裁决方法”)的有效性进行仿真.各执行体的模拟量输出计算方法如式(1)所示,为了简化模型,其中各执行体计算引起的归一化误差δi为0或1的随机数,仿真运行100个控制周期,并在这100个控制周期中引入10次真实攻击输入,观察2种裁决方法能否正确裁决出异常结果.

图7为模拟裁决方法与数字式裁决方法有效性仿真结果.从图7可以看出,因各执行体浮点数据计算精度存在差异,数字式裁决方法是通过各执行体输出两两比较是否一样的比较方法,其将因精度差异导致的误差错误裁决为异常结果,而模拟裁决方法能够通过设置一定的误差阈值过滤掉因精度差异导致的裁决错误结果,并能正确裁决出真正因攻击导致的异常结果.因此基于混合数据类型工业协议的拟态裁决方法能有效解决因各执行体计算误差引起的攻击误判或攻击逃逸问题.

图7 模拟裁决方法与数字式裁决方法有效性比较

然后对2种算法在差模攻击下的安全性能进行仿真.根据调度算法的设计,当某一执行体被攻击后会被清洗,因此在该执行体从清洗到恢复的过程中系统处于安全降级状态,此时执行体集被成功攻击概率的关系函数如式(6)所示:

(6)

其中

(7)

而HPF调度算法在差模攻击下将异构度作为调度依据,此时执行体集被成功攻击概率的关系函数如式(8)所示:

(8)

安全性能的仿真结果如图8所示.在实验中分别对2个算法进行了10万个控制周期的仿真,从图8可以看出HPF调度算法和Stochastic调度算法在控制周期的开始阶段,系统攻击成功的概率增加,随着时间的增长,攻击的成功率趋近于0.在使用HPF调度算法时系统的攻击成功率要低于使用Stochastic调度算法时系统的攻击成功率,说明HPF调度算法的安全性能较Stochastic调度算法有所提高.

图8 差模攻击下的2种算法的安全性能

当系统遭受到攻击者发起的2阶共模攻击时,系统分别使用HPF调度算法和Stochastic调度算法的攻击成功率如图9所示,实验中分别对2种算法进行了10万个控制周期的仿真.

图9 2阶共模攻击下2种算法的安全性能

从图9可以看出,在使用HPF调度算法时系统的2阶共模攻击成功率要低于使用Stochastic调度算法时攻击成功率.由于HPF调度算法在识别系统遭受到2阶共模攻击后,利用共模防御系数对执行体进行判定,选取共模防御系数小的执行体组合,相较于Stochastic调度算法的随机选取,共模攻击成功率较低.

在运行1万个周期后,HPF调度算法的共模防御系数的基于共模攻击概率统计的机制生效,此后相对于Stochastic调度算法,HPF调度算法使得系统的共模攻击成功率进一步降低.

当系统遭受2阶共模攻击后,分别使用HPF调度算法和Stochastic调度算法的下逃逸时间如图10所示,分别对2种算法进行了100次的2阶共模攻击模拟.其中系统逃逸时间的坐标轴1个单位代表执行体的恢复时间.

图10 2种算法2阶共模攻击的逃逸时间

从图10可以看出,由于HPF调度算法能够识别2阶共模攻击,因此在2个执行体的恢复时间内可以消除系统的被攻击状态,而Stochastic调度算法由于不能识别2阶共模攻击,采用随机调度的策略,系统逃逸时间存在波动且大于使用HPF调度算法的逃逸时间.

当系统使用HPF调度算法遭受3阶共模攻击后的逃逸时间如图11所示.实验进行了20次的3阶共模攻击模拟.其中系统逃逸时间的坐标轴1个单位时间为1个控制周期.仿真时3阶共模攻击的敏感度设为10.

从图11可以看出HPF调度算法在3阶共模攻击的次数到达敏感度以前采用的是四取三随机调度的策略,因此在识别3阶共模攻击时取决于随机调度的结果,系统的逃逸时间存在波动,但当HPF调度算法检测3阶共模攻击的次数到达敏感度以后,采用四余度裁决,此时能够快速识别3阶共模攻击,因此之后的系统逃逸时间稳定在最小.

图11 在敏感度设置为10的情况下HPF调度算法3阶共模攻击逃逸时间

5 结束语

拟态的核心思想是通过拟态控制层的调度判决,使得系统呈现动态化、随机化的属性,来进行主动防御.但是目前的调度方法和判决方法并不能很好地适应拟态防御工业系统的应用场景.本文首先设计了一种基于混合数据类型工业协议的拟态裁决方法,高效准确地解决了混合数据类型工业协议裁决问题;然后本文设计了基于共模防御系数的调度方法,能够有效主动地防御攻击者的入侵.仿真结果表明,该裁决调度方法在保证安全性能的同时,能够快速识别共模攻击,并能有效减小系统共模逃逸的时间.在后续研究中,将对该算法做相关优化,使之具有更好的实用性.

猜你喜欢
共模模拟量拟态
非隔离逆变器交直流侧共模干扰耦合抑制
新能源汽车电驱系统共模电压干扰优化方案研究
章鱼大师的拟态课堂
云南GNSS时间序列共模分量提取分析
共模电感的建模方法及验证
一种模拟量模块的应用
模仿大师——拟态章鱼
关于拟声拟态词的考察
模拟量液位计在液压站节能中的应用
你能找到它们吗