专访丰生强:Android软件安全与逆向分析

【专家简介】
 
  丰生强(@非虫)
 
  Android软件安全专家;看雪论坛Android安全版版主,安卓巴士开发进阶板块版主。对Android软件与系统安全有狂热的爱好和独到的见解,对Android系统的全部源代码进行过深入的研究和分析。逆向分析实战经验丰富。在国内信息安全杂志上发表过多篇有价值的软件安全文章,目前就职于国内某Android开发企业,常年混迹于安卓巴士论坛、看雪论坛(ID非虫)。愿与国内安全爱好者共同交流与探讨安全技术。
 
  丰生强(网名非虫)。国内第一本Android软件安全书——《Android软件安全与逆向分析》一书的作者。Android软件安全专家。



 

 
  以下是APKBUS和非虫做的专访内容:
 
  APKBUS:您是从什么时候接触到计算机的,是怎样走上编程这条道路的?
 
  丰生强(网名非虫)
 
  第一次接触计算机是在2000年左右读高中时。当时学校有计算机普及课程,那时候对计算机的神奇功能感到很好奇。第一次知道编程语言是在学校里的小摊上看到的一本讲C语言基础的杂志,当时瞅着这些奇怪的符号,一句也看不懂,只觉得计算机是一种充满神秘感的事物,但此时并没有产生想要学习它的念头。真正开始学习计算机技术(包括编程语言、逆向技术等)是踏入社会后,最初也并非是源于爱好,而是为了发现一份适合我的工作,但随着学习的深入,我发觉我非常喜欢软件技术,慢慢地融入到这个行业之中。
 
  APKBUS:您是从什么时候开始接触Android软件安全技术的?为什么选择学这门技术?现在您刚出版了国内第一本Android软件安全书《Android软件安全与逆向分析》,可以分享一下写书过程中印象深刻的故事么?
 
  丰生强(网名非虫)
 
  我并不是最早接触Android的那批人。我最初听到这个名字时,大伙都叫它“安致”。差不多是在2010年夏天的时候,我想买一台新手机,销售人员是强烈地推荐安致手机,那时候安致2.0系统的那个手机我玩得特别欢喜,回去后就开始查找“安致”系统相关的信息,知道这是一个开放源代码的手机系统后,我更是激动得不得了,自此也开始了对安卓系统的研究。
 
  写书的念头我一直都有,那还是在09年看过一本叫“阴缘伞”的恐怖小说后的感慨,被小说中的剧情以及年轻的美女作家深深地吸引住了!那时候我就对自己说,我要在5年之内写一本书!当时这个念头很强烈,而且到写这本书时一直都没有变(呵呵,好像扯远了)。
 
  在2012年有了比较闲的一段时间时,我终于开始决定要写了。在与人民邮电出版社图灵公司的陈冰编辑沟通后,我更加明确了写作的方向和内容,以及一些写作的技巧和规范,毕竟是第一次写书哈。
 
  写作是一件艰苦的事,你首先要保证自己写的东西有价值、别人能看懂,同时还要尽一切可能做到知识与概念上的正确性。要全身心的进入写作状态,就要避免被外界的琐事打扰。最后,还要有负责任的态度,以及一颗坚持不懈的心,确保能在合同规定的时间完成全稿。对于第一点,我只能说我已尽了全力对自己和读者负责,但水平有限,很难保证自己在理解所有技术时一点纰漏和误解不出。但通过写书,我有个深刻体会,作者写书的过程也是对自己已有知识体系架构的一次最好的完善和夯实的机会。如果大家发现了书中的错误,请及时的联系我,方便在下一次印刷本书时,将书中的错误更正。对于第二个方面,我要感谢我的大哥与大嫂,生活中的琐事他们帮我解决了,写作于是轻松了许多。最后是完稿时间,我在2012年12月中旬就全部写完并交稿了,出版社那边对书稿质量的审查非常严格和负责,终于在2013年3月出版,并在这个月的5号开售了!
 
  APKBUS:随着智能终端的发展,安全问题日益凸显。而开放的Android平台也成了恶意软件攻击的头号目标。研究人员已发现Android上的流行软件普遍存在安全陷阱与安全漏洞,那么,目前有哪些安全问题需要重视?您觉得从技术上应该如何减少这些漏洞呢?
 
  丰生强(网名非虫)
 
  对于手机用户来说,隐私数据与手机话费是用户最关心的话题,所有与这些方面相关的安全问题都是开发人员要关注的。隐私数据的访问与存储都应该是非常小心的,不能够被外部访问。像存储银行卡账号、密码这类对安全要求极高的软件来说,数据加密是必须的,而加密的强度也不应该是通过简单的逆向就能够分析出加密算法的。最后就是软件使用的权限,开发人员应该要控制好组件的外部访问权限,避免造成权限串谋攻击,而软件功能上的实现也要做到只申请适当的权限,不应申请不需要的权限而引起用户的担忧。
 
  APKBUS:Android系统的安全,以及隐私数据的保护是用户一直关注的问题,但现在大量的第三方定制ROM提供了root权限管理工具,遭遇root后,那些重要、敏感、隐私的数据可能被读取。对于这个问题,您怎么看呢?
 
  丰生强(网名非虫)
 
  ROOT手机的用户有这么几类人:
 
  1. 优化系统,追求个性的普通用户。他们一味的追求手机的个性化体现,而安全问题似乎他们关心的并不多,因为安全知识的匮乏,他们是最容易遭受隐私数据泄露与经济损失的用户群体。
 
  2. 极客、ROM爱好者、游戏发烧友。他们通常对ROM制作有一定认识,对安全性方面的知识也有所了解,这里的安全问题主要体现在无法控制第三方软件对数据的访问上。例如:他们无法控制第三方的软件读取本地加密的支付宝账号与密码数据并在解密后发送到网络上。
 
  3. 开发与研究人员。这类人群通常是主动去查找与解决安全问题。
 
  上面的用户是指在没有ROOT管理模块的手机上ROOT手机,而目前第三方的ROM,像CM与MIUI都有自己的ROOT权限管理,这是一个从需求转向实现的人性化功能,带来的好处是必然的,对权限更深入地控制可以大大地加强系统的安全性与可操作性,但相应的弊端也可能存在,针对这些系统查找出的权限提升漏洞明显要比原生的安卓系统破坏性更大。也许唯一值得庆幸的就是目前这类漏洞似乎还没有出现。
 
  APKBUS:Andriod可以说是开源的代名词,一些开发者为了保护自己的成果进行加密,而另一些开发者为了学习,需要进行APK反编译,可以分享下您对加密和反编译的看法么?
 
  丰生强(网名非虫)
 
  加密保护与逆向解密是两种相对又相关的技术,只有懂得逆向解密知识的开发人员才能更好地设计自己的加密保护方案。尽管安卓是一个开放的系统,在国内大多数软件是免费的,但开发这些软件的公司多是商业公司,它们会不惜一切的保护自己的劳动成果,必然会在开发阶段采取各种加密措施来保护自己的软件不被其它人破解或逆向;另一方面,可能出于学习或其它的目的,这些软件往往又是别人破解或逆向分析的对象,分析人员要想从这些加密的代码中找到自己想要的内容就必须突破这些保护机制,于是逆向分析技术在这个时候就会产生作用。很显然,这两种技术都是需求下的产物,作为开发者,你有义务从两个方面都做必要的研究。
 
  APKBUS:您觉得开发者在编译过程中,需要怎样做才能提高系统的安全性?在这一过程中遇到的最大挑战是什么?
 
  丰生强(网名非虫)
 
  您说的编译是指编译系统源码吗?如果是这样,编译系统是无法对系统的安全性造成任何影响的。如果您说的是如何定制一个安全的安卓系统的话,那这个话题就比较大了,目前我跟朋友们讨论出的两种思路是:
 
  1. 加入权限访问控制层。可以在系统权限控制区加上一层自己实现的访问控制,或者改变系统内核加强访问控制,整体上的思路类似SEAndroid,但听说这样的东西会大大影响系统的性能,是否能在具体的产品上实施让人十分纠结。
 
  2. 紧缩框架接口,对API进行更小的发放。这种方法是一种典型的“少吃就少拉”的思路,将敏感的API严格的控制,甚至不对外开发,将系统的开放化降低来保障其安全性。这种思路目前也比较有争议。
 
  安卓系统随着版本的升级,其安全性也在不断的增加,出现的系统权限提升漏洞逐年的减少就是一个很好的证明。有理由相信,安卓系统会向更安全、更稳定的方向上发展的很好。
 
  APKBUS:跟Android比,iOS的隐私威胁一点也不比前者轻。据一项调查,其中60%的iOS App会收集用户的地理数据,54%的App会收集用户的联系人列表,14%的App会抽取你的日程表信息。相对Android来说,数据分别是42%、20% 以及0%。虽然数据也不是那么乐观,但对比iOS还是要让用户安心一些。您觉得怎么能让用户可以对Android用得更放心呢?
 
  丰生强(网名非虫)
 
  这个问题是典型的权限使用过度所导致的。这些敏感的权限是软件功能中不需要使用的,但开发者出于某种目的加上了,这就让用户在一定程度上感到不安。为什么一个新闻阅读软件需要读取我的联系人列表?
 
  如果想让用户安全的使用Android系统与上面运行的软件,开发人员的思维模式可能需要改变,而软件市场对软件质量的审核也需要加强,个人觉得这种现状在短时间内不会有太大的改变。
 
  APKBUS:据知,您以前多年从事Java相关软件的开发,并对Android系统的全部源代码进行过深入的研究和分析,尤其是在安全相关领域经验丰富,能分享下您的一些经验么?在开发生涯中您最大的感悟和收获是什么?
 
  丰生强(网名非虫)
 
  学习是一个系统化且需要循序渐进的过程,任何开发与分析上的经验都离不开长时间的知识积累。在学习一种新的技术、一个新的知识点时需要多做总结、多问为什么,更多的是需要多动手!
 
  开发人员需要多动手写代码,分析人员需要多动手分析。遇到实在不懂的地方,可以在网络上向人请教,或者将问题记录并放下,隔一段时间回来再看,有时候就会一种豁然开朗的感觉,我就是这么学习、这么成长的。
 
  开发是有针对性的写代码。编码逻辑其实不累,累人的是调试代码。很多时候,可能有60%以上的时间(相信很多人都和我一样),在调试着一段段让人烦躁的代码,这个过程是悲催的,因为很多夜晚会被这一个个问题烦得睡不着觉。但只要坚持了,你又会发现它们会在某个喝咖啡的下午被发现,然后被痛快的解决掉,接下来就是迎接下一个bug,经历可能同样的过程再次解决掉它。如此这般,这个过程就像是一个循环。你不知道循环要多久来一次,但每次来时给人的感觉却是一样的。或许这就是让人觉得苦逼的源头吧!苦逼并欲罢不能着。
 
  往期专访:
 
  专访李宁:优秀程序员实现向卓越程序员跨越
 
  http://www.apkbus.com/android-834-1.html

posted on 2013-03-18 13:42  qianqianlianmeng  阅读(1306)  评论(1编辑  收藏  举报

导航