阅读量:86
本文提供了一个简短的威胁示例列表,以帮助了解为什么信息安全对于嵌入式系统的开发非常重要。
伪造消息
可以访问通信通道(如以太网、CAN、SPI、UART等)的攻击者伪造一个有效的消息。
例如:在带有指纹识别的电子门锁系统中,攻击者绕过指纹识别器直接向门锁发送“开门”信息。
可以通过对所有消息进行身份验证来防止这种攻击。例如,门锁检查电子签名或消息认证码,以确保接收到的消息来自指纹识别器。
重放攻击
攻击者在指纹认证期间记录有效的消息,并在稍后的时间点注入该消息开门。
可以尝试使用不断增加的简单消息计数器来防止这种攻击。如果收到一个与前一个消息相同或更低的计数值,门锁就会检测到伪造的信息。
如果攻击者能够阻止原始消息到达接收方,则计数器方法不再起作用。可以使用每次传输消息时包含时间戳的方法,并且所有系统都需要具有同步时钟。
通过除零错误拒绝服务
假设协议定义有一个整数字段,其值不包括零。攻击者在这样的协议消息中发送一个0值。如果不检查接收的值并将其用于除法运算,则会触发CPU异常。此时系统进入安全状态,停止响应。
缓冲区过读导致的信息丢失
2014年,Heartbleed心脏滴血漏洞(CVE‑2014‑0160)被发现。攻击者将长度字段设置为高于协议允许的数字,利用该漏洞获取信息。
在OpenSSL相应版本实现中缺少长度检查,导致从堆缓冲区中读取并向攻击者发送更多的字节数据,从而泄漏了内存中的敏感信息。
通过缓冲区溢出执行远程代码
CPU将函数调用的返回地址存储在堆栈上,并通过降序方式使用堆栈(如ARM或x86)。
假设调用了一个函数,并在堆栈上分配了一个固定大小的通信缓冲区,通信缓冲区的地址低于存储的函数返回地址。
有缺陷的协议实现将接收的消息复制到该缓冲区时,不验证消息的长度。因此,如果接收的消息长度大于分配的缓冲区,则函数返回地址将被消息内容覆盖。
在函数返回时,将被覆盖的返回地址从堆栈中加载执行。通过猜测或分析固件,攻击者使CPU执行其发送的指令。
如今,公司很少对嵌入式软件开发人员进行IT安全方面的培训,开发人员很难想象攻击者在为检测和利用系统中的弱点所做的常规工作。这种知识的缺失导致他们低估了即使是看似微不足道的错误也可能产生的影响。文中列举了嵌入式应用中常见的安全危险,通过这些例子提高人们的安全意识。
客服热线
400-618-9990 / 13621148533
官方微信
关注微信公众号