安全问题更应归咎于部分嵌入式系统开发商的错误假设,而不是软件的安全性弱点。我注意到存在着普遍假设一这种模式,但也深信只要我们能够稍稍改变一下我们在以下三方面的思维模式,一半以上的安全问题都会在一夜之间消失。
假设1):开发商认为嵌入式系统本身更安全
没有什么比这更远离实际情况的了,但我明白为什么开发商会这么认为。因为没有人拥有他们的源代码,固件甚至可能没有商用的RTOS,同一个开发团队的开发人员中,由一个人选择闪存地址“0x…”来存储密钥,而由另一个人决定把软件版本号放在其它0x地址,彼此之间可能都不清楚对方做了什么。在安全领域,我们把这称作“通过隐匿来实现安全(security by obscurity),”然而这个原则从来就行不通。真实情况是黑客已侵入你所用的同样的调试工具中。他们能够读取符号表,逐句破解汇编程序等。此外,还要认识到许多攻击甚至不需要代码级知识。
例如,对于存储了某首歌曲在闪存中播放次数的数字版权管理(DRM)系统的攻击,可能就是简单地拷贝整个闪存bank,并在再一次播放该歌曲之前不断用存储的拷贝覆盖整个闪速图像。这就使系统复位到先前的状态,从而有效地规避了播放计数器或序列号的问题。
再比如,图1是嵌入式系统中管理若干个用户登录信息的存储堆存(memory dump)。我可能是通过连接一个调试器获得这一存储拷贝的,或者它也可能是一个网络数据包中的补丁。
图1 :存储内容样例(用户登录信息)。
现在,你对它在运行什么RTOS或什么处理器一无所知,但你知道我的姓是“Uner”。进一步的检查显示第一个32位字包含了我的部分名字作为ASCII码文本。它可能就是登录名。接下来的也是ASCII码。如果我是一名黑客,我会试着用“snail”作为密码。考虑到这种模式,我也可能会试试以 “lil…”作为用户名, 密码设为“zepp…”,因为它们期望在最低有效字节中具有不同的用户等级或一些其它的不同特征。这里没有涉及源代码检查,或已知的安全脆弱性(vulnerability),仅仅是简单的黑客技术而已。
假设2: 用户假设嵌入式系统更安全
若你购买了一个新的JTAG wriggler,或者是其它具有以太网端口的调试设备,你会跑去告诉你的IT部门吗?可能不会。但是你也许不会意识到这个小小的调试器正在运行嵌入式Linux,并已经成为网络上黑客的新目标。产品的用户,包括我们自己,往往假设没有监控器和键盘的东西是安全的。当任何事故发生时,例如由于嵌入式Linux摄像头响应了固定URL致使摄像头的图像出现在搜索引擎中,大多数开发商都会把造成事故的原因归罪到用户身上。
这是用户没有采取正确预防措施所引起的过错,对吗?如果开发商没有向用户解释任何关于设备应该运行的环境(比如封闭式网络)的假设,那就不对。请记住,在这里“解释”不是指在使用手册中注明,这类手册用户往往是随手丢弃在包装盒里的。它的意思是需要在设置时对此进行确认,或是把特性放在设备中以验证它是否工作在一个预期的环境中。比如,一个网络控制器可能要求用户为设备只建立一组对应的不可路由IP地址或MAC地址。这一数据可能是胡编出的数据,不过这种额外的配置步骤却有助于向用户传达该控制器不应该被放在互联网上的意图。
假设3:安全态势要求完全是有关资产保护的
安全工作人员往往认为只要攻击一个设备所需要的资源比设备试图保护的资源还要宝贵,系统就是安全的。在安全领域,我们把值得保护的资源称作“资产”。资产存在着时间性以及简单估价。如果一个设备所保护的数据在该设备被黑客攻击时是没有价值的,你可以认为这一设备是安全的。很明显,你不会购买一个10万美元的钛制保险箱来存放你省下的零钱。
麻烦在于这些攻击的影响会层层波及。在很多情况中,你并不知道你需要保护的数据或操作的价值何在。一个机械手开发商不可能总是提前预知攻击造成设备故障的代价有多么高昂,因为它可能部署在工厂的生产线上,而生产线的停工损失为每小时1万美元或每分钟1万美元。而且,当黑客攻击造成人身伤害甚至死亡时,又该如何计算损失呢?关于这一点,我不准备详述,因为只有在你知道你在保护什么数据,并且不管怎么样你都确实清楚资产的本身价值时,在计算破解加密算法的资源过程中这种关于资产的假设才有意义。
作者:Eric Uner
下一代移动及嵌入式安全架构研究员
摩托罗拉实验室








京公网安备 11011202001138号
