分析嵌入式软件代码的漏洞 —— 代码注入

发布时间:2023-12-28  

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

本文引用地址:

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

640 (2).jpg

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

代码注入的关键方面是:

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

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

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

格式化字符串漏洞

大多数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是一种危险的语言,充斥着漏洞,但它仍然是许多组织架构的首选语言。鉴于此,开发人员应该了解其他避免代码注入的方法。

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

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

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

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

printf(“%s”,str);

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

测试漏洞

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

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

提升嵌入式代码的分析工具

最近出现的先进的静态分析工具更加有效。静态分析工具厂商对于哪些接口有危险,寻找目标的知识基础以及如何有效地进行这些工作已经积累了丰富的经验,这里使用的关键技术是污染分析或危险信息流分析。

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

结论

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

文章来源于网络,版权归原作者所有,如有侵权,请联系删除。

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    和维护。 Lua的目标是成为一个非常easy嵌入其他语言中使用的语言。大多数程序猿也觉得它的确做到了这一点。 非常多应用程序使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这当......
    . 嵌入式脚本引擎 在组态软件的推动下,UI界面的软件开发进入了图形化编程时代。但是UI界面只是 HMI 的一部分,HMI 显示的数据以及输入控制的响应,都离不开与设备进行通信,和数......
    开发方式,取代以往的代码编辑方式,实现所见即所得的效果,大大降低了UI的开发难度。   4. 嵌入式脚本引擎   在组态软件的推动下,UI界面的软件开发进入了图形化编程时代。但是UI界面......
    嵌入式开发:在微控制器基础上使用Python进行原型设计和开发;Python很实用,但脚本语言通常是为PC应用程序的资源而设计的。然而,嵌入式应用程序通常需要处理更少的问题。Adafruit的......
    改为VBA(Visual Basic For Application),并且在内部集成了微软的VBA开发环境。遗憾的是,Intellution并没有提供6.1版脚本语言到VBA的转换工具。在iFiX中......
    【MCS-51】汇编程序设计;51单片机汇编程序设计是嵌入式开发中非常重要的一部分。掌握汇编程序设计可以帮助开发人员更好地理解51单片机内部原理,并且更灵活高效地进行系统开发。本文将从开发环境、基本语......
    要求您具有编写PowerShell 脚本语句的能力。 LokiStart脚本开发背景 随着 CC2340 在市场上的流行,很多没有接触过 SimpleLink 系列产品的工程师会有快速搭建 CC2340 嵌入式......
    电压的影响实验和载波频率的影响实验中进行快速跳转。 图4 信号调制解调知识点虚拟仪器复合文档显示界面 2.4 Signal Basic脚本语言 教学用虚拟仪器平台的另一个特点是必须具有更强的开放性,学生......
    需要的是要掌握C语言。ARM嵌入式领域中大部分会使用到C语言。目前所有的8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言,以C语言为基础的。c++要知道什么是类,怎么定义,继承,接口,要深......
    组校准与验证软件链接库。IQxel可让用户选择在Windows C/C++ API环境(IQapi)或使用可程序仪器标准命令(SCPI)接口开发测试软件。SCPI接口提供不区分操作系统的接口,可轻松地与脚本语言......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>