白帽子讲Web安全|【白帽子讲Web安全】第一章 我的安全世界观


文章目录

      • 1.1 Web安全简史
      • 1.5 安全三要素
      • 1.6 如何实施安全评估
      • 1.7 白帽子兵法

1.1 Web安全简史
1.中国黑客简史
启蒙时代:由于个人兴趣爱好外加受到国外黑客技术的影响。
黄金时代:开始出现以盈利为目的的攻击行为,黑色产业链逐渐成型。
黑暗时代:优胜劣汰。
2.SQL注入XSS(跨站脚本攻击)的出现是Web安全史上的两大里程碑。
SQL注入:指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
3.安全问题的本质是信任的问题。
1.5 安全三要素
CIA:机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。
机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
完整性要求保护数据内容是否完整、没有被篡改的,常见的保证一致性的技术手段是数字签名。
可用性要求保护资源是“随需而得”。
例子:假如一个停车场有100个车位,在正常情况下可以停100辆车,某一天有个坏人搬了100块大石头将车位全占了,那么停车场无法再提供正常服务。在安全领域中叫做拒绝服务攻击,简称DoS(Denial of Service)。拒绝服务攻击破坏的是安全的可用性。
1.6 如何实施安全评估
1.一个安全评估的过程,可以简单地分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案
资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么,而在安全领域,我们把可能造成危害的来源成为威胁(Threat),而把可能会出现的额损失称为风险(Risk),漏洞指的是系统中可能被威胁利用以造成危害的地方。
2.STRIDE模型(威胁建模方法)
威胁 定义 对应的安全属性
Spoofing(伪装) 冒充他人身份 认证
Tampering(篡改) 修改数据或代码 完整性
Repudiation(抵赖) 否认做过的事情 不可抵赖性
InformationDisclosure(信息泄露) 机密信息泄露 机密性
Denial of Service(拒绝服务) 拒绝服务 可用性
Elevation of Privilege(提升权限) 未经授权获得许可 授权
3.DREAD模型(风险分析)
等级 高(3) 中(2) 低(1)
Damage Potential 获取完全验证权限;执行管理员操作;非法上传文件 泄露敏感信息 泄露其他信息
Reproducibility 攻击者可以随意再次攻击 攻击者可以重复攻击,但有时间限制 攻击者很难重复攻击过程
Exploitability 初学者在短期内能掌握攻击方法 熟练的攻击者才能完成这次攻击 漏洞利用条件非常苛刻
Affected users 所有用户,默认配置,关键用户 部分用户,非默认配置 极少数用户,匿名用户
Discoverability 漏洞很显眼,攻击条件很容易获得 在私有区域,部分人能看到,需要深入挖掘漏洞 发现该漏洞极其困难
4.优秀安全的方案:能够有效解决问题;用户体验好;高性能;低耦合;易于扩展与升级。
1.7 白帽子兵法
1.Secure By Default原则
(1)Secure By Default原则,也可以归纳为白名单,黑名单的思想。如果更多地使用白名单,那么系统就会变得更安全。
(2)最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效地减少系统,网络,应用,数据库出错的机会。
(3)SSH:指建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性。
2.纵深防御原则
纵深防御原则包含两层含义:
(1)要在各个不同层面,不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;
(2)要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。
对于一个复杂的系统来说,纵深防御是构建安全体系的必要选择。
3.数据与代码分离原则
(1)这一原则适用于各种由于“注入”而引发安全问题的场景。实际上,缓冲区溢出,也可以认为是程序违背了这一原则的后果——程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生。
(2)缓冲区溢出:针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容,超过缓冲区能保存的最大数据量,从而破坏程序运行、趁中断之际获取程序乃至系统的控制权。
4.不可预测性原则
(1)微软使用的ASLR技术,在较新版本的Linux内核中也支持。在ASLR的控制下,一个程序每次启动时,其进程的栈基址都不相同,具有一定的随机性,对于攻击者来说,这就是“不可预测性”。
(2)不可预测性,能有效地对抗基于篡改、伪造的攻击。
【白帽子讲Web安全|【白帽子讲Web安全】第一章 我的安全世界观】(3)不可预测性的实现往往需要用到加密算法,随机数算法,哈希算法,好好利用这条规则,在设计安全方案时往往会事半功倍。

    推荐阅读