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

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_type
54 -activity_service
55 -display_service
56 -webviewupdate_service
57}: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发现安卓重大安全漏洞

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/751e0df904e5160b8e1f8205f38ab4c8.html