前言和自言自语:
Q:为什么要看这本书?写这篇笔记?A:入门网络安全,备考Security+;发布笔记是为了激励自己坚持下去。
Q:读这本书需要什么知识? A:1.熟悉一门或多门编程语言;2.做过Web项目;3.熟悉网络协议。
Q:我现在懂Web安全吗?A:了解一点点,本科专业网络工程,硕士专业网络安全,现在正在提前预习硕士课程。
Q:我还在干什么?A:观看Mike Chapple的Security+备考教学,打游戏,顺便刷刷雅思。
Q:用的啥软件写笔记? A:MarkText,然后再复制到CSDN。
Q:会坚持吗?A:Try my best.
第一章 安全观
Web安全中的里程碑攻击手段
SQL注入,XSS(跨站脚本攻击)
白帽子与黑帽子的区别
白帽子需要更加宏观的考虑问题,黑帽子考虑的较为微观。“破坏永远比建设容易”。
安全的本质:信任
数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的
信任域流向高等级的信任域,则需要经过信任边界的安全检查。
安全三要素
-
机密性(Confidentiality)
要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
-
完整性(Integrity)
要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是数字
签名。 -
可用性(Availability)
保护资源是“随需而得”。以防DoS(Denial of Service)拒绝服务攻击。
安全评估的步骤
- 资产等级划分
-
目的:确认目标是什么,要保护什么。
-
方式:
-
对于公司拥有的资产进行等级划分,例如客户数据,员工信息。需要对公司进行访谈,了解业务,了解数据。
-
完成资产划分,划分信任域与信任边界(一般通过网络逻辑来划分)
如下
数据库 --> Web应用 --> Internet
>>>-----------数据------------------>>
-
- 威胁分析
-
目的:确定危险来源。
-
威胁(Threat):可能造成危害的来源
-
风险(Risk):可能出现的损失
风险一定与威胁联系的
-
-
方式:怎么去把所有的威胁都找出来?
威胁建模 (STRIDE 模型)分析威胁时,从以下6个方面考虑。
威胁 定义 对应安全属性 Spoofing(伪装) 冒充他人身份 认证 Tampering(篡改) 修改数据或代码 完整性 Repudiation(抵赖) 否认做过的事情 不可抵赖性 InformationDisclosure(信息泄露) 机密信息泄露 机密性 Denial of Service(拒绝服务) 拒绝服务 可用性 Elevation of Privilege(提升权限) 未经授权许可 授权
- 风险分析
-
风险的组成:Risk = Probability * Damage Potential
-
方式:科学的衡量风险。
风险建模(DREAD 模型)
等级 高(3) 中(2) 低(1) Damage Potential 获取完全验证权限;执行管理员操作;非法上传文件 泄露敏感信息 泄露其他信息 Reproducibility 攻击者可以随意再次攻击 攻击者可以重复攻击,但有时间限制 攻击者很难重复攻击 Exploitability 初学者在短期内能掌握攻击方法 熟练的攻击者才能完成这次攻击 漏洞利用条件非常苛刻 Affected users 所有用户,默认配置,关键用户 部分用户,非默认配置 极少数用户,匿名用户 Discoverability 漏洞很显眼,攻击条件很容易获得 在私有区域,部分人能看到,需要深入挖掘漏洞 发现该漏洞极其困难 评估时,如例:
Risk = D(3) + R (3) + E(3) + A(3) + D(3) = 15
高危:12~15分 中危:8~11分 低危:0~7分
- 确认解决方案
-
目的:通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿。
-
好的安全方案具备的特点:
-
能够有效解决问题
-
用户体验好
-
高性能
-
低耦合
-
易于拓展和升级
-
白帽子兵法
-
Secure By Default原则 由以下两个原则组成。
-
黑名单、白名单原则
-
定义:如果更多地使用白名单,那么系统就会变得更安全。
-
黑名单:不允许 SSH端口对 Internet 开放,那么就要审计 SSH 的默认端口:22 端口是否开放了 Internet。但在实际工作过程中,经常会发现有的工程师为了偷懒或图方便,私自改变了 SSH 的监听端口,比如把 SSH 的端口从 22 改到了 2222,从而绕过了安全策略。
-
白名单:如果网站只提供 Web 服务,那么正确的做法是只允许网站服务器的80 和 443 端口对外提供服务,屏蔽除此之外的其他端口。这是一种“白名单”的做法。
需要注意的是,使用白名单时,一定要避免使用
*
等通配符,防止允许所有请求通过,造成安全隐患。
-
-
最小权限原则
-
定义:只授予主体必要的权限,不要过度授权。
例: Linux中,使用普通账户登录,执行需要root权限的操作时,用sudo命令完成。
-
-
-
纵深防御原则
-
含义:
-
首先,要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体。
-
木桶效应
入侵实例:利用 Web 应用的漏洞,攻击者先获得一个低权限的 webshell,
然后通过低权限的 webshell 上传更多的文件,并尝试执行更高权限的系统命令,尝试在服务器上提升权限为 root;接下来攻击者再进一步尝试渗透内网,比如数据库服务器所在的网段。
-
-
要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案
-
案例 XSS Defence技术的发展
一开始的方案中,过滤了一些特殊字符,例如《》 <> 等,比如用户输入《笑傲江湖》会变为 笑傲江湖。
但是这导致了改变用户想表达的意思,例如1<2 变为了1 2。
-
-
-
-
数据与代码分离原则
-
适用场景:由于各种“注入”产生问题的场景(缓冲区溢出也是其中一种:程序在栈或者堆中,将用户数据当做代码执行,混淆了代码与数据的边界,从而导致安全问题的发生)。
例如 XSS
-
产生原因:是 HTML Injection 或 JavaScript Injection
<html> <head>test</head> <body> $var </body> </html>
其中
$var
是用户可以操作的变量。若将此变量作为代码来解析,而此变量为<script src=http://evil></script>
时,就会使得用户脚本注入到代码片段中。 -
解决方案:如果是想要执行一个<script>标签,要弹出一段用户自定义文字,比如:“你好!”,那怎么办呢?
重写代码
<html> <head>test</head> <body> <script> alert("$var1"); </script> </body> </html>
在这种情况下,<script>标签也变成了代码片段的一部分,用户数据只$var1 能够控制,从而杜绝了安全问题的发生。
-
-
-
不可预测性原则
-
原理:从克服攻击方法的角度看问题。
实例:Windows 系统缓冲区溢出问题。
解决办法:使用 DEP 来保证堆栈不可执行,使用 ASLR让进程的栈基址随机变化,从而使攻击程序无法准确地猜测到内存地址,大大提高了攻击的门槛。
-
作用:有效地对抗基于篡改、伪造的攻击。
-
实现:加密算法、随机数算法、哈希算法。
-