欢迎光临
我们一直在努力

软件安全与漏洞---复习资料(带你手把手复习)

前言

看着这么多内容,千万别慌,并不是所有知识点都需要死记硬背! 软件安全是一门非常讲究“逻辑”的学科。我们可以把知识点分为两类:

  • 死记硬背的(约占30%):比如各种名词解释、模型缩写(如SDL、STRIDE)、保护机制的名称(DEP/ASLR)。
  • 理解记忆的(约占70%):比如漏洞是怎么产生的、怎么防御的。这部分你只需要在脑海里跑通“攻击者怎么打 -> 系统怎么防”的逻辑,哪怕考试时忘了原话,也能用自己的话写出来拿分。
  • 我已经总结好了相应的题库文档,放在本文的配套材料里了

    下面是部分题库内容展示,知识点整理在下面!快来一起学习吧!

    大体知识点预览

    我为你整理了一份“软件安全与漏洞”核心知识复习路线图。

    这份路线图将复杂的知识点拆解为 5 个核心模块,你可以按照这个顺序一步步复习,效率会更高。


    🗺️ 模块一:基础概念与安全模型

    (复习重点:搞清楚“是什么”和“为什么”)

    这部分是理论基石,主要涉及信息的定义、安全模型以及软件漏洞的基本概念。

  • 信息安全基础
    • CIA 三要素:保密性、完整性、可用性。要能区分不同攻击破坏了哪个属性(例如:篡改破坏完整性,DDoS 破坏可用性)。
    • 安全模型:
      • PDRR 模型:保护、检测、响应、恢复。
      • PPDRR 模型:在 PDRR 基础上增加了策略。
      • IATF:强调深度防御,关注计算环境、区域边界等。
  • 软件漏洞概论
    • 定义区分:
      • 错误:人为差错。
      • 缺陷:软件中存在的偏差。
      • 漏洞:可被利用的缺陷。
      • 失效:丧失功能的事件。
    • 漏洞分类:按成因分为内存破坏、逻辑错误、输入验证、设计错误、配置错误。
    • 漏洞分级:了解 CVSS(通用漏洞评分系统)和 CNNVD(国家信息安全漏洞库)的分级标准(超危、高危、中危、低危)。
    • 0day 与 1day:0day 是未公开无补丁的;1day 是补丁已出但用户未打的。

  • 🛡️ 模块二:恶意代码与病毒分析

    (复习重点:病毒、木马、蠕虫的区别与原理)

    这部分主要考察恶意代码的传播、结构和检测技术。

  • 恶意代码分类
    • 计算机病毒:能自我复制,寄生在宿主文件中。
    • 蠕虫:独立运行,利用漏洞主动攻击传播(如“冲击波”)。
    • 木马:C/S 架构,不自我复制,主要用于远程控制(如“灰鸽子”)。
    • 后门:绕过安全控制获取访问权限。
  • 病毒结构与传播
    • 传播途径:网页挂马、邮件、U盘、漏洞利用等。
    • 逻辑结构:引导模块、传染模块、破坏模块、触发模块。
  • 检测与防御
    • 检测技术:特征值检测(查已知)、校验和检测(查变化)、启发式扫描(查未知)、虚拟机检测。
    • 分析过程:静态分析(不运行)、动态分析(沙箱运行)、逆向工程。

  • 💻 模块三:底层漏洞原理与利用

    (复习重点:缓冲区溢出与内存保护机制)

    这是技术含量最高的部分,涉及内存管理和攻防对抗。

  • 缓冲区溢出
    • 原理:向缓冲区写入超过其长度的数据,覆盖相邻内存(如返回地址)。
    • 危害:程序崩溃、执行任意代码(Shellcode)、获取权限。
    • 利用方式:JMP ESP 覆盖、SEH 覆盖等。
  • Windows 内存保护机制(必考)
    • DEP:数据执行保护,让数据区不可执行代码。
    • /GS:栈 Cookie 检查,检测栈是否被溢出覆盖。
    • ASLR:地址空间布局随机化,让攻击者找不到跳转地址。
    • SafeSEH:保护异常处理链表不被篡改。
  • 文件格式(PE 文件)
    • 结构:DOS 头、NT 头、节表、节数据。
    • 关键概念:RVA(相对虚拟地址)、VA(虚拟地址)、FOA(文件偏移地址)及其换算公式。

  • 🌐 模块四:Web 安全与应用层漏洞

    (复习重点:OWASP Top 10 类漏洞)

    这部分主要关注 Web 应用层面的常见漏洞。

  • SQL 注入
    • 原理:用户输入被当作 SQL 代码执行。
    • 类型:联合查询注入、布尔盲注、时间盲注、报错注入。
    • 防御:预编译语句(参数化查询)、输入验证、最小权限原则。
  • 跨站脚本攻击
    • 分类:反射型(非持久)、存储型(持久)、DOM 型。
    • 危害:窃取 Cookie、钓鱼、挂马。
    • 防御:输入过滤、输出编码、设置 Cookie。
  • 其他 Web 漏洞
    • CSRF:跨站请求伪造,利用用户身份执行非本意操作。
    • 文件包含/上传:利用上传功能植入 Webshell。
    • 命令执行:调用系统命令函数(如 system())未过滤参数。

  • 🏗️ 模块五:软件安全开发生命周期

    (复习重点:SDL 流程与安全设计原则)

    这部分关注如何在开发阶段就“构建”安全,而不是事后修补。

  • 安全开发模型
    • SDL:微软提出的安全开发生命周期,分为 7 个阶段(培训、需求、设计、实施、验证、发布、响应)。
    • 其他模型:BSI(内建安全)、CLASP(轻量级过程)、SAMM(成熟度模型)。
  • 安全设计原则
    • 最小权限原则:只给完成任务所需的最小权限。
    • 纵深防御:多层防护。
    • 开放设计原则:安全性不应依赖于设计的保密(Kerckhoffs 原则)。
    • 默认安全:默认配置即安全。
  • 威胁建模
    • STRIDE 模型:欺骗、篡改、抵赖、信息泄露、拒绝服务、权限提升。
    • DREAD 模型:用于风险评估。

  • 💡 复习建议

  • 先过一遍单选题:利用资料中的单选题快速扫描知识点盲区,特别是概念类的题目(如第 1、2、6 章)。
  • 重点攻克简答题:资料中第 12-14 章的简答题非常核心,特别是关于病毒传播、木马结构、恶意代码分析步骤以及SDL 模型的内容,建议背诵关键词。
  • 理解攻防对抗:对于缓冲区溢出和 Web 漏洞,不要死记硬背,要理解“攻击者怎么做” -> “造成了什么后果” -> “防御者怎么防”这个闭环。
  • 模块一:基础概念与安全模型 

    是整个软件安全大厦的地基。这部分内容虽然理论性强,但都是后续理解具体漏洞和攻击技术的前提。我们主要攻克三个核心板块:信息安全基石、安全模型、以及漏洞的本质。


    🧱 第一部分:信息安全基石 (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 实体,如 < 转为 &lt;)。

    📝 快速自测

    攻击者在某论坛发帖时插入了一段恶意 JS 代码,导致之后所有浏览该帖子的用户都被盗取了 Cookie。这属于哪种 XSS?


    🎣 第三部分:跨站请求伪造 (CSRF)

    CSRF 和 XSS 名字很像,但原理完全不同。XSS 是利用用户对网站的信任,而 CSRF 是利用网站对用户浏览器的信任。

    • 核心原理:攻击者诱导已登录目标网站的用户点击恶意链接或访问恶意页面。用户的浏览器会在不知情的情况下,自动带上用户的 Cookie,向目标网站发送伪造的请求(如转账、修改密码)。
    • 通俗理解:攻击者借刀杀人,利用你的身份去干坏事。
    • 防御思路:
      • CSRF Token:服务器生成一个随机的、不可预测的 Token 附加在表单中,提交时验证该 Token。这是最有效的方法。
      • 验证 Referer/Origin 头:检查请求是否来自合法的域名。

    📌 XSS 与 CSRF 核心区别速记表

    表格

    对比维度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 个核心阶段:

  • 培训 (Training):对开发和测试团队进行安全意识培训,这是整个流程的基础。
  • 需求 (Requirements):在需求阶段就确立安全目标(如必须使用预编译防注入),并建立安全基线。
  • 设计 (Design):进行威胁建模,识别潜在风险,设计安全的架构。
  • 实施 (Implementation):编写安全代码,使用安全的 API,进行代码审查。
  • 验证 (Verification):进行安全测试(如渗透测试、模糊测试),确保没有引入新漏洞。
  • 发布 (Release):制定安全事件响应计划,进行最终的安全评估。
  • 响应 (Response):产品发布后,持续监控漏洞,及时发布补丁。
  • 📝 快速自测

    在 SDL 流程中,进行“威胁建模”通常属于哪个阶段?


    🏛️ 第二部分:核心安全设计原则

    在设计和开发软件时,必须遵循一系列经典的安全原则。这部分是简答题和架构设计的常考点。

  • 最小权限原则 (Least Privilege)
    • 含义:任何用户、程序或进程,只应拥有完成其合法任务所需的最小权限和最短时间。
    • 应用:数据库连接不使用 root 账号;服务进程不使用 Administrator 权限运行。
  • 纵深防御原则 (Defense in Depth)
    • 含义:不依赖单一的安全措施,而是构建多层重叠的防护体系。即使一层被突破,还有其他层进行拦截。
    • 应用:外部防火墙 + 内部网络隔离 + 主机杀毒软件 + 应用程序输入验证。
  • 开放设计原则 (Open Design / Kerckhoffs 原则)
    • 含义:系统的安全性不应依赖于设计的保密(即不能把密码或算法当作核心机密),而应依赖于密钥的保密。
    • 应用:不要自己发明加密算法,应使用经过公开检验的标准算法(如 AES)。
  • 默认安全原则 (Secure by Default)
    • 含义:软件安装后的默认配置必须是安全的。用户需要手动开启不安全的功能,而不是默认开启所有功能让用户去关闭。
    • 应用:新安装的系统默认关闭所有非必要端口;数据库默认禁止远程 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:补丁出了,但用户没打(实际攻击最常用)。
  • CIA 三要素:
    • 保密性(不被看)、完整性(不被改)、可用性(不被断)。
    • 坑点:流量分析破坏保密性;中断破坏可用性;篡改破坏完整性。
  • 软件缺陷 vs 漏洞:
    • 所有漏洞都是缺陷,但不是所有缺陷都是漏洞(资料判断9-11题)。
  • 💡 复习建议

  • 先看简答题:把上面“第一梯队”里的简答题答案背下来,这是拿分大头。
  • 再算计算题:把 PE 文件的 VA/RVA 换算公式练两遍,确保考试时不手生。
  • 最后刷题:用资料里的单选和判断题快速过一遍“第二、三梯队”的知识点,混个眼熟。
  • 赞(0)
    未经允许不得转载:171主机测评 » 软件安全与漏洞---复习资料(带你手把手复习)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址