Web安全

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的控制下,一个程序每次启动时,其进程的栈基址都不相同,具有一定的随机性,对于攻击者来说,这就是“不可预测性”。