侵权投诉

关于嵌入式代码的致命漏洞

嵌入式ARM 2021-01-06 15:13 次阅读

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

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

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

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

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

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

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

格式化字符串漏洞

大多数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及其后代衍生产品)很不擅长发现这样的漏洞,因为想要实现精确的查找漏洞就需要完成整个程序的路径敏感分析。

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

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

结论

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

3157108c-4f58-11eb-8b86-12bb97331649.png

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

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

通俗讲解单片机、ARM、MCU、DSP、FPGA、嵌入式错综复杂的关系!资料下载

电子发烧友网为你提供通俗讲解单片机、ARM、MCU、DSP、FPGA、嵌入式错综复杂的关系!资料下载....
发表于 04-21 08:54 21次 阅读
通俗讲解单片机、ARM、MCU、DSP、FPGA、嵌入式错综复杂的关系!资料下载

8位、16位、32位单片机各有啥区别?主要是CPU?资料下载

电子发烧友网为你提供8位、16位、32位单片机各有啥区别?主要是CPU?资料下载的电子资料下载,更有....
发表于 04-21 08:54 11次 阅读
8位、16位、32位单片机各有啥区别?主要是CPU?资料下载

ROM与RAM 单片机上电后如何一步步执行?资料下载

电子发烧友网为你提供ROM与RAM 单片机上电后如何一步步执行?资料下载的电子资料下载,更有其他相关....
发表于 04-21 08:53 4次 阅读
ROM与RAM 单片机上电后如何一步步执行?资料下载

Keil程序调试窗口资料下载

电子发烧友网为你提供Keil程序调试窗口资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教....
发表于 04-21 08:53 2次 阅读
Keil程序调试窗口资料下载

八步学习使用单片机资料下载

电子发烧友网为你提供八步学习使用单片机资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程....
发表于 04-21 08:52 10次 阅读
八步学习使用单片机资料下载

8位、16位、32位MCU,性能大比拼@资料下载

电子发烧友网为你提供8位、16位、32位MCU,性能大比拼@资料下载的电子资料下载,更有其他相关的电....
发表于 04-21 08:52 12次 阅读
8位、16位、32位MCU,性能大比拼@资料下载

7个技巧开发更高可靠性的嵌入式系统资料下载

电子发烧友网为你提供7个技巧开发更高可靠性的嵌入式系统资料下载的电子资料下载,更有其他相关的电路图、....
发表于 04-21 08:51 6次 阅读
7个技巧开发更高可靠性的嵌入式系统资料下载

单片机不难,关键是按照这三步来学习和应用资料下载

电子发烧友网为你提供单片机不难,关键是按照这三步来学习和应用资料下载的电子资料下载,更有其他相关的电....
发表于 04-21 08:51 6次 阅读
单片机不难,关键是按照这三步来学习和应用资料下载

stm32内存管理方法总结资料下载

电子发烧友网为你提供stm32内存管理方法总结资料下载的电子资料下载,更有其他相关的电路图、源代码、....
发表于 04-21 08:50 6次 阅读
stm32内存管理方法总结资料下载

STM32经典概述,纯干货资料下载

电子发烧友网为你提供STM32经典概述,纯干货资料下载的电子资料下载,更有其他相关的电路图、源代码、....
发表于 04-21 08:50 9次 阅读
STM32经典概述,纯干货资料下载

基于SIP协议和嵌入式数据库实现家居远程监测控制资料下载

电子发烧友网为你提供基于SIP协议和嵌入式数据库实现家居远程监测控制资料下载的电子资料下载,更有其他....
发表于 04-21 08:49 46次 阅读
基于SIP协议和嵌入式数据库实现家居远程监测控制资料下载

STM32中单独设置GPIO端口高8位/低8位的方法资料下载

电子发烧友网为你提供STM32中单独设置GPIO端口高8位/低8位的方法资料下载的电子资料下载,更有....
发表于 04-21 08:49 4次 阅读
STM32中单独设置GPIO端口高8位/低8位的方法资料下载

基于AT89C52的智能温度预警系统资料下载

电子发烧友网为你提供基于AT89C52的智能温度预警系统资料下载的电子资料下载,更有其他相关的电路图....
发表于 04-21 08:46 10次 阅读
基于AT89C52的智能温度预警系统资料下载

STM32L476 FPU 执行效率之比较浅析资料下载

电子发烧友网为你提供STM32L476 FPU 执行效率之比较浅析资料下载的电子资料下载,更有其他相....
发表于 04-21 08:45 3次 阅读
STM32L476 FPU 执行效率之比较浅析资料下载

手机闪信和计步器介绍资料下载

电子发烧友网为你提供手机闪信和计步器介绍资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教....
发表于 04-21 08:44 8次 阅读
手机闪信和计步器介绍资料下载

嵌入式 Linux 的一切,看这一篇就够了!资料下载

电子发烧友网为你提供嵌入式 Linux 的一切,看这一篇就够了!资料下载的电子资料下载,更有其他相关....
发表于 04-21 08:44 5次 阅读
嵌入式 Linux 的一切,看这一篇就够了!资料下载

单片机里的通信协议怎么理解?这样看其实挺简单资料下载

电子发烧友网为你提供单片机里的通信协议怎么理解?这样看其实挺简单资料下载的电子资料下载,更有其他相关....
发表于 04-21 08:43 6次 阅读
单片机里的通信协议怎么理解?这样看其实挺简单资料下载

单片机中的FLASH和EEPROM怎么操作?资料下载

电子发烧友网为你提供单片机中的FLASH和EEPROM怎么操作?资料下载的电子资料下载,更有其他相关....
发表于 04-21 08:42 3次 阅读
单片机中的FLASH和EEPROM怎么操作?资料下载

STM32单片机硬件介绍资料下载

电子发烧友网为你提供STM32单片机硬件介绍资料下载的电子资料下载,更有其他相关的电路图、源代码、课....
发表于 04-21 08:41 9次 阅读
STM32单片机硬件介绍资料下载

STM32的磁导航自主导引车通用驱动器设计资料下载

电子发烧友网为你提供STM32的磁导航自主导引车通用驱动器设计资料下载的电子资料下载,更有其他相关的....
发表于 04-21 08:40 2次 阅读
STM32的磁导航自主导引车通用驱动器设计资料下载

请问如何提高嵌入式模数转换器的精度?

嵌入式模数转换器的原理及应用 请问如何提高嵌入式模数转换器的精度?...
发表于 04-21 06:12 0次 阅读
请问如何提高嵌入式模数转换器的精度?

基于实时代码生成工具的DSP控制系统

提出一种基于实时代码生成工具(RTW)的TMS320F2812DSP控制系统,介绍了控制系统的硬件结....
发表于 04-20 16:14 8次 阅读
基于实时代码生成工具的DSP控制系统

基于知识蒸馏的恶意代码家族检测方法研究综述

近年来,恶意代码变种层出不穷,恶意软件更具隐蔽性和持久性,亟需快速有效的检测方法来识别恶意样本。针对....
发表于 04-20 14:49 4次 阅读
基于知识蒸馏的恶意代码家族检测方法研究综述

推荐一本非常好的书籍《嵌入式硬件系统设计与开发实例详解》PDF完整

链接:https://pan.baidu.com/s/1zI2TmjK-L09ZLzMzJqdnyg 提取码:qhjz ...
发表于 04-20 14:03 101次 阅读
推荐一本非常好的书籍《嵌入式硬件系统设计与开发实例详解》PDF完整

采用STM32嵌入式语音识别电路模块设计资料下载

电子发烧友网为你提供采用STM32嵌入式语音识别电路模块设计资料下载的电子资料下载,更有其他相关的电....
发表于 04-20 08:54 19次 阅读
采用STM32嵌入式语音识别电路模块设计资料下载

STM32处理器存储空间布局解析资料下载

电子发烧友网为你提供STM32处理器存储空间布局解析资料下载的电子资料下载,更有其他相关的电路图、源....
发表于 04-20 08:54 11次 阅读
STM32处理器存储空间布局解析资料下载

51单片机每个引脚功能介绍,初学者常备资料下载

电子发烧友网为你提供51单片机每个引脚功能介绍,初学者常备资料下载的电子资料下载,更有其他相关的电路....
发表于 04-20 08:54 46次 阅读
51单片机每个引脚功能介绍,初学者常备资料下载

MSP430单片机的时钟被分为了 MCLK、 SMCLK 和 ACLK 三个,它们有什么区别?资料下载

电子发烧友网为你提供MSP430单片机的时钟被分为了 MCLK、 SMCLK 和 ACLK 三个,它....
发表于 04-20 08:53 13次 阅读
MSP430单片机的时钟被分为了 MCLK、 SMCLK 和 ACLK 三个,它们有什么区别?资料下载

嵌入式GIS软件低功耗措施资料下载

电子发烧友网为你提供嵌入式GIS软件低功耗措施资料下载的电子资料下载,更有其他相关的电路图、源代码、....
发表于 04-20 08:52 2次 阅读
嵌入式GIS软件低功耗措施资料下载

51单片机外部中断的两种触发方式资料下载

电子发烧友网为你提供51单片机外部中断的两种触发方式资料下载的电子资料下载,更有其他相关的电路图、源....
发表于 04-20 08:51 12次 阅读
51单片机外部中断的两种触发方式资料下载

STM32的二乘二取二的光通信系统设计资料下载

电子发烧友网为你提供STM32的二乘二取二的光通信系统设计资料下载的电子资料下载,更有其他相关的电路....
发表于 04-20 08:51 7次 阅读
STM32的二乘二取二的光通信系统设计资料下载

利用高度集成的8位MCU简化CAN汽车应用资料下载

电子发烧友网为你提供利用高度集成的8位MCU简化CAN汽车应用资料下载的电子资料下载,更有其他相关的....
发表于 04-20 08:47 11次 阅读
利用高度集成的8位MCU简化CAN汽车应用资料下载

6个方法帮你解决单片机死机问题资料下载

电子发烧友网为你提供6个方法帮你解决单片机死机问题资料下载的电子资料下载,更有其他相关的电路图、源代....
发表于 04-20 08:47 9次 阅读
6个方法帮你解决单片机死机问题资料下载

一图详解STM32单片机的5个时钟源资料下载

电子发烧友网为你提供一图详解STM32单片机的5个时钟源资料下载的电子资料下载,更有其他相关的电路图....
发表于 04-20 08:46 7次 阅读
一图详解STM32单片机的5个时钟源资料下载

STM32进阶之串口环形缓冲区实现资料下载

电子发烧友网为你提供STM32进阶之串口环形缓冲区实现资料下载的电子资料下载,更有其他相关的电路图、....
发表于 04-20 08:46 3次 阅读
STM32进阶之串口环形缓冲区实现资料下载

简单的单片机基础要知道哪些?资料下载

电子发烧友网为你提供简单的单片机基础要知道哪些?资料下载的电子资料下载,更有其他相关的电路图、源代码....
发表于 04-20 08:45 6次 阅读
简单的单片机基础要知道哪些?资料下载

解决串口传输“阻塞”问题的方案资料下载

电子发烧友网为你提供解决串口传输“阻塞”问题的方案资料下载的电子资料下载,更有其他相关的电路图、源代....
发表于 04-20 08:45 7次 阅读
解决串口传输“阻塞”问题的方案资料下载

理解STM32系统时钟和分频资料下载

电子发烧友网为你提供理解STM32系统时钟和分频资料下载的电子资料下载,更有其他相关的电路图、源代码....
发表于 04-20 08:43 3次 阅读
理解STM32系统时钟和分频资料下载

51单片机串行通信的原理解析资料下载

电子发烧友网为你提供51单片机串行通信的原理解析资料下载的电子资料下载,更有其他相关的电路图、源代码....
发表于 04-20 08:42 5次 阅读
51单片机串行通信的原理解析资料下载

单片机的复位、程序执行、低功耗和编程与加密资料下载

电子发烧友网为你提供单片机的复位、程序执行、低功耗和编程与加密资料下载的电子资料下载,更有其他相关的....
发表于 04-20 08:42 2次 阅读
单片机的复位、程序执行、低功耗和编程与加密资料下载

嵌入式ARM开发的前世今生,看完你就懂了

嵌入式ARM的开发方向是什么? 嵌入式ARM开发的前世今生 ...
发表于 04-20 06:39 0次 阅读
嵌入式ARM开发的前世今生,看完你就懂了

采用强大处理器开发高效嵌入式应用有哪些指导原则?

DSP某些重要的软件与系统优化技术 采用强大处理器开发高效嵌入式应用有哪些指导原则? ...
发表于 04-20 06:28 0次 阅读
采用强大处理器开发高效嵌入式应用有哪些指导原则?

请问使用代码优化时必须考虑的问题有哪些?

使用代码优化时必须考虑的问题有哪些?
发表于 04-20 06:19 0次 阅读
请问使用代码优化时必须考虑的问题有哪些?

STC15W401AS-实现四轴飞行器无刷电机的电调控制-参考程序和电路

发表于 04-19 19:42 94次 阅读
STC15W401AS-实现四轴飞行器无刷电机的电调控制-参考程序和电路

关于SDRAM控制器的基础知识详解

在FPGA视频图像处理系统中,经常需要使用到SDRAM作为视频图像缓存。SDRAM控制器可以分为上电....
的头像 FPGA之家 发表于 04-19 09:46 107次 阅读
关于SDRAM控制器的基础知识详解

请问嵌入式Linux GCC常用命令有哪些?

嵌入式Linux GCC常用命令有哪些?
发表于 04-19 09:39 0次 阅读
请问嵌入式Linux GCC常用命令有哪些?

如何选择合适的超低功耗MCU?有什么技巧?

如何选择合适的超低功耗MCU?有什么技巧? 如何降低MCU的功耗? ...
发表于 04-19 09:21 0次 阅读
如何选择合适的超低功耗MCU?有什么技巧?

STM32 + SIM800C 实现MQTT协议资料下载

电子发烧友网为你提供STM32 + SIM800C 实现MQTT协议资料下载的电子资料下载,更有其他....
发表于 04-19 08:53 12次 阅读
STM32 + SIM800C 实现MQTT协议资料下载

嵌入式实时系统资料下载

电子发烧友网为你提供嵌入式实时系统资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中....
发表于 04-19 08:52 9次 阅读
嵌入式实时系统资料下载

STM32 APB1总线时钟配置问题资料下载

电子发烧友网为你提供STM32 APB1总线时钟配置问题资料下载的电子资料下载,更有其他相关的电路图....
发表于 04-19 08:51 9次 阅读
STM32 APB1总线时钟配置问题资料下载

一文介绍ARM Mali-G71资料下载

电子发烧友网为你提供一文介绍ARM Mali-G71资料下载的电子资料下载,更有其他相关的电路图、源....
发表于 04-19 08:50 44次 阅读
一文介绍ARM Mali-G71资料下载

TCP/IP协议简介资料下载

电子发烧友网为你提供TCP/IP协议简介资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教....
发表于 04-19 08:48 11次 阅读
TCP/IP协议简介资料下载

小白学单片机(20) IO口原理讲解资料下载

电子发烧友网为你提供小白学单片机(20) IO口原理讲解资料下载的电子资料下载,更有其他相关的电路图....
发表于 04-19 08:48 32次 阅读
小白学单片机(20) IO口原理讲解资料下载

单片机小白学步(23) IO口原理知识补充:双向IO口、互补推挽、高阻态资料下载

电子发烧友网为你提供单片机小白学步(23) IO口原理知识补充:双向IO口、互补推挽、高阻态资料下载....
发表于 04-19 08:47 14次 阅读
单片机小白学步(23) IO口原理知识补充:双向IO口、互补推挽、高阻态资料下载

小白学单片机(15) 单片机程序下载失败总结资料下载

电子发烧友网为你提供小白学单片机(15) 单片机程序下载失败总结资料下载的电子资料下载,更有其他相关....
发表于 04-19 08:47 20次 阅读
小白学单片机(15) 单片机程序下载失败总结资料下载

嵌入式可视倒车硬件电路图资料下载

电子发烧友网为你提供嵌入式可视倒车硬件电路图资料下载的电子资料下载,更有其他相关的电路图、源代码、课....
发表于 04-19 08:42 109次 阅读
嵌入式可视倒车硬件电路图资料下载

Keil MDK 和 IAR 两款ARM开发工具区别比较资料下载

电子发烧友网为你提供Keil MDK 和 IAR 两款ARM开发工具区别比较资料下载的电子资料下载,....
发表于 04-19 08:41 24次 阅读
Keil MDK 和 IAR 两款ARM开发工具区别比较资料下载

这些单片机编程经验总结,真的很实用,不看就亏大了!资料下载

电子发烧友网为你提供这些单片机编程经验总结,真的很实用,不看就亏大了!资料下载的电子资料下载,更有其....
发表于 04-19 08:41 11次 阅读
这些单片机编程经验总结,真的很实用,不看就亏大了!资料下载

如何快速学习嵌入式?

如何快速学习嵌入式? 常见的嵌入式系统有哪些? 什么是嵌入式操作系统? ...
发表于 04-19 07:01 0次 阅读
如何快速学习嵌入式?

请问怎样通过CLT工具去优化C6000代码?

有谁来帮忙解答一下如何使用CLT工具去优化C6000代码?...
发表于 04-19 06:51 0次 阅读
请问怎样通过CLT工具去优化C6000代码?