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

\

看新闻很累?看技术新闻更累?试试下载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发现安卓重大安全漏洞_第1张图片

\\

图:谷歌团队发文致谢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发现安卓重大安全漏洞_第2张图片

\\

图: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)\

你可能感兴趣的:(谷歌砸重金求挑错,360发现安卓重大安全漏洞)