威胁与风险 · 网络安全入门
我们到底在保护什么?防的又是什么?
课程目录为什么需要它
安全从写代码之前就开始了:先说清楚可能出什么问题。这门课后面的每一课(哈希、注入、日志、防火墙)都在保护三样东西中的一样,知道是哪一样,你才知道先修什么。
整门课只有一条规矩:只测试你自己的系统,或者拿到书面授权的系统。这里所有练习都在你的浏览器里运行,用的都是为课程编出来的数据。
直觉理解
想象一下你的日记本。
- 机密性:只有你能看。
- 完整性:别人改了哪一页,你一定能发现。
- 可用性:想翻开的时候它就在。
威胁是任何可能破坏这三点的东西:小偷、洪水、程序漏洞。风险是这个威胁该让你担心到什么程度:发生的可能性乘以后果的严重程度。问题不可能一次全修完,所以先给风险打分,从最大的开始修。
定义
CIA 三要素
Confidentiality, integrity and availability: the three properties security protects. Data is kept secret from the wrong people, unchanged by the wrong people, and reachable by the right people.机密性、完整性、可用性:安全要保护的三种性质。数据不被不该看的人看到,不被不该改的人改动,该用的人随时用得上。
风险 Risk
A simple risk score is likelihood × impact, each rated on a small scale such as 1 to 5. Higher scores are fixed first.最简单的风险分数是:可能性 × 影响,两个都用 1 到 5 这样的小刻度打分。分数越高越先处理。
示例
破坏的是哪一点?
动手试试每个事件都破坏了三点中的一点。用一个字典把事件和它破坏的目标对应起来。
incidents = {
"Someone reads the customer list": "confidentiality",
"A price is changed from 100 to 1": "integrity",
"The website is down for 3 hours": "availability",
}
for event, goal in incidents.items():
print(goal.upper(), "-", event)逐步执行
- L1字典:事件 → 它破坏的目标。
- L6
.items()每次给出一个键和它的值。 - L7
.upper()把目标变成大写,更显眼。CONFIDENTIALITY - Someone reads the customer list
给风险打分并排序
动手试试可能性和影响都从 1(低)到 5(高)。sorted 加上 key=,就按这个函数的返回值来排序。
risks = [
("Weak admin password", 4, 5),
("Stolen laptop", 2, 4),
("Server disk full", 3, 2),
]
def score(risk):
name, likelihood, impact = risk
return likelihood * impact
for risk in risks:
print(risk[0], score(risk))
ranked = sorted(risks, key=score, reverse=True)
print("Fix first:", ranked[0][0])逐步执行
- L1每个风险是一个元组:(名称,可能性,影响)。
- L8把元组拆成三个变量,再相乘。
- L124 × 5 = 20,2 × 4 = 8,3 × 2 = 6。
Weak admin password 20 - L13
reverse=True让分数最高的排在最前面。 - L14弱密码分数最高:先修它。
Fix first: Weak admin password
常见错误
以为安全就是保密
保密只是三个目标之一。网站被打挂了(可用性),或者价格被攻击者改掉了(完整性),同样是安全事故。
未经授权就去测试
在不属于你的系统上尝试攻击,在大多数国家都违法,哪怕只是「试试看」。请在自己的机器、实验环境和这些课程里练习。
小测验
1. 勒索软件把医院的文件加密了,医生打不开病历。最先被破坏的是哪一点?
查看答案
答案:C
数据还在,也可能没被人看过,但需要它的人用不了:这是可用性。
2. 这段代码会输出什么?
likelihood = 3
impact = 4
score = likelihood * impact
if score >= 15:
print("high")
elif score >= 8:
print("medium")
else:
print("low")查看答案
答案:B
3 × 4 = 12:不到 15,但不少于 8,所以是 medium。
动手练习
3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。
- 预测输出最大的风险
准确写出这段程序的输出。
- 改需求只看严重的
程序会打印每个风险和分数。修改它,让它只打印分数不低于 10 的风险,格式如下:
HIGH: Weak admin password (20) - 从零写风险等级
写一个函数
risk_level(likelihood, impact),返回:- 可能性 × 影响不少于 15 时返回
"high" - 不少于 8 时返回
"medium" - 其他情况返回
"low"
- 可能性 × 影响不少于 15 时返回
本课术语
| 术语 | 中文 | 英文定义 |
|---|---|---|
| Confidentiality | 机密性 | Only the right people can read the data. |
| Integrity | 完整性 | Data can't be changed without the change being noticed. |
| Availability | 可用性 | The system and data are reachable when they are needed. |
| Threat | 威胁 | Anything that could break confidentiality, integrity or availability. |
| Risk | 风险 | How much a threat matters, often scored as likelihood times impact. |