首页 > 最新公告 > CSDN《近匠》专访360加固保 谈应用安全攻防的核心实现

CSDN《近匠》专访360加固保 谈应用安全攻防的核心实现

日期:2015-08-07

国内Android市场鱼龙混杂,拥有着上千个Android应用分发市场,企业及开发者很难跟踪和管理面向海量用户的应用分发情况,由此常常导致很多用户无意中下载了被植入后门的应用。在此环境之下,奇虎360无线安全研究院研发为开发者提供了一个名为加固保的Android应用防护方案,为应用提供数据加密、签名校验、防内存修改、完整性校验、应用安全检测等保护,远离恶意破解、反编译、二次打包、内存截取等威胁。本期《近匠》专访360无线安全研究院高级研究员、360加固保技术团队Leader 周亚金,听他解析应用加固技术以及加固保实现的核心细节。

图:360无线安全研究院高级研究员 周亚金

CSDN:请介绍您个人的从业经历以及团队情况。

周亚金:我从2010年开始,在北卡罗莱纳州立大学从事并专注移动安全研究,我们的团队是国际上最早进行移动安全研究的团队之一。在过去几年的研究中,我们对于移动安全的研究也取得了一些成果,这些成果多发表在国际知名安全会议上,包括IEEE S&P、ACM CCS和NDSS等。

我们的研究和工业界结合得非常紧密,比如,在10年就开始对中国移动安全市场进行持续地大规模安全性跟踪研究,在这个研究的基础上,和蒋旭宪教授创立了Android恶意软件基因工程的网站,旨在对研究社区共享Android恶意软件样本。这个项目在国际上获得了非常大的影响,到目前为止已经和全世界各地超过450个知名高校、研究机构和企业建立了联系。

在2011年,我们开始对应用市场中移动应用被重打包的现象进行了广泛深入的研究,并提出了相应的保护方案。博士毕业后,我加入了奇虎360专门从事安全方面的工作。目前在负责360加固保产品的技术工作。

我们的加固保团队是一个由热爱移动安全的年轻人组成,成员多来自国内外知名大学,具有比较深的移动安全经验。我们整个团队对于移动安全的热爱和对移动应用生态圈的使命感,驱使着我们开发出更好的保护移动开发者和移动应用用户的产品。

CSDN:为什么要做这样一个工具?开发者及用户有什么样的需求?

周亚金:在11年开始我们就对Android应用被重打包的现象进行了持续的研究,研究发现,Android应用被重打包乃至插入恶意代码的现象比较严重。这里有一个数据非常愿意和大家分享。我们对六个第三方市场的监测结果表明,在这些第三方市场中,大约5%-13%的应用是重打包的应用,而且重打包的现象不仅仅发生在中国的第三方市场中,在欧洲和美国的第三方市场也有发生。

图:6个第三方市场监测结果(数据来源:ACM

图注:6个App市场应用被重打包的情况,US1/US2是美国的两个市场,EE1/EE2是欧洲的市场,CN1/CN2是中国的市场。

应用被重打包再发布到应用市场的行为不仅仅是侵犯了应用开发者知识产权,更窃取了应用开发者的收入。因为攻击者可以通过插入广告代码或者修改广告标识的方式不正当地获取原本属于应用开发者的收入。

与此同时,重打包应用对用户的隐私和安全也造成了非常大的威胁。比如攻击者可以通过重打包流行的应用来插入恶意代码,然后通过这些重打包应用来传播恶意应用。这个在恶意应用的传播方式中是最常用的一种。我们的研究发现,大约80%的Android恶意应用都采用了重打包的方式来进行传播。

由于重打包应用威胁了应用开发者和用户,进而影响整个移动应用开发生态圈的健康,因此需要提出一种有效的防御手段来增加攻击者的攻击成本,保护应用开发者的知识产权和移动应用用户的安全。正因为这个原因,我们开发了360加固保这个产品。并且我们对于应用开发者是免费使用,让他们能够无成本地使用我们提供的安全服务。我们希望通过这些努力,能使得移动应用开发的生态圈更加健康。

CSDN:Android App的破解技术有哪些?如何防止反编译?

周亚金:应用的破解技术大致可以分成静态和动态两部分。对于静态来说,攻击者可以通过一些静态工具将应用的字节码(和native代码)反编译。目前常用的工具有Apktool、dex2jar、JEB等。攻击者还可以通过定制一些工具的方式来获取代码逻辑,比如基于Soot框架的应用代码分析工具用得就比较多。

对于动态来说,攻击者可以通过JDB、GDB远程调试App,或者通过ptrace注入代码到应用进程从而进行调试。甚至可以通过定制ROM的方式突破各种保护完成对应用的逻辑的逆向。在逆向理解了应用代码的基础上,开发者可以修改代码的逻辑从而破解应用,比如将收费逻辑变成免费,甚至插入恶意代码冒充原应用进行传播。

从技术角度来说,虽然有一些小技巧能防止攻击者通过使用现成的工具来反编译代码。比如,可以通过构造特殊的App文件来使得Apktool不能正确反编译应用。但是从根本上来说,应用的代码一定能被反编译,因为应用代码是运行在攻击者完全控制的不可信环境中(比如攻击者控制的手机或者模拟器)。

我们认为,应用的保护本质上是攻防。我们需要不停地升级我们的防御技术。 正如之前所说,对应用的保护需要多点和多维度的保护。

CSDN:360加固保的原理是什么?如何实现对应用进行加密保护?有着哪些独家研发的安全与加固技术?

周亚金:加固保的基本原理是保护应用的代码逻辑不容易被攻击者获取,并且对应用的完整性进行动态校验。一旦在运行中发现该应用被恶意窜改,则立即停止运行。

图:360加固保应用保护架构图

360加固保对应用的保护形成独有的保护链,从应用的代码逻辑到加固代码本身都是整个保护链条的一部分。攻击者需要攻破整个保护链才能绕过加固保提供的保护,这个无疑提高了攻击者的保护成本。另外,我们认为对应用的加固需要多点和多维度。单纯对应用加壳的方式并不是应用安全的特效药。目前我们正在研发新技术对应用提供多点和多维度的保护。

CSDN:开发者如何使用360加固保对APK进行加固保护?

周亚金:目前我们提供了一个免费的线上加固服务,开发者可以通过该服务提交应用。我们在收到应用后,会对应用进行加固。加固完成后开发者可以下载加固应用,然后提交到应用市场中去。后续我们也会提供更方便和快捷的应用加固服务给开发者使用。

CSDN:应用加固的流程是否就相当于重新打包?是否存在让开发者不可控的因素?比如窃取用户隐私、加载广告等。

周亚金:从流程上来说,加固和重打包比较类似。只是加固过程插入的是保护应用的代码,而攻击者重打包插入的是恶意代码或者广告。不过这里有一个非常关键的差别在于加固后应用的签名。对于使用我们加固服务的应用,加固后开发者可以重新签名该应用然后发布。而恶意的重打包应用是攻击者自己签名重打包的应用。开发者对应用签名这个流程控制实际上表示了对于应用所有权利的主张。

我们认为加固流程并不存在开发者不可控的因素。加固保加固后的应用仍然需要回到开发者由开发者签名后才能发布,签名不符合是不能正确运行的,也就是说开发者对于应用是具有完全控制权的。如果开发者发现加固的代码有窃取用户隐私和加载广告的行为,完全可以移除加固代码。

CSDN:Android应用在设备被root的情况下很容易被动态注入,360加固保是如何解决这一问题的?

周亚金:由于应用完全是运行在不可信的环境中(比如root过的手机甚至是定制过的ROM),那么应用可能被动态注入。因此从技术角度来说,任何一个提供加固服务的产品都不可能做到完全地防止被注入。如果有人宣称能提供完全防止注入的技术,一定是不负责任的夸大。

针对动态注入,加固保所做的就是提高注入的成本。我们对常见的注入方法进行了检测,比如我们有灵活有效的ptrace注入检测机制。一旦检测到应用被ptrace注入,应用就会停止运行。防止动态注入同样是攻防,需要我们不停地升级防御手段。另外,我们对于程序的数据可以做一些混淆,使得在应用被动态注入的情况下,也很难理解程序的逻辑。

CSDN:同行和竞争对手情况如何?相比之下360加固保有哪些优势?现在这一领域格局是什么样的?

周亚金:目前国内做应用加固的厂商也比较多。根据不完全统计,目前大约有10家左右的应用加固产品。相比这些竞品,360加固保产品有着一些优势。首先,我们对于整个移动安全生态的研究进行非常早。这些积累使得我们能更清楚地看到整个移动安全大的态势,而不是简单的应用加固这一个方面。

其次,依托360的安全实力,我们有一些独特的技术优势。这里举一个例子。做应用加固的关键点之一是不能给恶意应用提供加固。这样不是保护了应用开发者,反而保护了攻击者。加固保具有非常强的恶意应用检测能力,能最大限度地防止我们的加固服务被恶意应用开发者滥用。例如墨贝科技曾经对恶意应用采用的加固方案有过一个研究,他们的研究发现,恶意应用样本使用360加固保服务的比例远远低于竞争对手。再者,360具有独特的零增量加固和完整的应用加固保护链条,经过我们加固后的应用体积大小基本不会增加,甚至有所减少。最后,我们正在研发新一代的加固保护技术,提供多点和多维度的保护。

CSDN:开发这款有着怎样的技术或资源门槛?遇到过什么坑,怎么解决的?

周亚金:开发加固应用的技术门槛还是很高的。需要对于Android应用的运行机制具有非常深的理解。比如对于Dalvik虚拟机、DEX和OAT文件结构、动态链接的过程等都需要了然于胸。另外,还需要掌握攻防的技术,因为加固产品需要不停的技术迭代,对于常见的攻击方法进行防护。

除了保护强度以外,最大的坑是兼容性问题。由于Android系统的碎片化和诸多手机厂商定制系统的推出,对加固产品的兼容性提出了非常高的要求。如果被加固后的应用不能运行,那么提供再好的保护技术对于开发者来说也是不行的。为了解决兼容性问题,我们对加固保产品本身进行大量的测试。并不停跟踪Android系统的变化和厂商定制系统的技术演进,把兼容性问题解决在源头。

CSDN:有数据显示在2015年第一季度发现了440267种新的Android恶意应用,并且样本数量在急剧增加,当前是否有行之有效的解决方案?

周亚金:恶意应用问题在Android平台确实比较严重,但要想解决这个问题还需要生态链上的多方联合。首先,应用市场需要完善检测机制,把恶意应用排除在应用市场之外。我们也愿意和各个应用市场合作,共同提供对加固应用的安全性检测。其次,用户可以使用一些专业的安全扫描软件对手机上的应用进行定期扫描。

另外,我们也呼吁手机厂商和安全厂商合作,推出专门提供给安全厂商使用的API,使得安全厂商能提供更深层次恶意软件检测服务。最后,也呼吁用户在下载及使用移动应用时能多一些安全意识。比如参考已有的用户评论、不从不明地址下载应用等。总之,要想彻底解决恶意应用,还需要多方的努力。