菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

首页科技正文

ipfs矿机(www.ipfs8.vip):Pwn2Own2020:高通骁龙的DSP芯片破绽挖掘与行使研究

admin2021-05-1168技术

0x01 基本先容

Snapdragon是一套由高通手艺公司设计和销售的用于移动装备的片上系统(SoC)半导体产物。单个SoC可能包罗多个CPU内核,一个Adreno图形处置单元(GPU),一个Snapdragon无线调制解调器,一个六边形数字信号处置器(DSP),高通光谱图像信号处置器(ISP)和其他硬件。

Snapdragon产物的差异之处在于它是可扩展的CPU,GPU和DSP处置器的盘算资源。最低层可能仅包罗一个Hexagon DSP,而高级层最多包罗四个专用于特定用例的Hexagon DSP处置器。例如,嵌入在诸如Pixel 4,Samsung S10,Xiaomi Mi 9,LG G8和OnePlus 7等手机中的Snapdragon 855(SM8150)SoC包罗一个Kryo CPU,一个Adreno 640和四个自力的DSP,每个模块都专用于特定的应用空间:传感器(sDSP),调制解调器(mDSP),音频(aDSP)和盘算(cDSP)。

在此文章中,我们研究了两种DSP:

· cDSP,旨在执行盘算麋集型义务,例如图像处置,盘算机视觉,与神经网络相关的盘算以及视频流。

· aDSP,旨在用于音频和语音数据的低功耗处置。

就当前的研究而言,我们将cDSP和aDSP视为一个处置单元(DSP),我们发现的平安性问题对两者都适用。

1.CPU与DSP之间的通讯

FastRPC是高通专有的远程历程挪用(RPC)机制,用于启用CPU和DSP之间的远程函数挪用。FastRPC框架是一种典型的署理模式。

图1: FastRPC流程。

在图1中,你可以看到FastRPC组件的交互:

(1)用户模式历程(客户端)启动远程挪用。例如,一个Android应用程序以其本机代码挪用stub函数之一。

(2)stub是自动天生的代码,它将函数挪用转换为RPC新闻。通常,将stub代码编译为单独的本机库,然后将其与客户端链接。stub代码使用libadsprpc.so和libcdsprpc.so库通过相关的ioctl在应用程序处置器(AP)上挪用DSP RPC驱动程序(/dev/adsprpc- *** d或/dev/cdsprpc- *** d)。

(3)DSP RPC内核驱动程序吸收远程新闻挪用,通过共享内存驱动器(SMD)通道将排队的新闻发送到DSP上的DSP RPC框架,然后守候响应。

(4)DSP RPC框架从行列中删除新闻,然后将其分配以供skeleton动态库处置。

(5)skel是一个自动天生的库,用于解组参数并挪用目的方式的实现。

(6)目的方式(工具)是由高通或OEM提供的逻辑,旨在在DSP上运行。

2.在DSP上运行自己的代码

出于平安缘故原由,DSP已获得OEM和少数第三方软件供应商的允许举行编程。DSP上运行的代码是由高通公司署名的。通例的Android应用程序无权在DSP上执行自己的代码。Snapdragon 855和865 SoC除外,其中Qualcomm被允许在cDSP上执行低权限无署名的动态共享工具。

需要注重的是,Google通过SELinux战略强制珍爱Pixel装备,以防止第三方应用程序和DSP RPC驱动程序的adb shell接见。

公然可用的Hexagon SDK认真将DSP工具的C / C ++源代码编译为适用于在DSP上执行的Hexagon(QDSP6)字节码。Stub和Skel代码是凭证开发职员准备的接口界说语言(IDL)模块自动天生的。Qualcomm IDL用于界说跨内存珍爱和处置器界限的接口。IDL仅公然该工具的函数,而不公然其驻留的位置或实现该工具的编程语言。

Android应用程序开发职员能够实现其针对DSP的自界说库,但无法完全执行,Android应用程序只能自由挪用预构建的DSP库。

3.DSP治理剖析

QuRT是治理Hexagon DSP的高通专有多线程实时操作系统(RTOS)。高通公司的平安可执行环境(QSEE)信托QuRT的完整性。QuRT可执行二进制文件(与aDSP和cDSP脱离)经由署名并以与Qualcomm装备上任何其他受信托的应用程序相同的方式拆分为多个文件。它的默认位置是/vendor/firmware目录。

对于每个启动远程挪用的Android历程,QuRT都市在DSP上确立一个单独的历程。当天生用户历程时,特殊的Shell历程(/vendor/dsp/fastrpc_shell_0用于aDSP、/vendor/dsp/fastrpc_shell_3用于cDSP)将加载到DSP上。shell认真skeleton和工具库的挪用。此外,它实现了DSP RPC框架,该框架提供了skel和工具库可能需要的API。

DSP软件系统结构提供了差其余珍爱域(PD),以确保内核软件的稳固性。DSP中有三个珍爱域:

· 内核–可以接见所有PD的所有内存。

· guset操作系统–可以接见其自己的PD的内存,用户PD的内存以及某些系统寄存器。

· 用户–仅可以接见其自己的PD的内存。

无署名的动态共享工具在Unsigned PD内运行,这是用户PD在接见基础DSP驱动程序和线程优先级时受到限制的工具。Unsigned PD设计为仅支持通用盘算应用程序。

工具库以及FastRPC Shell在User PD中运行。

4.从FastRPC流中跳过stub代码

libadsprpc.so和libcdsprpc.so库认真与DSP RPC驱动程序举行通讯。这些库导出了两个值得研究的函数:

· int remote_handle_open(const char* name, remote_handle *ph)。此函数在AP上的挪用者历程和DSP上的新FastRPC Shell历程之间打开一个远程会话。该会话用于与指示为第一个参数的框架库举行通讯。

· int remote_handle_invoke(remote_handle h, uint32_t scalars, remote_arg *pra)。此函数能够挪用框架库的导出方式。会话处置程序应指示为第一个参数。

使用这两个函数,客户端可以执行在任何skeleton库中实现的DSP方式,高通或OEM提供的stub代码可以从链中跳过。

图2:直接挪用DSP。

让我们看一下该remote_handle_invoke函数的第二个和第三个参数,它们对目的方式及其参数举行了编码。

scalars 是包罗以下元数据信息的单词:

· 方式索引和属性(最高字节,0xFF000000掩码)。

· 输入参数的数目(0x00FF0000掩码)。

· 输出参数的数目(0x0000FF00掩码)。

· 输入和输出句柄的数目(0x000000FF掩码,输入的四位和输出的四位)。在现在的移动装备中,若是此字节不即是零,则DSP挪用将失败。

pra是指向remote_arg目的方式的参数(条目)数组的指针。参数的顺序如下:输入参数,输出参数,输入句柄和输出句柄。

如你所见,每个输入和输出参数都转换为通用remote_buf条目。

应该注重的是,若是准备的remote_arg数组条目多于目的方式所需的数组条目,则skeleton库只会忽略多余的参数。

scalars和pra参数传送是通过DSP RPC驱动程序和DSP RPC框架,而且被用作由skeleton库提供的invoke函数的第一个和第二参数。例如,libfastcvadsp_skel.so库提供了fastcvadsp_skel_invoke  invoke函数。invoke函数仅认真按索引挪用适当的skel方式。每个skel方式自己都市验证收到的远程参数,将remote_bufs解码为通例类型,然后挪用object方式。

如你所见,要从skel库中挪用方式,只需要知道其索引并通过remote_buf结构包装每个参数即可。我们不必提供挪用函数的名称,其参数的类型和数目来执行挪用的事实,使得skeleton库成为异常利便的模糊测试目的。

0x02 对Hexagon库的模糊测试

1.降级破绽

高通公司已经在Android手机上预先安装了许多skeleton库。它们中的绝大多数是专用的。然则,有一些开源示例,例如libdspCV_skel.so和libhexagon_nn_skel.so。

险些可以在所有Android装备上找到许多skeleton库,例如libfastcvadsp_skel.so和libscveBlobDescriptor_skel.so。然则,像libVC1DecDsp_skel.so和libsy *** on_cdsp_skel.so这样的库仅在现代Snapdragon SoC上提供。

有些库是由OEM实行的,仅在特定供应商的装备上使用。例如,libedge_ *** ooth_skel.so可以在Samsung S7 Edge上找到,libdepthmap_skel.so可以在OnePlus 6T装备上找到。

一样平常来说,所有的skel库位于无论是在/dsp或/vendor/dsp或/vendor/lib/rfsa/adsp目录。默认情形下,该remote_handle_open函数将准确扫描这些路径。此外,另有一个环境变量ADSP_LIBRARY_PATH,可以在其中添加新的搜索路径。

如前所述,所有DSP库均已署名且无法修补。然则,任何Android应用程序都可以在其资产中携带一个由Qualcomm署名的库,将其提取到应用程序的数据目录中,将路径添加到的开头ADSP_LIBRARY_PATH,然后打开一个远程会话。由于库署名准确,以是库已乐成加载到DSP上。

没有加载skeleton库的版本检查为在DSP上运行一个存在1 day破绽的旧skel库提供了可能性。纵然装备上已经存在更新的框架库,也可以仅通过指示其在ADSP_LIBRARY_PATH原始文件路径之前的位置来加载该库的旧版本。这样,攻击者可以轻松绕过任何DSP补丁。此外,通过剖析DSP软件补丁,攻击者可以在库中找到一个内部牢靠的破绽,然后通过加载未修补的版原本行使它。

由于缺少该装备允许的已批准/拒绝的skeleton库列表,因此可以在其他装备(例如Samsung)上运行针对一个装备(例如Sony Xperia)的库。这意味着在一个OEM库中发现的破绽会危害所有基于Qualcomm的Android装备。

2.基于反馈的Hexagon库模糊测试

DSP库是专有的Hexagon ELF。检测Hexagon可执行文件的最简朴方式是使用QEMU。在2019年底,QEMU中才添加了对Hexagon指令集的支持。我们修复了许多错误,以便能够在QEMU仿真器的用户模式下运行真实的DSP库。

AFL与QEMU组适用于在Ubuntu PC上模糊框架和工具DSP库。

为了在模拟器上执行库代码,我们准备了一个简朴的程序(Hexagon ELF二进制文件),该程序认真执行以下操作:

(1)将作为第一个下令行参数吸收的数据文件剖析为scalars字和remote_arg数组。

(2)dlopen在第二个下令行参数中指定的框架库。该库可能依赖于其他skeleton库和工具库。例如,libfastcvadsp_skel.so依赖于libapps_mem_heap.so,libdspCV_skel.so和libfastcvadsp.so。所有这些库都可以从固件中提取,也可以从真实装备中提取。

(3)通过提供scalars的地址和指向remote_arg数组的指针作为参数来挪用函数的地址。例如,fastcvadsp_skel_invoke是模糊测试libfastcvadsp_skel.so库的起点。

我们在程序中使用了以下输入文件花样:

(1)scalars值(4个字节)。在图3所示的示例中,scalars即是0x08020200,这意味着可以通过提供两个输入和两个输出参数来挪用方式编号8。

(2)输入参数的巨细(每个参数4个字节):0x10和0x20。

(3)输出参数的巨细(每个参数4个字节):0x80200和0x1000。

(4)输入参数的值。在此示例中,第一个参数的值为0x10字节的0x11,第二个参数的值为0x20字节的0x22。

图3:用于Fuzzing DSP库的输入数据文件。

对于每个输出参数,我们分配指定巨细的内存,并用值0x1F填充它。

大多数skeleton库普遍使用DSP框架和系统挪用。我们的简朴程序无法处置此类请求。因此,我们必须在执行其余代码之前将QuRT加载到QEMU仿真器上。最简朴的方式不是使用真正的QuRT OS,而是使用其“精简版” runelf.pbn,该版本已被高通公司接纳,可以在Hexagon模拟器上执行并包罗在Hexagon SDK中。

AFL输入数据种子文件并触发runelf.pbn在qemu仿真器上运行。QuRT加载准备好的ELF二进制文件,然后挪用目的框架库。执行完测试用例后,QEMU将代码笼罩率返回给AFL。

图4: DSP库模糊测试方案。

在我们选择举行模糊处置的所有DSP库中都发现了溃逃,仅在libfastcvadsp_skel.so库中就检测到数百个溃逃。

有趣的是,大多数问题是在框架库中发现的,而并非在工具库中发现的。这意味着Hexagon SDK中存在大量易受攻击的代码。

3.自动天生的代码

让我们看一下开源hexagon_nn库,它是Hexagon SDK 3.5.1的一部门,该库导出了许多与神经网络相关的盘算函数。

Hexagon SDK在库编译时自动天生hexagon_nn_stub.cstub和hexagon_nn_skel.c stub模子。通过手动检查模块,可以轻松检测到某些平安问题。我们将仅剖析其中的两个。

封装转达字符串(*char **)参数

int hexagon_nn_op_name_to_id(const char* name, unsigned int* node_id)函数需要一个输入(name)和一个输出(node_id)参数。SDK天生以下stub代码来封装转达这两个参数:

我们可以看到,除了现有的两个参数外,第三个remote_arg条目是在_pra数组的开头确立的。此特殊_pra[0]参数保留name字符串的长度。

将name自己保留在第二remote_arg条目(_praIn[0]),它的长度会再次存储,但这次是在_praIn[0].buf.nLen中。

skel代码提取这两个长度,并将它们作为signed int值举行对照。攻击者可以忽略stub代码,并在第一个remote_arg条目中写入一个负值(大于或即是0x80000000),从而绕过此验证。然后,该伪长度用作内存偏移量,并导致溃逃(从堆界限溢出)。

为所有需要字符串参数的工具函数天生相同的代码。

封装转达缓冲区

让我们看一下int hexagon_nn_snpprint(hexagon_nn_nn_id id, unsigned char* buf, int bufLen)函数,它需要一个缓冲区,而且将缓冲区的长度作为参数,缓冲区用于输入和输出数据。因此,它在stub代码中分为两个单独的缓冲区(输入和输出缓冲区)。同样,两个缓冲区(_in1Len和_rout1Len)的长度都存储在附加remote_arg数组(_pra[0])中。

skel函数在挪用工具函数之前将输入缓冲区复制(使用_MEMMOVEIF宏)到输出缓冲区,要复制的数据巨细是remote_arg数组(_pra[0])中保留的输入缓冲区的长度。

攻击者要控制此值。通过使用输入缓冲区的负长度,可以简朴地绕过所有验证检查。

在检查缓冲区界限时将类型强制转换为signed int类型是导致堆溢露马脚的缘故原由。

总而言之,自动天生的代码会将破绽行使注入到使用Hexagon SDK的Qualcomm,OEM和所有其他第三方开发职员的库中。由于SDK中存在严重破绽,因此预先安装在Android智能手机上的数十个DSP skeleton库很容易受到攻击。

0x03 SDP破绽行使与剖析

1.行使DSP破绽

让我们看一下在专有DSP框架库中发现的许多破绽之一,并实验寻找“read-what-where”和“write-what-where”原语。

在大多数Android装备上都可以找到libfastcvadsp_skel.so库。在下面的示例中,我们使用从索尼Xperia XZ Premium装备中提取的版本1.7.1的库。恶意的Android应用程序可以通过为remote_handle_invoke函数提供在libfastcvadsp_skel.so库中特制的参数来导致库溃逃。图5中的数据文件显示了此类设计的参数示例。

图5:导致libfastcvadsp_skel.so溃逃的数据文件

,

USDT交易所

U交所(www.payusdt.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

,

如你所见,0x3F方式被挪用并提供一个输入和三个输出参数。输入参数的内容以字节0x14开头,并包罗以下主要字段:

· 红色0x02显示要读取的半个字(巨细)。

· 黄色0x44332211显示了要读取的内容(源)。该值是相对于DSP堆中第一个输出参数的开头的偏移量。使用此偏移量,我们控制读取的起始地址。偏移量可以是我们想要的,甚至可以是负数。

· 青色0x04显示读取位置(目的地)。该值也是偏移量。

溃逃是由于源地址不准确引起的。

图6:crash dump调试。

下面是用于读取原语的POC代码。

输入参数始终位于输出参数之后的DSP堆中。因此,在编写原语时,我们需要凭证第一个输出参数的长度来移位源地址(所有其他参数均为空)。

攻击者可以操作源偏移量和目的偏移量,以在DSP历程(用户PD)的地址空间中举行读取和写入。第一个输出参数与内存中libfastcvadsp_skel.so库之间的偏移量是一个恒定值。很容易在skel或工具库的数据段中找到一个指针来触发挪用。出于平安缘故原由,我们不会宣布DSP中其余的POC。

2.DSP用户域研究

在对Qualcomm DSP中的skeleton库和工具库举行平安研究时代,我们发现了两个全局平安问题:

· 缺乏DSP库的版本控制。这允许恶意Android应用程序执行降级攻击并在DSP上运行易受攻击的库。

· Hexagon SDK中的问题在使用Qualcomm芯片的移动供应商的代码中导致了数百个隐藏的破绽。由于Hexagon SDK中的问题,险些所有嵌入在基于Snapdragon的智能手机中的所有DSP skeleton库都容易受到攻击。

我们向高通公司讲述了数十个DSP库中约400个差其余溃逃,其中包罗:

· libfastcvadsp_skel.so

· libdepthmap_skel.so

· libscveT2T_skel.so

· libscveBlobDescriptor_skel.so

· libVC1DecDsp_skel.so

· libcamera_nn_skel.so

· libscveCleverCapture_skel.so

· libscveTextReco_skel.so

· libhexagon_nn_skel.so

· libadsp_fd_skel.so

· libqvr_adsp_driver_skel.so

· libscveFaceRecognition_skel.so

· libthread_blur_skel.so

为了演示,我们行使了其中一个发现的破绽,并获得了在基于Snapdragon的装备(包罗三星,Pixel,LG,小米,OnePlus,HTC和Sony手机)的DSP上执行未署名代码的能力。

可以接见DSP用户域的Android应用程序具有以下可能性:

· 触发DSP内核溃逃,然后重新启动移动装备。

· 隐藏恶意代码,防病毒软件不会扫描Hexagon指令集。

· cDSP认真预处置来自摄像头传感器的流视频,攻击者可以接受此流程。

· 接见DSP内核驱动程序。驱动程序中的破绽可能会将应用程序的权限扩展到guest OS或DSP内核的权限。

3.DSP驱动器

QuRT OS实现了QuRT驱动程序挪用(QDI)的装备驱动程序模子。无法从Android API接见QDI。与POSIX一样,QDI装备驱动程序以比请求驱动程序服务的用户代码更高的特权举行操作。QDI提供了一个简朴的驱动程序挪用API,该API隐藏了与特权模式关联的所有实现细节。

该库是Hexagon SDK的一部门,包罗QDI基础结构。FastRPC Shell与libqurt.a库静态链接。

在QuRT可执行二进制文件中可以找到数十个QDI驱动程序。他们通常被命名为/dev/..,/qdi/..,/power/..,/drv/..,/adsp/..或/qos/..。该int qurt_qdi_open(const char* drv)函数可用于接见QDI驱动程序。返回一个小的整数装备句柄。这与POSIX文件形貌符直接并行执行。

QDI仅提供一个宏,它是必须的用户可见的API。该qurt_qdi_handle_invoke宏认真所有通例驱动程序操作。现实上,qurt_qdi_open只是该宏的一种特殊情形。这些是宏参数:

(1)QDI句柄或预界说常数值之一。

(2)界说请求操作的方式号。在SDK头文件中,我们看到:

   · 方式1和2保留用于名称注册和名称查找。

   · 3 – 31保留用于在打开的句柄上举行POSIX类型的操作。

   · QDI基础结构保留了32 – 127。

   · 保留128 – 255供使用自动天生的方式(例如IDL可能天生的方式)。

   · 私有方式编号为256和更高。

(3)零到九个可选的32位参数。

qrt\u qdi\u handle\u invoke宏挪用相关的装备驱动程序挪用函数,该函数实现主驱动程序逻辑,并提供指定的方式编号和可选参数。

这是从用户PD代码挪用QDI驱动程序的示例:

QDI驱动程序使用int qurt_qdi_devname_register(const char *name, qurt_qdi_obj_t *opener)API函数在QuRT中注册自己,驱动程序提供其名称和指向opener工具的指针作为参数。

opener工具的第一个字段是驱动程序挪用函数。QuRT挪用此函数来处置来自用户PD或另一个驱动程序的驱动程序请求,并提供以下参数:

· QDI句柄,代表发送了QDI请求的客户端。

· 发出此QDI请求的opener工具。

· 挪用者提供的QDI方式。

· 挪用者提供的九个可选参数。

通常,驱动程序挪用函数是QDI方式ID的切换操作符。每种方式可以使用与提供的参数数目差其余参数。参数类型为qurt_qdi_arg_t。

请注重,驱动程序挪用函数是基于模糊测试的破绽研究的一个很好的目的,由于方式是由ID标识的,而不是由名称标识的,挪用方不需要知道挪用驱动程序方式的参数简直切数目及其现实类型。

0x04 QDI驱动程序破绽挖掘与行使

1.QDI驱动程序基于反馈的模糊测试

为了在Ubuntu PC上Fuzzing QDI驱动程序,我们使用了QEMU Hexagon和AFL组合来Fuzzing DSP库。然则,我们实现的不是skel_loader程序,而是另一个Hexagon ELF二进制程序qdi_exec,它认真执行这些操作:

(1)将作为第一个下令行参数吸收的数据文件剖析为QDI方式ID和驱动程序挪用函数的九个参数的数组。

(2)通过第二个下令行参数中指定的地址挪用驱动程序挪用函数,并提供QDI方式ID和从数据文件中解码的参数。

我们为qdi_exec程序使用了以下输入文件花样:

· Header(4个字节)。它包罗三个字段值:

   · QDI方式ID(10个低位)。在图7的示例中,它是0x01。

   · 参数数目(4位)。在该示例中,仅使用了一个参数。其余八个自变量被以为是零。

   · 参数类型的掩码(9位)。如前所述,每个参数都是数字或指向缓冲区的指针。在掩码中,每个自变量用一位示意。零值示意该参数是一个数字,正值示意该参数是一个缓冲区。

· 缓冲区参数的巨细(每个参数4个字节)。在示例中,/dev/diag长度为0x0A的字符串用作参数。

· 缓冲区参数的内容。

图7:用于Fuzzing QDI驱动程序的输入数据文件。

QDI 驱动程序是作为 QuRT ELF 的一部门实现的。它们不在 Qualcomm 的 runelf.pbn 版本的 QuRT 中,我们在模拟器上运行程序。因此,我们必须对runelf.pbnELF文件举行如下修补:

(1)在runelf.pbn中附加用于现实装备的QuRT ELF的程序段。我们使用从Pixel 4装备提取的aDSP二进制数据。

(2)将QDI驱动程序使用的malloc和memcpy内核函数重定向到它们的用户模式实现。内核内存函数限制了用户空间和内核空间之间的一些传输。

图8: QDI驱动程序Fuzzing方案。

AFL fuzzer 传入数据文件的内容,并触发qemu仿真器上的 runelf.pbn 执行。pbn 会加载我们的 QDI _ exec 程序,该程序直接挪用 QDI 驱动程序挪用函数。

我们通过对QuRT二进制文件举行逆向来手动找到QDI驱动程序挪用函数的起始地址。该opener工具位于驱动程序名称旁边的代码中。

该模糊器在Snapdragon 855 aDSP中内置的十二个QDI驱动程序中发现许多crashs,它们中的大多数也适用于cDSP。

2.行使QDI驱动程序中的破绽

QDI驱动程序中的任何问题都可导致DSP内核溃逃并重新启动移动装备。例如,下面的每一行代码都将引起DSP溃逃,并可以用于装备上的DoS攻击。

出于研究目的,我们乐成行使了/dev/i2cQDI驱动程序中的几个随便内核读写破绽和/dev/glinkQDI驱动程序中的两个代码执行破绽。出于平安缘故原由,我们无法宣布POC代码,然则行使异常简朴。这是原语的一个示例:

恶意Android应用程序可以使用QDI驱动程序中发现的破绽以及用户PD的DSP库中形貌的破绽,在DSP guset OS的上下文中执行自界说代码。

3.从guest OS PD请求Android服务

若是我们实验从DSP guest OS代码中打开与Android相关的文件,该怎么做呢?谜底是QuRT将我们的请求重定向到一个特殊的Android守护程序。如图9所示,在Snapdragon 855装备上,有两个以差异特权运行的aDSP守护程序和一个cDSP守护程序。

图9: DSP Android守护程序。

在Pixel 4装备上,可以在init. *** 8150.rc文件中找到这些守护程序的启动下令。

图10:Pixel 4 init. *** 8150.rc初始化文件。

这些特权的vendor.adsprpcd和vendor.cdsprpcd守护程序处置DSP guest操作系统的请求。它们以系统用户身份运行,但同时受到SELinux的限制。u:r:adsprpcd:s0和u:r:cdsprpcd:s0上下文只能接见与DSP相关的目录和工具。

0x05 研究总结

aDSP和cDSP子系统是平安研究异常有前途的领域。首先,可以从第三方Android应用程序挪用DSP举行接见。其次,DSP处置通过装备传感器转达的小我私人信息,例如视频和语音数据。第三,正如我们在文章中先容的那样,DSP组件中存在许多平安问题。

高通将已披露的DSP破绽分配了CVE-2020-11201,CVE-2020-11202,CVE-2020-11206,CVE-2020-11207,CVE-2020-11208和CVE-2020-11209。对于QDI驱动程序中发现的破绽,高通公司决议不分配CVE。2020年11月的Qualcomm平安补丁已乐成修复所有问题。

出于研究目的,我们行使了一些已发现的破绽,并获得了在所有基于Snapdragon的移动装备的aDSP和cDSP上执行特权代码的能力。

https://research.checkpoint.com/wp-content/uploads/2021/04/DSP.mp4?_= 

行使截图:




https://research.checkpoint.com/2021/pwn2own-qualcomm-dsp/

Filecoin挖矿

Filecoin挖矿官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

网友评论