嵌入式开发:嵌入式系统安全中的10个致命错误

更新时间: 2021-11-22 10:30:40来源: 粤嵌教育浏览量:1015

  对于嵌入式系统来说,这是一个不幸的事实:一旦部署到野外,它们永远不会100%安全,尤其是在世界变得更加互联的情况下。这一事实由于应用于这些系统的安全工程方法在历史上的松懈而更加复杂。大多数嵌入式开发设备专注于特定设备的软件,并且经常忽略操作系统和较低级别的组件。


  随着全球数十亿嵌入式系统的使用和日益互联,攻击者有巨大的动机设计出新的、隐蔽的方法来提取敏感数据和/或重新利用现场设备谋取私利。因此,设备本身和特定功能的软件通常需要随着时间的推移进行更新,以应对新的安全威胁。


  让我们来分析10个致命的安全错误,它们可能会危及我们业务、金融和关键基础架构中的嵌入式系统。


  1.让你的敏感数据和应用程序处于安全状态


  罪犯可以读取、提取和利用你以明文形式留下的数据和应用程序。对数据和应用程序进行加密是不够的;你还必须担心加密密钥存储的位置和方式以及使用的算法。假设我们可以使用SSL/TLS来保护传输中的数据是错误的,因为我们经常忘记相同的数据存储在边缘设备和云平台的本地。


  2.在没有安全、经过身份验证的引导的情况下启动系统


  网络犯罪分子可以对未使用安全引导过程引导的设备进行根攻击。此外,它们还可以更改引导加载程序、操作系统、UEFI BIOS和硬件/软件配置,或者用恶意版本替换它们。更糟糕的是,即使嵌入式开发人员完全重新安装主机操作系统,其中一些恶意修改也会持续存在。


  除了在硬件基础上实现经过身份验证的安全引导外,你无法保护你的引导序列免受攻击,这些攻击会篡改引导加载程序,并随后危及系统的网络弹性。此外,缺乏安全引导也会导致各种各样的攻击和设备重新调整用途。




  3.允许未经授权的软件访问未经授权的组件


  犯罪黑客可以利用一个组件中的漏洞或隐含信任来泄漏关键信息,如内存内容和地址,从而实现多种二阶攻击。


  在不限制仅访问完成任务所需的组件的情况下,你会留下意外的漏洞,使攻击者能够从一个组件转到另一个组件。例如,共享硬盘驱动器或内存组件的两个软件可以通过该硬件进行通信(可能通过利用各种侧通道攻击),利用其中一个漏洞访问另一个。


  4.忽视或错误配置集装箱化或隔离机制


  错误配置软件容器或忽略软件隔离可能会允许网络罪犯升级权限并获得对系统的未经授权的根级别访问(完全控制)。所谓的容器和/或VM突破使攻击者能够内省和修改系统上其他容器的内容,并可能以非预期方式与基于云的服务交互。


  5.留下太多的攻击面


  使用过多的接口和功能扩充软件越多,攻击面就越大—攻击者可以利用漏洞攻击你的系统。类似地,操作系统映像或应用程序包中包含的库越多,攻击面越大,嵌入式开发人员更新、修补和解决各种可能的安全漏洞的负担就越重。犯罪黑客只需要扫描你的系统就知道攻击什么。


  通过采用最低限度的软件开发方法,仅添加实现软件任务所需的功能,网络攻击者将更难利用你的代码为自己谋利。


  6.发放不受限制的特权


  当你给予应用程序比所需更多的访问权限(自主访问控制、系统级权限、命名空间等)时,网络罪犯可以利用该访问权限解锁权限并操纵你的软件。一旦攻击者利用多余的权限获得管理权限,他们可能会在网络上横向移动,获得对云基础设施的访问,从那里可能获得对所有设备的访问,从而执行拒绝服务攻击、降低性能、注入恶意软件等。


  有一些简单但相对未使用的机制可用于限制对各种权限的访问。在Linux环境中最简单的情况下,我们可以从标准用户/组访问控制开始,添加在使用后丢弃功能的能力(可以使用特权端口启动服务),然后进入Linux环境中的各种其他安全选项集。


  虽然我们特别关注边缘设备上的无限制权限,但同样的概念也适用于整个DevOps管道、云基础设施和企业网络。


  7.假定信任并允许未经验证的通信


  你必须主动检查和确认安全协议,只向经过身份验证的用户和系统提供信任,并且只使用加密通道与这些用户和系统通信。当然,还有另一个隐含的假设,即我们的设备本身是可信的。如果我们与之通信和交换数据的设备不可信,那么我们必须解决各种其他问题,如本地数据加密、基于硬件的密钥管理和安全引导。


  使用默认设置或易受攻击的协议会导致未经授权的访问,并导致恶意流量进入你的系统。




  8.未能检查输入


  当嵌入式开发人员不检查输入时,攻击者可以将格式错误的数据引入系统,导致下游组件出现故障。使用格式错误数据的常见攻击包括SQL注入和缓冲区溢出。


  程序员检查从web表单提交到RF capture的所有类型数据的输入,以确保可信用户向其软件发送预期数据。预期数据包括数据的格式和内容。输入验证可防止不受信任的用户发送带有恶意意图的意外数据,并假定所有非源于应用程序本身的数据都不受信任。


  9.安全编码中错失的机会


  易受攻击的编码实践会让软件缺陷在开发过程中不被发现,更糟糕的是,许多此类实践和访问可能导致攻击。如果你不使用安全的开发工具和技术,网络犯罪分子将经常突破你软件中的这些漏洞,并可能利用你的漏洞访问其他网络和组织。


  但通过安全的编码工作流和自动化测试,你可以在开发过程中尽早发现并修复漏洞。请记住:安全开发过程不是解决方案,并且需要一起实践。


  10.将希望作为一项安全战略


  对于有限的安全人员来说,手动查看事件日志、搜索攻击和违规迹象所需的时间太长。相反,你需要利用自动化工具,不断监视你的系统,并检查你的记录,寻找入侵的历史证据。当然,这一切都假设我们记录了正确的事情,有足够的细节来做出决定。


  现代技术可以接收和审核整个系统的日志集合,行为工具可以识别网络和软件中的可疑活动。嵌入式开发人员甚至可以从使用当前威胁特征识别攻击的恶意软件扫描中获益。通过结合这些努力,你可以绘制完整的安全状态图,并随时更新。

免费预约试听课

推荐阅读