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)不可预测性,能有效地对抗基于篡改、伪造的攻击。
(3)不可预测性的实现往往需要用到加密算法,随机数算法,哈希算法,好好利用这条规则,在设计安全方案时往往会事半功倍。
转载:https://blog.csdn.net/qq_44528283/article/details/125856197