defcon30议题学习-Exploring the hidden attack surface of OEM IoT devices
此次议题学习是之前学习过的,但是过了一段时间后发现有些遗忘,所以记录在博客中方便以后的复习
文档资料下载:
https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20presentations/
演讲视频
这是此会议的路由器型号
该款路由器使用了ecos的系统 goahead的web服务 libc是uclibc,
首先是uart的输出内容 ,告诉了我们程序运行的基地址
首先说一下ecos这个操作系统
ecos是一个开源的基于RTOS的一个操作系统,它兼容POSIX这个系统接口,最重要的是ecos只有一个进程,它的所有服务都是以进程下的线程去运行的,同时在这边空间中没用使用虚拟内容,也不纯在特权线程,当线程崩溃后,它会调用异常的处理程序去进行处理
同时作者查询到,在ecos中的线程通信都是都过 id和对象去进行通信的,代码内容如下图所示
然后就是固件的审计和调式了,调试的话可以看看youtube 中的现场视频,作者通过JTAG接口和ecos中的一个命令完成了调试(因为JTAG接口连接后就崩溃)
而审计代码 作者则是通过Ghidra 脚本功能正确地提取 ProgramStore 映像并将其加载到Ghidra中同时设置了内存映射和类的识别,很长一篇文章,链接如下(得细看,不然有点懵..)
Broadcom eCos Firmware Analysis with Ghidra | ecos.wtf - eCOS Offensive Security Research
漏洞发生:
漏洞代码逻辑比较简单
可以看到漏洞比较明显 , input_line的中的内容经过俩此空格的跳过 直接复制到了buffer里面 存在一个栈溢出, 但是因为操作系统是ecos 所以在漏洞利用上面作者废了很大的心思
根据sdp_message这个命名可以看出漏洞发生在sdp&sip协议之中那什么是sdp&sip协议呢?
sip&sdp:
sip是一个基于文本建立会话的一个信令协议,为了建立对话它会使用如dns rtp sdp等辅助协议用于建立对话
而sdp协议作为sip的信息辅助协议用于协商网络指标、媒体类型和其他属性。
流媒体的sdp协议信息解析 - 知乎 (zhihu.com)
sip和sdp协议的数据包格式如下图所示
而路由器设备中大多使用的是sip alg功能 用于内网中的用户访问公网用户的ip和端口转换,如下图所示
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
漏洞分析:
所以漏洞发生点就处于经过俩次空格后的流协议部分,我们可以在此部分构建rop
该漏洞致命之处在于它使用udp协议传输,所以它可以发送到路由器的任意端口(注: rtp/avp默认采用udp传输)同时官方的路由器文档中并没有提到该款路由器有sip alg功能,也不能通过web端去进行关闭 所以它成为了隐藏且致命的漏洞
漏洞利用:
作者构建了如下的垃圾数据包发送然后成功触发了溢出
那么我们便可以有了如下的攻击思路:
●没有ASLR和W^X。
●我们可以在堆栈上写shellcode。
●然后用shellcode指针覆盖PC。
●但是注意shellcode不能包含空字节。
●同时也要注意数据/指令缓存的一致性。(这个是作者提出的我并没有完全的理解为什么要注意这个同时需要怎么注意)
所以我们可以构建如图的数据包 去开启ecos中telnet服务从而建立起后门
但是问题又来了 我们不能使用wget去上传文件 因为ecos差别与linux同时也没有文件系统,那么我们要如何进行后渗透呢?
作者又开始了进一步的搜索
在ecos中 所有的命令都是以上图的数组形式去存储管理的,每个命令又单独的指向一片内存空间 ,那么我们就可以在一片空白内存空间中写入恶意的代码然后去替换命令指针 ,同时ecos中有一个可以修改内存的命令,这样我们就可以运行自己编写的命令,这里作者是编写了一个端口扫描器,
详细内容看上述链接,作者通过重打包的形式进行持续性的shell
漏洞复现的视频如下:CVE-2022-27255 PoC demo on Vimeo
然后作者在后续排查中发现漏洞发生点发生在Realtek的某款芯片之中,涉及tenda Nexxt d-link Zyxel ect等多款厂家的多型号路由器 议题的后面就是作者编写漏洞扫描的一个过程,这里就不继续介绍了 ,感兴趣的师傅可以观看视频
题外话:学习这个漏洞让我对ecos vxworks openwrt 这三个路由器操作系统之间的差别有了一个简单的认知,同时加深了我对ecos的了解 同时作者对ecos的一些操作和研究都值得我去学习,此次的议题学习也让我深刻的了解到关注国内外议题能带来巨大的收获
ok 开摸!