- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
防范网络攻击的互联实时系统设计方法
实时系统与互联网的接入极大地丰富了其应用功能,但同时带来了遭受网络攻击的危险性。实时系统的设计中必须考虑对这些攻击的防范,增加消息验证机制和访问控制机制。本文详细介绍了这些攻击的常见形式和设计中的防范机制。
网络互联的引入无疑为嵌入式实时系统的发展提供了很多机会。这种互联通过简单地为外部浏览器提供互联网页,可以为小系统提供丰富的用户界面。这些单个系统可以是一个大型系统整体的一部分,并共享那些单个设备所不可能拥有的资源和信息。由于能远程控制系统,并可远程改变参数和升级,因此可以不到现场的条件下对软件升级或增加新功能。
对于实时系统,网络互联带来新功能的同时,也带来了网络安全问题,网络连接将可能影响那些缺乏保护或不能自主保护的实时系统的安全性。互联系统需要内置的保护机制,以抵御来自网络的各种攻击。因此,实时系统必须在不降低性能的前提下,增加这些保护功能。
常见的网络攻击形式
服务拒绝(DoS)是网络系统常遭受的一种最低级的攻击。这种攻击的形式多种多样,但是基本上都是通过阻塞通信信道来实现攻击。在一些系统中,使网络连接过载也可导致缓冲溢出,从而引发系统崩溃。在实时系统中,另外一种可能的情况是通信任务独占CPU处理时间,降低系统处理其它系统任务的实时性能。
Smurf攻击是一种典型的DoS攻击,该名称源自于最初实现这种攻击的一个程序。在Smurf攻击中,攻击者向网络发送广播ICMP(互连网控制消息协议)应答请求,而将返回地址指向目标系统。这些请求使网络目标主机产生响应,使目标系统通信信道上充斥大量无效消息,如图1所示。
为了使系统免遭Smurf攻击和其它的攻击,实时系统可利用能过滤大量应答消息的路由器或防火墙实现网络互联。如果不具备这样的保护,那么嵌入式系统的TCP/IP栈应当具有这种保护功能,以过滤这些广播响应。请看下面的函数:
int smurf_filter(const char *iph)
{
/* Protect from Smurf attacks */
if (IPGET_PROTOCOL(iph) == IPPROTO_ICMP) &&
IPGET_DSTADDR(iph) == INADDR_BROADCAST)
{
return -1; /* Drop all broadcast pings */
}
return 0;
}
上面的函数将丢弃所有由广播应答请求所产生的传输流,从而抵御Smurf攻击。增加这些功能将略微增加TCP/IP栈的执行时间,但一般不会对系统的实时性能产生太大的影响。
此外,实现联网的实时系统还很容易遭受网络中误传信息的攻击。网络上的所有传输流均是可“见”的,因此攻击者可以监视消息并获得IP地址和数据格式信息。获得这些信息后,攻击者就可以向嵌入式系统发送带有错误源地址和无效信息的“欺骗”消息。这些消息可以是有效消息的重复,也可以是具有有效帧格式但数据被破坏的消息。
这些消息对嵌入式系统的影响极大。当系统期望获得新的控制参数时,错误的消息将设定不期望甚至不安全的参数值。如果系统正在等待新程序,那么错误消息影响系统操作的可能将大大增加。
增加消息验证机制
为了防范无效消息,互联系统需要一套对接收消息进行验证的机制。验证消息的最可靠方法是对消息及其源地址进行加密处理,只有真正发送该消息的一方才能成功地加密,因此正确解密的源地址才表明是有效的消息。
当然,攻击者仍然有可能发送能成功解密的无效消息。攻击者可以简单地截取并删除消息中的数据包,或拷贝并重传有效的消息数据包,目标系统可以解密消息并找到有效的源地址。然而,如果消息是程序,那么丢失或添加的数据包将使程序中出现混乱的代码,由此产生不可预知的后果。攻击者还可能截取数据包,改变其中的一些位,然后再传送至目的端。这时地址或许可以正确地解密,而代码则被破坏掉。
为了防范这些攻击,加密消息应对数据包编号并包含“散列(hashing)”函数。对数据包进行编号有助于接收端了解是否存在丢包或重发包,散列函数将会根据每个数据串内容产生特定的数值。如果解密消息包含有效的散列值,则表明该消息是完整的。
然而,加密处理极大地增加了系统负担。加密用到的算法需要进行大量计算,采用多达168位的3-DES (数据加密标准)代码。而且,这些算法运行的速度必须足够快,以与信道数据速率匹配,这无疑对实时系统的CPU资源提出了很高的要求。运行于200MHz的标准RISC处理器只能管理1至2Mbps的加密通信,这样留给系统实时处理的资源将极为有限。
解决问题的方法有以下两种。第一种方法是在系统中添加安全协处理器,如图2所示。协处理器可处理大量计算,并将加密后的数据传送至CPU,这种方法要求CPU具有处理不加密通信的能力,但需要添加额外的硬件。第二种方法则使用带有内置加密功能的CPU,这些处理器包含加密扩展指令集,极大地提高了加密的速度,这样就能将更多CPU资源用于系统实时处理功能。
采用访问控制机制
然而,在互联的实时系统中仅采用加密还是不够的。加密可以保证消息的完整性并对消息的来源进行检验,但并不能保护系统免遭来自有效源端的恶意程序,而且引入恶意程序的途径也多种多样。在那些希望处理第三方源端的系统(如游戏系统)中,源端系统本身可能就是发送恶意程序的伪装攻击者。同样,外部的攻击者也可破坏源端系统的安全性。如果攻击者对目标系统充分了解,那么就能插入恶意程序,并加密下载至目标系统。
造成大多数计算机系统遭受破坏的安全问题都是来自内部,因为攻击者能访问目标系统所使用的CPU语言和实时操作系统(RTOS)中的信息。内部攻击者可轻松地创建恶意程序,并下载至互联的实时系统。为使互联设备免遭这些恶意程序的攻击,RTOS需要集成内部安全处理功能。
恶意程序破坏实时系统的手段很多。其中一种途径是简单地隐蔽中断,然后退出,导致系统无法识别那些无效并且需要重新声明的中断,使利用中断驱动的实时功能将被终止。另一种途径是查询进程消息句柄(该句柄是用来指示信息的目标进程的识别号),然后采用该句柄发送虚假信息至其它的进程,并导致这些进程行为错误。还有一种方式则是将敏感数据(如密码或金融数据)读出系统存储器,然后改变数据或将信息发送至第三方。
保护嵌入式系统的主要方法是改变RTOS,并对关键的系统功能提供基于优先级的访问控制机制。该机制为系统中的进程分配优先级,并根据该优先级决定调用处理程序是否具有访问给定系统资源的权利,如图3所示。通过谨慎地选取优先级,系统设计人员可以构建抵御恶意程序攻击的内部屏障。
例如,访问控制允许利用基于PROM部分编程的进程,而不通过下载程序实现中断屏蔽。类似地,RTOS可利用访问控制验证进程的有效性,并发送消息至另一进程,这限制了有效进程对之间的通信。为了防止敏感信息遭受破坏,RTOS可利用访问控制,为进程访问加密存储的数据提供方便。简单的存储器读取将无法获取任何信息。
在RTOS中插入访问控制可能会降低RTOS的实时性能,访问控制将增加每个系统调用在检验调用程序访问权限时的开销。单个系统调用产生的开销微不足道,但系统开销的累积影响将不可忽略。
到目前为止,还没有已实现访问控制功能的商用RTOS,但初步的试验表明,可以通过细致的软件工程设计减少访问控制产生的负面影响。例如,在访问检验中,采用表格而非列表形式将保证访问控制的有界性和确定性。开发人员在这样的条件下,可以很容易地调节访问控制的影响。
访问控制及DoS保护协议栈改变的影响可以通过增加系统的时钟频率加以解决。加密则要困难一些,但采用协处理器或专用的指令集将能解决这个问题。当然,实现安全性能需要增加系统成本,必须根据实际应用中增加安全性能的必要性和成本预算来作决策。
作者:Richard Jones
现场应用工程师
OSE Systems公司
Email: loucks@gravitas-japan.com
如何成为一名优秀的射频工程师,敬请关注: 射频工程师养成培训
上一篇:接口逻辑和开关器件应用综述
下一篇:紧凑的模块方案有利于无线产品设计和制造