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

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

  《Android软件安全与逆向分析》的作者,国内第一本Android软件安全书。

专访丰生强:Android软件安全与逆向分析_第1张图片


  以下是APKBUS和非虫做的专访内容:

  APKBUS:您是什么时候接触到计算机,怎么走上编程这条道路的?

  丰生强(@非虫):第一次接触计算机是在2000年左右读高中时,当时学校有计算机普及课程,那时候对计算机的神奇功能感到好奇。第一次知道编程语言是在学校的小摊上看到的一本讲C语言基础的杂志,当时看着这些奇怪的符号一句也看不懂,觉得计算机是一种充满神秘感的事物,但当时也没有想学习它的意思,真正开始学习计算机技术(包括编程语言、逆向技术等)是在踏入社会后,最初并非因为爱好,而是为了找一份适合我的工作,只是随着学习的深入,我发觉我非常喜欢软件技术,也慢慢的融入到了这个行业中来。

  APKBUS:您是什么时候开始接触Android软件安全这方面的?为什么选择学这些?现在您刚出版了国内第一本Android软件安全书《Android软件安全与逆向分析》,可以分享下写书过程中印象深刻的故事么?

  丰生强(@非虫):我并不是最早接触Android的那批人,最先听到这个名字时,大家伙都叫它“安致”,是在2011年夏天的时候,想买一台新手机,推销员是强烈的推荐安致手机,那时候安致2.0系统的那个手机我玩的特别的欢喜,回去后就开始查找”安致”系统相关的信息,知道是一个开放源码的手机系统后,我更是激动的不得了,自此也展开了对安卓系统的研究!

  写书的念头我一直都有,那还是在09年看过一本叫“阴缘伞”的恐怖小说后的感慨,被小说中的剧情以及年轻的美女作家深深的吸引住了!那时候就对自己说,我要在5年之内写一本书!当时这个念头很强烈,而且到写这本书时一直都没有变(呵呵,好像扯远了)。在2012年比较闲的一段时间时,我终于开始决定要写了!在与图灵出版社的陈冰编辑简单的沟通后,我就明确了写作的方向以及内容,在5月中旬的时候,我就开始收集资料开始写作。写作是一件辛苦的事,你首先要保证自己写的东西有价值,别人能看懂,而且要尽量做到知识点与概念上的正确性;其实,要全身心的进入写作状态,还要避免被外界的琐事困扰;最后,还要有负责任的态度,以及一颗坚持不懈的心,保证自己能在合同规定的时间完成全稿。对于第一点,我只能说尽量,毕竟我的技术水平十分有限,很难保证自己在理解某些技术时自己会产生歧义,这样,当我把这些内容传达给读者时,那就是非常恐怖的!在这里,我只想说,如果大家发现了书中的错误,请及时的联系我,方便在下一次印刷本书时,将书中的错误更正。第二个问题要感觉我的大哥与大嫂,生活中的琐事他们帮我解决了,写作于是轻松了许多。最后是完稿时间,我在2012年12月中旬就全部写完并交稿了,出版社那边对书稿的质量审查是非常严格的,前后都审了3遍,终于在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

本文为APKBUS原创内容,转载请保留本文链接。

你可能感兴趣的:(专访丰生强:Android软件安全与逆向分析)