前言
看着这么多内容,千万别慌,并不是所有知识点都需要死记硬背! 软件安全是一门非常讲究“逻辑”的学科。我们可以把知识点分为两类:
我已经总结好了相应的题库文档,放在本文的配套材料里了
下面是部分题库内容展示,知识点整理在下面!快来一起学习吧!




大体知识点预览
我为你整理了一份“软件安全与漏洞”核心知识复习路线图。
这份路线图将复杂的知识点拆解为 5 个核心模块,你可以按照这个顺序一步步复习,效率会更高。
🗺️ 模块一:基础概念与安全模型
(复习重点:搞清楚“是什么”和“为什么”)
这部分是理论基石,主要涉及信息的定义、安全模型以及软件漏洞的基本概念。
- CIA 三要素:保密性、完整性、可用性。要能区分不同攻击破坏了哪个属性(例如:篡改破坏完整性,DDoS 破坏可用性)。
- 安全模型:
- PDRR 模型:保护、检测、响应、恢复。
- PPDRR 模型:在 PDRR 基础上增加了策略。
- IATF:强调深度防御,关注计算环境、区域边界等。
- 定义区分:
- 错误:人为差错。
- 缺陷:软件中存在的偏差。
- 漏洞:可被利用的缺陷。
- 失效:丧失功能的事件。
- 漏洞分类:按成因分为内存破坏、逻辑错误、输入验证、设计错误、配置错误。
- 漏洞分级:了解 CVSS(通用漏洞评分系统)和 CNNVD(国家信息安全漏洞库)的分级标准(超危、高危、中危、低危)。
- 0day 与 1day:0day 是未公开无补丁的;1day 是补丁已出但用户未打的。
🛡️ 模块二:恶意代码与病毒分析
(复习重点:病毒、木马、蠕虫的区别与原理)
这部分主要考察恶意代码的传播、结构和检测技术。
- 计算机病毒:能自我复制,寄生在宿主文件中。
- 蠕虫:独立运行,利用漏洞主动攻击传播(如“冲击波”)。
- 木马:C/S 架构,不自我复制,主要用于远程控制(如“灰鸽子”)。
- 后门:绕过安全控制获取访问权限。
- 传播途径:网页挂马、邮件、U盘、漏洞利用等。
- 逻辑结构:引导模块、传染模块、破坏模块、触发模块。
- 检测技术:特征值检测(查已知)、校验和检测(查变化)、启发式扫描(查未知)、虚拟机检测。
- 分析过程:静态分析(不运行)、动态分析(沙箱运行)、逆向工程。
💻 模块三:底层漏洞原理与利用
(复习重点:缓冲区溢出与内存保护机制)
这是技术含量最高的部分,涉及内存管理和攻防对抗。
- 原理:向缓冲区写入超过其长度的数据,覆盖相邻内存(如返回地址)。
- 危害:程序崩溃、执行任意代码(Shellcode)、获取权限。
- 利用方式:JMP ESP 覆盖、SEH 覆盖等。
- DEP:数据执行保护,让数据区不可执行代码。
- /GS:栈 Cookie 检查,检测栈是否被溢出覆盖。
- ASLR:地址空间布局随机化,让攻击者找不到跳转地址。
- SafeSEH:保护异常处理链表不被篡改。
- 结构:DOS 头、NT 头、节表、节数据。
- 关键概念:RVA(相对虚拟地址)、VA(虚拟地址)、FOA(文件偏移地址)及其换算公式。
🌐 模块四:Web 安全与应用层漏洞
(复习重点:OWASP Top 10 类漏洞)
这部分主要关注 Web 应用层面的常见漏洞。
- 原理:用户输入被当作 SQL 代码执行。
- 类型:联合查询注入、布尔盲注、时间盲注、报错注入。
- 防御:预编译语句(参数化查询)、输入验证、最小权限原则。
- 分类:反射型(非持久)、存储型(持久)、DOM 型。
- 危害:窃取 Cookie、钓鱼、挂马。
- 防御:输入过滤、输出编码、设置 Cookie。
- CSRF:跨站请求伪造,利用用户身份执行非本意操作。
- 文件包含/上传:利用上传功能植入 Webshell。
- 命令执行:调用系统命令函数(如 system())未过滤参数。
🏗️ 模块五:软件安全开发生命周期
(复习重点:SDL 流程与安全设计原则)
这部分关注如何在开发阶段就“构建”安全,而不是事后修补。
- SDL:微软提出的安全开发生命周期,分为 7 个阶段(培训、需求、设计、实施、验证、发布、响应)。
- 其他模型:BSI(内建安全)、CLASP(轻量级过程)、SAMM(成熟度模型)。
- 最小权限原则:只给完成任务所需的最小权限。
- 纵深防御:多层防护。
- 开放设计原则:安全性不应依赖于设计的保密(Kerckhoffs 原则)。
- 默认安全:默认配置即安全。
- STRIDE 模型:欺骗、篡改、抵赖、信息泄露、拒绝服务、权限提升。
- DREAD 模型:用于风险评估。
💡 复习建议
模块一:基础概念与安全模型
是整个软件安全大厦的地基。这部分内容虽然理论性强,但都是后续理解具体漏洞和攻击技术的前提。我们主要攻克三个核心板块:信息安全基石、安全模型、以及漏洞的本质。
🧱 第一部分:信息安全基石 (CIA 三要素)
这是安全领域最核心的概念,所有的攻击和防御都是围绕着这三个属性展开的。
- 保密性 (Confidentiality):确保信息不被未授权的个人、实体或过程访问。
- 破坏方式:截取 (Interception)。例如:网络嗅探、流量分析、窃取Cookie。
- 记忆技巧:秘密被“偷看”了。
- 完整性 (Integrity):确保信息在存储、传输和处理过程中不被未授权地篡改、破坏或丢失。
- 破坏方式:修改 (Modification)。例如:篡改网页内容、在传输中修改数据包、SQL注入修改数据库记录。
- 记忆技巧:内容被“改坏”了。
- 可用性 (Availability):确保授权用户在需要时可以访问和使用信息及资源。
- 破坏方式:中断 (Interruption)。例如:DDoS攻击使服务器瘫痪、物理破坏线路。
- 记忆技巧:服务被“搞挂”了。
补充一个:真实性 (Authenticity)
- 确保信息来源是真实可信的,不是伪造的。
- 破坏方式:捏造 (Fabrication)。例如:伪造身份登录、发送虚假消息。
📝 快速自测
攻击者分析通信双方的流量特征信息,是破坏了信息的哪个属性?
🏗️ 第二部分:安全模型 (PDRR 与 PPDRR)
安全模型为我们提供了构建安全体系的宏观思路。
1. PDRR 模型
这是一个动态的、闭环的安全模型,描述了安全防护的四个核心环节:
- P – 保护 (Protection):事前防御。例如:打补丁、配置防火墙、加密。
- D – 检测 (Detection):事中监控。例如:使用IDS/IPS、日志分析、入侵检测。
- R – 响应 (Response):事中处理。例如:隔离受感染主机、阻断攻击源。
- R – 恢复 (Recovery):事后补救。例如:数据备份恢复、系统重建。
2. PPDRR 模型
在 PDRR 的基础上,增加了最顶层的指导原则:
- P – 策略 (Policy):这是所有安全活动的基石和指导方针。它定义了“保护什么”、“如何保护”以及“谁来负责”。
📝 快速自测
信息保障模型中 PPDRR 的第一个 P 是指什么?
🐛 第三部分:漏洞的本质 (Error, Defect, Vulnerability)
这部分概念非常容易混淆,是考试和面试的常考点,务必厘清它们之间的因果关系和包含关系。
这是一个从“因”到“果”的链条:
软件错误 (Error)
- 定义:开发过程中出现的人为差错。比如程序员写错了逻辑、用错了函数。
- 本质:是原因,是人的行为。
软件缺陷 (Defect / Bug)
- 定义:由于人为错误,导致软件中隐含的、不希望出现的偏差。
- 本质:是静态存在于软件代码或文档中的问题。错误导致了缺陷。
软件漏洞 (Vulnerability)
- 定义:可以被攻击者利用的软件缺陷。
- 本质:是缺陷的一个子集。不是所有缺陷都是漏洞(比如一个拼写错误是缺陷,但通常不是漏洞),但所有漏洞都是缺陷。
软件故障 (Fault)
- 定义:软件运行时出现的可感知的不正常状态。
- 本质:是缺陷被触发后的动态表现。
软件失效 (Failure)
- 定义:软件丧失了完成规定功能的能力。
- 本质:是故障导致的最终后果。
简单总结关系:
错误 (人为) → 缺陷 (静态代码问题) → 漏洞 (可被利用的缺陷) → 故障 (运行时异常) → 失效 (系统崩溃)
📝 快速自测
判断题:软件缺陷就是软件漏洞。这个说法对吗?
📌 模块一核心要点回顾
| CIA 三要素 | 保密性、完整性、可用性 | 安全的三大支柱,防偷、防改、防瘫。 |
| PDRR 模型 | 保护、检测、响应、恢复 | 一个动态的安全闭环,从事前到事后。 |
| 漏洞与缺陷 | 漏洞 ⊂ 缺陷 | 漏洞是能被利用来干坏事的缺陷。 |
模块一的内容就复习到这里。这些都是非常基础但重要的概念,理解它们对后续学习至关重要。
模块二:恶意代码与病毒分析。
这部分内容非常具体,主要围绕几种核心的恶意代码展开。我们的复习策略是:先掌握它们的定义和核心区别,再深入到病毒的结构、传播和分析方法。
🦠 第一部分:核心恶意代码辨析 (病毒、蠕虫、木马)
这是本模块的重中之重,考试中经常通过对比来考察你是否真正理解了它们的本质区别。
1. 计算机病毒 (Virus)
- 核心特征:寄生性 和 自我复制。
- 工作方式:它不能独立运行,必须“寄生”在一个合法的宿主程序(如 .exe 文件)或文档(如 Word 宏)中。当宿主程序运行时,病毒代码也随之执行,并尝试感染其他文件。
- 类比:像生物病毒一样,需要侵入细胞才能复制和传播。
2. 蠕虫 (Worm)
- 核心特征:独立性 和 主动攻击。
- 工作方式:它是一个独立的程序,不需要寄生在宿主文件中。它会利用系统或网络的漏洞,主动地在网络中搜索并攻击其他存在漏洞的计算机,实现自我传播。
- 类比:像一个自主行动的机器人,自己寻找目标并复制过去。
3. 特洛伊木马 (Trojan Horse)
- 核心特征:欺骗性 和 非自我复制。
- 工作方式:它伪装成一个有用或有趣的正常软件,诱骗用户主动下载并执行。一旦运行,它会在后台悄悄打开一个“后门”,让攻击者能够远程控制你的计算机、窃取信息。它本身不会自我复制和传播。
- 类比:像古希腊的“特洛伊木马”,外表是礼物,里面藏着士兵。
📌 三者核心区别速记表
| 病毒 (Virus) | 是 | 是 (寄生) | 依赖用户执行被感染的宿主程序 |
| 蠕虫 (Worm) | 是 | 否 (独立) | 主动利用漏洞在网络中传播 |
| 木马 (Trojan) | 否 | 否 (伪装) | 欺骗用户主动执行 |
📝 快速自测
“灰鸽子”是一款典型的网络蠕虫,这个说法对吗?
⚙️ 第二部分:计算机病毒的结构与传播
在理解了病毒是什么之后,我们再来看看它是如何构成和传播的。
1. 病毒的逻辑结构
一个典型的计算机病毒通常包含以下几个功能模块:
- 引导模块:负责将病毒代码加载到内存中,为其他模块的运行创造条件。
- 传染模块 (或感染模块):病毒的核心,负责寻找可感染的目标,并将病毒代码复制到目标中。
- 触发模块:设定病毒发作的条件,比如特定日期、运行特定程序次数等。
- 破坏模块:病毒发作时执行的具体恶意行为,如删除文件、格式化硬盘、显示特定信息等。
2. 主要传播途径
病毒的传播离不开载体和途径,常见的有:
- 移动存储设备:通过 U 盘、移动硬盘等设备的交叉使用传播。
- 网络传播:
- 网页挂马:访问被植入恶意代码的网页。
- 电子邮件/即时通信:通过带有恶意附件的邮件或消息传播。
- 软件下载:从非官方渠道下载被捆绑了病毒的盗版软件。
- 系统漏洞:利用操作系统或应用软件未修补的漏洞进行感染。
🔍 第三部分:恶意代码的分析与检测
知道了敌人是谁,下一步就是学会如何分析和发现它们。
1. 恶意代码分析过程
分析恶意代码通常在隔离的安全环境(如虚拟机、沙箱)中进行,主要分为两种方式:
- 静态分析:不运行恶意代码。通过分析文件的字符串、文件头、反汇编代码等,来了解其基本特征和潜在功能。
- 动态分析:在受控环境中运行恶意代码,监控其对文件系统、注册表、网络等的实际操作行为,观察其真实意图。
2. 病毒检测技术
这是杀毒软件的核心技术,主要有以下几种:
- 特征值检测:提取已知病毒的一段独特代码(特征码)建立数据库,通过扫描文件进行比对。
- 优点:准确率高,误报率低。
- 缺点:只能检测已知病毒,对未知病毒或变种无效。
- 校验和检测:计算文件的哈希值(如 MD5)并保存。定期检查文件哈希值是否发生变化,如果变了,说明文件可能被感染。
- 优点:能发现未知病毒对文件的篡改。
- 缺点:无法识别病毒种类,且文件正常更新也会导致误报。
- 启发式扫描:不依赖特征码,而是分析代码的结构和行为特征,判断其是否具有病毒的“嫌疑”。
- 优点:能发现部分未知病毒。
- 缺点:误报率相对较高。
- 主动防御:监控程序的运行行为(如尝试修改系统关键文件、连接可疑网络地址),一旦发现恶意行为就立即拦截。
- 优点:是应对未知病毒的有效手段。
📝 快速自测
在病毒检测技术中,哪种技术无法检查出未知病毒?
📌 模块二核心要点回顾
| 病毒 vs 蠕虫 vs 木马 | 寄生/主动/欺骗 | 病毒靠寄生复制,蠕虫靠主动攻击,木马靠欺骗用户。 |
| 病毒结构 | 引导/传染/触发/破坏 | 病毒的四个功能模块,各司其职。 |
| 特征值检测 | 特征码、已知病毒 | 杀毒软件最基础的技术,但防不了新病毒。 |
模块二的内容就复习到这里。现在你应该能清晰地区分病毒、蠕虫和木马,并了解它们的基本原理和检测方法了。
模块三:底层漏洞原理与利用。(重点内容)
这部分是软件安全中技术含量最高、最硬核的内容。我们将深入计算机的内存世界,看看代码是如何在底层被攻击的,以及操作系统是如何见招拆招的。
💥 第一部分:缓冲区溢出 (Buffer Overflow)
这是软件安全史上最经典、危害最大的漏洞类型之一,理解它是学习底层安全的必经之路。
- 核心原理:程序在分配内存(缓冲区)时,没有严格检查输入数据的长度。当写入的数据超过了缓冲区的边界,多出来的数据就会覆盖相邻的内存空间。
- 致命危害:在栈溢出中,攻击者精心构造超长数据,可以覆盖掉函数的返回地址 (Return Address)。当函数执行完毕准备返回时,CPU 会跳转到攻击者指定的地址,从而执行任意代码(通常是 Shellcode),获取系统控制权。
- 防御思路:既然问题是“越界写入”,防御的核心就是“检查边界”和“让覆盖失效”。
📝 快速自测
缓冲区溢出漏洞之所以危险,最根本的原因是什么?
🛡️ 第二部分:Windows 内存保护机制 (攻防对抗)
为了应对缓冲区溢出,微软在 Windows 系统中引入了多种内存保护机制。这部分是考试的绝对重点,你需要掌握每种机制的作用以及攻击者如何绕过它们。
1. DEP (Data Execution Prevention,数据执行保护)
- 防御原理:将内存严格划分为“数据区”和“代码区”。数据区(如栈、堆)不可执行代码。即使攻击者把 Shellcode 注入到了栈里,CPU 也会拒绝执行。
- 绕过方式:ROP (Return-Oriented Programming)。攻击者不执行自己的代码,而是利用程序中已有的代码片段(Gadgets)拼接起来完成攻击。
2. /GS (栈 Cookie 保护)
- 防御原理:编译器在函数的局部变量和返回地址之间插入一个随机值(Cookie)。函数返回前会检查这个值是否被修改,如果被覆盖(说明发生了溢出),程序会立即强制终止,防止劫持执行流。
- 绕过方式:泄露 Cookie 的值,或者利用 SEH(结构化异常处理)覆盖绕过。
3. ASLR (Address Space Layout Randomization,地址空间布局随机化)
- 防御原理:每次程序运行时,随机化内存中关键组件(如栈、堆、DLL)的基地址。攻击者无法提前知道返回地址或 Shellcode 的确切位置,导致攻击失效。
- 绕过方式:内存信息泄露、暴力破解(32位系统下容易,64位极难)。
4. SafeSEH (Safe Structured Exception Handling)
- 防御原理:专门针对 Windows 的异常处理机制。系统会维护一个合法的异常处理程序地址列表,如果攻击者试图覆盖 SEH 链跳转到非法地址,系统会拦截并终止程序。
📌 保护机制速记表
| DEP | 数据区不可执行 | 阻止执行注入的 Shellcode |
| /GS | 栈中插入校验值 | 检测栈溢出并提前终止 |
| ASLR | 内存地址随机化 | 让攻击者找不到跳转目标 |
| SafeSEH | 校验异常处理链表 | 阻止利用 SEH 劫持执行流 |
📝 快速自测
攻击者将恶意代码注入到了程序的栈内存中,但发现 CPU 拒绝执行这段代码。这通常是触发了哪种保护机制?
📦 第三部分:PE 文件格式基础
要深入理解 Windows 下的漏洞利用,就必须知道可执行文件(.exe, .dll)在内存中是如何组织的。
- PE (Portable Executable):Windows 下所有可执行文件的标准格式。
- 核心结构:DOS 头、NT 头、节表 (Section Table)、节数据 (Section Data)。
- 必考换算公式:
在逆向分析或漏洞利用时,经常需要在“文件在硬盘上的位置”和“文件在内存中的位置”之间转换。- VA (Virtual Address):内存中的绝对虚拟地址。
- RVA (Relative Virtual Address):相对虚拟地址(相对于模块加载基址的偏移)。
- FOA (File Offset Address):文件在硬盘上的物理偏移。
- 核心公式:VA = 模块基址 (ImageBase) + RVA
📝 快速自测
如果一个 PE 文件的加载基址是 0x00400000,某个函数的 RVA 是 0x1000,那么该函数在内存中的实际 VA 是多少?
📌 模块三核心要点回顾
| 缓冲区溢出 | 越界写入、覆盖返回地址 | 最经典的底层漏洞,能导致任意代码执行。 |
| DEP | 数据不可执行 | 让注入的 Shellcode 变成一堆死数据。 |
| ASLR | 地址随机化 | 让攻击者找不到目标地址。 |
| VA与RVA | VA = 基址 + RVA | PE 文件内存寻址的核心公式。 |
模块三的内容比较烧脑,但只要你理解了“攻击者想干什么(劫持执行流)”以及“系统怎么防(DEP/ASLR/GS)”,这部分逻辑就非常清晰了。
模块四:Web 安全与应用层漏洞。
如果说模块三是在和底层操作系统“硬刚”,那么模块四就是和 Web 应用逻辑打交道。这部分内容非常贴近实战,也是目前网络安全领域最核心的考点。我们将重点攻克 OWASP Top 10 中最经典的三大漏洞。
💉 第一部分:SQL 注入 (SQL Injection)
这是 Web 安全中最经典、危害最深远的漏洞之一。
- 核心原理:应用程序在构建 SQL 语句时,直接将用户输入的“数据”拼接成了“代码”。数据库无法区分这两者,从而执行了攻击者恶意指令。
- 常见分类:
- 联合查询注入 (Union):利用 UNION SELECT 将恶意查询结果拼接到正常页面显示。
- 报错注入 (Error-based):利用数据库的报错机制(如 extractvalue 函数),把查询结果强行在报错信息中显示出来。
- 盲注 (Blind):页面上没有任何回显。分为布尔盲注(根据页面“正常/异常”逐位猜解)和时间盲注(根据页面“响应延迟”逐位猜解)。
- 终极防御:预编译语句(参数化查询)。让数据库明确知道哪些是数据,哪些是代码,从根本上杜绝拼接。
📝 快速自测
为什么“预编译语句”能彻底防御 SQL 注入?
🎭 第二部分:跨站脚本攻击 (XSS)
XSS 的本质是前端代码注入,攻击者将恶意脚本(通常是 JavaScript)注入到网页中。
- 核心原理:Web 应用对用户输入过滤不严,导致恶意脚本被浏览器当作正常代码解析执行。
- 三大分类(必考):
- 反射型 XSS:恶意脚本在 URL 参数中,服务器将其“反射”回页面。非持久化,需要诱骗用户点击特定链接。
- 存储型 XSS:恶意脚本被永久存储在服务器数据库中(如论坛发帖、留言板)。所有访问该页面的用户都会中招,危害最大。
- DOM 型 XSS:纯前端漏洞。恶意脚本不经过服务器,直接在前端 JavaScript 操作 DOM 时被触发。
- 常见危害:窃取用户 Cookie、钓鱼、网页挂马。
- 防御思路:输入过滤(过滤 <script> 等标签)+ 输出编码(将特殊字符转为 HTML 实体,如 < 转为 <)。
📝 快速自测
攻击者在某论坛发帖时插入了一段恶意 JS 代码,导致之后所有浏览该帖子的用户都被盗取了 Cookie。这属于哪种 XSS?
🎣 第三部分:跨站请求伪造 (CSRF)
CSRF 和 XSS 名字很像,但原理完全不同。XSS 是利用用户对网站的信任,而 CSRF 是利用网站对用户浏览器的信任。
- 核心原理:攻击者诱导已登录目标网站的用户点击恶意链接或访问恶意页面。用户的浏览器会在不知情的情况下,自动带上用户的 Cookie,向目标网站发送伪造的请求(如转账、修改密码)。
- 通俗理解:攻击者借刀杀人,利用你的身份去干坏事。
- 防御思路:
- CSRF Token:服务器生成一个随机的、不可预测的 Token 附加在表单中,提交时验证该 Token。这是最有效的方法。
- 验证 Referer/Origin 头:检查请求是否来自合法的域名。
📌 XSS 与 CSRF 核心区别速记表
表格
| 利用对象 | 利用用户对网站的信任 | 利用网站对用户浏览器的信任 |
| 攻击方式 | 注入并执行恶意脚本 | 伪造用户的合法请求 |
| Cookie 角色 | 窃取用户的 Cookie | 浏览器自动携带用户的 Cookie |
📝 快速自测
判断题:CSRF 攻击中,攻击者需要获取用户的 Cookie 才能成功。这个说法对吗?
📌 模块四核心要点回顾
| SQL 注入 | 数据变代码、预编译 | 用户输入被当成 SQL 执行,预编译是终极防御。 |
| XSS | 反射/存储/DOM、输出编码 | 网页里被注入了恶意 JS,输出编码是关键。 |
| CSRF | 伪造请求、CSRF Token | 借刀杀人,用你的身份发请求,Token 防御最有效。 |
模块四的内容非常实用,理清这三种漏洞的原理和区别,Web 安全的半壁江山你就拿下了!
模块五:软件安全开发生命周期 (SDL)。
如果说前四个模块是在讲“如何攻击”和“如何修补”,那么这个模块则是在讲“如何从源头避免漏洞”。这是现代企业级软件开发的标准规范,也是高级安全工程师和架构师必须掌握的宏观视角。
🔄 第一部分:安全开发生命周期 (SDL) 流程
SDL(Security Development Lifecycle)是由微软提出的一套安全开发规范。它将安全活动无缝集成到软件开发的每一个阶段,核心目标是降低软件开发成本,并在早期发现并消除安全缺陷。
一个标准的 SDL 通常包含以下 7 个核心阶段:
📝 快速自测
在 SDL 流程中,进行“威胁建模”通常属于哪个阶段?
🏛️ 第二部分:核心安全设计原则
在设计和开发软件时,必须遵循一系列经典的安全原则。这部分是简答题和架构设计的常考点。
- 含义:任何用户、程序或进程,只应拥有完成其合法任务所需的最小权限和最短时间。
- 应用:数据库连接不使用 root 账号;服务进程不使用 Administrator 权限运行。
- 含义:不依赖单一的安全措施,而是构建多层重叠的防护体系。即使一层被突破,还有其他层进行拦截。
- 应用:外部防火墙 + 内部网络隔离 + 主机杀毒软件 + 应用程序输入验证。
- 含义:系统的安全性不应依赖于设计的保密(即不能把密码或算法当作核心机密),而应依赖于密钥的保密。
- 应用:不要自己发明加密算法,应使用经过公开检验的标准算法(如 AES)。
- 含义:软件安装后的默认配置必须是安全的。用户需要手动开启不安全的功能,而不是默认开启所有功能让用户去关闭。
- 应用:新安装的系统默认关闭所有非必要端口;数据库默认禁止远程 root 登录。
📌 安全原则速记表
| 最小权限 | 够用就行 | 绝不给多余的权限。 |
| 纵深防御 | 层层设卡 | 不把鸡蛋放在一个篮子里。 |
| 开放设计 | 算法公开 | 靠密钥保密,不靠算法保密。 |
| 默认安全 | 出厂即安全 | 默认配置就是最安全的状态。 |
⚠️ 第三部分:威胁建模与 STRIDE 模型
在 SDL 的设计阶段,我们需要一种系统化的方法来找出潜在的安全威胁,最经典的就是 STRIDE 模型。它对应了 6 种常见的威胁类型:
- S – Spoofing (欺骗):伪装成他人。例如:伪造身份登录、IP 欺骗。(破坏真实性)
- T – Tampering (篡改):恶意修改数据或代码。例如:修改内存中的值、篡改传输中的数据包。(破坏完整性)
- R – Repudiation (抵赖):否认做过某事。例如:用户否认下过单,且系统没有操作日志。(破坏不可否认性)
- I – Information Disclosure (信息泄露):暴露敏感信息。例如:黑客窃取了数据库密码、日志泄露用户隐私。(破坏保密性)
- D – Denial of Service (拒绝服务):让服务不可用。例如:DDoS 攻击、消耗完系统内存。(破坏可用性)
- E – Elevation of Privilege (权限提升):获取了不该有的权限。例如:普通用户通过漏洞获取了管理员权限。(破坏授权)
📝 快速自测
攻击者利用系统漏洞,将自己从普通访客账号提升为了管理员账号,这在 STRIDE 模型中属于哪种威胁?
🎉 恭喜你,通关!
至此,软件安全与漏洞的五大核心模块我们已经全部复习完毕!
- 模块一 帮你打下了 CIA 和漏洞本质的理论地基;
- 模块二 让你认清了病毒、木马、蠕虫的真面目;
- 模块三 带你深入内存,看懂了底层溢出与系统的防御对抗;
- 模块四 拆解了 Web 世界最经典的 SQL注入、XSS 和 CSRF;
- 模块五 拔高了你的视角,掌握了 SDL 流程和 STRIDE 威胁建模。
下一步建议:
你可以尝试在脑海中把这几个模块串联起来:一个黑客利用未打补丁的系统(模块一)发起攻击,植入了一个木马(模块二),通过 SQL 注入拿到了数据库权限(模块四),并在内存中执行了 Shellcode(模块三),最后企业通过 SDL 流程复盘并修复了架构缺陷(模块五)。
🗺️ 复习模块与资料章节对应图
| 模块一:基础概念 | 第1、2章 | CIA三要素、PDRR/PPDRR模型、软件漏洞的定义与分类、0day漏洞、CVE/CVSS等标准。 |
| 模块二:恶意代码 | 第12章 | 病毒传播途径、木马结构、病毒检测技术(特征值、启发式等)、恶意代码分析过程。 |
| 模块三:底层漏洞 | 第3、11章 | 缓冲区溢出原理、Windows保护机制(DEP/ASLR/GS/SafeSEH)、PE文件格式(DOS头、NT头、节表、VA/RVA/FOA换算)。 |
| 模块四:Web安全 | 第4章 | SQL注入(原理、类型、防范)、XSS(反射型/存储型/DOM型)、CSRF、HTTP协议基础。 |
| 模块五:SDL | 第5、7、8、9、10章 | SDL模型阶段、STRIDE威胁建模、安全设计原则(最小权限、纵深防御等)、安全编码、安全测试(Fuzz/渗透)、软件部署。 |
💡 如何利用这份资料高效复习?
这份资料里包含了大量的单选题和判断题,它们覆盖了非常细的知识点。死记硬背每一道题是不现实的,也是低效的。
我建议你采用“以题带点”的策略:
复习重点
资料里不仅有题目,还有明确的“解析”和“正确答案”,这其实就是老师划的重点。我帮你把这些高频考点提炼出来了,你可以直接对着背:
🚨 第一梯队:必考核心(分值最高,大题/简答题集中区)
这部分内容在资料的简答题部分反复出现,必须死记硬背,不仅要懂原理,还要能默写出关键词。
1. Windows 内存保护机制(第3章)
这是资料里单选题最密集的地方,也是理解底层安全的核心。
- 四大金刚:DEP(数据执行保护)、/GS(栈Cookie)、ASLR(地址随机化)、SafeSEH(安全异常处理)。
- 必考点:
- 原理:比如 DEP 是让数据区不可执行;/GS 是检查 Cookie。
- 绕过方法(资料单选第35-38题):
- 绕过 ASLR:利用没有 /DYNAMICBASE 的模块做跳板。
- 绕过 DEP:使用 ret-to-libc 技术。
- 绕过 /GS:覆盖 SEH 或猜测 Cookie。
2. Web 安全三大件(第4章)
资料里第4章的单选题非常多,简答题也有。
- SQL 注入:
- 原理:数据拼接到代码中执行。
- 防御:预编译(参数化查询)是终极方案(资料单选55题)。
- 类型:联合查询、报错注入、盲注(最耗时,资料单选49题)。
- XSS(跨站脚本):
- 分类:存储型(最危险,持久化)、反射型(非持久)、DOM型。
- 防御:输入验证 + 输出编码(HTML实体编码)。
- CSRF:利用用户的身份伪造请求(资料单选没细考,但简答题常考防御:Token)。
3. 恶意代码与病毒(第12章)
- 病毒 vs 蠕虫 vs 木马(资料单选7-12题):
- 病毒:寄生,自我复制。
- 蠕虫:独立,主动攻击(如冲击波)。
- 木马:欺骗,不复制,开后门(如灰鸽子)。
- 检测技术(资料单选6、10题):
- 特征值检测:只能查已知病毒(最基础的)。
- 校验和检测:查文件是否被修改。
- 启发式/主动防御:查未知病毒。
4. 软件安全开发生命周期(第5、7章)
- SDL 模型:微软提出的,7个阶段(培训、需求、设计、实施、验证、发布、响应)。
- STRIDE 威胁建模(资料单选95、103题):
- Spoofing(欺骗)、Tampering(篡改)、Repudiation(抵赖)、Information Disclosure(信息泄露)、DoS(拒绝服务)、Elevation of Privilege(权限提升)。
- 重点:给你一个攻击场景,让你选属于 STRIDE 里的哪一个。
🛠️ 第二梯队:计算与细节(单选/填空/判断 拿分点)
这部分不需要大段背诵,但需要理解公式和记住特定参数。
1. PE 文件格式与计算(第11章)
这是资料里计算题最集中的地方,一定要会算!
- 文件结构:
- 开头是 MZ (4D 5A)。
- PE 签名在偏移 3C 处指向。
- 节表每项 40字节(注意:资料判断85题特意纠正了“16字节”是错的)。
- 地址换算公式(资料填空33题、单选141题):
- VA = ImageBase + RVA
- RVA = VA – ImageBase
- FOA(文件偏移)与 RVA 的转换:需要减去节偏移。
2. 硬盘与文件系统(第11章)
- MBR:主引导记录,512字节,最后两个字节是 55 AA。
- 分区表:64字节,分4项,每项16字节。
- FAT32:删除文件时,文件名首字节变 E5,FAT表清零,但数据区内容不变(资料单选138题)。
3. 安全设计原则(第7章)
资料单选93-100题全是这个。
- 最小权限:只给刚好够用的权限。
- 纵深防御:多层防护(如:防火墙+杀毒+代码审计)。
- 开放设计:安全性不依赖于设计的保密(Kerckhoffs原则)。
- 心理可接受原则:安全机制不能太复杂,否则用户会绕过它。
📊 第三梯队:概念辨析(判断题/单选题 坑点)
这部分容易混淆,资料里有很多判断题专门考这些“坑”。
- 0day:厂商不知道,没补丁(最危险)。
- 1day:补丁出了,但用户没打(实际攻击最常用)。
- 保密性(不被看)、完整性(不被改)、可用性(不被断)。
- 坑点:流量分析破坏保密性;中断破坏可用性;篡改破坏完整性。
- 所有漏洞都是缺陷,但不是所有缺陷都是漏洞(资料判断9-11题)。
