SDL产生的背景
最早提出SDL概念的是微软,当时微软的windows操作系统,已经处于垄断地位,在操作系统基础上在个人用户市场推出了Office办公软件、IE浏览器;在企业用户市场IIS、SQL server等软件也已经被大规模使用。随着微软开发软件的普及,世界各地的黑客也把注意力集中到了微软开发的软件身上。
当时由于软件普及度极高此,微软面临着空前的安全压力。这种压力促使微软开始关注自身软件的安全性。首先在技术层面采取了以下两个措施:
1、进入查毒软件领域
当时所有人都能看得到的是,对微软最大的安全威胁就是windows平台上的各种各样的计算机病毒。CIH病毒,冲击波病毒一波又一波的病毒横扫windows系统,给微软的用户带来了无限的困扰。当时世界范围内已经崛起了麦咖啡、卡巴斯基、赛门铁克等查毒软件巨头,在国内也有瑞星、江民、金山三大杀毒软件厂商。但计算机病毒的泛滥并没有得到有效的控制,相反windows生态下的安全状态正在向失控的方向发展。在这个背景下微软决定进入计算机安全领域,开发自己的杀毒软件。
2、系统增强安全机制
微软进入安全市场后,windows平台下的安全状况有所好转但并别没有得到彻底的改善。从表面上看window平台的安全威胁主要来自于计算机病毒,然而更深层次的原因是windows操作系统在设计初期对安全性考虑的不够,缺少足够的安全机制,安全漏洞很容易被利用。导致很容易被黑客找到系统漏洞,而且这些漏洞很容易被计算机病毒所利用,这些计算机病毒一旦被制造出来又很容易被广泛传播。于是微软开始从系统本身的安全机制层面关注安全风险,比较有代表性的是:引入了ASLR、DEP两项安全机制。
·DEP(Data Execution Prevention):
DEP技术通过将保存有数据的内存块标记为非可执行(NX),一旦出现缓存区溢出EIP寄存器被指向包含shellcode代码的内存块时,由于这些内存块之前已经被标记为非可执行,这时操作系统通过自身的安全机制来阻止shellcode代码的执行。 尽管缓冲区溢出的漏洞存在,但是有了DEP技术的保护,漏洞代码没有被触发有效的保护了用户在windows平台下的安全。
·ASLR(Address space layout randomization):
黑客在利用一个缓冲区溢出漏洞时,如果无法直接跳转到shellcode代码上,让其直接运行起来,会采用一些小的技巧,比如发生溢出时,某个寄存器如EAX中保存的值正好指向shellcode的代码,这时黑客就可以从进程动态库的代码中找到一条jmp eax的代码, 先让发生溢出的程序跳转到这条jmp eax的代码上,再通过这条指令,让程序跳转到shellcode的代码段上,执行shellcode。从而成功触发漏洞。
ASLR是一种通过地址空间布局随机化实现针对缓冲区溢出安全保护的技术。采用了ASLR技术的windows,在可行性程序被加载到内存中时,对dll动态库的加载地址,为堆、栈分配的内存地址偏移都是随机化的。由于动态库的加载地址是随机的,前面说道的动态库中的jmp eax指令的偏移地址也就成了随机的(每次运行相同的程序,指令在内存中的地址是不同的),缓冲器溢出漏洞被触发后,要想让程序跳转到这条指令上的难度就大大增加。
从技术上采取了一些列措施以后,windows平台安全风险得到了一定的控制,出现类似冲击波这样高破坏性的计算机病毒的数量再减少。但windows每年依然会被黑客们挖出大量的安全漏洞,虽然有了ASLR和DEP机制,大大增加了这些安全漏洞的利用难度,但是道高一尺魔高一丈,黑客们有创造出了各种绕过上述安全机制的方法。安全问题依然没有彻底解决。
在技术层面无法彻底解决面临的安全风险,微软的工程师从流程和管理上关注这个问题。探索能否借鉴软件工程的经验,在软件开发的各个环节中加入安全的流程,在每个软据开发环节对安全风险进行把控,确保每个环节交付到下一环节的交付物都是安全可控的。于是在微软产生了软件安全开发周期(Security Development Lifecycle) 概念。