我的安全世界观
前言
- 互联网本来是安全的,自从有了研究安全的人以后,就变得不安全了。
- 只要还有人研究漏洞,利用漏洞,网络安全问题将会一直存在,就会有人需要解决安全问题。有人的地方就会有需求,有需求的地方就会有市场,网络安全行业将会一直存在。
- 事实上,所有的安全问题都能这么修复,只是需要付出的成本过于巨大
- 漏洞是系统中可能被威胁利用以造成危害的地方
- 漏洞只是对破坏性功能的一个统称而已。
- 我们定义一个功能是否是漏洞,只看后果,而不应该看过程。
- 所有的程序本来也没有漏洞,只有功能,但当一些功能被用于破坏,造成损失时,也就成了漏洞
- 最大的漏洞就是人,安全问题往往发生在意想不到的地方。
- 写的再好的程序,在有人参与的情况下,就可能出现各种不可预知的情况。
- 安全是一门朴素的学问,也是一种平衡的艺术。
安全工程师的核心竞争力
安全工程师的核心竞争力不在于他能拥有多少个0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。(有道无术,术尚可求;有术无道,则止于术。术是方法是操作,道是思想是理解。懂得他的底层逻辑,抓住他的本质,无论遇到任何安全问题也能无往不利,快速解决)
白帽子的使命
现状
- 浏览器安全是web安全的重要组成部分。
- PHP语言至今依然只能靠较好的代码规范来保证没有文件包含漏洞,而无法从语言本身杜绝此类安全问题的发生
里程碑
- SQL注入的出现是Web安全史上的一个里程碑。
最早出现时间:1999 - XSS(跨站脚本攻击)的出现则是Web安全史上的另一个里程碑。
引起重视:2003
安全的本质
- 安全问题的本质是信任的问题
- 我们必须有一些最基本的架设,安全方案才能得以建立;
- 如果我们否定一切,安全方案就会如无垠之水,无根之木,无法设计,也无法完成。
安全三要素
- 机密性:要求保护数据内容不能泄露,"加密"是实现机密性要求的常见手段。
- 完整性:完整性则要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是"数字签名"。
- 可用性:要求保护资源是“随需而得”。DoS(拒绝服务攻击)破坏的是安全的看可用性
后来又有扩充(可审计性,不可抵赖性)
如何防范安全问题?
将安全检查贯穿于整个软件生命周期中
对每一个产品,都要持续地实施严格的安全检查,这是微软通过自身的教训传授给业界的宝贵经验。而安全检查本身也需要不断更新,增加针对新型攻击方式的检测与防御方案。
安全评估步骤
- 资产等级划分
- 威胁分析
- 风险分析
- 确认解决方案
资产等级划分
- 帮助我们明确目标是什么,要保护什么
- 对互联网公司拥有的资产等级划分就是对数据做等级划分。
- 先进行资产等级划分然后进行信任域名和信任边界划分
互联网核心问题
- 互联网的核心是由用户数据驱动的:用户产生业务,业务产生数据。
- 互联网安全的核心问题是,是数据安全的问题。
- 互联网公司最核心的价值就是其拥有的用户数据。
威胁分析(确定攻击面)
- 威胁:把可能造成危害的来源称为威胁(Threat)
- 风险:把可能会出现的损失称为风险(Risk)。风险一定是和损失联系在一起的
风险分析
DREAD模型,由微软提出
模型是死的,人是活的,再好的模型也需要人来使用,不同的标准对应不同的模型。
设计安全方案
一个优秀的安全方案应该具备以下特点
- 能够有效解决问题;
- 用户体验好;
- 高性能;
- 低耦合;
- 易于扩展与升级。
注意
- 安全也应该是产品的一种属性。
- 安全是要为产品的发展与成长保驾护航的。
- 没有不安全的业务,只有不安全的实现方式。
白帽子兵法
一、Secure By Default 原则
1、黑名单、白名单
- 黑名单的意思就是拒绝的名单。
- 白名单就是值得信任允许访问或者允许通过验证的名单。
注意:在使用白名单时,需要注意避免出现类似通配符“*”的问题
2、最小权限原则
最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。
二、Defense in Depth(纵深防御) 原则
纵深防御包含两层含义:
- 要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;
- 要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。
三、数据与代码分离原则
这一原则广泛适用于各种由于“注入”而引发安全问题的场景。
实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。
四、不可预测性原则
不可预测性(Unpredictable),能有效地对抗基于篡改、伪造的攻击。 不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法,好好使用这条原则,在设计安全方案时往往会事半功倍。 例如使用 token防御 CSRF
总结
- Secure By Default,是时刻要牢记的总则;
- 纵深防御,是要更全面、更正确地看待问题;
- 数据与代码分离,是从漏洞成因上看问题;
- 不可预测性原则,是从克服攻击方法的角度看问题。
|