NSC2014爱加密CEO高磊

《APP安全面临的新挑战与解决方案》

前面主要聊的是网络端、PC互联网安全,移动互联网真正开始的时代应该是从iPhone开始,iPhone的爆发带来了整个Android时代整体的爆发。我们知道早期的话,以前我们用智能机时代,可能最好的手机当时就是95到97,HTC最早投入Android阵营以后,像现在的三星,以及我们整个Android的平台已经到了一个非常高的高度,90%大家手里的手机都是Android,对于Android手机这一块,我们会遇到很多的问题。比如App,2008年到2010年左右的时间,我们有一个创意,那个时候我们能够推一个App出来,一个公司很容易起来。在2011年的时候,最贵就是开发人员,2011年iOS和Android的开发人员是非常紧俏的,比如我上大学出来学的是移动,那么工作非常好找,因为爆发了一系列的,从2011年我们整个定义来说,就是大批量的涌现出了很多的App,它的估值就是以用户量来讲的。我们当时看新闻经常是某一个App用户量有多少,是一个多大价值的公司。到了2012年、2013年我们可能逐渐感觉到很多App开始没落,就是说整个时代是到了一个高潮,逐渐到了一个平稳的阶段。我们从一个蓬勃发展,或者野蛮生长的时代过去以后,直接跟随而来的就是安全问题。因为互联网已经十几年了,从PC时代我们知道,当PC活跃的时候,可能也没有人注意安全。但是发展了多年以后,PC的安全已经很成熟了。

我今天给大家带来的重点就是关于移动安全和移动风险方面的分享。不知道大家有没有遇到这样一个问题,就是我们的Android装了一个应用以后会被扣费,或者说装了一个应用以后,很痛苦的一件事,下载了一个游戏会导致玩到中间的时候突然弹了一个广告,我一点就跳了,要么是跳钓鱼,要么弹广告,不点又玩不了,很痛苦。往往这种游戏是非正版游戏,正版厂商不会做这样一个很无效的广告,而且是很影响用户体验的。可能还有一个大家经常遇到的事,我办了一个新手机号,我可能很注意,这个手机号从来不办会员卡,出去签单从来不签,我这个手机号就要很纯洁,就怕收到各种垃圾短信。但是过了一个月以后我还是收到了垃圾短信,到底我这个手机号是从哪里被出卖的?很有可能是某个App把你的个人信息出卖了。因为有很多App可能它的某种盈利手段,因为用户的信息是可以卖钱的。比如一个千万级的应用,他可能不干一些广告方面的东西,就卖你的个人信息,他也是可以赚一定的钱的,当然这是一个非正常化的渠道。

所以说应用对于我们来说,这些盗版应用以及恶意应用,刚才我举的这些算是比较文明的一些盗版或者恶意,我们最直接的就是扣费。大家经常看新闻,某某人因为应用又丢了10万块,某某人因为应用又丢了20万,这是我们经常在新闻上或者说电视上报道可以看到的。可能是没有发生在你的身边,其实这种直接转帐,几万块,十几万金额较大的比较少一点,因为犯罪分子怕这种影响力比较大,偷盗大家几块钱、十几块钱是非常常见的,我们经常自己意料不到。有的时候对于你的扣费,应用一些恶意扣费,不知道大家玩游戏现在还是否被扣费,可能点一块就刷两块钱。通过App来说,你的App装了这些盗版,或者说经过二次封装的应用,可能就直接导致你的整个应用被别人利用,装入广告插件,装入一些扣费,以及把你的信息盗取,或者说你装了以后马上就开始拖垮流量。以前的广告说,装了移动4G,跑一晚上一套房就没有了,这是开玩笑。这只是一个例子,当然现在我们整个流量来说,从3G到4G越来越便宜,但是你这种偷跑的话,对每个人来说都是利益的损失。

为什么会存在盗版?我们可能就要从Android平台来分析。大家知道Android是一个开放性的,苹果走的就是硬件加软件,整个闭环利润非常高。但是Google想打下这个天地,它就把整个Android平台很轻松的授权出去,碎片化非常严重,各大厂商各种定制,各种剪切,它的内核各种剪裁和修改。而且我们也知道,Android的版本非常乱,一直到4.4才算比较稳定,4.4以后,可能Android的碎片化就得到了很大的缓解。Android平台开放的同时就导致了被别人利用,我们做技术的人员知道,Java层的代码是很容易被反编译的,通过一些工具、黑客,通过一些打包,通过一些很简单的工具,就可以做到对你整个App的反编译,如果你没有做任何的保护,可能过程5分钟就OK了。首先对你进行一个拆包,然后又对你进行一个植入,然后再次打包,加一个签名。

国外在去年的时候有这样一批人,他专门做这样一件事情,就是从国外市场拿一些不知名的小游戏,然后做一次简单汉化,有汉化团队,再到国内做一次盗版的打包,一天可能就会产出几百个这样的应用,然后就开始疯狂上市场。它可能手里面有上万个这种App,然后对这个App做一个推送。他的收入也很简单,就是靠这个广告,也没有做很恶意的事情,但是这个收入是非常可观的。你想如果一款App有1万的量的话,那么你1万多款整个App量也是非常大的。所以通过一个广告值也非常赚钱,损失了几方面的利益,版权作者受到了很大的损伤,因为这个游戏、开发成本是我的,为什么你拿出去以后打一个包,这样你就OK了,就可以坐着收钱?而且这个弹的广告,也是会影响我们的用户体验。

今天我主要带来的是游戏和金融这两方面的内容,有导致风险的方面,主要是在这两方面给大家做了一个PPT,想给大家展示。首先给大家讲一下破解,接着我刚才说得如何做一个盗版。我们做盗版其实有两种方法,一种就是对于一个应用静态的破解,另外一个就是动态破解。刚才说的游戏打包,这就是一个简单化的静态破解,这种破解很多打包都可以轻松完成的。其实经过这样五个工具,能够对一个App实行一个简单的二次打包,插入一个广告或者一条应用。通过我们的一些工具,就可以实现一个静态破解。什么是一个动态破解呢?动态我们一般都是指的内存,在PC上我们说动态调试,一般都是指的内存层面的调试。在Android层面来说也同样存在内存,如果我们动态的话,我们可以把内存下载下来,进行一个DEX文件的还原,就是一个代码文件,我们整个代码是在这个里面,普通的黑客可以反编译的,最终可以完完全全拿到源代码。

简单说一下游戏,黑客会对游戏进行一个内部破解。我们知道对于游戏玩家来说,特别是单机来说,有时候可能会提醒我们购买金币,前一段时间微信那两个游戏很风靡的时候,也是让大家付费的。还有就是游戏资源的篡改,还有就是对于游戏WPE的刷量,还有就是内部的篡改。还有就是存档、广告值的修改,还有就是注入恶意代码,篡改游戏规则。

我们拿到一个游戏,单机游戏的付费方式一般有五种,下载的时候付费,iOS通常都是下载付费,在Android层面比较少见,因为大家都喜欢免费模式,我们玩Android游戏付费是比较少的,更多的是iOS上面。我们下载以后关卡付费,要通关以后付费。这是我们手机改变生活,大家知道现在智能手机已经超过了九成,我们其实每天玩手机的时候要超过三个小时,睡觉前一个小时,经常抱着手机睡,有的人女朋友经常要吃手机的醋了。有一个拖垮流量,有骚扰电话。这是一个对于App恶意风险的数量,这就是刚才我说的静态破解,其实我们经过这几个工具,一个简单的步骤,5分钟就可以对一个App进行破解,二次打包。这是APK的动态破解,其实我们通过查找刚才我说过的APK进程,我们可以通过内存还原,拿到整个应用。

要破解应用黑客都做了什么?比如嵌入广告SDK,像国外的那个团队,刚才举例子,恶意代码、扣费,以及替换支付链接、收集用户隐私、贩卖,盗取我们的金钱。这是一个打包党幕后的利益链,这都是刚才我说的例子,他们一些打包党是非自己的应用,但是他会通过这个应用进行二次打包,加入一些非法的东西,谋取黑利,这个地下产业其实是很大的。

说到对于游戏,这是刚才我说的内购。这是国外破解论坛上的破解,就是对某个游戏进行分析,其实SDK是要跟服务端通信,我们可以在SDK和服务端通信的时候,你的访问值我是可以修改的,比如我没有付钱,可以反馈给我的手机说我已经付钱了,这是很简单的。短信支付破解也是很简单,它是要读取你手机的验证码,现在其实支付方面来说,最常用的就是短信的校验码,这是最常见的,我现在的短信校验码是要你读的,不需要你输,这个很方便,但是也很危险,是可以模拟的。

这是对于游戏资源的一个修改,比如他想盗版一个游戏,他可能不会傻傻的把你的Logo和图片还放在上面,他可能会改变Logo和图片,改成自己的东西,进行一个二次封装,才把这个东西放出来。对于WPE刷量,比如要过节了,要送你一个东西,其实可以对这个截获,是被劫持的。这是内存修改,大家可能用过一些工具,比如原来有手机游侠,后面有几个例子,可以给大家看一下。比如烧饼,还有八门神器,这些大家应该很熟悉,玩游戏的话,八门神器应该是很熟悉的,它可以修改你的游戏值,这些对于游戏厂家来说是非常痛苦的事情,他不希望有人打破他的公平性。因为作为一个游戏,要有关卡等等,对于整个游戏是有规划的。如果某些加速器修改了你手机的一个时钟,本来8分钟才可以打一关,我1分钟就打了一关。如果我打怪,本来只剩下一滴血了,一充就是一千,这个游戏的公平性就失去了,导致了整个游戏的可玩性是降低的,直接导致的就是游戏收入的下降,因为他可能需要道具这一块盈利。

对于存档来说,我的游戏可能玩到某一关,但是本地有一个数据是存储在本地上,可能从A手机拷到B手机继续玩,可能打到第三关,又从第三关开始打了,这一块也是需要防护,他们对这一块的安全度也要求很高的。

广告修改,这个图可能看不太清楚。这是一个广告的SDK,这里我们可以看到你发布的ID和应用密钥,这一块就是某一个应用拿到以后,他可以把这一块修掉,本来你是要通过广告赚钱,但是换成了他的广告,你的钱就跑到别人的口袋里了。这就是注入一个恶意代码,这是比较严重的,涉及到扣费的一些东西,这是篡改游戏规则。

下面我对支付说几个例子。大家知道,其实现在两种应用对大家的影响力最大,可能游戏在我们的生活当中,百分之七八十的人都要玩游戏,占的比重比较大。另外就是我们的支付,因为越来越多我们的支付都已经转移到手机上,支付就涉及到我们实实在在的金钱。在移动端,你如果对于一个支付的应用没有做过任何的安全处理,它的安全度是非常低的。举例说键盘,我们经常用Android手机的键盘,这个键盘首先是可以自己开发的,很简单,有的黑客对这个应用,他的键盘是自己开发的,那么你输的任何东西他都帮你记录下来上传,你的整个密码就被盗取了。

这是我举例说一下界面截取,我们输密码的时候大家应该知道,我们现在的密码机制,我们输ABCD的话,会有一秒的停顿,这个第一秒的停顿就是让我们看一下自己输错了以后,输完以后都是以星号返回。这个应用对于监管你的界面,我们默认的密码管理是无效的,我们可以看到,输入A这一秒的同时是可以调用一下系统的截屏,通过五六张截屏就把你的密码拿下来,这样的话整个帐号密码就丢失了。现在Root的比例还是比较高,Root过的手机,本地的数据库,可以直接拿工具拿到,非常简单,所以建议大家尽量少Root。

这是通过一个APKTool的工具,开发这个工具的初衷不是说要做一些非法的事情。但是我们也知道,任何一个事情都是双刃剑。APKTool现在也被广泛的应用于各种拆包进行破解,是很重要的一款APKTool。这里简单举例,我们拿一个”易付宝”的钱包,我们改了一个名字,就改了一个”难付宝”的钱包。

我们可能会有一个疑问,我是通过正版渠道下载东西,可能不会中招,或者有的企业也会这样想,我的很安全,但是大家其实不知道,有时候你的手机可能莫名其妙就会出来一个应用,不是你自己安装的。比如你的手机突然某一天出来一个支付宝,但是你也忘了我到底以前装过没有,可能这个支付宝就是一个伪装的支付宝,或者是某些其他的支付,那么可能拿过来就支付了。这样就导致一个黑客有很大的空间,一个应用被破解之后,可能就安装到手机上。对于整个应用来讲,可能在出厂之前,发布之前做好安装体系的话,就不会存在这个安全风险。

这是一个系统日志,作为程序员来说,有的可能粗心,或者不是很在意这些,他可能就是Log没有关,或者Log没有清理,别人可能通过你的Log就可以直接看到你很多信息,进而对你整个内部的一些算法,比如对密码或者是支付有一个加密,以及你的位置,其实都是可以对你的Log有很大的帮助。这是我们写得不太规范的一个Log,可能直接输出的Log没有管。另外就是我们统一管理的Log,也存在一些风险,可能发布以后把Log全关了。但是你的应用被打开以后,这个是可以被打开的。

这是一个代理抓包,这个大家都比较熟悉,应该是和PC端是一样的,我们在网络端会进行抓包,通过工具进行分装和拆包。比如你的工具,让你连接到了一个Wi-Fi,但是这个Wi-Fi给你发了一些东西,并不是你原来想要的东西。这是一个协议的抓取,我们通过连接以后看到,你的帐号名、密码,通过工具是完全可以拿到的,可以调试得到的。

其实今天也是想重点把我们的一些危险给大家讲,下面给大家讲一下爱加密会做哪些防护,大家可以在安全圈当中共同讨论一下,共同学习。对于一个App来说,整个规划是三重方案,首先要做一个安全的检测,我们会对它进行一个安全的保护,我们有一个渠道检测,会对整个市场正版、盗版做一个监测。这是我们的分析平台,可以对外进行访问的,大家到我们的管网就可以看到,我们这是推出的独立的漏洞分析平台,我们看到会对文件检查、漏洞扫描,还有是否有后门,而且可以一键的生成一个报告,这一块对于开发者来说其实可以省去很多精力。这是对于某一个应用检测以后的大项,包括是否有内嵌广告,有这种风险。其次就是敏感权限,还有你的调试信息。包括你的数据、源码以及敏感信息,广告SDK这些。一般我们生成一个报告大概30页左右,我们会定义源码,这一块会有一个代码片段,这是我们整个安全检测系统帮你生成的,在哪一块不安全,可以帮你定位一个代码,你是可以看到的。

针对应用保护,爱加密提出了DEX三重保护,现在移动端加壳的公司也不止我们一家,是不是只做了一个加壳呢?单纯的一个加壳无法说是绝对的安全,说白了,任何一个安全公司都不可能一个环节做到百分之百,其实我们尽量的做到整个环节的安全。爱加密我们可以看到,DEX就是一个三重的保护,在内存方面我们有一个DEX指令的动态加载,最后我们在源码又做了一层自己的混淆。加壳这个概念并不是移动端才有的,在PC端其实加壳已经由来很久了。当移动端爆发以后,加壳被应用到移动端,对于整个APK又做了一次封装,会自动有一套自己的一个机制。这样的话,别人想破解我们外面这一层壳是非常难的。我们可以看到一个简单的对比,就是说加壳后,你通过一个反病毒工具打开以后,你的文件是全部都没有的。

这个动态直列加载,就是一个调试。我们看左侧的信息是没有的。单纯一个DEX的话是一个静态的安全,在动态的时候,别人通过一个动态的工具调试,如果你这一块没有做到的话其实是无效的。我们在这一块做到一个方面,DEX指令动态加载,就是说原来的加载是通过APK整合加载内存。现在可以使用的技术就是加载是按照方法力度来进行的,而且加载位置不是一块。这样就导致别人不会拿到我这一块的内存把我Down下来,然后我再还原,保证我的应用就拿到了。这是我们用DEX动态加载一下,右边是有方法,左侧没有方法,都是空的。

DEX高级混淆,大家都很熟悉,国外比较有名的一些公司做的都比较成熟,他们专门就是做混淆的。但是在移动端其实没有人来做这个事情,因为混淆是针对Java层来说的。爱加密针对Android做了一套混淆,因为Android里面有很多特殊的东西,比如我们有要资源ID和资源引用,作为Java来说我们不会用到这些东西,所以我们会做一些特殊的处理。这是加密之后我们可以看到一些专门的类名和一些值,有一些ID等等都是经过了一些修改。这是一个ida反编译加密后的so库,我们可以看到整个反编译以后是无效的。

下面我说一下什么是渠道检测。渠道检测就是我们现在监控了国内500多家大大小小的市场,我们会对这个应用进行一个对比。当我们上传一个应用以后,比如我上传一个A应用,那么我会对整个市场进行监控,如果又出现了一个A,跟你的名字一样,但是它的签名不一致,或者说有一些恶意的东西,我们会立马通知到这个A客户,帮你实现从运营渠道方面对于安全的防范。我们这个更新是每天都会对渠道数据进行更新,而且会对正版和盗版进行一个对比。这是一个简单的游戏截图,前一段时间大家也玩过那个最坑爹的游戏。我们会发布一些应用,正版的一些详情。这里就出现了盗版,我们可以看到,这里有四个盗版。我们还会对盗版进行分析,我这个截图没有截完,盗版的话你看他增加了哪些权限,增加了哪些东西,这里我们都可以分析出,在后台都可以让他看到。

这是一个游戏解决方案,我们会对它进行一系列的漏洞分析以及一些定制的需求,防止反编译和一些内存修改器的修改,防止资源文件的修改等等。我们对金融这一块来说,银行和游戏也是我们一个很大的客户群。我们对银行专门做了一些定制的保护方面,因为时间关系,这一块我就粗略讲一下。

简单介绍几个服务案例,崩坏学园大家都玩过,流水也是千万的,今年流水千万的游戏很多,月流水五千万的都有了。以及平安银行、郑州银行,还有唱吧,大约也有1亿用户以上。通过一个应用,可能就能给大家反馈一个问题,爱加密整个兼容性很好,像唱吧这样异地的用户,如果金融性有问题的话,可能别人不会使用。另外安全强度非常好,如果安全强度不好的话,银行不会使用。

我刚才介绍了整个风险,以及到爱加密的安全防护,我都做了一个简单的介绍。大家如果有需求的话可以到我们管网注册,有技术交流可以直接找我,希望能够有机会交流,谢谢大家!

上一篇:NSC2014百度资深架构师周晓波

下一篇:沈逸:沉着应对美国网络安全新攻势