谷歌安全研究员称智能设备内部芯片间通信存在大量漏洞

 谷歌旗下Project Zero的安全研究员Gal Beniamini指出,博通 Wi-Fi SoC(芯片)易遭受远程代码攻击攻击,可获取系统内核权限。他表示,由于缺少访问授权控制,智能手机等设备的内部芯片模块仍存在大量未发现漏洞。

4月4日,Project Zero的博客中指出博通Wi-Fi SoC芯片存在安全漏洞,可获取芯片远程代码执行权限。4月11日的博客中指出可以借助Wi-Fi SoC中的漏洞,在公共Wi-Fi网络环境中,远程在目标设备上执行恶意代码,无需诱导用户执行任何操作,即可远程完全获取用户手机的权限。

博客指出虽然内存隔离可以有效的保护Wi-Fi SoC芯片,但是固件层面需要增强安全防御。目前可以借鉴的安全防御策略有stack cookies、safe unlinking、内存访问控制MPU。

Gal Beniamini第一次只发布了在Wi-Fi芯片上远程执行远程代码的案例,4月11日的博客中指出可以借助Wi-Fi SoC中的漏洞,在公共Wi-Fi网络环境中,远程在目标设备上执行恶意代码,无需诱导用户执行任何操作,即可远程完全获取用户手机的权限,以下是详细阐述。

Beniamini发现通过低级和高级(简单和复杂)两种通信路径都可以攻击应用处理器:

“简单路径”:攻击将SoC连接到应用处理器的通信通道

“复杂路径”:攻击SoC传输的高级消息,从而向设备发送重要的Wi-Fi信息(例如SSID发现、Wi-Fi功率等级)。

从SoC到主机的链接

SoC支持不同的上游接口, Beniamini罗列了SDIO、USB和PCIe。其中PCIe最快,PCIe使用DMA(直接内存访问)与处理器通信。由于PCIe已经成为现代设备的默认接口,因此Beniamini选择攻击PCIe。

执行堆栈追踪工作排除博通SoC用来与主机通信的通信协议后,Beniamini发现,Wi-Fi SoC设法对包含主机内核的物理地址范围进行直接内存访问,而没有任何干扰(此外,这表明缺乏系统内存映射或出现配置错误)。

博通的SoftMAC驱动Brcmsmac向他揭露了如何映射SoC的DMA访问,并识别哪些结构代表主机到设备和设备到主机的访问。这就提供了一条路径供研究人员通过自己制作的数据劫持任何内核函数--换句话讲,即是完全劫持内核。

复杂路径

所谓的复杂方式就是,查看SoC如何将信号(如可用的SSID或Wi-Fi功率等级)发送给主机。

研究人员发现,这类控制信息均使用同样的EtherType、0x886C(封装必须由主机驱动处理的固件事件有关信息)。去年5月之前,0x886C帧未被过滤,但存在两个问题:如果劫持SoC就可以恢复该补丁;并发送重要Wi-Fi改动(SWC)(虽然有144个受支持的事件代码,但是安卓主机驱动Bcmdhd只支持很小的子集,尽管如此,驱动支持的事件有35个,且和Wi-Fi模块一样被认为是可信芯片,因此导致攻击面很大)的WLC_E_PFN_SWC事件仍会遭受攻击。

官方补丁中添加了验证方法is_wlc_event_frame,验证固件RX路径及驱动路径。芯片在接受到主机帧时,立即调用验证,如果判断到是一个事件帧,即立刻丢弃。否则将帧转给驱动,最后驱动调用通用方法继续下面的验证。

但是既然可以获取Wi-Fi SoC芯片的代码执行权限,即可命令回复补丁逻辑。只需要在固件补丁返回处做修改,即可导致任意接受帧盲目的转发到主机。流程如下:

博客指出虽然内存隔离可以有效的保护Wi-Fi SoC芯片,但是固件层面需要增强安全防御。目前可以借鉴的安全防御策略有stack cookies、safe unlinking、内存访问控制MPU。

 

  

本文转自d1net(转载)

时间: 2024-10-11 11:19:13

谷歌安全研究员称智能设备内部芯片间通信存在大量漏洞的相关文章

谷歌安全研究员怒了:杀软为嘛会存在有漏洞

杀毒软件可避免用户受到恶意软件攻击,不过,在有些时候,这些杀毒软件正是问题的根源.谷歌安全研究员Tavis Ormandy近日在谷歌Project Zero博客上抨击了几款Norton 以及Symantec产品. 谷歌安全研究员怒了:杀软为嘛会存在有漏洞 Ormandy表示,杀毒软件所存在的漏洞可以让软件在没得到用户允许的情况下,改变系统的默认设置以及最高级别的软件设置.在特定情况下,一些易受攻击的代码还会被下载到系统内核,从而损坏了远程内核内存. 值得一提的是,Symantec已经修复了谷歌所

虚拟化Hypervisor恶意软件 安全工具无法识别 研究员称没有系统符合数据安全标准

Rubos公司的研究员Mikhail Utin称,他们认为世界上至少存在三个恶意程序管理程序Malicious Hypervisor实例,Hypervisor是虚拟化技术的核心,存在于虚拟层和物理层之间,但目前没有安全工具可以识别,研究员称这意味着目前没有计算机系统能够符合任何一项数据安全标准. 我们希望立即发布并讨论自2006以来存在的恶意管理程序威胁,这个问题一直被忽略了. http://seclists.org/fulldisclosure/2017/Jun/29 2006,密歇根大学(M

深入解析Java的线程同步以及线程间通信_java

Java线程同步 当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用.达到此目的的过程叫做同步(synchronization).像你所看到的,Java为此提供了独特的,语言水平上的支持. 同步的关键是管程(也叫信号量semaphore)的概念.管程是一个互斥独占锁定的对象,或称互斥体(mutex).在给定的时间,仅有一个线程可以获得管程.当一个线程需要锁定,它必须进入管程.所有其他的试图进入已经锁定的管程的线程必须挂起直到第一个线程退出管程.这些其他的线程被

Android线程间通信之handler

本文讲的是Android线程间通信之handler,相信写过android的童鞋,一定对handler很熟悉.因为使用频率实在太高了.尤其是在非ui线程,想要刷新ui控件的时候.因为ui控件的刷新只能在主线程做,但是我们可能有在非ui线程却需要更新ui的需求,比如在一个后台线程下载了图片需要更新到ui上,这时候就需要主线程handler来发送更新的message. handler的使用如此频繁,我们有必要知道其内部是如何工作的. 一句话概括 handler thread handler 发送什么

深入理解Android组件间通信机制对面向对象特性的影响详解_Android

组件的特点对于Android的四大组件Activity, Service, ContentProvider和Service,不能有Setter和Getter,也不能给组件添加接口.原因是组件都是给系统框架调用的,开发者只能实现其规定的回调接口,组件的创建与销毁都是由系统框架控制的,开发者不能强行干预,更没有办法获取组件的对象.比如Activity,Service,BroadcastReceiver,你没有办法去创建一个Activity,Service或BroadcastReceiver,然后像使

深入Android Handler与线程间通信ITC的详解_Android

在<Android Handler之消息循环的深入解析>中谈到了Handler是用于操作线程内部的消息队列,所以Handler可以用来线程间通信ITC,这种方式更加安全和高效,可以大大减少同步的烦恼,甚至都可以不用syncrhonized.线程间通讯ITC正常情况下函数调用栈都会生存在同一个线程内,想要把执行逻辑交换到其他线程可以新建一个Thread,然后start().另外一种方法就是用ITC,也即用消息队列来实现,线程需要把执行逻辑交到其他线程时就向另外的线程的消息队列发送一个消息,发送消

深入Android Handler与线程间通信ITC的详解

在<Android Handler之消息循环的深入解析>中谈到了Handler是用于操作线程内部的消息队列,所以Handler可以用来线程间通信ITC,这种方式更加安全和高效,可以大大减少同步的烦恼,甚至都可以不用syncrhonized. 线程间通讯ITC 正常情况下函数调用栈都会生存在同一个线程内,想要把执行逻辑交换到其他线程可以新建一个Thread,然后start().另外一种方法就是用ITC,也即用消息队列来实现,线程需要把执行逻辑交到其他线程时就向另外的线程的消息队列发送一个消息,发

什么是.Net的异步机制(线程间通信)

前几篇文章我已经对异步的操作进行的详细的解释.异步操作也是线程的一种,当我们开始一个异步操作(新线程),完成调用后需要和其他线程通信(可能需要告知状态信息),这时候我们就需要线程间的通信编程. 线程间通信 我们看下面的图 图1 我们来看线程间通信的原理:线程(Thread B)和线程(Thread A)通信, 首先线程A 必须实现同步上下文对象(Synchronization Context), 线程B通过调用线程A的同步上下文对象来访问线程A,所有实现都是在同步上下文中完成的.线程B有两种方式

java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]

线程通信,线程之间的消息传递: 多个线程在操作同一个资源,但对共享资源的操作动作不同:它们共享同一个资源,互为条件,相互依赖,相互通信让任务向前推进. 线程的同步,可以解决并发更新同一个资源,实现线程同步;但不能用来实现线程间的消息传递. 线程通信生产者和消费者和仓库是个典型模型: 生产者:没有生产之前通知消费者等待,生产产品结束之后,马上通知消费者消费 消费者:没有消费之前通知生产者等待,消费产品结束之后,通知生产者继续生产产品以供消费 线程通信:使用java中Object中提供的: publ