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

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

3天内不再提示

车联网开源组件BusyBox漏洞分析及复现

蛇矛实验室 来源:蛇矛实验室 2023-02-21 17:49 次阅读

本环境是基于"火天网演攻防演训靶场"进行搭建,火天系列产品提供模拟器级别的网络环境构建系统,可以灵活的对目标网络进行设计和配置,并且可以快速进行场景搭建和复现工作,产品也进行了车联网设备对接,为车联网安全训练环境构建提供基础资源支持

背景

近日,国内多家安全实验室检测到了针对于智能网联汽车中使用都开源项目busybox漏洞,国外在2022年5月份报告了此漏洞,目前已经发布的CVE信息如下,信息中指出Busybox1.35-x版本中,awk应用由于use after free导致拒绝服务漏洞或可能获取代码执行权限。

漏洞原理

根据CVE发布信息公告来看,该漏洞属于堆溢出漏洞,具体漏洞类型为use after free。简单来说,use after free漏洞的形成过程如下,如果我们申请一块内存然后释放后,此时重新申请一块相同大小的内存,操作系统为了内存空间的管理方便,会将上一次释放掉的内存重新分配给我们。此时上一个申请的指针没有被清空,而且重新给内存赋值的话,就会影响第二次申请内存中的内容。use after free的本质为俩个指针同时指向同一块内存,而当一个chunk被free后,其中该chunk中的数据具有部分结构的控制作用,使用另一个指针修改控制结构的数据,程序控制流就会被改变。

示例如下,在下图源码中,我们使用指针chunk1指向了malloc分配了0x10字节的内存,随后在内存中拷贝"test1"字符串到内存中,此时打印出来的chunk1地址为0x8c71e260,里面的内容为test1。随后我们释放掉chunk1,此时使用chunk2指针指向malloc重新分配的0x10字节,然后在chunk2内存中写入"test2"字符串,打印出来chunk2的地址也是0x8c71e260。这时如果我们向chunk1指针指向的内存中写入"test3"字符串,打印chunk2里面的内容,我们就会发现明明没有修改chunk2的内容,但是打印时chunk2里面的内容却变了。

0210418a-b1cc-11ed-bfe3-dac502259ad0.png

知道了漏洞的大概类型后,我们便可以进行简单分析。首先在busybox官网(https://busybox.net/downloads/)中,下载1.35.0版本和最新的1.36.0版本。根据CVE发布信息我们得知是awk应用程序存在漏洞,所以我们直接使用vimdiff比较俩个版本的awk.c文件。在vimdiff的比较中,我们发现在evaluate函数中的case XC(OC_MOVE)中进行了补丁更改。

0248b42a-b1cc-11ed-bfe3-dac502259ad0.png

打开1.35.0版本awk.c文件中未经patch处的对应代码块,该代码块位于evaluate函数中,在该case分支下,出现了CVE公告中提到的漏洞函数copyvar。由于此时我们对整个程序的架构和执行流程还不太清楚。我们先简单跟一下可能具有漏洞的具体情况,堆溢出的漏洞一般都发生在*alloc或free函数附近。use after free漏洞一般在free函数居多,我们接下来跟流程重点关注一下free函数。

026aed2e-b1cc-11ed-bfe3-dac502259ad0.png

进入查看发现clrvar对第一个参数进行操作,随后使用handle_special函数对dest进行处理。进入查看发现clrvar函数调用free函数对内存进行了释放。

02917818-b1cc-11ed-bfe3-dac502259ad0.png

上面的俩个函数都用到了var结构体,结构体定义如下:

02b291b0-b1cc-11ed-bfe3-dac502259ad0.png

接下来返回awk_main函数简单观察一下执行流程。发现程序首先进行一系列设置,指定了标准输入输出,随后使用awk_getline获取用户输入,并循环使用evaluate函数进行处理。

02dabd0c-b1cc-11ed-bfe3-dac502259ad0.png

在evaluate函数中,首先调用nvalloc分配了2个var大小的堆内存。然后将该指针命名为了TMPVAR0。随后根据传入的op结构体信息循环处理。在循环处理中又使用switch case分支处理,在XC(OC_MOVE)中调用了我们分析的copyvar函数。

02ee7bee-b1cc-11ed-bfe3-dac502259ad0.png

根据前面的流程分析和patch后的代码判断,如果我们输入数据可以控制L.v的指针指向tmpvars(TMPVAR0),那么这时用户修改的指针和系统自动分配的tmpvars都指向同一块内存,而在case XC(OC_MOVE)中,如果当其中一个指针指向的chunk被释放,而另一个指针指向chunk的内存继续使用时。修改被释放chunk的内存数据时,就会破坏free chunk list,从而导致堆溢出漏洞的产生。

漏洞分析

由于busybox多平台原因,为了方便调试,这里我选用靶场linux操作机进行操作。动态调试过程如下,在gdb调试后下断,并attach进程,断点信息如下。

03145e2c-b1cc-11ed-bfe3-dac502259ad0.png

直接按c运行,程序要求我们输入字符串,这里随意输入

03318cb8-b1cc-11ed-bfe3-dac502259ad0.png

程序直接断在了call free处,观察到RDI为空,我们不用管它。查看堆栈回溯发现程序是由awk_getline函数调用进行的,这里就是前面分析中awk_getline函数获取用户输入。

0367f08c-b1cc-11ed-bfe3-dac502259ad0.png

堆空间堆块排布信息如下,可以看到我们输入的"foo"字符串,堆内存结构此时还没有被破坏,我们继续往下调试。

03a4028e-b1cc-11ed-bfe3-dac502259ad0.png

调试过程中,释放的堆块信息比较复杂,我们使用bins命令查看当前free chunk list。

03da37e6-b1cc-11ed-bfe3-dac502259ad0.png

运行到了evaluate函数处,这里便是源码中使用nvalloc(xzalloc)函数分配tmpvars的堆内存。

03f87de6-b1cc-11ed-bfe3-dac502259ad0.png

这里直接断在了case XC(OC_MOVE)里面的copyvar函数,copyvar的第一个参数为L.v,第二个参数是R.v。这里L.v已经被修改成了tmpvars的指针,这样俩个指针同时指向了tmpvars的内存,后续会调用free函数进行释放。

04136994-b1cc-11ed-bfe3-dac502259ad0.png

si进入copyvar函数,运行到call clrvar处,这里的rdi即传入第一个参数的L.v的地址。clrvar会调用free函数进行释放。

04438b6a-b1cc-11ed-bfe3-dac502259ad0.png

运行后进入handle_special函数,后续流程较为复杂,直接在漏洞触发点getvar_i处下断点。运行后,断点停在了call getvar_i函数,我们跟入分析。

04736ede-b1cc-11ed-bfe3-dac502259ad0.png

在getvar_i函数中,对0x55555585caa0指针指向chunk进行了修改(v->type)。

04944cda-b1cc-11ed-bfe3-dac502259ad0.png

此时getvar_i函数中处理的v->type即为tmpvars free chunk的控制结构,函数这里直接对其进行了处理,导致堆结构的改变。

04bc9b5e-b1cc-11ed-bfe3-dac502259ad0.png

此时0x55555585caa0中数据0x55555585caf0被修改,原来的free chunk list已经被破环,修改后0x55555585caa0指向的下一个free chunk被修改为0x55555585c9f0。

04d5b09e-b1cc-11ed-bfe3-dac502259ad0.png

当我们进行第二次输入字符串时,会继续对堆空间进行申请和释放。当申请到0x55555585c9f0地址处的chunk时,会对堆空间进行数据更改,导致程序崩溃。

055c8272-b1cc-11ed-bfe3-dac502259ad0.png

0x55555585c9f0地址处已经被申请,此时chunk结构被破坏,gdb插件已经无法识别剩余内容空间的堆结构。

058474da-b1cc-11ed-bfe3-dac502259ad0.png

堆块标识被清空,所以无法找到对应堆块的起始位置,所以插件识别不了。

05c20c00-b1cc-11ed-bfe3-dac502259ad0.png

当继续往下调试时,程序崩溃。

05f575f4-b1cc-11ed-bfe3-dac502259ad0.png

下图为另一个poc测试出现的情况,这里面的topchunk标识被修改为0,当堆继续申请和释放时,程序同样会崩溃。

062654da-b1cc-11ed-bfe3-dac502259ad0.png

漏洞复现

下载好busybox后直接使用源码进行编译安装

make menuconfig
make
make install

0642dd62-b1cc-11ed-bfe3-dac502259ad0.png

使用已公开的poc进行测试,发现触发了漏洞。

06adacbe-b1cc-11ed-bfe3-dac502259ad0.png

由于busybox在不同系统中的编译使用,且不同系统编译后程序开启的保护也不同,那么这里获取执行权限的方式也不同。

总结

整体分析下来,该漏洞利用性不大,且获取执行权限的利用方式较为复杂,但因为其可能具有获取执行权限的情况,请使用busybox漏洞版本的各位用户尽快升级到最新版本。





审核编辑:刘清

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

    关注

    76

    文章

    2586

    浏览量

    91609
  • LINUX内核
    +关注

    关注

    1

    文章

    316

    浏览量

    21656
  • GDB调试
    +关注

    关注

    0

    文章

    24

    浏览量

    1449

原文标题:车联网开源组件BusyBox漏洞分析及复现(CVE-2022-30065)

文章出处:【微信号:蛇矛实验室,微信公众号:蛇矛实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Busybox源码简介

    在嵌入式系统构建中,Busybox可用于构建轻量级的根文件系统,本文从源码结构和源码入口角度分析busybox,了解其背后的运作机制。
    发表于 10-12 09:07 2094次阅读

    某安全浏览器竟然也被查出高危漏洞开源安全问题不容忽视

    , pkg等多种二进制文件进行扫描,不仅能定位开源漏洞并提供CVE编号和修补方案,还能分析出所使用的开源组件清单,据说使用的是国际上律师事务
    发表于 08-31 16:06

    某安全浏览器竟然也被查出高危漏洞开源安全问题不容忽视

    , apk, ipk, iso, bin, dll,dmg, pkg等多种二进制文件进行扫描,不仅能定位开源漏洞并提供CVE编号和修补方案,还能分析出所使用的开源
    发表于 09-05 14:26

    联网的架构分析实现联网的价值

    2018年的风口是什么?人工智能?区块链?还是物联网?物联网是国家战略性新兴产业的重要组成部分,是继互联网之后的新一轮信息技术革命。物联网应用的行业有很多,
    发表于 02-11 10:13

    联网终端应用

    随着物联网兴起,造成汽车产业革新,改变了以往汽车工业生态,形成新的「联网」产业链及应用创新趋势。根据中国产业发展研究网报告,2018年全球联网
    发表于 07-17 07:33

    浅析Linux系统开源漏洞检测工具

    jSQL是一款轻量级安全测试工具,可以检测SQL注入漏洞。它跨平台(Windows, Linux, Mac OS X, Solaris)、开源且免费。
    发表于 07-23 07:21

    什么是联网

    什么是联网联网即 V2X(Vehicle to Everything),意思是和万物互联。
    发表于 09-16 10:36

    开源鸿蒙 OpenHarmony 获得 CVE 通用漏洞披露编号颁发资质

    8月15日晚间,开源鸿蒙 OpenAtom OpenHarmony 官方宣布于 8 月 3 日获得通过 CNA(通用漏洞披露编号授权机构)加入程序,成为 CVE(通用漏洞披露组织)的编号授权机构
    发表于 08-17 11:34

    busybox详解

    BusyBox 的诞生 BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引导的 GNU
    发表于 11-01 15:54 3次下载

    PCB设计中的电子组件漏洞评估

    电子元件也有漏洞。如果你不了解这些内容,最终可能会为 PCB 的设计选择错误的组件。这些组件可能会过早失效,或者会给您间歇性出现问题,从而导致调试和更正耗时且成本高昂的工作。重要的是要事先做出正确
    的头像 发表于 09-12 19:06 2079次阅读

    全球联网现状及我国联网产业分析

    责任编辑:xj 原文标题:【行业资讯】全球联网现状及我国联网产业分析 文章出处:【微信公众号:深圳市汽车电子行业协会】欢迎添加关注!文章
    的头像 发表于 11-10 11:10 2910次阅读

    2022 OpenHarmony组件大赛,共建开源组件

    原标题:共建开源组件生态 2022 OpenHarmony组件大赛等你来 2022年4月15日,2022 OpenHarmony组件大赛(下称“大赛”)报名通道正式开启,开发者登录
    的头像 发表于 04-26 17:31 1568次阅读
    2022 OpenHarmony<b class='flag-5'>组件</b>大赛,共建<b class='flag-5'>开源</b><b class='flag-5'>组件</b>

    联网遥控开源分享

    电子发烧友网站提供《物联网遥控开源分享.zip》资料免费下载
    发表于 07-11 11:09 4次下载
    物<b class='flag-5'>联网</b>遥控<b class='flag-5'>车</b><b class='flag-5'>开源</b>分享

    Busybox编译安装过程 Busybox的使用方法

    Busybox是一个开源的、轻量级的软件工具集合,旨在提供一个精简的Unix工具集,适用于嵌入式系统和资源受限的环境。它将许多常用的Unix工具(如ls、cp、cat、mv、grep、find、telnet等)合并为一个可执行文件,从而减少了系统的存储空间和资源占用。
    发表于 09-11 12:33 2386次阅读

    联网系统的安全漏洞分析

    随着物联网技术的快速发展,越来越多的设备被连接到互联网上,从智能家居、智能城市到工业自动化,物联网的应用范围不断扩大。然而,随着物联网设备的增多,安全问题也日益凸显。 一、物
    的头像 发表于 10-29 13:37 393次阅读