《国产操作系统漏洞研究_阮奂斌.pdf》由会员分享,可在线阅读,更多相关《国产操作系统漏洞研究_阮奂斌.pdf(31页珍藏版)》请在三个皮匠报告上搜索。
1、国产操作系统的漏洞研究国产操作系统总线服务与应用安全的研究By 阮奂斌自我介绍About Me id:doudoudedi IoT漏洞挖掘 CTF 业余爱好者 二进制安全研究者研究动机01目标选择02系统初探03提权与RCE04好奇与机遇大概是在2022年的某一个月,我同事参加了虎符CTF,并且进入了线下赛赛制是PKS(针对麒麟操作系统安全机制绕过)有一些挑战需要权限提升AWDP (CTFer 应该比较熟悉)针对国产操作系统的安全性研究的师傅好像不多,但是它同样有研究的价值我想在这次研究中提高自身能力提高自己的代码审计能力检验逆向能力能否支撑起我的代码审计发现漏洞,后续利用的能力研究动机国产操
2、作系统(我主要研究了前两者)目标选择银河麒麟(KylinOS)原是在“863计划”和国家核高基科技重大专项支持下,国防科技大学研发的操作系统。UOS 由深度操作系统为基础,经过定制而来的产品。考虑到后者是基于 Linux 的国产操作系统的一员。华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行的华为开发者大会(HDC.2019)上正式发布的操作系统。银河麒麟操作系统目标系统镜像:Kylin-Desktop-V10-Release-2203-x86_64操作环境:Vmware Workstation(有条件的同学可以用真机)一路安装我成功启动了麒麟操作系
3、统系统初探安装与系统经过系列操作系统我发现,这款桌面级的操作系统底层是linux,类似于debian,可以执行apt等命令(PWN手狂喜)系统初探相较与正常的开源ubuntu,多了很多麒麟生态的软件。内核:Linux文件系统:ext4查阅漏洞报告系统初探研究第一步永远都是查资料,于是我开始查阅此款操作系统的历史漏洞与漏洞报告,不知是不是国产的原因,网上的信息寥寥无几https:/ 但是我需要攻破的是最新版本,它修复了此CVE,但是它给了我信心,依然相信还有其它方法可以导致提权于是同事与我们把关注点放到了麒麟系统的DbusDbus简介系统研究D-Bus 分为两个主要的总线:系统总线(System
4、 Bus):用于系统级的服务,比如硬件状态改变或者系统守护进程。会话总线(Session Bus):用于用户会话内的进程通信,通常是一个用户登录会话中运行的应用程序间的通信。D-Bus 的设计遵循最小的原则,只提供必要的功能,以降低开销并保持接口简洁。它在Linux系统中被广泛应用,是现代Linux桌面环境和系统服务的核心组件之一。KylinOS特有的Dbus服务系统研究如果服务被注册进Dbus系统总线那么在/etc/dbus-1/system.d/会存在对应的文件,我尝试列出kylinOS的此目录进行查看发现了一些有趣的服务,麒麟系统的开发者似乎自己开发一些服务注册到了Dbus总线上安装测试
5、工具d-feet列出所有的会话总线与系统总线,相对于会话总线我们应该对系统总线更加感兴趣,因为那意味这进程的权限更高,然后尝试过滤kylinOS特有的总线服务Dbus服务的Interface与Method系统研究在测试Dbus总线中的服务时,我们要关注的是对象路径、interface、method。Interface(接口)接口定义了一组可以调用的方法(以及发出的信号和可以访问的属性)。Method(方法)方法是在接口中定义的操作,它可以被调用来执行特定的任务简单来讲Method就是功能的实现Dbus通信数据系统研究由于Dbus是为应用程序与服务间通信服务的,所以底层并不是使用的传统的TCP/
6、IP流量,而是本地的进程通信的协议(IPC)。它使用的通信方式不依赖于网络协议,而是依赖于本地系统上的消息总线。它允许不同进程之间通过消息来交换数据,而不需要经过网络堆栈。最终我们使用bustle将通信的数据捕获并放入了wireshark进行分析系统研究endianness 机器的大小端信息机器的大小端信息Methcall 指明D-Bus消息的类型。在这个例子中,是“Method call”(方法调用),表示客户端正在请求服务执行一个操作。Message Flags 提供消息的详细信息,如是否期望回复。Protocol Version 正在使用的D-Bus协议的版本。Message Body
7、Length 消息体的字节长度。Message Serial 消息的唯一标识符。Header Field Array 消息的详细信息Body 消息的正文Dbus协议的结构系统研究Dbus通信协议结构Dbus通信协议的结构中比较重要的两个地方是,消息的详细信息与消息的正文(这段流量是麒麟系统的软件商店中安装“华宇拼音”产生的)Dbus通信协议的Header Field ArraynPath(路径):方法调用的目的地路径。nDestination(目的地):消息发送到的服务的唯一名称。nInterface(接口):方法调用所属的接口。nMember(成员):正在被调用的特定方法。nSignatur
8、e(签名):方法参数的数据类型签名。nSender(发送者):消息发送者的唯一名称。Dbus通信协议的Body,消息中发送的实际数据。包含方法调用的参数。客户端发送的数据KylinOS特有的Dbus服务系统研究再举个列子:当我们打开麒麟的安全中心开启或者关闭一些保护,那么软件就会向Dbus系统总线中已经注册服务的接口的对应Method发送信息监听安全中心应用与Dbus总线的传递的数据KylinOS特有的Dbus服务系统研究通过系统应用向Dbus的系统总线服务中发送消息是正常流程,但如果需要测试系统总线中的服务,那么最好是使用过三方工具或者代码的方式进行发送消息。使用python脚本的形式使用d
9、-feet工具关于Dbus的历史漏洞一番寻找与搜索,找到一些Dbus相关的漏洞CVE-2021-3560漏洞存在于系统服务Polkit中,同时因为Polkit被Systemd所调用,因此所有默认安装了Systemd的Linux发行版都会使用Polkit。该漏洞的成因是执行dbus-send命令后在认证完成前强制终止引发错误,而Polkit未正确处理错误而导致允许无特权的用户添加一个sudo用户进行权限提升。)USBCreator D-Bus漏洞(攻击者利用该漏洞可以绕过sudo的密码安全策略以sudoer组用户权限访问。漏洞允许攻击者以root权限用任意内容覆写任意文件。)读完详细文章后大概对
10、dbus相关漏洞可能出现的攻击面点有了一定的了解,尝试对麒麟系统特有的Dbus总线服务进行漏洞挖掘系统研究未授权访问?提权我们将注册进Dbus系统总线的服务对应的二进制文件与python源文件列出与取出,然后进行代码审计于是我们发现在银河麒麟操作系统中存在一些服务,比如kysec,应用中心,系统更新等系统级的服务被注册到系统总线上,但是其功能实现并没有做完整的鉴权,导致普通用户可以去调用系统级的服务,这将导致权限提升等系列影响。比如:在控制中心相关的Dbus系统总线服务它的接口中的设置默认登入功能方法没有做鉴权,普通用户可以将root用户设置为默认登入且不需要密码通过d-feet向服务发送消息
11、未授权访问?命令注入?提权!提权在银河麒麟2203的操作系统中的更新管理服务以python-dbus方式注册到了Dbus系统总线中,但是安装本地snap包的方法没有鉴权,且存在命令注入,这将导致权限提升。于是通过此漏洞完成了比赛的挑战。这里最终提权使用的是用命令篡改/etc/sudoer,来使用sudo提权接口替换为存在漏洞的接口,然后执行存在漏洞的method即可触发关于漏洞的思考与总结提权在发现漏洞与漏洞完成利用之后,我们发现总的来说kylinOS与UOS自研Dbus总线服务大致分有三种开发框架python-dbusQtDbusgo(https:/ 人工审计再次介入,我发现了程序是基于Qt
12、开发的,底层走的是TCP与UDP发送数据,通过gdb等调试工具我定位到了漏洞触发的地方,对其抓包,使用wireshark捕获了TCP流量,然后使用socket或者pwn等模块脚本构造恶意TCP流量达到了远程命令执行(由于可以匿名发送消息所以漏洞是无需认证的)RCE麒麟传书(漏洞二)RCE“麒麟传书”在发送文件以及消息后再查找历史记录的功能中,一旦记录中有存在带有恶意命令的恶意文件,便可能主动触发命令的执行。如果用户接收到了恶意文件并点击历史记录就会主动触发命令执行以上便可以形成一条利用链从RCE到提权,同时上面提及的漏洞官方大部分都已经修补(未修复的漏洞请不要进行非法利用)漏洞公开信息综上所诉,我们在对国产桌面级的操作系统的Dbus总线服务与应用程序进行了安全测试,总结如下两点:u 国产操作系统的自研的Dbus系统总线服务存在安全隐患u 国产操作系统的生态软件可能被用于攻击利用要点总结THANKS