1.Web安全的兴起
Web攻击技术的发展也可以分为几个阶段。Web1.0时代,人们更多的是关注服务器端动态脚本的安全问题,比如将一个可执行脚本上传到服务器上,从而获得权限。动态脚本语言的普及,以及Web技术发展初期对安全问题认知的不足导致很多“血案”的发生,同时也遗留下很多历史问题,比如PHP语言至今仍然只能靠较好的代码规范来保证没有文件包含漏洞,而无法从语言本身杜绝此类安全问题的发生。
SQL注入的出现是Web安全史上的一个里程碑,它最早出现大概是在1999年,并很快就成为Web安全的头号大敌。就如同缓冲区溢出出现时一样,程序员不得不日以继夜地去修改程序中存在的漏洞。黑客们发现通过SQL注入攻击,可以获取很多重要的、敏感的数据,甚至能够通过数据库获取系统访问权限,这种效果并不比直接攻击系统软件差,Web攻击一下子就流行起来。SQL注入漏洞至今仍然是Web安全领域的一个重要组成部分。
XSS(扩展脚本攻击)的出现则是Web安全史上的另一个里程碑。实际上,XSS的出现时间和SQL注入差不多,但是真正引起人们重视则是在大概2003年以后。在经历了MySpace的XSS蠕虫时间后,安全界对XSS的重视程度提高了许多,OWASP2007 TOP10威胁甚至把XSS排在了榜首。
伴随这Web2.0的兴起,XSS、CSRF等攻击已经变得更为强大。Web攻击的思路也从服务器转向了客户端,转向了浏览器和用户。黑客们天马行空的思路,覆盖了Web的每一个环节,变得更加的多样化。
2.安全的三要素
安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。
机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
完整性则要求保护数据内容是完整的、没有被篡改的。常见的保证一致性的技术手段是数字签名
可用性要求保护资源是“随需而得”
3.安全评估
安全评估的过程可以简单地分为以下4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。
4.威胁分析
威胁 | 定义 | 对应的安全属性 |
---|---|---|
Spoofing(伪装) | 冒充他人身份 | 认证 |
Tampering(篡改) | 修改数据或者代码 | 完整性 |
Repudiation(抵赖) | 否认做过的事情 | 不可抵赖性 |
InformationDisclosure(信息泄露) | 机密信息泄露 | 机密性 |
Denial of Service(拒绝服务) | 拒绝服务 | 可用性 |
Elevation of Privilege(提升权限) | 未经授权获得许可 | 授权 |
5.Secure By Default原则
在设计安全方案时,最基本也最重要的原则就是“Secure By Default”。在做任何安全设计时,都要记住这个原则。
实际上,“Secure By Default”原则,也可以归纳为白名单、黑名单的思想。如果更多地使用白名单,那么系统就会变得更安全。
6.最小权限原则
Secure By Default的另一层含义就是“最小权限原则”。最小权限原则也是安全设计的基本原则之一。最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。
7.数据与代码分离原则
另一个重要的安全原则就是数据与代码分离原则。这一原则广泛适用于各种由于“注入”二引发安全问题的场景。
实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当作代码执行,混淆了代码与数据的边界,从而导致安全的发生。
8.不可预测性原则
微软为了解决缓冲区溢出的问题,因此微软在Windows的新版本中增加了许多对抗缓冲区溢出等内存攻击的功能。微软使用的ALSR技术,在较新的版本的Linux内核中支持。在ASLR的控制下,一个程序每次启动时,其进程的栈基址都不相同,具有一定的随机性,对于攻击者来说,这就是“不可预测性”。