0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式代码的致命安全漏洞

GReq_mcu168 来源:玩转单片机 作者:玩转单片机 2021-01-15 15:07 次阅读

随着互联网的发展,嵌入式设备正分布在一个充满可以被攻击者利用的源代码级安全漏洞的环境中。因此,嵌入式软件开发人员应该了解不同类型的安全漏洞——特别是代码注入。

术语“代码注入”意味着对程序的常规数据输入可以被制作成“包含代码”,并且该程序可以被欺骗来执行该代码。代码注入缺陷意味着黑客可以劫持现有进程,并以与原始进程相同的权限执行任何他们喜欢的代码。

在许多嵌入式系统中,进程需要以最高的权限运行,因此成功的代码注入攻击可以完全控制机器以及窃取数据,导致设备发生故障,将其作为其僵尸网络成员或使其永久无法使用。

代码注入漏洞的关键方面是:

该程序从输入通道读取数据

该程序将数据视为代码并对其进行编译

在大多数情况下,程序故意像执行代码一样执行数据是不寻常的,但将数据用于构造有意执行的对象却很常见。

格式化字符串漏洞

大多数C程序员熟悉printf函数。大体上,这些格式字符串后跟一个其他参数的列表,并且该格式字符串被解释为一组指令,用于将剩余的参数呈现为字符串。大多数用户知道如何编写最常用的格式说明符:例如字符串,小数和浮点数——%s,%d,%f——但是不知道还有其他格式字符串指令可以被滥用。

以下是printf函数通常被滥用的一种方式。有些程序员习惯编译字符串如下:

printf(str);

虽然这将在大部分时间内都具有所期望的效果,但它是错误的,因为printf的第一个参数将被编译为格式字符串。所以,如果str包含任何格式说明符,它们就将被这样编译。例如,如果str包含'%d',它会将printf参数列表中的下一个值解释为整数,并将其转换为字符串。在这种情况下,没有更多的参数,但机器在执行的时候并不了解这一点; 它所知道的全部是,函数的一些参数已经被推送到堆栈。

因为在C运行时没有机制可以告诉机器已经没有更多的参数了,所以printf将简单地选择恰好在堆栈中的下一个项目,将其编译为一个整数并打印出来。很容易看出,这可以用来从栈中打印任意数量的信息。例如,如果str包含'%d%d%d%d',则将会打印堆栈上接下来四个字的值。

虽然这是一个代码注入安全漏洞,但由于它唯一可能造成的伤害就是可以被用来获取栈中的数据,所以它还是可以被原谅的。可如果位于那里的是敏感数据(如密码或证书密钥),情况就会变得很糟;而且由于攻击者还可以在那里写入任意内存地址,因此情况还可能会变得更糟。

使这种糟糕情况的发生成为可能的是格式说明符'%n'。通常,相应的参数是指向整数的指针。当格式字符串为了建立结果字符串而被编译时,一遇到'%n',到目前为止写入的字节数就被放置到由该指针所指示的存储单元中了。例如,在下面的printf完成之后,i中的值将为4:

printf(“1234%n”,&i);

如果函数的实际参数比格式说明符更少,那么printf会将任何在堆栈上的数据作为参数编译。因此,如果攻击者可以控制格式字符串,那么它们可以将基本上任意的值写入堆栈位置。因为堆栈是局部变量所在的位置,所以它们的值可以被改变。如果这些变量中有一些是指针,那么这个平台甚至可以到达其他非堆栈地址。

真正对攻击者来说有价值的目标是让攻击者控制程序的执行部分。如果一个局部变量是一个函数指针,则攻击者可以通过该指针的后续调用来编写代码,实现自己的目标。当函数返回时,攻击者还可以将指令要被送达的地址覆盖重写。

避免代码注入

避免代码注入的最佳方法是通过设计。如果您可以使用一种永远不会出现漏洞的语言,那么这是最好的因为您的代码在构建时就是对一切攻击免疫的。或者您可以通过设计代码来禁止可能导致这些问题的接口。不幸的是,在嵌入式系统中,这些选择并不总是可行的。即使C是一种危险的语言,充斥着漏洞,但它仍然是许多组织架构的首选语言。鉴于此,开发人员应该了解其他避免代码注入的方法。

应该遵循的两个黄金规则以防止代码注入漏洞:

1.如果你可以避免的话,尽量不要将数据像代码一样编译;

2.如果你无法避免的话,请确保在使用数据之前验证数据是否良好。

为避免格式字符串的漏洞,这些规则中的第一个是最合适的; 你可以编写代码如下:

printf(“%s”,str);

这样,str的内容只被视为数据。这是最不费脑子的办法,只要你能找到所有应该做出这种修改的地方。但这对于大型程序来说可能是棘手的,特别是对于第三方代码库。

测试漏洞

测试这些类型的漏洞可能很困难; 即使能实现非常高的代码覆盖率的测试也不能触发这些问题。测试安全漏洞时,测试人员必须采取一个攻击者的心态。诸如模糊测试的技术可能是有用的,但是该技术通常太随机,无法高度可靠。

静态分析可以有效地发现代码注入漏洞。注意到早期生成的静态分析工具(如lint及其后代衍生产品)很不擅长发现这样的漏洞,因为想要实现精确的查找漏洞就需要完成整个程序的路径敏感分析。

最近出现的先进的静态分析工具更加有效。静态分析工具厂商对于哪些接口有危险,寻找目标的知识基础以及如何有效地进行这些工作已经积累了丰富的经验。

这里使用的关键技术是污染分析或危险信息流分析。这些工具通过首先识别潜在风险数据的来源,并对信息进行追踪,了解信息是如何通过代码不经过验证就流入正在使用的位置的。同时这也是能实现整个流程可视化的最好工具。

结论

代码注入漏洞是危险的安全问题,因为它们可能允许攻击者中断程序,有时甚至完全控制程序。那些关心如何在一个充满潜在恶意的互联网环境中确保他们的嵌入式代码能够安全使用的开发人员,应该将这样的代码注入漏洞,在开发周期和严格的代码检查中尽早消除。而上面提到的高级静态分析工具是被推荐使用的。

21563f90-56fc-11eb-8b86-12bb97331649.png

原文标题:嵌入式代码的致命漏洞

文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288427
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66766

原文标题:嵌入式代码的致命漏洞

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PuTTY等工具曝严重安全漏洞:可还原私钥和伪造签名

    据报道,知名SSH和Telnet工具PuTTY于4月18日暴露安全漏洞CVE-2024-31497,涉及版本0.68至0.80。仅需使用60个签名,攻击者即可还原私钥。为应对此风险,官方更新推出0.81版本,呼吁使用者尽快升级。
    的头像 发表于 04-18 10:06 157次阅读

    iOS 17.4.1修复两安全漏洞,涉及多款iPhone和iPad

     据报道,iOS/iPadOS17.4.1主要解决了Google Project Zero团队成员Nick Galloway发现并报告的两大安全漏洞(CVE-2024-1580)。
    的头像 发表于 03-26 10:47 286次阅读

    嵌入式系统发展前景?

    应用领域。随着汽车电子化和智能化程度的不断提高,嵌入式系统将在汽车控制、安全系统、自动驾驶等方面发挥更为重要的作用。 工智能和机器学习技术的发展为嵌入式系统提供了新的发展机遇。嵌入式A
    发表于 02-22 14:09

    代码审计怎么做?有哪些常用工具

    代码审计是一种通过检查源代码来发现潜在的安全漏洞的方法。 下面是常用的源代码审计工具: 1、Fortify:通过内置的五大主要分析引擎,对源代码
    发表于 01-17 09:35

    再获认可,聚铭网络入选国家信息安全漏洞库(CNNVD)技术支撑单位

    近日,国家信息安全漏洞库(CNNVD)公示2023年度新增技术支撑单位名单。经考核评定,聚铭网络正式入选并被授予《国家信息安全漏洞库(CNNVD)三级技术支撑单位证书》。     国家信息安全漏洞
    的头像 发表于 12-21 10:14 275次阅读
    再获认可,聚铭网络入选国家信息<b class='flag-5'>安全漏洞</b>库(CNNVD)技术支撑单位

    如何消除内存安全漏洞

    “MSL 可以消除内存安全漏洞。因此,过渡到 MSL 可能会大大降低投资于旨在减少这些漏洞或将其影响降至最低的活动的必要性。
    发表于 12-12 10:29 189次阅读
    如何消除内存<b class='flag-5'>安全漏洞</b>

    什么是嵌入式Linux?

    什么是嵌入式Linux? 对于很多电气、电信、通信专业的同学来说,对口专业就业方向主要有软、硬件两个方向。无论是对于学生还是就业而言,软硬件的开发学习,嵌入式物联网在近年来无疑是一个摆在面前
    发表于 10-11 13:47

    统一系统脆弱性管理平台:让“网络安全漏洞”无处遁形

    网络安全漏洞是网络节点的系统软件或应用软件在逻辑设计上的缺陷,漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使网络攻击者能够在未授权的情况下访问或破坏系统。   网络
    的头像 发表于 09-25 10:30 330次阅读
    统一系统脆弱性管理平台:让“网络<b class='flag-5'>安全漏洞</b>”无处遁形

    如何降低网络安全漏洞被利用的风险

    的领军企业——国联易安的产品市场专家给出了答案: 一是明白什么是网络安全漏洞。网络安全漏洞也称为脆弱性,是信息系统在需求、设计、实现、配置、运行等过程中,有意或无意产生的可被威胁利用的缺陷,这些缺陷存在于件
    的头像 发表于 09-13 15:37 655次阅读

    如何对嵌入式设备进行漏洞利用

    过去的几个月我一直在周游以指导人们如何对嵌入式设备进行漏洞利用,单单幻灯片已经不足以承载足够的信息,所以我将所有的都写下来以便与知识的消化。接下来的内容是 第一部分,介绍了一些嵌入式设备端的软件。
    发表于 09-06 11:22 285次阅读
    如何对<b class='flag-5'>嵌入式</b>设备进行<b class='flag-5'>漏洞</b>利用

    AMD Zen2全家都有严重安全漏洞

    Google信息安全研究员Tavis Ormandy披露了他独立发现的存在于AMD Zen2架构产品中的一个严重安全漏洞“Zenbleed”(Zen在流血)。
    的头像 发表于 07-26 11:51 1441次阅读
    AMD Zen2全家都有严重<b class='flag-5'>安全漏洞</b>!

    IBM 最新报告:安全漏洞成本飙升,但半数存在漏洞企业不愿增加安全投入

    万美元,创该报告有史以来以来最高记录,也较过去3年均值增长了15%。同一时期内,检测安全漏洞漏洞恶化带来的
    的头像 发表于 07-26 04:07 459次阅读
    IBM 最新报告:<b class='flag-5'>安全漏洞</b>成本飙升,但半数存在<b class='flag-5'>漏洞</b>企业不愿增加<b class='flag-5'>安全</b>投入

    IBM 最新报告:安全漏洞成本飙升,但半数存在漏洞企业不愿增加安全投入

    以来最高记录,也较过去 3 年均值增长了 15%。同一时期内,检测安全漏洞漏洞恶化带来的安全成本上升了 42%,占安全
    的头像 发表于 07-25 18:15 257次阅读
    IBM 最新报告:<b class='flag-5'>安全漏洞</b>成本飙升,但半数存在<b class='flag-5'>漏洞</b>企业不愿增加<b class='flag-5'>安全</b>投入

    PX5的ARM TrustZone支持让嵌入式系统变得更加安全

    产品安全性。PX5 RTOS对ARM TrustZone的支持让嵌入式开发者能够从物理层降低网络安全风险。 PX5的CEO William Lamie表示:“基于MCU的产品如今已是生活中不可缺少的一部分
    发表于 05-18 13:44

    利用SDR发现射频安全漏洞

    在当今的无线和5G时代,公司和个人在其物联网资产上遇到越来越多的安全威胁。任何拥有低成本无线电设备的人都可以拦截无线射频信号,并使用开源软件进行解码,因此必须评估连接设计是否存在安全漏洞。这包括进行
    的头像 发表于 05-05 09:50 1979次阅读