从模糊到Android中的彩信远程代码执行

2020-05-09 21:49:12

已经进行了一些令人惊叹的安全研究,演示了从模糊到通过发送MMS而无需任何用户交互来实现远程代码执行。

谷歌的“零天计划”(Project Zero)是谷歌自己的专门团队,致力于查找零日并破解范围广泛的产品,该团队在三星的Android Skia图像处理库中发现了一个堆溢出的漏洞。这是由团队成员Mateusz Jurczyk发现的。使恶意彩信能够触发远程代码执行。该漏洞存在于接收彩信时发生的文件图像处理过程中,图像由Android的Skia库处理,无需用户交互。因此,接收到将触发图像处理中堆溢出原因的恶意图像将导致远程代码执行。

该漏洞是使用流行的AFL(美国模糊LOP)程序发现的,该程序已被用来在几个大型软件项目中发现广泛的错误,如Apache、Perl、iOS Kernel、OpenBSD、VLC、clang、PuTTY、Firefox等等。

AFL是由Michal Zalewski创建的,他一直在谷歌的Project Zero工作,但目前在社交媒体平台Snapchat背后的Snap公司工作。

模糊是将尽可能多的不同/随机类型的数据作为输入放入目标程序的艺术。目的是找出虫子。

谷歌有一个名为OSS-FUZZ的自动模糊引擎,它已经在各种不同的软件https://bugs.chromium.org/p/oss-fuzz/issues/list?q=-status%3AWontFix%2CDuplicate%20-component%3AInfra&;can=1中发现了16000多个错误。

要想获得更多关于模糊的部门信息,一个很好的读物就是阅读这本书:“软件安全测试和质量保证的模糊”(FUZZING For Software Security Testing And Quality Assure)。

另一种形象化毛茸茸的方式是想象一个人向墙上扔不同的石头,直到这个人找到一块完美的石头,一次击破墙壁。

该漏洞被赋予CVE-2020-8899的高度严重性CVE。链接至云服务器:https://vulns.firosolutions.com/cve/CVE-2020-8899/。

作者瞄准了Skia库,这是Android(Google Chrome、Chrome OS、Mozilla Firefox和Firefox OS也使用)用来加载和显示图像的图形3D库。默认情况下,Skia支持以下图像格式:*ICO*BMP*WBMP*PNG*JPEG*GIF*WebP*HEIF*RAW。

使用二进制分析工具IDA PRO,作者能够看到Samsung添加了对*QM*QG*ASTC*PIO的自定义支持。

此漏洞是针对韩国软件供应商(Quramsoft)最初创建的这些自定义添加格式QM和QG中的两个[http://www.quramsoft.com].。

使用运行Android 10的最新三星Galaxy Note 10+设备,并从2020年1月起安装最新的安全补丁。通过从三星内置的APK应用程序中提取QM和QG图像。然后,作者使用qemu-aarch64很好地运行了一个仿真版本,以便能够运行可执行二进制文件,就像它们在三星设备上本地运行一样。

编译将被扔进AFL的二进制代码可能有点棘手,需要的是来自三星Android系统的Skia源代码、Android NDK、Capstonem、libbacktrace、lib64和linker64。一旦所有这些要素就位,我们就能够编译ARM aarch64的精灵二进制文件了。

对此二进制文件进行模糊处理的结果是,在以下摘要中发现了5000多个不同的崩溃:

+-+|计数|百分比|+-+-+|写入|174|3.33%||sigabrt|3|0.06%||读取-1|3322|63.66%||读取-2|393|。%|Read-4|703|13.47%||Read-8|34|0.65%||Read-16|52|1.00%||Read-32|3|0.06%||Read-Vector|18|0.34%||Read-Memcpy|124|2.38%||NULL-deref|392|7.51%|+-+

sigabrt是一个Unix信号,它告诉进程在出现严重错误时中止并停止程序。例如导致崩溃堆溢出。读取意味着超出范围的内存读取,174超出范围的写入(CWE-787)意味着程序能够在其专用分配的内存之外写入。能够在分配的内存之外写入将导致基于堆栈和堆的缓冲区溢出。这些漏洞非常严重,因为当被利用时,它们将导致任意代码执行,并且通常会被赋予很高的严重性。

构建指纹:';samsung/d2sxx/d2s:10/QP1A.190711.020/N975FXXS1BSLD:user/release-keys';修订版:';24;abi:';arm64&39;时间戳:2020-01-24 09:40:57+0100PID:31355,TID:31386,名称:Thumbail_Thria>;>;>;com.sec.android.app.myfiles<;<;<;uid:10088 signal 7(SIGBUS),code 1(BUS_ADRALN),fault addr 0x4a4a4a4a4a4a4a x0 0000006ff55dc408 x1 0000006f968eb324 x2 0000000000000001 x3 0000000000000001 x4 4a4a4a4a4a4a4a4a x5 0000006f968eb31d x6 00000000000000b3 x7 00000000000000b3 x8 0000000000000000 x9 0000000000000001 x10 0000000000000001 x11 0000000000000001 x12 0000007090d96860 x13 0000000000000001 x14 0000000000000004 x15 0000000000000002 x16 0000007091463000 x17 0000007090ea2d94 x18 0000006f95d1a000 x19 0000006ff5709800 x20 00000000ffffffff x21 0000006ff55dc408 x22 00000000000000b0 x23 0000006f968ed020 x24 0000000000000001 x25 0000000000000001 x26 0000006f968ed020 x27 0000000000000be5 x28 0000000000012e9a x29 0000006f968eb370 sp 0000006f968eb310 lr 0000007090f5f7f0 pc 004a4a4a4a4a4a4a backtrace:#00 pc 004a4a4a4a4a4a4a<;unknown>;#01 PC 00000000002e97ec/SYSTEM/lib64/libhwui.so(PROCESS_RUN_DEC_CHECK_BUFFER+92)(BuildId:fCab350692b134df9e8756643e9b06a0)#02 PC 00000000002ddb94/SYSTEM/lib64/libhwui.so(QmageRunLengthDecodeCheckBuffer_Rev11454_141008+1320)(BuildId:fCab350692b134df9e8756643。SYSTEM/lib64/libhwui.so(QMAGE_WDecodeFrame_Low_Rev11454_141008+192)(构建ID:fCab350692b134df9e8756643e9b06a0)#06 PC 00000000002d08e4/system/lib64/libhwui.so(QuramQmageDecodeFrame_Rev11454_141008+144)(构建ID。,void*,unsign long,SkCodec::options const&;,int*)+1260)(BuildId:fCab350692b134df9e8756643e9b06a0)#08 PC 00000000004daefc/system/lib64/libhwui.so(SkCodec::getPixels(SkImageInfo const&;,void*,unsign long,SkCodec:)+168)(BuildId:fCab350692b134df9e8756643e9b06a0)#10 PC 00000000004da494/system/lib64/libhwui.so(SkAndroidCodec::getAndroidPixels(SkImageInfo const&;,void*,unsign long,SkandidCodec::AndroidOptions const*)+684)(BuildId:fImageInfo const&;,void*,unsign long,SkandidCodec::AndroidOptions const*)+684。)+1168)(BuildId:fCab350692b134df9e8756643e9b06a0)#12 PC 00000000001991c8/system/lib64/liband roid_runtime.so(nativeDecodeRegion(_JNIEnv*,_jobject*,long,int,_jobject*,long,long)+976)(BuildId:21b5827e07da2248024。

作者还测试过三星的各种硬件:1.Galaxy Note 4(Android 4.4.4,2014年9月)2.Galaxy Note Edge(Android 4.4.4,2014年11月-2014年12月)3.Galaxy Note Edge(Android 5.0.1,2015年3月-2015年6月)4.Galaxy Core Prime(Android 5.1.1,2015年8月)5.Galaxy Note 5(Android 5.1.1,2015年8月)6.Galaxy Note 4(Android 5.1.1,2015年10月)7.Galaxy Note 3(Android 5.0。2016年1月)8.Galaxy S7(Android 6.0.1,2016年2月)9.Galaxy Note 5(Android 6.0.1,2016年2月)10.Galaxy S7(Android 7,2017年1月)11.Galaxy Note 5(Android 7,2017年3月)12.Galaxy S8(Android 7,2017年4月)13.Galaxy S8(Android 8,2018年2月)14.Galaxy S7(Android 8,2018年4月)15.Galaxy S9(Android 8,2018年4月)16.。2019年10月)19.Galaxy Note 10+(Android 9,2019年11月-2019年12月)20.Galaxy Note 10+(Android 10,2020年1月)。

作者很好地触发了三星设备上的堆溢出,导致设备遭到黑客攻击,攻击者获得了反向外壳。

从刚刚启动AFL到使用恶意彩信实现零交互远程代码执行。

作者非常友好地发表了一份7z的坠机档案。

附注:几个人以“虫子赏金猎人”为生,有些软件会在你报告虫子时提供奖励。有关这些软件的列表,请访问https://internetbugbounty.org/.。

还有一些商业公司充当创始人和公司之间的中间人,收取大量现金,如HackerOne和Buggroup。