开发人员正确实施加密机制的比例仍偏低

本文讲的是开发人员正确实施加密机制的比例仍偏低,尽管过去几年当中利用加密机制打击安全漏洞的举措已经迎来了显著推进,但开发人员缺乏专业知识以及相关库过于复杂的状况仍然导致多数商业应用程序并未得到加密机制的有效保护。

  这一问题的规模显然不容忽视。目前加密问题已经成为各行业当中最为常见的安全缺陷类型,应用程序安全厂商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应用程序存在着同样的问题。

  在过去几年当中,消费类应用当中的加密机制已经得到了极大改善,这显然是为了回应相关情报机构对于个人信息的大规模网络监控。而在企业级软件领域,加密机制的强调亦是为了应对愈发突出的数据泄露事故。然而每个人,从普通民众到政府机构,似乎都只停留在表面——即认定加密机制确实非常重要,但并不了解如何才能真正在产品当中加以实现。

  如果这种状况得不到改善,那么我们将继续生活在虚假安全感的笼罩当中。我们会将加密机制内置在一切开发成果当中,但网络间谍与潜在的恶意人士仍然有能力窃取到我们的敏感数据。

作者:核子可乐译

来源:it168网站

原文标题:开发人员正确实施加密机制的比例仍偏低

时间: 2025-01-02 06:12:36

开发人员正确实施加密机制的比例仍偏低的相关文章

容器网络:专为开发人员设计的SDN系统

越来越多的人关注新型容器网络软件,来运行可扩展的云应用.就像我们看到的,网络可以通过很多方式连接到容器,尽管最终选择哪个容器还不确定,但是他们提供很多选项来满足不同的基础设施. 容器网络和传统的SDN有什么区别? SDN系统还处于发展阶段.它经常被创建为物理网络的逻辑版本,通过抽象的端口.网络或子网,又连接到逻辑网络交换机,并且连接到虚拟机上.作为服务项目的OpenStack网络Neutron和其它SDN软件,都支持这一概念.这对那些使用虚拟机的人来说有很多优势,因为他们的工作负载可以镜像到物理

开发人员应用软件安全编码的最佳实践

信息安全并不仅仅是保护计算机.网络.信息免受攻击和危害.应用软件缺乏安全性日益成为许多企业的一种巨大漏洞!无论是软件开发者,还是安全专家,在与攻击者斗争的过程中,永远不可能一劳永逸地解决安全问题.因为攻击者 往往富有创造性并且坚忍不拔,还有金钱的巨大诱惑.除了利用操作系统的漏洞之外,攻击者还喜欢利用应用软件的漏洞,而软件工程师们似乎 忽视了这一点.软件安全的目标是什么?是构建更好的.无缺陷的软件.一般情况下,应用软件都会存在许多缺陷,其中的相当一部分都成为安全问题的源头.在开发软件时,将安全性牢

实施项目--为什么开发人员一直在抱怨需求变动

几年前的某个时候,公司大伙都等着下班我却等着晚上加班,因为产品经理对产品的某个功能进行了调整和修改,我必须加班将其修改完善.对于这种事情我已经数不清了,产品经理的每一次变动都得让我们技术部门的同学们加班到深夜甚至到天明,如今回忆起来历历在目!今天这个文章我们不谈论是谁的责任,也不去抨击产品经理的无能,说说技术人员为什么总是在抱怨需求在变动这些事, 希望大家踊跃讨论.   一. 抱怨现象 最近我做了实施人员,经常到各个客户工厂去给他们实施项目,在这个过程中我了解到了软件的真实使用者,在这之间我就成

MIS系统开发利器,实施、维护人员自定义报表的福音,AgileEAS.NET SOA平台动态报表指南

一.前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的.      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC.ORM.SOA.分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的

面向.NET开发人员的Ajax 技术平台策略(3)

ajax|策略|技术平台 基于Ajax 架构的Web应用框架 之前我提到过"似Ajax" 的架构,现在我要说的Ajax框架也就是指专门针对这种Ajax架构而提供的框架.目前,我还没有听说过特别好的这个领域的流行框架.但我知道我的身边,.NET领域,J2EE领域或PHP平台上都有这样的框架和应用,我认为,正是因为有很多这样应用,所以Ajax才会像某个模式一样,被撰有一个专门的名词.不过我感觉Ajax 渐渐变成了Ajax feature的代名词,变成了XMLHTTP的代名词,成了异步通讯,

9个开发人员的秘密可能会让您的业务陷入困境

在当今的科技界,开发者为王,这是我们所知道的.但是,如果你让开发人员管理你的应用程序开发策略,你可能会感到吃惊,因为我们还有些话没说. 应用程序开发可以成为您业务的关键因素,而可促进开发出市场主导的移动端应用程序的奇才或只是能编写正确的定制代码来使业务发展起来的奇才,这些人都非常值得公司进行投入.但事实是,我们的开发人员并不总是这样直率,并且有一些想要保守的秘密. 事实上,我们没有告诉你事情的全部,这都是可以理解的.毕竟,你是老板.难道你会把所有事情都告诉老板吗?如果您是首席执行官,您是否会在董

C#开发人员应该知道的13件事情

本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助. 1. 开发过程 开发过程是错误和缺陷开始的地方.使用工具可以帮助你在发布之后,解决掉一些问题. 编码标准 遵照编码标准可以编写出更多可维护的代码,特别是在由多个开发人员或团队编写和维护的代码库中.例如FxCop,StyleCop和ReSharper等,就是常用的实施编码标准的工具. 开发人员:在压缩代码之前,请使用工具仔细检查是否违反了标准,并且对结果进行分析.使用工具发现的代码路径问题,不比你预期的少. 代码审查 代码

yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]

在定义API的时候,对于一些返回集合对象的方法,很多人喜欢将返回类型定义成IEnumerable<T>,这本没有什么问题.这里要说的是另一个问题:对于返回类型为IEnumerable<T>的方法来说,我们可以使用yield return的方式来输出返回集合的元素.但是如果我们不了解yield 关键字背后的实现机制,很有可能造成很大的问题. 这是一个WCF相关的问题,我想99%的人都有可能会犯这样的错误--即使你对yield了解得非常透彻.闲话少说,我们通过一个简单的实例来说明这个问

防止开发人员获取到敏感数据(SQL Server的数据加密简介)

原文http://www.cnblogs.com/guogangj/p/3365614.html 背景 有时候,我们还真的会碰到这样的需求:防止开发人员获取到敏感数据.也许你觉得很简单,把开发和运营分开不就可以了吗?是的,如果公司有专门的运营 团队的话,但对于很多小公司来说,几个人的开发团队就兼顾了需求分析.设计.开发.测试.调试.部署和运营了,数据库密码知道,程序代码全有,怎么办? --必须对数据库里的数据进行加密,这是唯一的办法. 也许你还是不明白,什么东西需要瞒着我们了不起的程序员,好吧,