漏洞分析与软件安全保障已成为软件业发展当务之急
信息安全环境越来越复杂,我们第一个阶段做信息化的建设,第二个阶段做信息化过程中的安全问题,到现在经过近十年的发展为什么说我们现在的信息安全环境越来越复杂?现在黑客的攻击越来越容易,攻击效果会越来越好。现在漏洞的利用速度越来越快。
我们来看一组数据,软件开发过程中通常会有大量的全国政协,普通软件工程师一般的缺陷是50-250个。国外的一组统计数据,左边这个图是100万个功能点,普通的项目的缺陷的数据是2000多,缺陷的数据是3000多,平均是15000多。右边图表明的是缺陷发生的概念,100万个功能点,应用软件占45%.所以漏洞和软件的缺陷一定是普遍存在的,它的出现有其必然性。
互联网时代我们投入大量的经费、人力、物力,,但是互联网时代的信息安全的根源在哪里?互联网的开放性和互联性决定其先天就是一个不安全不可信的计算环境。网络中和主机上的软件普遍存在漏洞,使得普通网民缺乏信心。软件作为一种"手工制品"存在缺陷难以避免,软件漏洞成为当前信息化发展的焦点问题,甚至可以说引发了下一轮"软件危机".实际上软件开发过程是人的语言转换过程,把人的思想经过若干个步骤分层次由不同的人员把它转换成软件,实际在这个过程中任何环节都可能引起漏洞。
这些年除了我们信息化过程中投入很多资金和精力做防火墙等等这样一些反恐的防护设备。最近几年我们国家对信息安全非常重视,做了很多信息安全的工作,但是到现在信息安全的问题还有很多没有问题。软件的核心问题是软件自身的漏洞,软件漏洞它实际上是一种可持续的,它的根源在于它的前世,它的前世就是在软件编制过程中的源代码。所以当前我们应该把信息安全不仅仅关注于基础运营之后事后的检测,更应该关注我们在软件开发或者软件交付的节点做质量安全把关。如果从源代码深层次把关的话,一方面可以查到根源问题,第二可以在软件开发生命周期的越早期发现问题。当然软件中的源代码中可能会发现一些新的其他软件或者其他方式的产品。
这里有一张图,同样说明一个问题,就是我们在软件整个需求设计过程中,缺陷管理成本与软件生命周期有关系,越往后我们的损失会越大。当然我们从源代码层次来找软件缺陷,这里面有一些理论说明可以有效找到代码的缺陷。比如说美国国防安全部和开源合作做了一些项目,美国这边有一个SAMATE的项目也说明这个行业在高速发展过程中。
谁来为我们的安全把关?这个软件是由谁来开发的?当前业界有一个OEM的问题,我们并不是说OEM不好,关键是OEM过程中本身有没有关注软件的把关。我们来看一下美国的一组统计数据,这个统计数据都是一些包括恶意代码等等,这个比例是比较高的,这个说明什么问题?这个不是普通软件的因为缺陷所带来的漏洞,这个带有人为的恶意的行为,往往这种危害比我们前面谈到软件本身质量的问题大得多。
那么如何解决软件安全的保障?第一个是要考虑来源安全,就是这个软件是不是作为研发。第二个是质量安全,我们在开发过程中和设计过程中,通过一些标准流程,通过一些安全开发的工具,去保证我们的软件质量比较高,避免一些不必要的漏洞。第三个是行为安全,人为设置的安全漏洞,如逻辑炸弹、隐藏管理接口等。除了这三个方面我们需要让用户得到安全信心以外,所有这些观点必须贯彻到信息系统的建设中。
前面说到了国外公司对自身软件安全把关上存在很多不足,国内软件企业相对来说在软件安全的把关上所做的投入也是不够的。所以第三方的在软件使用之前,或者在信息系统交付之前,对软件有一定的把关尤为重要。我们可以看一下这张图,实际上我们通常所关注的是安全机制和安全性能,我们根据一定规则一些预期的行为。实际上对漏洞的检测是一些对预期的行为,因此我们应该把传统的工作深入到深入的漏洞分析。回顾到前面所谈到的,包括源代码本身的安全,包括是不是自己开发的,包括在开发过程中的一些培训,包括开发过程的一个安全