当前位置:安全企业动态 → 正文

谷歌砸重金求挑错,360发现安卓重大安全漏洞

责任编辑:editor006 作者:陈思 |来源:企业网D1Net  2018-01-23 16:09:42 本文摘自:INFOQ

北京时间1月22日,“穿云箭”组合漏洞媒体沟通会于360大厦召开。上周,谷歌官方发文致谢360 Alpha团队,并向360 Alpha团队负责人龚广颁发了总额为112500美金的安卓漏洞奖励计划(ASR)史上最高金额的奖金。360 Alpha团队在2017年8月向谷歌提交了关于攻破Pixel手机的“穿云箭”组合漏洞报告。

谷歌砸重金求安全公司挑错

Android Security Rewards(ASR)项目是Google于2015年启动,主要对那些向公司提交Android安全漏洞的安全专家提供奖励。该项目要求专家在运行最新Android版的Pixel手机和平板上进行测试,然后根据漏洞的危险程度来提供不同的奖金。

该项目于2017年6月的到了安全专家和白帽子们的大力支持,但是Google表示:“每个Android版本包含更多的安全保护,但是已经有两年没有专家获得漏洞链这个顶级大奖了。”不过在上周五,公司终于宣布来自奇虎360技术公司的Guang Gong赢得了这个大奖,奖金共计达到11.25万美元(约合72万人民币)。

  图:谷歌团队发文致谢360团队

据360安全团队介绍,这次发现的两个漏洞分别是基于Chrome浏览器的V8引擎漏洞CVE-2017-5116,以及Android系统漏洞CVE-2017-14904,是ASR首个可以远程有效利用的系列漏洞。其中,Chrome浏览器漏洞CVE-2017-5116可被用于在Chrome浏览器沙盒内远程执行代码。

“穿云箭”组合漏洞可以彻底远程攻破谷歌Pixel手机,对用户的隐私及财产安全造成极大的威胁。为了保护用户的手机安全,360 Alpha团队在17年8月将该组合漏洞报告给谷歌,已成功帮助其修复Android 系统和Chrome浏览器。

  图:360助理总裁兼首席安全工程师郑文彬现场演讲

之所以此次Google会颁发如此高的奖金,一方面是由于“穿云箭”组合漏洞的影响面广,未修复前大部分安卓手机都可能会被黑客利用这个组合漏洞攻破。另一方面该漏洞是基于底层系统存在的,能影响手机设备上所有应用,甚至包括电话短信等基础应用,造成的危害最大。不法分子可利用该漏洞获取用户短信验证码、支付应用权限等,对用户的个人隐私和财产都造成极大威胁。

Pixel远程利用链的技术细节

根据谷歌发布的在线安全文档,我们找到了有关这两个漏洞的技术细节。

漏洞链包括两个漏洞,CVE-2017-5116和CVE-2017-14904。CVE-2017-5116是一个V8引擎错误,用于在沙盒渲染过程中获得远程代码执行。CVE-2017-14904是Android的libgralloc模块中的一个漏洞,用于从Chrome的沙箱中转移。通过访问Chrome中的恶意URL,这个利用链可以用来将任意代码注入到system_server中。

RCE错误(CVE-2017-5116)

V8 6.0引入了对SharedArrayBuffer的支持,SharedArrayBuffer是一种在JavaScript工作人员之间共享内存的低级别机制,并在工作人员之间同步控制流。

SharedArrayBuffers给JavaScript访问共享内存,原子和futexes。WebAssembly是一种可以在现代Web浏览器中运行的新类型的代码,它是一种低级汇编式语言,具有紧凑的二进制格式,可以接近本机的性能运行,并提供汇编语言(如C / C ++)目标,使他们可以在网上运行。通过在Chrome中结合使用SharedArrayBuffer WebAssembly和web worker这三个功能,可以通过竞争条件触发OOB访问。简而言之,WebAssembly代码可以放入SharedArrayBuffer中,然后传递给Web Worker。当主线程解析WebAssembly代码时,工作线程可以同时修改代码,这会导致OOB访问。

多功能代码位于函数GetFirstArgumentAsBytes中其中参数args可能是一个ArrayBuffer或TypedArray对象。将SharedArrayBuffer导入到JavaScript后,TypedArray可能由SharedArraybuffer支持,因此TypedArray的内容可能随时由其他工作线程修改。

i::wasm::ModuleWireBytes GetFirstArgumentAsBytes( const v8::FunctionCallbackInfo& args, ErrorThrower* thrower) { ...... } else if (source->IsTypedArray()) { //--->source should be checked if it's backed by a SharedArrayBuffer // A TypedArray was passed. Local array = Local::Cast(source); Local buffer = array->Buffer(); ArrayBuffer::Contents contents = buffer->GetContents(); start = reinterpret_cast(contents.Data()) + array->ByteOffset(); length = array->ByteLength(); } ...... return i::wasm::ModuleWireBytes(start, start + length);}EoP错误(CVE-2017-14904)

沙盒转义错误是由map和unmap不匹配造成的,这会导致Use-After-Unmap问题。

static int gralloc_map(gralloc_module_t const* module, buffer_handle_t handle){ …… private_handle_t* hnd = (private_handle_t*)handle; …… if (!(hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) && !(hnd->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER)) { size = hnd->size; err = memalloc->map_buffer(&mappedAddress, size, hnd->offset, hnd->fd); //---> mapped an ashmem and get the mapped address. the ashmem fd and offset can be controlled by Chrome render process. if(err || mappedAddress == MAP_FAILED) { ALOGE("Could not mmap handle %p, fd=%d (%s)", handle, hnd->fd, strerror(errno)); return -errno; } hnd->base = uint64_t(mappedAddress) + hnd->offset; //---> save mappedAddress+offset to hnd->base } else { err = -EACCES;}…… return err;}

gralloc_map将由参数句柄控制的图形缓冲区映射到内存空间,而gralloc_unmap将其取消映射。映射时,mappedAddress加hnd-> offset被存储到hnd-> base,但是当unmapping时,hnd-> base被直接传递给系统调用unmap减去偏移量。hnd-> offset可以从Chrome的沙盒进程中操作,所以可以从Chrome的沙盒渲染进程中取消映射system_server中的任何页面。

static int gralloc_unmap(gralloc_module_t const* module, buffer_handle_t handle){ …… if(hnd->base) { err = memalloc->unmap_buffer((void*)hnd->base, hnd->size, hnd->offset); //---> while unmapping, hnd->offset is not used, hnd->base is used as the base address, map and unmap are mismatched. if (err) { ALOGE("Could not unmap memory at address %p, %s", (void*) hnd->base, strerror(errno)); return -errno; } hnd->base = 0;}…… return 0;}int IonAlloc::unmap_buffer(void *base, unsigned int size, unsigned int /*offset*/)//---> look, offset is not used by unmap_buffer{ int err = 0; if(munmap(base, size)) { err = -errno; ALOGE("ion: Failed to unmap memory at %p : %s", base, strerror(errno)); } return err;}

尽管SeLinux限制了域isolation_app访问大部分Android系统服务,但isolated_app仍然可以访问三个Android系统服务。

52neverallow isolated_app {53 service_manager_type54 -activity_service55 -display_service56 -webviewupdate_service57}:service_manager find;

要从Chrome的沙箱中触发前面提到的Use-After-Unmap错误,首先将一个可解析的GraphicBuffer对象放入一个包中,然后调用IActivityManager的binder方法convertToTranslucent将恶意包传递给system_server。当system_server处理这个恶意软件包时,会触发该错误。

360携手移动安全联盟推出“先行者”行动

目前,我国Android系统手机用户占比超过50%,数量非常庞大。然而由于补丁的下放延迟,导致市场上的Android手机会存在漏洞修复相对滞后的情况。大多数手机厂商,对于Android系统漏洞的修复都是在等待谷歌官方的补丁。然而,从白帽子发现漏洞提交给谷歌,谷歌收到漏洞报告进行修复,最后下发补丁给厂商需要一段相对漫长的时间。在这段期间,手机用户往往会因为各类漏洞而面临着一定的安全威胁。

2017年12月,中国信息通信研究院泰尔终端实验室牵头会同设备生产厂商、互联网厂商、安全厂商、高等院校共同发起成立移动安全联盟(Mobile Security Alliance,简称MSA)。

因此,作为移动安全联盟理事成员的360,与移动安全联盟携手,推出“先行者”行动,与移动安全联盟一起,帮助国内移动厂商成为漏洞修补的“先行者”。

图:移动安全联盟标准政策组组长翟世俊博士现场演讲

未来,“先行者”行动将配合移动安全联盟漏洞修补相关计划,360在发现漏洞信息的第一时间与移动安全联盟成员共享,从政策、标准、检测、修复、应急响应等方面积极推进,与合作厂商同步,判断漏洞风险,并联合制定防御方案,确保最短时间内对漏洞进行修复。

关键字:谷歌hnderrno

本文摘自:INFOQ

x 谷歌砸重金求挑错,360发现安卓重大安全漏洞 扫一扫
分享本文到朋友圈
当前位置:安全企业动态 → 正文

谷歌砸重金求挑错,360发现安卓重大安全漏洞

责任编辑:editor006 作者:陈思 |来源:企业网D1Net  2018-01-23 16:09:42 本文摘自:INFOQ

北京时间1月22日,“穿云箭”组合漏洞媒体沟通会于360大厦召开。上周,谷歌官方发文致谢360 Alpha团队,并向360 Alpha团队负责人龚广颁发了总额为112500美金的安卓漏洞奖励计划(ASR)史上最高金额的奖金。360 Alpha团队在2017年8月向谷歌提交了关于攻破Pixel手机的“穿云箭”组合漏洞报告。

谷歌砸重金求安全公司挑错

Android Security Rewards(ASR)项目是Google于2015年启动,主要对那些向公司提交Android安全漏洞的安全专家提供奖励。该项目要求专家在运行最新Android版的Pixel手机和平板上进行测试,然后根据漏洞的危险程度来提供不同的奖金。

该项目于2017年6月的到了安全专家和白帽子们的大力支持,但是Google表示:“每个Android版本包含更多的安全保护,但是已经有两年没有专家获得漏洞链这个顶级大奖了。”不过在上周五,公司终于宣布来自奇虎360技术公司的Guang Gong赢得了这个大奖,奖金共计达到11.25万美元(约合72万人民币)。

  图:谷歌团队发文致谢360团队

据360安全团队介绍,这次发现的两个漏洞分别是基于Chrome浏览器的V8引擎漏洞CVE-2017-5116,以及Android系统漏洞CVE-2017-14904,是ASR首个可以远程有效利用的系列漏洞。其中,Chrome浏览器漏洞CVE-2017-5116可被用于在Chrome浏览器沙盒内远程执行代码。

“穿云箭”组合漏洞可以彻底远程攻破谷歌Pixel手机,对用户的隐私及财产安全造成极大的威胁。为了保护用户的手机安全,360 Alpha团队在17年8月将该组合漏洞报告给谷歌,已成功帮助其修复Android 系统和Chrome浏览器。

  图:360助理总裁兼首席安全工程师郑文彬现场演讲

之所以此次Google会颁发如此高的奖金,一方面是由于“穿云箭”组合漏洞的影响面广,未修复前大部分安卓手机都可能会被黑客利用这个组合漏洞攻破。另一方面该漏洞是基于底层系统存在的,能影响手机设备上所有应用,甚至包括电话短信等基础应用,造成的危害最大。不法分子可利用该漏洞获取用户短信验证码、支付应用权限等,对用户的个人隐私和财产都造成极大威胁。

Pixel远程利用链的技术细节

根据谷歌发布的在线安全文档,我们找到了有关这两个漏洞的技术细节。

漏洞链包括两个漏洞,CVE-2017-5116和CVE-2017-14904。CVE-2017-5116是一个V8引擎错误,用于在沙盒渲染过程中获得远程代码执行。CVE-2017-14904是Android的libgralloc模块中的一个漏洞,用于从Chrome的沙箱中转移。通过访问Chrome中的恶意URL,这个利用链可以用来将任意代码注入到system_server中。

RCE错误(CVE-2017-5116)

V8 6.0引入了对SharedArrayBuffer的支持,SharedArrayBuffer是一种在JavaScript工作人员之间共享内存的低级别机制,并在工作人员之间同步控制流。

SharedArrayBuffers给JavaScript访问共享内存,原子和futexes。WebAssembly是一种可以在现代Web浏览器中运行的新类型的代码,它是一种低级汇编式语言,具有紧凑的二进制格式,可以接近本机的性能运行,并提供汇编语言(如C / C ++)目标,使他们可以在网上运行。通过在Chrome中结合使用SharedArrayBuffer WebAssembly和web worker这三个功能,可以通过竞争条件触发OOB访问。简而言之,WebAssembly代码可以放入SharedArrayBuffer中,然后传递给Web Worker。当主线程解析WebAssembly代码时,工作线程可以同时修改代码,这会导致OOB访问。

多功能代码位于函数GetFirstArgumentAsBytes中其中参数args可能是一个ArrayBuffer或TypedArray对象。将SharedArrayBuffer导入到JavaScript后,TypedArray可能由SharedArraybuffer支持,因此TypedArray的内容可能随时由其他工作线程修改。

i::wasm::ModuleWireBytes GetFirstArgumentAsBytes( const v8::FunctionCallbackInfo& args, ErrorThrower* thrower) { ...... } else if (source->IsTypedArray()) { //--->source should be checked if it's backed by a SharedArrayBuffer // A TypedArray was passed. Local array = Local::Cast(source); Local buffer = array->Buffer(); ArrayBuffer::Contents contents = buffer->GetContents(); start = reinterpret_cast(contents.Data()) + array->ByteOffset(); length = array->ByteLength(); } ...... return i::wasm::ModuleWireBytes(start, start + length);}EoP错误(CVE-2017-14904)

沙盒转义错误是由map和unmap不匹配造成的,这会导致Use-After-Unmap问题。

static int gralloc_map(gralloc_module_t const* module, buffer_handle_t handle){ …… private_handle_t* hnd = (private_handle_t*)handle; …… if (!(hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) && !(hnd->flags & private_handle_t::PRIV_FLAGS_SECURE_BUFFER)) { size = hnd->size; err = memalloc->map_buffer(&mappedAddress, size, hnd->offset, hnd->fd); //---> mapped an ashmem and get the mapped address. the ashmem fd and offset can be controlled by Chrome render process. if(err || mappedAddress == MAP_FAILED) { ALOGE("Could not mmap handle %p, fd=%d (%s)", handle, hnd->fd, strerror(errno)); return -errno; } hnd->base = uint64_t(mappedAddress) + hnd->offset; //---> save mappedAddress+offset to hnd->base } else { err = -EACCES;}…… return err;}

gralloc_map将由参数句柄控制的图形缓冲区映射到内存空间,而gralloc_unmap将其取消映射。映射时,mappedAddress加hnd-> offset被存储到hnd-> base,但是当unmapping时,hnd-> base被直接传递给系统调用unmap减去偏移量。hnd-> offset可以从Chrome的沙盒进程中操作,所以可以从Chrome的沙盒渲染进程中取消映射system_server中的任何页面。

static int gralloc_unmap(gralloc_module_t const* module, buffer_handle_t handle){ …… if(hnd->base) { err = memalloc->unmap_buffer((void*)hnd->base, hnd->size, hnd->offset); //---> while unmapping, hnd->offset is not used, hnd->base is used as the base address, map and unmap are mismatched. if (err) { ALOGE("Could not unmap memory at address %p, %s", (void*) hnd->base, strerror(errno)); return -errno; } hnd->base = 0;}…… return 0;}int IonAlloc::unmap_buffer(void *base, unsigned int size, unsigned int /*offset*/)//---> look, offset is not used by unmap_buffer{ int err = 0; if(munmap(base, size)) { err = -errno; ALOGE("ion: Failed to unmap memory at %p : %s", base, strerror(errno)); } return err;}

尽管SeLinux限制了域isolation_app访问大部分Android系统服务,但isolated_app仍然可以访问三个Android系统服务。

52neverallow isolated_app {53 service_manager_type54 -activity_service55 -display_service56 -webviewupdate_service57}:service_manager find;

要从Chrome的沙箱中触发前面提到的Use-After-Unmap错误,首先将一个可解析的GraphicBuffer对象放入一个包中,然后调用IActivityManager的binder方法convertToTranslucent将恶意包传递给system_server。当system_server处理这个恶意软件包时,会触发该错误。

360携手移动安全联盟推出“先行者”行动

目前,我国Android系统手机用户占比超过50%,数量非常庞大。然而由于补丁的下放延迟,导致市场上的Android手机会存在漏洞修复相对滞后的情况。大多数手机厂商,对于Android系统漏洞的修复都是在等待谷歌官方的补丁。然而,从白帽子发现漏洞提交给谷歌,谷歌收到漏洞报告进行修复,最后下发补丁给厂商需要一段相对漫长的时间。在这段期间,手机用户往往会因为各类漏洞而面临着一定的安全威胁。

2017年12月,中国信息通信研究院泰尔终端实验室牵头会同设备生产厂商、互联网厂商、安全厂商、高等院校共同发起成立移动安全联盟(Mobile Security Alliance,简称MSA)。

因此,作为移动安全联盟理事成员的360,与移动安全联盟携手,推出“先行者”行动,与移动安全联盟一起,帮助国内移动厂商成为漏洞修补的“先行者”。

图:移动安全联盟标准政策组组长翟世俊博士现场演讲

未来,“先行者”行动将配合移动安全联盟漏洞修补相关计划,360在发现漏洞信息的第一时间与移动安全联盟成员共享,从政策、标准、检测、修复、应急响应等方面积极推进,与合作厂商同步,判断漏洞风险,并联合制定防御方案,确保最短时间内对漏洞进行修复。

关键字:谷歌hnderrno

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^