安全研究

安全公告
Android APK文件名长度数字签名绕过漏洞(SA2013-02)

发布日期:2013-11-08

描述:

CVE ID:CVE-2013-6792

受影响的软件及系统:
====================
Google Android <= 4.3

未受影响的软件及系统:
======================
Google Android 4.4

综述:
======
NSFOCUS安全研究团队发现Google Android系统在APK签名验证中存在一个安全漏洞,可能造成攻击者发布恶意APK程序并绕过Android的签名验证机制。

分析:
======
Android是基于Linux开放性内核的操作系统,是Google公司在2007年发布的手机操作系统。

Android存在一个安全漏洞,可使攻击者修改APK代码,将合法应用转变为恶意木马,而不破坏应用原有的签名。

Andorid系统在校验APK文件签名时,使用中央目录头(central directory header)中的存储的文件名长度(filename length)来计算文件数据的偏移,然后对文件数据进行签名验证。如下:
-------------------------------------------------------------------------- 
public InputStream getInputStream(ZipEntry entry) throws IOException {
// Make sure this ZipEntry is in this Zip file. We run it through the name lookup.
entry = getEntry(entry.getName());
if (entry == null) {
return null;
}

......
rafStream.skip(entry.nameLength + localExtraLenOrWhatever); // entry.nameLength 
......
}
--------------------------------------------------------------------------


然而在执行dexopt操作加载classes.dex时,则是使用本地文件头(local file header)中的文件名长度来计算文件数据的偏移,如下:
-------------------------------------------------------------------------- 
int dexZipGetEntryInfo(const ZipArchive* pArchive, ZipEntry entry,
int* pMethod, size_t* pUncompLen, size_t* pCompLen, off_t* pOffset,
long* pModWhen, long* pCrc32)
{
int ent = entryToIndex(pArchive, entry);
......
off_t dataOffset = localHdrOffset + kLFHLen
+ get2LE(lfhBuf + kLFHNameLen) + get2LE(lfhBuf + kLFHExtraLen); // kLFHNameLen
......
}
-------------------------------------------------------------------------- 

Android并没有检查这两个文件名长度是否一致,因此攻击者可以在拥有正确签名的合法classes.dex文件后面附加一个恶意的classes.dex,并调整本地文件头中的文件名长度,使其指向恶意文件,从而绕过Android的签名检测。

解决方法:

在安装漏洞相应的补丁之前,可以采用以下的临时解决方案来免受漏洞的影响:

* 只安装来自可信来源的APK程序。

厂商状态:
==========
2013.08.30  通知厂商
2013.08.31  厂商要求提供PoC代码
2013.09.02  提供了PoC代码
2013.11.01  厂商发布Android 4.4,修复了此安全漏洞

厂商已经在Android 4.4中修复了相关漏洞,请升级到最新版本:
http://www.android.com/

附加信息:
==========
本安全漏洞由绿盟科技安全研究团队(NSFOCUS Security Team)的张云海发现。


浏览次数:

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

绿盟科技巨人背后的专家
关 闭
按访问者
政府
运营商
金融
能源
合作伙伴
新闻媒体
求职者
关于绿盟科技
公司概况
品牌标识
工作机会
大事记
部分客户
公司荣誉
诚聘英才
常用链接
产品线概述
产品资质
业务解决方案
公司资质
相关网站
售后服务
软件升级
绿盟客户自助门户系统