基本概念
- 安全问题本质是信任问题
设计安全方案的基础都是建立在信任关系上的,我们必须相信一些东西,必须有一些基本的假设,安全方案才能建立。
- 安全是一个持续的过程
安全是一个持续的过程,攻击方式在变,防御方式也在变
安全要素
- CIA
名称 | 英文名 | 说明 |
---|---|---|
机密性 | confidential | 要求保密的数据内容不能被泄露 |
完整性 | integrity | 数据不能被篡改,是完整的 |
可用性 | availability | 保护资源可以得到,DOS |
- 扩充的一些要素:可审计性和不可抵赖性
安全评估
-
资产登记划分
网络安全的核心问题时数据安全,因此,我们主要对数据的等级进行划分,当然对于服务器等固有资产主要从管理,物理安全角度去考虑.
当我们对数据安全划分后,然后就想划分信任域和信任边界。如网络逻辑:Data Store --> web_app --> internet -
威胁分析
- 威胁(Threat:可能造成危害的来源
- 了解stride模型
威胁 | 定义 | 对应安全属性 |
---|---|---|
spoofing 伪装 | 冒充他人身份 | 认证 |
Tampering 篡改 | 修改数据或代码 | 完整性 |
Repudiation | 否认做过的事情 | 不可抵赖 |
Information Disclosure 信息泄露 | 机密信息泄露 | 机密性 |
Denial of Service 拒绝服务 | DOS | 可用性 |
Elevation of Privilege 提升权限 | 未授权访问 | 授权 |
-
风险分析
- 风险:可能造成的损失,公式
Risk = Probability * Damage Potential (可能性 * 损失严重程度)
- Dread模型
等级 | 高 | 中 | 低 |
---|---|---|---|
Damage Protential 损失严重程度 | 提权,非法文件上传 | 泄露敏感信息 | 泄露其他数据 |
Reproducibility 可重复 | 随意再次攻击 | 重复,有时限 | 很难重复 |
Exploitability 可利用度 | 好利用 | 高级黑客才能 | 利用环境太难 |
Affected User | 所有用户,默认用户,关键用户 | 部分用户,非默认用例 | 匿名用户 |
Discoverability 暴露性 | 很显眼 | 需要深入挖掘 | 发现极为困难 |
- 设计安全方案
- 能有效解决问题
- 用户体验好
- 高性能
- 低耦合
- 易于扩展和升级
白帽子兵法
-
Secure By Default
黑白名单原则
尽可能用白名单,但白名单的度必须得到控制,比如匹配字符串用了“*”,就比较危险
最小权限原则
减少暴露面 -
纵深防御原则
考虑全面,在不同层面,不同方面实施安全方案,避免出现疏漏,方案之间关联形成整体
原因:没有什么防御方案是万能,比如一个入侵案例中,攻击者可能经历多个攻击环节(获取权限,上传文件,提权,渗透内网等),
如果我们攻击环节都有相关的安全措施,入侵难度就会增加
在正确的地方做正确的事
安全方案实施地点要有效,比如xxs只有在html显示时才能生效,过滤特殊字符串是一种常用手法,但过滤要考虑实际输出,不能任何情况都去过滤,改变用户的输入意图。也就是说,简单在系统获取输入时时就对变量过滤特殊字符,很容易误杀。最好是再拼装html时,系统获取html上下文语意后,决定需要过滤的字符串,来避免误杀情况 -
数据与代码分离原则
这个是解决注入问题的基本思路。不同的注入手法,有不同的解决方式 -
不可预测原则
- 缓冲区溢出场景,我们通过ASLR技术,让程序每次启动,进程的栈基值都不相同。
- 序号管理将数字升序排序改为字符串随机
- CSRF中的token