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

360Alpha团队因发现并报告了“穿云箭”组合漏洞而获得了ASR项目的最高奖金112500美元。此漏洞能够远程攻破Pixel手机,对用户隐私构成严重威胁。
\

看新闻很累?看技术新闻更累?试试下载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万人民币)。

\\

75e3b94e8e63c3b489877d82a4f308fd.png

\\

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

\\

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

\\

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

\\

edb9ead0407e4061bb549c3de18be97d.jpeg

\\

图: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\u0026lt;v8::Value\u0026gt;\u0026amp; args, ErrorThrower* thrower) {\ ......\ } else if (source-\u0026gt;IsTypedArray()) { //---\u0026gt;source should be checked if it's backed by a SharedArrayBuffer\ // A TypedArray was passed.\ Local\u0026lt;TypedArray\u0026gt; array = Local\u0026lt;TypedArray\u0026gt;::Cast(source);\ Local\u0026lt;ArrayBuffer\u0026gt; buffer = array-\u0026gt;Buffer();\ ArrayBuffer::Contents contents = buffer-\u0026gt;GetContents();\ start =\ reinterpret_cast\u0026lt;const byte*\u0026gt;(contents.Data()) + array-\u0026gt;ByteOffset();\ length = array-\u0026gt;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-\u0026gt;flags \u0026amp; private_handle_t::PRIV_FLAGS_FRAMEBUFFER) \u0026amp;\u0026amp;\ !(hnd-\u0026gt;flags \u0026amp; private_handle_t::PRIV_FLAGS_SECURE_BUFFER)) {\ size = hnd-\u0026gt;size;\ err = memalloc-\u0026gt;map_buffer(\u0026amp;mappedAddress, size,\ hnd-\u0026gt;offset, hnd-\u0026gt;fd); //---\u0026gt; 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)\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值