1.Web安全简史
1.1中国黑客简史
对于现代计算机系统来说,在用户态的最高权限是root,也是黑客们最渴望能够获取的系统最高权限。不想拿到“root”的黑客,不是好黑客。
在现实世界中,真正造成破坏的,往往并非那些挖掘并研究漏洞的“黑客们”,而是这些脚本小子。而在今天已经形成产业的计算机犯罪、网络犯罪中,造成主要破坏的,也是这些“脚本小子”。
1.2黑客技术的发展历程
从黑客技术发展的角度看,在早期,黑客攻击的目标以系统软件居多。运营商、防火墙对于网络的封锁,使得暴露在互联网上的非Web服务越来越少,且Web技术的成熟使得Web应用的功能越来越强大,最终成为了互联网的主流。黑客们的目光,也逐渐转移到了Web这块大蛋糕上。
1.3Web安全的兴起
2.黑帽子,白帽子
正如一个硬币有两面一样,“黑客”也有好坏之分。
在黑客的世界中,往往用帽子的颜色来比喻黑客的好坏。
3.返璞归真,揭秘安全的本质
安全问题的本质是信任的问题。
一切的安全方案设计的基础,都是建立在信任关系上的。我们必须相信一些东西,必须有一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水,无根之木,无法设计,也无法完成。
4.破除迷信,没有银弹
安全是一个持续的过程。
5.安全三要素
6.如何实施安全评估
6.1资产等级划分
对互联网公司所拥有的资产进行等级划分,就是对数据做等级划分。
做资产等级划分的过程,需要与各个业务部门的负责人一一沟通,了解公司最重要的资产是什么,他们最着重的数据是什么。通过访谈的形式,安全部门才能熟悉、了解公司的业务,公司所拥有的数据,以及不同数据的重要程度,为后续的安全评估过程指明方向。
6.2威胁分析
在本书中介绍一种威胁建模的方法,它最早是由微软提出的,叫做STRIDE模型。
威胁 | 定义 | 对应的安全属性 |
Spoofing(伪装) | 冒充他人身份 | 认证 |
Tampering(篡改) | 修改数据或代码 | 完整性 |
Repudiation(抵赖) | 否认做过的事情 | 不可抵赖性 |
InformationDisclosure(信息泄露) | 机密信息泄露 | 机密性 |
Denial of Service(拒绝服务) | 拒绝服务 | 可用性 |
Elevation of Privilege(提升权限) | 未经授权获得许可 | 授权 |
6.3风险分析
如何更科学地衡量风险呢?这里再介绍一个DREAD模型,它也是由微软提出的。
等级 | 高(3) | 中(2) | 低(1) |
Damage Potential | 获取完全验证权限; 执行管理员操作; 非法上传文件 | 泄露敏感信息 | 泄露其他信息 |
Reproducibility | 攻击者可以随意再次攻击 | 攻击者可以重复攻击,但有时间限制 | 攻击者很难重复攻击过程 |
Exploitability | 初学者在短期内能掌握攻击方法 | 熟练的攻击者才能完成这次攻击 | 漏洞利用条件非常苛刻 |
Affected users | 所有用户,默认配置,关键用户 | 部分用户,非默认配置 | 极少数用户,匿名用户 |
Discoverability | 漏洞很显眼,攻击条件很容易获得 | 在私有区域,部分人能看到,需要深入挖掘漏洞 | 发现该漏洞及其困难 |
6.4设计安全方案
作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿。
好的安全方案对用户应该是透明的,尽可能地不要改变用户的使用习惯。
7.白帽子兵法
7.1 Secure By Default原则
按照白名单的思想,应该根据业务需求,列出一个允许使用的软件以及软件版本的清单,在此清单外的软件则禁止使用。如果允许工程师在服务器上随意安全软件的话,则可能会因为安全部门不知道、不熟悉这些软件而导致一些漏洞,从而扩大攻击面。
通配符“*”,代表来自任意域的Flash都能访问本域的数据,因此就造成了安全隐患。
所以在选择使用白名单时,需要注意避免出现类似通配符“*”的问题。
最小权限原则要求系统只授权主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。
7.2 纵深防御原则
纵深防御并不是同一个安全方案要做两边或多遍,而是要从不同的层面、不同的角度对系统做出整体的解决方案。
它要求我们深入理解威胁的本质,从而做出正确的应对措施。
7.3 数据与代码分离原则
在Web安全中,由“注入”引起的问题比比皆是,此类问题均可以根据“数据与代码分离原则”设计出真正安全的解决方案,因为这个原则抓住了漏洞形成的本质原因。
7.4 不可预测性原则
不可预测性能有效地对抗基于篡改、伪造的攻击。
不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法。