信息安全并不仅仅是保护计算机、网络、信息免受攻击和危害。应用软件缺乏安全性日益成为许多企业的一种巨大漏洞!
无论是软件开发者,还是安全专家,在与攻击者斗争的过程中,永远不可能一劳永逸地解决安全问题。因为攻击者往往富有创造性并且坚忍不拔,还有金钱的巨大诱惑。除了利用操作系统的漏洞之外,攻击者还喜欢利用应用软件的漏洞,而软件工程师们似乎忽视了这一点。
软件安全的目标是什么?是构建更好的、无缺陷的软件。一般情况下,应用软件都会存在许多缺陷,其中的相当一部分都成为安全问题的源头。在开发软件时,将安全性牢记在心,有助于应对风险并挫败攻击;在成功的攻击面前,这样做也有助于更快地从灾难中恢复过来。
负责软件开发的项目管理者需要认真考虑其开发团队的知识、技术、技能、能力。构建安全的最佳途径是在编码和测试时就考虑应用软件的安全性。那么,有哪些成熟的做法可有助于软件开发安全呢?
1、培训软件开发人员,实施特定语言的安全编码实践并确保其应用。
2、使用静态分析和其它的代码分析工具来执行源代码的检查。
3、理解软件安全测试与传统的软件测试之间的区别,并将其反映到软件测试中。
4、执行基于风险的安全测试,查找常见的错误、可疑的软件缺陷,并实施减轻风险的方法,确保其运行。
5、使用一种确定的过程,确认安全需求的原因、安全需求的分类、安全需求的优先级等内容,根据优先级的高低解决安全问题。
6、利用威胁建模和攻击模式来确认安全威胁。攻击模式包括发动攻击的先决条件、相关漏洞、执行攻击所要求的技巧和资源等。
7、执行架构风险分析,评估架构和设计满足安全需求的能力,以及从相关威胁中的恢复能力。
不管从哪里开始,下面的方法对于开发安全的软件总是有帮助的:
1、在确定架构、进行设计和实施、测试、部署应用软件的过程中,选择并将安全实践(如上面所描述的)集成到现有的软件开发过程中。将安全性纳入到软件开发过程中并不是完全推翻现有的过程,而是加入健全的安全实践和方法。应对安全问题,需要与软件工程人员解决性能和可靠问题一样。
2、像攻击者一样思考。除了考虑应用软件的功能、特性,还要思考应用软件应当做什么,不应当做什么,考虑应用软件如何才能更好地对抗攻击,或在遭受攻击后进行恢复。
3、安全是一个风险管理问题。在每一个软件的生命周期中,开发人员和测试人员必须评估和减轻最高级的漏洞和风险。随着应用软件的设计、开发、测试、部署,风险及其优先级也会发生变化。风险管理方法的实施依赖于应用软件的特征。例如,对一个集成系统的风险分析和评估,就与评估商业级应用软件或评估一个基础架构的组件的风险的需求不同。
每家公司在开发每个项目时,都要根据自己的目标、限制条件和应用软件的重要程度,在开发过程中选择并调整自己特定的安全实践和方法,而不要一味地追求速度和性能。