Android平台中的安全编程

chesejiaofu 2014-05-09

CERT安全编程团队,隶属于卡内基梅隆大学软件工程学院,最近发布了Android平台上Java应用的安全编程指南

CERT在该领域已经有所积累,并且在2013年发布CERT Java安全编程规范,后来出版Java编程指南:可靠安全编程的75条建议一书,该Android指南是对以上工作成果的拓展和延伸。所以,在新版Android编程规范和指南中,一部分是参照已有的Java规范指南,当然也少不了与Android相关,致力于解决移动相关问题的新规则。

Lori Flynn是发起CERT Android编程规范和指南的研究人员之一,据她所说,“其他地方也存在这样的Android安全编程建议,但是我们发现这些建议都不完整并且分散在网络的各个角落。”CERT研究人员采用以下三种方式制定了新版Android编程规范与指南:

  • 挖掘CERT已有的安全编程规范;
  • 研究已有漏洞数据库,包括国土安全部的国家漏洞数据库等;
  • 研究目前与安全相关的文献,比如,研究论文、在线文章以及安全会议演讲等。

所有规范和指南都可以在CERT Wiki上获取。每条记录以简要概述开头,然后描述此条规范所要解决的安全问题,并且包括违规代码案例。Wiki中还提供了基于严重程度的评分、漏洞被恶意使用的可能性,以及如果在代码中发现漏洞,修复漏洞的成本等。

InfoQ联系了Lori Flynn,并针对CERT Android安全编程规范和指南采访了她。Lori目前在CERT的工作不仅包括完善新版安全编程规范,还包括对移动应用进行组合性静态分析,检查是否 符合Android平台的数据流规则。她工作经历丰富,包括网络安全研究,基于标准的安全分析,以及合作开发了一种检测多态程序的新型静态分析方法,并且 取得了专利。Flynn在圣克鲁斯获得了加利福尼亚大学的计算机科学博士学位,她的研究方向是移动自组网络的安全多播路由协议。

Lori,您能简要介绍一下Android安全编程规范和指南的目标受众有哪些吗?

我们制定的Android安全编程规范和指南目前主要面向使用Java语言的Android应用开发人员。但是,我们也在着手制定适用于基于底层 (非Java)语言如C和C++所开发应用的安全规范。我们的目标是帮助开发人员构建可靠安全的系统,但是这些规范和指南对实现其他质量特性如可靠性也大 有裨益。

所有希望保护客户系统免受危害的组织或个人,在其开发人员遵循规则和指南并产出安全代码后,都会从中受益。金融、卫生和防御系统都必须小心保护其应 用所处理的信息。有些应用处理的数据非常敏感——比如,用户的信用卡信息、位置、短信、联系方式和照片。除了对用户造成潜在伤害外,非安全代码可能会使处 于金融风险中的开发人员走上法庭,也可能使整个公司失去公众信任(和导致销售损失),或导致困难局面,使给公众造成不安全印象的单应用销售乏力。

总而言之,知晓Android安全编程规范和指南,不论对于大型组织还是独立应用开发者都会有所帮助。软件开发管理者、软件需求方,或者其他软件开 发和需求专家可以将安全编程规范作为禁止性需求的参考。教育工作者也可以通过该指南教会学生安全开发Android应用的方法。

据您所知,移动相关人员在碰到应用安全问题时面临的主要挑战是什么?在移动领域,您是否知道某些特定安全相关问题?

除了已知的公认安全编程问题以及规范和指南给出的修复方法外,无法有效把控应用的数据去向也是我们面临的挑战之一。信息泄露如此泛 滥,Android应用之间的相互影响是主要原因。我们目前正在研发静态分析工具,用于检测和消除这些漏洞。有了这些工具,用户——包括个人和组织——将 更有信心解决部分应用的数据泄露问题。然而,尽管我们目前的工作有效促进了安全分析的发展,但是还是无法解决底层代码或反射面临的安全问题。数据流安全问 题同样非常严重,所以有许多工业界和学术界的研究人员在这方面倾注心血。

另一个问题是可用性。实际上在我们深入分析数据流时,应用需要给用户展现对应选项,还得让用户(开发人员用户排除在外)容易明白这些选项的意义。Adrienne Porter Felt(Google)已经发表了若干非常优秀的研究论文,分析了用户界面安全问题并给出了修复建议。她的工作涉及面向开发人员的可用性问题,比如与权限相关的不恰当API,可能导致正常开发人员的权限过大,进而被恶意应用利用。

Android安全还面临另一个问题,在Google修复Android暴露的安全问题后,因为各种原因,移动运营商可能在很长时间后才将安全更新推送给用户。这就导致在这段时间内,与应用相关的数据将面临巨大的风险。

遵循Android安全编程规范和指南,对应用有哪些好处?您有没有这方面的案例,遵循指南后,应用能够避免以前遇到的安全问题?

如果我们能够严格遵守Android安全编程规范和指南,数据和系统会更安全。举个例子吧,DRD00-J禁止将敏感数据保存到SD卡中,因为其他应用可以读取SD卡,DRD01-J限制内容提供者中敏感数据的权限等。Skype的Android应用曾经出现过一个漏洞,该应用将联系信息和个人用户信息保存在未加密数据库中,并且没有实施权限控制。如果应用遵守DRD01-J就可以避免该问题。

为了改善语言的安全现状,SCI(Secure Coding Initiative)发起了开发编程语言国际规范的工作。该规范致力于防范代码漏洞,并充分利用在研发CERT安全编码规范和一致性测试中所收集的信息。

您对应用CERT安全编程规范和指南有哪些建议方法,工具、流程或其他方法都可以?感兴趣的开发人员或组织要如何开始呢?

我建议开发人员首先通读我们的技术报告,移动源码安全分析实验室:Java和Android安全编程规则和分析,然后浏览Android安全编程首页。我们打算创建单独的CERT编程规范,就像其他CERT安全编程规范一样可以通过CERT编程规范Wiki主 页访问。该首页概述了我们目前在研发Android安全编程规范方面的工作:分析(适用性)和扩展已有Java规范;分析(适用性)和扩展Java指南, 虽然该指南还在制定过程中;制定面向Android的安全编程规范,但该规范并不一定只针对Java语言。查看出现在首页中的三个主题链接,这是 Android安全编程规范制定中的主要课题。

接下来,我建议开发人员浏览一遍DRD规范和指南,并考虑如何将它们应用到应用编程中。然后,我建议大家阅读Java CERT Oracle安全编程规范(Addison-Wesley Professional, 2011)中适用于Android的Java规范,包括Wiki,关注该书相关的主题。这些规则是安全应用必须遵守的,这也是将其放在指南前面的原因。读完规则后,以同样方式阅读Java编程指南:可靠安全编程的75条建议(Addison-Wesley Professional,2013)。虽然我们不一定能够立即将书中列出的规范和指南应用到工作中,但是这些知识精华会印入我们的脑海,当开发应用需要 用到这些规范和指南时,我们可以再仔细查看。另外我们值得做的是订阅安全编程简报,LinkedIn上的安全编程讨论,还有安全编程wiki中的提醒,当增加新规范和指南时会立即提醒。这些渠道有助于开发人员及时知晓安全方面的修复程序。

您在Android安全编程规范方面的工作完成了吗?或是您有没有设想将来涉及其他领域?

我们在Android安全编程指南方面的工作还在继续。另一个我们特别想研究的领域是分析CERT安全编程指南在基于C和C++的Android应 用中的适用性。我们已经有了初步的分析,但是要检验Android底层编程接口如何影响已有编程规则的适用性,还要付出更多努力。同时,我们也会完善应用 于反射的初步规则和指南。

你们的团队还有其他类似的项目吗?

相关推荐

MaQing / 0评论 2013-06-19