一、安全的本质
将不同重要程度的区域划分出来,。通过安全检查的过程可以梳理未知的人或物,使其变得可信任。被划分出来的具有不同信任级别的区域,称为信任域。划分两个不同信任域之间的边界,称为信任边界。
数据从高等级的信任域流向低等级的信任域不需要经过安全检查,相反则需要。
安全问题的本质是信任问题
二、安全评估
资产等级划分、威胁分析、风险分析、确认解决方案
资产等级划分:明确目标是什么,要保护什么。划分信任域和信任边界(最简单的划分方式:网络逻辑)
威胁分析:通过威胁建模,把所有威胁找出来
例:STRIDE模型
威胁 | 定义 | 对应的安全属性 |
Spoofing(伪装) | 冒充他人身份 | 认证 |
Tampering(篡改) | 修改数据或代码 | 完整性 |
Repudiation(抵赖) | 否认做过的事 | 不可抵赖性 |
InformationDisclosure(信息泄露) | 机密信息泄露 | 机密性 |
Dential of Service(拒绝服务) | 拒绝服务 | 可用性 |
Elevation of Privilege(提升权限) | 未经授权获得许可 | 授权 |
风险分析:Risk=Probability*Damage Potential
衡量风险的模型DREAD,指导我们应该从哪些方面判断一个威胁的风险程度
等级 | 高(3) | 中(2) | 低(1) |
Damage Potential | 获取完全验证权限;执行管理员操作;非法上传文件 | 泄露敏感信息 | 泄露其他信息 |
Reproducibility | 攻击者可以随意再次攻击 | 攻击者可以重复攻击,但有时间限制 | 攻击者很难重复攻击过程 |
Exploitability | 初学者在短期内能掌握攻击方法 | 熟练的攻击者才能完成这次攻击 | 漏洞利用条件非常苛刻 |
Affected users | 所有用户,默认配置,关键用户 | 部分用户,非默认配置 | 极少数用户,匿名用户 |
Discoverability | 漏洞很显眼,攻击条件很容易获得 | 在私有区域,只有部分人能看到,需要深入挖掘漏洞 | 发现该漏洞极其困难 |
一个优秀的安全方案要具备:
能够有效解决问题、用户体验好、高性能、低耦合、易于扩展与升级
三、白帽子兵法
1、Secure By Default原则——白名单、黑名单思想
(1)黑名单、白名单
制定防火墙的网络访问控制策略时,网站只提供Web服务,那么只允许网站服务器80和443端口对外提供服务,屏蔽除此之外的其他端口——白名单
不允许SSH端口对Internet开放,那么要审计SSH的默认端口:22端口是否开放了Internet——黑名单
通配符“*”代表来自任意域的Flash都能访问本域的数据,因此造成安全隐患。在选择使用白名单时,需要注意避免出现类似通配符的问题
(2)最小权限原则
系统只授予主体必要的权限,而不要过度授权
2.纵深防御原则(Defense in Depth)
(1)要在不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体
(2)要在正确的地方做正确的事情,在解决根本问题的地方实施针对性的安全方案
3.数据与代码分离原则
广泛应用于“注入”场景。例如缓冲区溢出就是违背了这一原则,程序在栈或堆中,将用户数据当作代码执行,混淆了代码与数据的边界,导致安全问题的发生,而由“注入”引起的问题如XXS、SQL Injection、CRLF Injection、X-Path Injection等。
4.不可预测性原则
能有效地对抗基于篡改、伪造的攻击。
不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法。