这一问题的规模显然不容忽视。目前加密问题已经成为各行业当中最为常见的安全缺陷类型,应用程序安全厂商Veracode公司在本周发布的一份报告当中指出。
这份报告以静态、动态与人工漏洞分析作为统计基础,对企业环境中所使用的超过20万款商用及自主开发的应用程序进行了调查。
加密问题在历史角度看也属于排名较高的常见缺陷,具体包括跨站点脚本、SQL注入以及目录遍历等状况。其中包括不当的TLS(即传输层安全)证书验证、明文存储敏感信息、敏感数据加密机制缺失、硬编码加密密钥、密码强度不足、熵值不足、非随机初始化微量以及加密签名验证不当等等。
大部分受影响的应用程序都属于Web类型,但移动应用程序在其中也占据了很大比例。
开发人员目前已经在将大量加密机制添加到代码当中,特别是在医疗健康与金融服务等领域,但实际效果却比较糟糕,Veracode公司CTO Chris Wysopal指出。
许多企业由于考虑到数据保护的相关规定而使用加密机制,但报告表明相关开发人员并没有接受必要的培训来实现这些加密举措。
“这证明了正确实现加密机制有多么困难,”Wysopal表示。“这是一个很常见的问题,但大多数人都没能给予足够的重视。”
很多开发人员自以为掌握了加密机制的实现方式,但他们并没有接受过这方面的专业培训,并因此拥有一种虚假的安全事情,他强调称。因此,即使最终的应用程序开发成果当中包含加密机制,攻击者仍然能够找到获取敏感数据的可行途径。
还有更糟糕的情况:开发人员有时会决定创建自己的一套加密算法,而其结果几乎注定会以失败告终。Veracode公司此次仅仅测试了使用由Java、.NET等编程语言或者OpenSSL等主流库所提供的标准加密API(即应用程序编程接口)实现的加密机制。
Java及.NET等编程语言尝试帮助开发人员免受C语言等陈旧语言当中固有问题的影响,安全漏洞情报企业Risk Based Security公司首席研究人员Carsten Eiram在邮件采访当中指出。
“不过许多人认为,由于现代语言更易于编程并保护程序员少犯错误,因此开发者往往会因此而拥有一种虚假的安全感。在此基础上,他们会在编码过程中缺乏对安全性的考量,这意味着增加发生其它类型问题的风险,例如设计与逻辑错误。未能执行正确加密机制的状况就属于这一类,”Eiram指出。
很多程序员认为,他们只需要接入到加密库即可一切无忧,但如果不能切实了解与之相关的各个层面、加密机制往往很难稳定起效——具体包括正确检查证书、保护加密密钥、使用适当的密钥大小或者使用强大的伪随机数生成器。
“这一切最终都要归结于对程序员的良好培训,只有这样才能保证他们确切理解实现强大加密机制过程中可能面临的各类陷阱,”Eiram表示。
不过这并不仅仅是开发人员的过错。巴尔的摩市约翰霍普金斯大学密码学工程教授Matthew Green认为,很多加密库从可用性角度来看都“非常糟糕”,因为它们往往是由解密者负责设计与开发的。
“强迫开发人员使用这些加密库就像是期望有人能凭借着汽车驾照驾驶飞机一样,”他在邮件采访当中表示。
Green认为,让加密软件拥有更出色的易用性——在理想情况下,最好能让人们意识不到它的存在——要比将开发人员培训成加密专家更简单也更有效。
“我们并不指望开发人员能够重新实现TCP(一项核心互联网协议)或者编写代码时重写整套文件系统,”他指出。“事实上,现有加密API的糟糕水平只是加密机制低下现状的一种反映,而从宏观角度看,安全性水平的成熟程度也要比其它技术更差。”
不少加密库方案的作者本身也很清楚,他们拿出的成果本应该更具易用性。举例来说,去年6月的OpenSSL项目发展路线图就计划在一年内降低API复杂性并提供更理想的说明文档。
即使不再强调某些加密库过于离谱的复杂性,Eiram仍不认同开发人员需要作为密码专家才能正确实现加密机制。
Java与.NET当中的加密API——这些编程语言被广泛应用于Veracode报告中的大部分应用程序当中——在设计思路上专门面向开发人员,而且能够在应用程序开发过程当中为其提供大部分必要的加密功能,Eiram指出。
“虽然包括加密库在内的各类库能够拥有理想的易用性当然很好,但程序员在使用它们的过程中至少需要从高级层面了解其工作机制,”他表示。“我会把这种状况视为一条双向通道:让加密机制尽可能简单,但程序员在开发中又需要进行适当的自我培训、而不能寄希望于他人的引导。”
除了开发人员缺少加密专业知识以及某些加密库复杂程度过高之外,Green补充称忘记在产品测试之后开启安全功能则是另一大常见的失败根源。
举例来说,开发人员通常会在测试环境当中关闭TLS验证机制,这是因为他们并没有在自己的测试服务器上安装有效的证书,但在将其推向生产流程时、却又往往忘记将其重新开启。
“几年前曾经有一篇论文指出,相当一部分Android应用程序存在着此类问题,这主要是由于界面混淆与测试错误所造成,”Green表示。
未能正确验证TLS证书在Veracode公司此次测试的应用程序当中亦非常常见,Wysopal强调称,而卡内基梅隆大学的CERT协调中心也发现大量Android应用程序存在着同样的问题。
在过去几年当中,消费类应用当中的加密机制已经得到了极大改善,这显然是为了回应相关情报机构对于个人信息的大规模网络监控。而在企业级软件领域,加密机制的强调亦是为了应对愈发突出的数据泄露事故。然而每个人,从普通民众到政府机构,似乎都只停留在表面——即认定加密机制确实非常重要,但并不了解如何才能真正在产品当中加以实现。
如果这种状况得不到改善,那么我们将继续生活在虚假安全感的笼罩当中。我们会将加密机制内置在一切开发成果当中,但网络间谍与潜在的恶意人士仍然有能力窃取到我们的敏感数据。