美团内部讲座|清华大学莫一林:信息物理系统中的安全控制算法

【Top Talk/大咖说】由美团技术学院主办,面向全体技术同窗,按期邀请美团各技术团队负责人、业界大咖、高校学者及畅销书做者,为你们分享最佳实践、互联网热门话题、学术界前沿技术进展等内容,从而创建工程师文化、提高技术视野。

2020年9月10日,Top Talk邀请到了清华大学自动化系莫一林副教授,请他带来题为《信息物理系统中的安全控制算法设计》的分享。本文系本次分享内容的文字实录,但愿能对你们有所帮助或者启发。算法

如下系文字实录:安全

中文讲的“安全”,其实基本上包含了英文中的两重含义,一个是Safety,一个是Security。信息物理系统中的安全问题主要是指Security,也就是说,若是有人想要攻击你,在这种状况下,怎么可以保证系统的正常运行?微信

信息物理系统

“信息物理系统”,这个词大概是2006年由美国的National Science Foundation(美国国家科学基金会)最开始提出来的。信息物理系统本质上来讲是Computation(计算)、Communication(通信)、Control(控制)三C的融合,把三个C互相之间结合起来,嵌入到一个物理世界当中,从而可以使得整个系统更好地感知或者控制物理世界。好比,无人驾驶就是一个信息物理系统,由于无人驾驶自己是有一个物理的实体,有不少传感器来收集数据,这些数据通过通信上传到计算机或者云上面,同时车和车之间可能还有通信,而后去作感知、去作导航,再反馈到无人车的执行单元,最后反馈到物理空间。这些过程既包括了计算,也包括了控制的一些问题。网络

其实,信息物理系统是一个很大的概念。以前你们说安全,其实更多的是想到计算机安全或者网络安全,如今更多的是手机这类智能设备的安全。可是,信息物理系统安全为何如今被提上了议程?这其中主要的缘由是传统的控制系统,好比汽车内部的通信是经过CANBUS实现的,这样的通信本质上来讲是一个独立的、专用的网络,并不和其余网络产生任何的链接。因此在这种状况下,就很难去大规模地攻击这样一个系统。函数

信息物理系统的安全威胁

可是,如今智能化逐渐成为了一种趋势,并且智能化的一个核心的事情,就是要使用不少新兴的感知和网络的技术,实现万物互联。在这种背景下,就会产生很是多的问题,由于全部东西都联网了,那么系统受到攻击的可能性就放大了不少。在这种状况下,怎么保证整个系统的稳定性或者说维护系统正常运行,这是一个很大的挑战。 工具

上图是咱们以前说的智能家居的一个示意图。智能家居但愿人们能够经过好比手机App去控制家里的电器,可是一旦家里的电器都上网以后,智能家居控制系统的安全就会变得很是重要,若是当一个攻击者能够操纵成千上万个家庭电器的话,这就可能带来很是严重的问题。性能

震网病毒

咱们实验室从2010年前就开始作信息物理系统安全方面的研究。当时,有黑客设计了“震网病毒”,它的目标是伊朗用来提纯铀235的离心机。“震网病毒”破坏了伊朗上千台的离心机,最后对伊朗核计划形成了很大的损害。这也算是一个利用“信息战”成功带来破坏的一个例子。也是由于这个事情,让咱们把信息物理系统的安全问题迅速提上了日程。 学习

“震网病毒”的例子属于国家行为,可能比较少见,如今针对通常信息物理系统的攻击行为也愈来愈多。好比2016年,美国机构的报告就指出,整年一共有290屡次针对美国工业控制系统的攻击,覆盖了制造业、通信、能源等多个行业。优化

攻击有不少种类型,先说比较常见的。若是系统联网,能够经过网络去侵入系统;即便系统没有联网,那么还有一些方式方法,好比像“震网病毒”的例子,是经过U盘一层一层带进去的。这些方式都能形成很大的破坏。我以为比较值得关注的是第二个问题,通常作控制或者这种背景的研究人员,不少时候对计算机安全并非特别有经验,那么开发的系统就可能会存在不少的漏洞。甚至有不少软件的开发者本身都不知道本身的系统有漏洞,可是黑客就能够发现你的漏洞。好比说像“震网病毒”的例子,伊朗不知道系统有问题,但黑客有内部资料,发现这个系统有问题,而后就利用这种漏洞去侵入了伊朗的系统。spa

你们比较担忧的一个事情就是如今的系统变得愈来愈复杂,好比一辆车可能有几百个ECU(Electronic Control Unit),一个波音787可能有上百万个零件,这上百万零件中的70%都是外包出去的,而一级外包商可能再外包给二级、三级,最后整个供应链就变得很复杂,这至关因而全球生产,最后聚集到西雅图去装配。那么在这个过程当中,怎么保证装到系统上的每个零件都是安全的,这也是一个值得思考的问题。

黑客攻击汽车系统

其实,在传统的汽车信息物理系统当中,漏洞仍是有不少的。 好比2015年有一个比较著名的事件,有两个黑客(这两我的应该只是研究者,并非真的想要搞破坏)经过攻击克莱斯勒吉普的一款车,入侵了这辆车的显示信息,就是所谓的implementation,还包括一些娱乐系统,而后经过这个系统,进入车内部的网络来控制这个车,好比说方向、控制刹车,甚至包括安全气囊等等。

有人可能会说,像大家碰到这些问题,在计算机里面也都有,并且已经研究了很长时间了,为何还要单独提这样一个概念,这个信息物理系统安全中到底有什么新的东西吗?我以为这个核心价值在于:传统的研究主要都是在所谓的Cyber Physical System。而信息物理系统,它的核心的是说那些有“物理”的系统,那么这个物理系统就带来了不少的挑战。首先,从传统上来讲,若是一个计算机受到攻击,最差的状况,也就是将这个计算机关闭就结束了。可是若是是一个高速行驶的车,没法将它直接关闭,只能让它缓慢地停下来,可是停下来这件事情自己由于有物理系统的参与,因此就不是一个简单的事情。而对于无人机来讲,甚至都不能让它停下来,必须让它以必定的速度去飞,由于若是是固定翼无人机,停下来就可能意味着坠毁,因此在这个过程当中,物理系统带来了不少的挑战。

另一个问题是,咱们不必定可以让物理系统停下来,好比说若是一个电网受到攻击,那么咱们但愿可以尽量把被攻击的地方隔离出来,而不是要让整个地区好比北京市出现停电。这个意思就是说,在系统受到攻击的时候,要让这个系统还能带着“伤”去运行,而不是一旦有一点风吹草动就须要重启,这个也是一个很大的问题。最后,这些物理系统其实都须要很是高的可靠性,好比对飞机来讲,咱们以前跟波音作过一些项目,他们要求放上飞机的任何东西都须要通过鉴定,必须保证飞机有极高的可靠性,要远远高于杀毒软件要能检测出99%病毒的这种可靠性。不少传统的信息安全方法,都是一个所谓的Best of Effort Approach,就是说,尽量地提供能提供的最好的服务,可是并不能给出特别多的保证,由于对于一些须要很是高可靠性的系统,即使存在很小的可能也许就隐藏着一个很大的威胁。

为信息物理系统构建“护城河”

在信息物理系统里面,为了保证这个系统的安全,咱们须要保证这个系统有很是高的可靠性。其实,任何一个单一的方法都是很难完成这个目标的,咱们须要是一个多层的防护机制,它就像一个城堡同样,外面还有一个护城河,中间有一个城墙,里面还有一个城墙,必需要层层地设防,只有这样才能解决这个问题。

我以为这其中有几个比较关键的点,好比Prevention、 Detection、 Resiliency 、Recovery。其中,Prevention就是怎么防止别人进来,那么这个地方多是须要更好的防火墙,好比说杀毒软件等等这些东西。固然,咱们不可能百分之百地把别人都挡在系统以外,若是有人进来了以后,咱们就须要去检测这个系统到底有没有被入侵,包括在一个大的系统怎么去定位哪几个部分被入侵了,这就是所谓的Detection。另外,咱们设计一个系统,须要考虑到必定的Resiliency,好比说有一个汽车上面有一个零件坏了,这个系统就完蛋了,那么这个系统就不是颇有韧性,因此系统能不能带“伤”运行,也是一个须要考虑的因素。最后,当发现这个系统出现问题以后,咱们可能就会须要有一个所谓的恢复过程,好比重启等等手段。总体来讲,我以为要经过不少方面,经过多层防护来保证信息物理系统的安全。

信息物理系统中的安全控制算法

今天,我想给你们讲一讲咱们在信息物理系统作的一些比较初步的工做,主要讲两个方面:一个是检测,一个是韧性。 首先,从控制这个方式来讲,怎么去思考信息物理系统安全性这个问题?固然,并非说控制就可以完全解决这个问题,仍是须要一个多层的防护。

控制

控制,到底能给咱们带来什么? 以离线设计系统为例,首先咱们能够经过控制找到这个系统关键的部件,而后对这些部件作额外的冗余设计。在这个系统没有上线以前,咱们能够对系统作一些可控、可观的分析,进而提高系统自己的韧性;上线以后,咱们能够利用传统的方法如故障诊断,固然这里就变成了入侵诊断和入侵定位的问题。此外,咱们还能够作一些鲁棒控制,保证系统的控制器在有攻击状况下依然可以容错。最后还有一个问题,一个大的系统想要让它更安全,咱们到底应该先加固哪一个地方?这都是控制能够提供给咱们的一些东西。

检测

接下来,我主要讲一下关于检测的问题,咱们也是受到“震网病毒”例子的启发以后开始作了相关的研究。“震网病毒”是2010年被发现的,从计算机的角度来讲,它是一个很复杂的、很难防护的病毒。可是从控制角度来讲,它的策略其实至关简单。离心机自己是一个相似于快速旋转东西,若是想要毁坏离心机,那就须要让它转的比本来设定的转速快不少,可是若是只是让它转的特别快的话,因为整个系统有传感器,传感器就会发现离心机转速太快,从而触发报警,报警以后就会有技术人员前来检查,整个过程并不能对这个系统形成很大破坏。

可是,“震网病毒”采起的一个策略是先不去攻击这个系统,而是在这个系统正常运行的时候,记录下它的传感器输出是什么状况(好比说离心机的转速)。为了很好地说明问题,咱们假设离心机每秒1000转,“震网病毒”就记录了不少这样的数据。而后,当真正开始去攻击系统的时候,震网病毒就会把它记录的数据作一个重放,就是说把整个系统的转速调到好比2000转的时候,会使用以前正常的数据去替换异常数据,那么系统操做员看到依然是正常的转速,就不会察觉这个系统已经出现问题了。好比在一些警匪片中,匪徒会去把他们想要抢劫的地方的监控视频的影像作一个重放,好比用前一天没有异常的影像去覆盖掉抢劫的影像,跟“震网病毒”的策略很相似,在信息安全领域也是比较常见的“重放”攻击。

你们能够简单地看一下这个系统的框图,好比说咱们作一个离心机或者一个其余的物理系统,须要作控制。那么咱们使用传感器去监测这个系统,传感器的输出会给一个估计器,对于无人驾驶来讲,可能这个应该叫感知,而不能简单地叫估计,由于它的功能可能会更复杂。但无论怎样的系统,咱们都须要经过一个这样的东西,对收集到的信息作一个处理,而后获得系统的状态,再根据状态来设计系统的控制,最后反馈给物理系统。估计器可能还会输出一些信息传递到故障检测器里面,而后故障检测器会检测收到的信息y(k)是否是有问题,大概就是这样的一个系统。

对于攻击来讲,也分红了两个阶段,第一阶段攻击者先不去修改系统控制这一部分,只是被动的去记录一些传感器的信号。当记录足够多的传感器信号以后,进入第二阶段,开始去修改系统的控制信号,修改这个信号的同时,攻击者还要作的另一件事,就是要把系统的传感器的这一边给断开,从而把传感器的真实数据替换成以前记录的正常数据。

因为系统自己是有故障检测器的,因此最原始的系统在设计的时候根本没有考虑安全性,没有考虑是否能检测出来所谓的“重放”攻击。事实上,“重放”攻击并非老是有效的,咱们发现有一些系统能够检测到“重放”攻击,而有一些系统是不能检测的。如上图所示,Y轴表示检测器报警的几率,报警几率最大值是1。整个系统的重放是在时刻零开始,那么做为第一个系统,也就是蓝线标记的系统,咱们能够看到在重放开始的时候,它有一个比较短暂的损害过程,就是说这个时候报警的几率有一些,可是也不是特别高,而后很快报警几率就缩减到一个接近于0的值;而第二个系统,也就是红线标记的系统,咱们发现它的报警几率随着“重放”变得愈来愈高,最后会趋向于1。

可是,不少系统跟蓝线标记的系统同样,没有办法检测出“重放”攻击。那就可能会陷入一个问题,攻击者会背着系统的操做人员在系统里面作一些手脚。针对这种问题,咱们设计了一种主动检测的方法。刚才所说的检测是被动的检测,经过收集不少的传感器的信息,而后去看传感器的信息是否是和这个系统自己模型是相符合的。 但这个方法存在一个很大的问题,好比控制离心机,它的转速就一直是1000转,那么当传感器告诉咱们转速是1000转时,事实上这个传感器从某种角度来讲就没有给咱们任何信息,由于系统控制的很好。

咱们的想法是可否能够不把系统控制得这么好,咱们主动在控制信号中加一个扰动信号,也能够叫作水印信号。这就是说水印信号是藏在真实的控制信号中的一个比较小的噪声。若是咱们的系统没有受到攻击的话,那么这个噪声就会被传感器监测到,而后进入估计器,估计器可以在传感器输出的信号中识别这个噪声。当系统遭遇了“重放”攻击,由于系统的这个噪声是彻底随机的,那么传感器里面的随机信号跟如今接收到的随机信号就对应不上,由于如今接受到的随机信号是以前的信号“重放”过来的。所以,咱们能够经过添加一个这样小的扰动的方式去刺激这个系统,而后让这个系统对这个小的扰动产生一个响应,这样咱们就能够去检测出这个系统到底有没有出问题了。咱们称这种方式为主动检测方式,主动地去激励系统,而不是被动的去收集信息。其实,这个方法也跟计算机科学领域所说的Challenge-Response比较类似,经过给这个系统一个Challenge,而后这个系统就要返回Response,这样就能感知到整个系统、整个控制回路是否是都是无缺无损的。

上图是咱们作的一些实验的结果。针对的是一个很是简单的系统,你们能够认为这个是噪声的能力,咱们发现随着加的能量越高,检测的几率会变得越高。咱们大概的处理思路就是这样的,后面会有一些技术的问题,好比说加个扰动信号进去以后,系统的控制就没那么好,这产生代价会有多大? 代价和检测性能之间会存在什么样的关系?其中的Trade Off到底应该怎么样去作权衡?咱们能够把它当作一个相似于优化的问题,而后咱们能够去作一个求解。

事实上,咱们如今作的这些设计都是基于模型已知的,由于作系统控制一般来讲大部分都是假设系统模型已知的。目前,基于数据的方式愈来愈流行了,咱们也尝试去作了一些数据驱动的实验。其中咱们须要做一些简单的假设,好比系统自己是稳定的,咱们知道x到底有几维,其余具体的参数假设是未知的。而后咱们能够去作一些数据驱动的方式。想法也很简单,就是咱们要在这个地方加一个随机信号,加了这个随机信号,这个系统会产生一些刺激,产生这些刺激以后,咱们就能够经过输入和输出的关系来对系统内部的具体参数作一些推断。关于最好的信号具体应该怎么加?检测装置应该怎么去作?这些属于具体的细节,在这里我就不展开仔细讲了。下面是咱们针对化工领域经常使用的TEP系统作的一个仿真。虚线是咱们在没有模型知识的状况下,经过数据学习了水印信号和检测器的最优设计,获得的检测器的输出。能够看到,跟有模型的实线吻合得很是好。另外,这个系统在100时刻收到了“重放”攻击,能够看到咱们的水印方法能够有效地检测到攻击。

算法设计

下面我想讲的是一个有韧性的算法到底应该怎么去设计。这里讲的也是一个很是简单的问题,相似于一个简单的状态估计的问题。好比说自动驾驶的汽车里面有不少传感器均可以给这个车作定位,好比雷达、GPS、IMU、视觉传感器,那么咱们应该怎么把这个东西给融合起来,这就是一个很传统的状态估计的问题。

这是一个很是简化模型,有不少传感器,每个传感器都在测量一个叫作状态的东西,这个状态是记作x,传感器的测量值记作z。固然这里指的是一个简化的线性高斯模型,就是说测量值是真实状态的一个线性函数加上必定的噪声。好比说最简单的例子:有三个传感器,这三个传感器都在测量位置,这个位置在这里假设它是一个一维的信号,三个传感器都在测量位置,都带有一些噪声。这种状况下融合的规律很简单,就是求这三个测量值的平均值,也能够证实在不少意义下是最大似然,或者是最小均方偏差的一个估计,这些都不是很很难。

可是问题是,若是针对这样的一个估计器,假设有一个传感器存在很大的问题,好比说有一个传感器它可能特别大或者特别小,就会把总体的估计值带偏,那么这就会产生一个很是严重的后果。固然这个问题也能够说很是简单,由于这三个传感器都在测量一样的内容,就知道这三个传感器的测量值应该是接近的,若是其中有一个跟另外两个之间差距很大,那么咱们就能够认为这个传感器是存在问题的,就能够把它剔除出去。这实际上是一种叫作坏数据检测的想法,就是把跟其余数据不匹配的数据给剔除掉,这样的作法感受上是比较简单,可是其实也不是那么简单。由于这个模型是一个很是简单的模型,就是三个传感器都在测一个一样的东西、一样的状态,所以能够说若是有一个跟其余两个差得不少,就是这个传感器有问题。可是假设咱们在测不一样的状态,好比说有的传感器在测这个房间的温度,有的在测走廊的温度,有的在测另外一个房间的温度,那么它们之间的数据怎样叫作匹配,怎样叫作不匹配,这个问题就变得很复杂了。再好比说,无人驾驶车的GPS和雷达都在测位置,可是两个位置多是在不一样时间测的,假如这个传感器告诉我如今在这里,而另一个传感器告诉我说下一个时刻在那里,这种状况下判断这两个数据到底匹配不匹配,这个就是一个很复杂的问题。

所以,咱们这个地方的想法是可否能够不用这种坏数据检测的方法,由于使用坏数据检测,首先必需要定义什么叫数据匹配。实际上,定义的通常的方法,也是先作一个状态估计,而后经过状态估计去算残差,再经过残差去肯定数据是否是匹配,而咱们想直接把一个好的状态估计计算出来。因此这里咱们考虑这样的一个问题,z是一个真实的传感器的估计值,咱们认为这个估计值等于状态的一个线性函数加上一个噪声,可能会有一些传感器受到攻击,那么要额外在这真实的估计值上加上一个攻击项。z里面既有噪声也有攻击,噪声通常考虑是一个比较小的数,好比像高斯可能有一个固定的方差,它不会特别大,可是噪声会影响到全部的传感器。而做为攻击来说,咱们认为攻击和噪声不同,攻击多是一个任意值,也就是说它可能很大也可能很小,可是这个攻击只能影响有限的传感器,好比整个系统里面有10个传感器,可能只有1个受到攻击,若是10个都受到攻击,固然这个系统基本上就完蛋了,因此通常只有一小部分传感器受到攻击,而后在这种状况下,咱们到底应该怎么去解决这个问题。

咱们提出利用凸优化的方法去求解这个问题,大概想法是:每个传感器的测量值,固然这个测量值多是受到攻击以后的值,假设这个系统既没有攻击也没有噪声的话,那么应该是等于。可是,由于有可能有攻击,也有可能有噪声,因此这个东西确定是不相等的,就认为它是第个传感器的残差,确定不是等于0的。那么在这种状况下,咱们但愿找到一个很好的x让残差尽量小,就是但愿去最小化这样一个残差的函数。咱们在这里假设是凸的,同时它是对称的、非负的。事实上也能够证实有不少种的估计器,均可以写成这种形式,好比说刚才咱们说的最小二乘估计器。

咱们能够再看一些例子,好比有这样的一个问题,仍是跟刚才彻底同样,有三个传感器都在监测状态,而后同时有一些噪声,而后假设有一个传感器可能会受到攻击。在这种状况下,若是去优化平方的话,确定是有问题的,由于平方得出来的是说你的状态估计应该是平均值,平均值自己是不太稳定的。可是你不去优化平方和而是优化绝对值的和,那么这样的话你的估计就会是一个中位数,中位数就是说去掉最大、去掉最小,中间的那个数,那么这样的话,应该是一个比较好的结果。

经过这个东西,咱们就能够获得相似于一个安全估计的一个充分条件,就是说你须要保证两件事情,固然这个是从数学上来讲比较简单的想法。就是说首先每个人所能产生的力必须是一个有限的,这个力其实本质上来讲就是斜率,就是说它的最大的斜率必须是有限的。而后,另外就是说,你任何P我的所产生的力必定要小于剩下的人所产生的力,由于在这里我假设有P我的多是有问题的,这样的话P我的会有问题的话,不会把整个系统给带跑,大概是这样。固然,反过来你能够证实这两个条件也是必要的。

固然,咱们后面还作了不少关于动态系统的,由于时间可能不太多,这里就不展开了。2015年到2018年期间,我在新加坡,当时咱们接了新加坡国防部一个关于自动驾驶的项目,他们也是比较关心自动驾驶中的安全问题,这里给你们展现的是咱们在一个仿真系统上作的一些东西。

问题是这样的,如今系统里面一共是有三个用于定位的传感器:IMU、雷达、GPS。其中,这条黄色的线是GPS告诉个人位置,你们能够看到GPS逐渐偏移真实的位置,这个缘由是由于咱们在这个系统里面加了一个GPS的欺骗工具。这种工具也是比较常见,以前也有过伊朗经过GPS欺骗攻击,捕获了美国的一个无人机,由于那个无人机认为它已经飞到一个安全的地方,就降落了,可是其实那个地方是伊朗的占领区,而后它就被捕获了。

由于GPS信号是一个单方向,通信员实际上是没有办法去确认GPS信号是否是真的,因此若是咱们有一个发射器,发射一个更强的信号,把真实的GPS信号压过去,那么在这种状况下你获得GPS就是错的。

这张图是咱们采用传统的信息融合方式EKF把IMU、雷达、GPS作一个融合,粉色的是咱们作了一个融合的信息。这个时候,你也能够看到粉色线的已经偏出去了,最后偏的有两米左右这个距离,就大概偏出了一个车道,就由于 GPS的信号被人劫持了。这张图是咱们后面加了一些安全的设计结果,会发现当你偏得比较小的时候,你是没有办法检测出来究竟是由噪声引发仍是由攻击引发的。

可是,若是当GPS偏很是大的时候,咱们在这个地方就能够发现GPS信号是有问题的,而后咱们就会把三个传感器融合变成只用雷达和IMU两个传感器去作融合。这样的一个效果,就等于说已经检测出来GPS有问题。

总结

今天讲的Technical的东西比较多,主要就是想跟你们聊一聊信息物理系统的安全,由于安全自己就是一个挺重要的问题。其次,从控制的角度来讲,咱们对这一方面的东西有一些本身的思考,可能跟传统的计算机方向相比,你们思考的方式可能也不是特别同样,可是我依然以为,最终的一个解决方案应该是不少学科共同去协做配合,而后产生一个多层、多种角度、多种手段这样一个防护机制。

我今天主要讲的一个是入侵检测,一个是状态估计这样的两个问题。 事实上这个理念单纯从控制角度来讲也面临不少的挑战,如今这个领域大概也就是10年左右才能有一些成果,可是我以为仍是要多多学习。我但愿作的一些东西,可以给真实的信息物理系统提供一些额外的安全保障。

感谢你们!

想阅读更多技术文章,请关注美团技术团队(meituantech)官方微信公众号。