# 计算环境安全
# 第一章 操作系统安全
# 1.1 操作系统安全机制
操作系统安全是计算环境安全的基石,核心安全机制包含六大方面:标识与鉴别、访问控制、权限管理、安全审计、内存保护、文件系统保护。
# 1.1.1 标识与鉴别
标识与鉴别是操作系统安全的第一道防线,用于确认用户身份合法性。标识是用户向系统声明身份的过程(如输入用户名),鉴别是系统验证该身份真实性的过程(如验证密码)。
Windows 系统标识 — SID(安全标识符)
SID 是 Windows 中唯一标识安全主体的核心机制,格式为 S-1-5-21-xxx-xxx-xxx-xxxx :
| 字段 | 含义 |
|---|---|
| S | 固定前缀,表示 Security Identifier |
| 1 | 版本号(Windows 2000 起固定为 1) |
| 5 | 主要颁发机构(Windows NT 架构固定为 5) |
| 21 | 子颁发机构类型(21 = 用户主体,80 = 服务主体) |
| 1000 | 相对标识符 RID(500 = 管理员 Administrator,501 = 来宾 Guest,1000 = 首个创建用户) |
考试重点:SID 中 21/80 的区分、RID 特定值的含义(500/501/1000)
安全主体(Security Principal):包括用户账户、计算机账户和服务账户三类,是访问行为的发起者,每个安全主体拥有唯一的 SID。
Linux 系统标识 — UID(用户 ID)
Linux 使用整数 UID 标识用户,范围 0-65535:
| UID 范围 | 归属 | 说明 |
|---|---|---|
| 0 | root 账户 | 最高权限,系统超级用户 |
| 1-99 | 系统保留账户 | 供系统服务和守护进程使用 |
| 100-499 | 预留账户区域 | 部分发行版用于系统账户 |
| 500-65535 | 普通用户 | 一般登录用户 |
安全警示:若发现非 root 账户的 UID 为 0,表明系统可能已被植入后门(攻击者创建了隐藏的 root 权限账户)。这是入侵检测的重要排查点。
Windows 用户凭据存储
| 项目 | 说明 |
|---|---|
| 存储位置 | %SystemRoot%\System32\config\SAM 注册表文件(运行时系统锁定) |
| 密码哈希 | LM-Hash:旧式 DES 加密,安全性弱(已弃用);NTLM-Hash:MD4 哈希,当前 Windows 主用 |
| 鉴别流程 | 图形界面 (GINA) 接收输入 → 本地安全授权 (LSA) 验证 → 安全账户管理 (SAM) 比对哈希 → LSA 为 SID 附加权限 |
Linux 用户凭据存储
| 文件 | 路径 | 说明 |
|---|---|---|
| passwd | /etc/passwd | 存储用户名、UID、GID、家目录等(早期含 DES 加密密码,现已移至 shadow) |
| shadow | /etc/shadow | 存储密码哈希(仅 root 可读写) |
shadow 文件字段解析(以 $6$salt$hash 为例):
用户名:密码哈希:最后修改日:最短天数:最长天数:提醒天数:宽限期:过期日:保留字段
$6$= SHA-512 加密算法($1$=MD5,$2a$=Blowfish,$5$=SHA-256)- 时间字段从 1970 年 1 月 1 日起计算天数
- 典型值:
99999最长有效期约 274 年(几乎不强制过期)
# 1.1.2 访问控制
访问控制机制确保用户仅能访问已授权的资源,核心原则是最小特权和按需授权。
Windows 访问控制 — ACL 机制
| 属性 | 说明 |
|---|---|
| 模型类型 | 自主访问控制(DAC) |
| 附着对象 | 客体(文件、目录、注册表项等) |
| 文件系统支持 | 仅 NTFS 支持(FAT32/FAT16 不支持 ACL) |
| 安全特点 | 将非法用户阻挡在外,合法用户也需受权限限制 |
| 访问令牌 | 包含用户 SID 和特权列表,以用户身份运行的进程拥有该令牌的副本 |
Linux 访问控制 — UGO 模型
权限类型:读(r)=4, 写(w)=2, 执行(x)=1
权限三元组:所有者(u) / 所属组(g) / 其他用户(o)
示例:rwxr-xr-x = 755
说明:
- u(所有者):rwx(读写执行)
- g(所属组):r-x(读和执行)
- o(其他):r-x(读和执行)
权限修改命令对比:
| 方式 | 命令示例 | 适用场景 |
|---|---|---|
| 符号模式 | chmod u+x,g-w file | 仅修改单项权限,保留其他不变 |
| 数字模式 | chmod 644 file | 直接设置完整权限,操作更高效 |
| 递归修改 | chmod -R 755 dir/ | 目录及内部所有文件统一修改 |
# 1.1.3 权限管理
Windows UAC(用户账户控制)机制
核心原理:管理员账户登录时默认仅获得受限令牌,执行敏感操作时需要弹出确认对话框进行二次授权。
管理员登录 → 获取受限令牌(标准用户权限)
↓
执行管理任务(如安装软件、修改系统设置)
↓
触发UAC提示框 → 用户确认 → 提升为完整管理员权限
作用:①防止管理员误操作 ②阻止恶意代码自动提权。
易混淆点:UAC 不是身份鉴别机制,而是权限提升控制机制。
Linux SUID(Set User ID)机制
特征:文件权限中所有者执行位显示为s(而非x)
效果:任何用户执行该文件时,自动获得文件所有者的权限
核心风险:对root属主的SUID文件可导致普通用户获得root权限
典型案例:/usr/bin/passwd
- passwd文件所有者是root,设置了SUID位
- 普通用户运行passwd时以root权限操作/etc/shadow
- 原理:passwd将root权限编译于内核层执行,不受外层文件权限限制
考试重点:SUID 是 CISP 高频考点,需理解其 "权限穿透" 特性和安全风险。严格管控 SUID 设置是系统加固的基本要求。
root 账户限制建议:
- 日常操作使用普通账户登录
- 管理操作通过
su或sudo临时提权 - 防止低级误操作(如
rm -rf /等危险命令)
# 1.1.4 安全审计
安全审计通过日志记录实现事后追踪功能,是安全检测和取证分析的基石。
Windows 日志体系
| 日志类型 | 内容 | 用途 |
|---|---|---|
| 系统日志 | 操作系统级别事件(驱动加载、服务启停等) | 系统故障排查 |
| 应用程序日志 | 应用程序运行状态 | 应用层问题定位 |
| 安全日志 | 安全相关事件(登录成功 / 失败、权限变更等) | 安全事件追溯 |
此外,IIS 等特定服务拥有独立日志(如 HTTP 日志),为服务级审计提供细粒度记录。
Linux 日志体系
| 日志类型 | 关键文件 | 说明 |
|---|---|---|
| 连接时间日志 | /var/log/wtmp | 长期用户登录记录(who 命令读取) |
/var/log/utmp | 当前登录用户记录(w / 命令读取) | |
| 系统错误日志 | /var/log/messages | 最全面的系统日志(含错误、安全事件),故障排查优先检查 |
| 应用日志 | /var/log/httpd/access.log | Apache/Nginx 等服务的访问日志 |
关键定位:安全审计主要用于事后追踪,实际安全控制应侧重事前预防和过程控制。日志完整性保护是审计系统自身安全的核心要求。
# 1.1.5 内存保护
内存保护的核心机制是用户空间与内核空间的隔离,防止用户进程越权访问或破坏内核内存区域。
核心分区架构
┌─────────────────────────────────┐
│ 用户空间 (User Space) │ ← 进程隔离,互不干扰
│ Ring 3 │
├─────────────────────────────────┤
│ 内核空间 (Kernel Space) │ ← 核心态,完全控制系统
│ Ring 0 │
└─────────────────────────────────┘
保护机制对比:
| 机制 | 原理 | CISP 考试要点 |
|---|---|---|
| 段式保护 | 通过段描述符限制内存段访问范围 | 基于段的特权级检查 |
| 页式保护 | 通过页表设置页级读写 / 执行权限 | 粒度更细,现代 OS 主流方案 |
| 段页式保护 | 结合段式和页式 | Linux/x86 架构的实际方案 |
现代内存防护技术:
- ASLR(地址空间布局随机化):随机化进程关键数据区的内存地址(栈、堆、共享库等),使攻击者难以精确预测跳转地址
- DEP/NX(数据执行保护):将栈和堆标记为不可执行,防止缓冲区溢出后执行 shellcode
- Stack Canary(栈保护):在栈帧中插入随机检测值(canary),溢出时 canary 被覆盖,系统检测到异常后终止进程
- 内核空间保护:通过 CPL(当前特权级)机制确保用户态代码无法直接访问内核态内存
考试重点:理解用户空间与内核空间的隔离原理、Ring 0/3 的特权级差异。ASLR 和 DEP 是 CISP 常考的防护技术。
# 1.1.6 文件系统保护
文件系统保护包含两大核心机制:访问控制列表(ACL) 和加密,两者形成互补防护。
两层防护的关系:
第一道防线:访问控制列表
└─ 防止未授权访问(常规情况下的权限管控)
第二道防线:加密
└─ 确保即使文件被物理获取也无法解读(最后保障)
访问控制失效的典型场景:
- 设备丢失后通过 U 盘启动绕过操作系统权限
- 攻击者清除 / 替换原账户密码后登录
- 硬盘被拆下挂载到其他系统读取
操作系统加密方案对比:
| 系统 | 文件级加密 | 磁盘级加密 | 说明 |
|---|---|---|---|
| Windows | EFS(加密文件系统) | BitLocker(全卷加密) | EFS 对用户透明;BitLocker 需 TPM 支持 |
| Linux | eCryptfs | LUKS(dm-crypt) | eCryptfs 需手动安装;LUKS 是磁盘级加密标准 |
实施建议:生产环境服务器推荐同时启用 ACL 和加密;笔记本电脑等移动设备必须启用全磁盘加密,防止设备丢失导致数据泄露。
# 1.1.7 安全目标与机制分类
按用户登录状态划分操作系统的安全机制:
登录前保护:
├─ 标识与鉴别(用户名/密码、生物识别、智能卡等)
登录中保护:
├─ 访问控制(基于权限的资源管理)
└─ 最小特权(仅授予完成任务所需的最小权限)
登录后保护:
└─ 安全审计(事后追溯用户操作行为)
全程保护(不受登录状态影响):
├─ 内存保护(从系统启动到关闭全程保护)
└─ 文件系统保护(持续监控文件访问和修改)
# 1.2 操作系统安全配置
# 1.2.1 安装与镜像验证
| 要求 | 说明 |
|---|---|
| 来源可靠 | 必须从官方网站或授权渠道获取安装镜像 |
| 完整性校验 | 通过 MD5/SHA-1/SHA-256 哈希值验证镜像文件未被篡改 |
| 最小化原则 | 仅选择必要的系统组件和功能 |
镜像校验是系统安全的基础前提,若镜像本身被植入后门,后续所有安全配置均无效。
# 1.2.2 磁盘分区策略
核心原则:系统与用户文件分区分置
推荐方案:
┌──────────────┬──────────────┬──────────────┐
│ 系统分区(C:) │ 数据分区(D:) │ 备份分区(E:) │
│ OS + 应用程序 │ 用户数据文件 │ 系统备份镜像 │
└──────────────┴──────────────┴──────────────┘
- 避免单分区方案(如 1TB 硬盘仅设 C 盘),否则系统崩溃将导致所有文件恢复困难
- 生产环境服务器应采用独立分区方案,建议 /boot、/(根分区)、/home、/var 独立分区
- 个人电脑也建议遵循此原则
# 1.2.3 安全补丁管理
| 环境 | 策略 | 风险控制 |
|---|---|---|
| 个人设备 | 建议及时安装所有补丁 | 个人数据可备份恢复 |
| 生产环境 | 先在测试 / 备份服务器验证兼容性 → 备份 → 分批部署 | 防止补丁引发新问题导致业务中断 |
案例警示:微软曾出现补丁修复了 A 问题却引发了 B 问题的案例,因此在生产环境验证兼容性至关重要。
# 1.2.4 最小化部署
实施要点:
- 安装时仅选择必需的功能和组件
- 关闭所有非必要的服务
- 禁用非必要的默认共享和端口
安全收益:每减少一个开放端口或运行服务,攻击面就相应减小。
典型案例:仅作为 Web 服务器时,除 80/443 端口外应关闭其他所有端口。
# 1.2.5 远程访问控制
端口管理:
| 服务 | 端口 | 不使用时建议 |
|---|---|---|
| 文件共享 (SMB) | 445/TCP | 关闭 |
| 远程桌面 (RDP) | 3389/TCP | 关闭 |
| Telnet | 23/TCP | 关闭(用 SSH 替代) |
| SSH | 22/TCP | 修改默认端口 + 密钥登录 |
连接控制策略:
- 遵循 "最小开放" 原则,仅开放业务必需端口
- 对远程连接实施 IP 地址白名单限制
- 所有远程访问必须记录日志以备审计
- 推荐使用 VPN 或堡垒机集中管理远程访问
# 1.3 账户策略配置
# 1.3.1 密码策略
核心安全要素:
| 策略项 | 推荐配置 | 说明 |
|---|---|---|
| 复杂性要求 | 至少包含大写、小写、数字、特殊符号中 3 种字符类型 | 提高密码熵值 |
| 最小长度 | ≥8 位(当前安全标准,敏感系统建议≥12 位) | 增加暴力破解难度 |
| 密码历史 | 强制记录 N 次历史(设为 3 即新密码不能与前 3 次重复) | 防止循环使用旧密码 |
| 最长有效期 | 建议 30-90 天强制更新 | 降低弱密码暴露窗口 |
| 最短使用天数 | 建议 1-2 天 | 防止用户频繁修改回原密码 |
实施难点:非 IT 人员(如医护人员)可能因记忆负担而规避复杂密码要求,需配合培训和辅助工具(如企业密码管理器)。
# 1.3.2 账户锁定策略
防暴力破解核心机制:
| 参数 | 推荐值 | 作用 |
|---|---|---|
| 锁定阈值 | 连续 3-5 次错误登录 | 触发锁定条件 |
| 锁定时间 | 30 分钟或管理员解锁 | 阻止持续尝试 |
| 计数器重置 | 通常与锁定时间相同 | 清零错误计数 |
特殊规则:当锁定时间与计数器重置时间不一致时,以较长者为准。例如锁定 15 分钟但计数器 30 分钟重置,则用户需等待 30 分钟才能重新尝试。
# 1.3.3 密码暴力破解防御
暴力破解原理:攻击者通过自动化工具依次尝试密码组合,从简单到复杂逐步枚举。
常见攻击序列:1 → 12 → 123 → ... → 123456 → password → admin123 → ...
多层防御体系:
| 防御层 | 技术手段 | 效果 |
|---|---|---|
| 账户锁定 | 限制登录尝试次数 | 增加攻击者时间成本至不可接受 |
| 验证码 | CAPTCHA 图片验证 | 阻止自动化工具 |
| 双因素认证 | 密码 + 动态令牌 / 短信验证码 | 即使密码泄露也无法登录 |
| 登录延迟 | 每次失败后递增等待时间 | 大幅降低枚举速度 |
| IP 黑名单 | 检测异常 IP 后自动封禁 | 阻断分布式攻击来源 |
考试重点:账户锁定策略是防暴力破解的基础手段,理解阈值 / 锁定时间 / 计数器三者的优先级关系。
# 1.4 安全审计配置
# 1.4.1 日志设置与留存
日志记录要素:完整的安全审计记录应包含以下要素 ——
用户标识 | 操作时间 | 源IP地址 | 目标主机 | 操作类型 | 执行结果
合规要求:
- 日志存储容量需满足至少 6 个月留存(《网络安全法》要求)
- 日志访问权限应限制为仅管理员可操作
- 确保日志时间戳的准确性(建议启用 NTP 同步)
加固建议:
- Windows:关闭默认共享和自动播放功能
- Linux:注意默认文件权限设置(umask 配置)
# 1.4.2 集中式日志服务器
部署优势:
- 跨设备关联分析:聚合多台服务器的日志,发现关联性攻击行为
- 日志防篡改:即使单台业务服务器被入侵,攻击者也无法删除日志服务器上的记录
- 长期归档:统一管理日志存储空间和备份策略
取证价值:日志服务器是安全事件溯源的关键基础设施,即使业务服务器遭完全破坏,仍可通过日志服务器追溯攻击行为。
常用方案:Linux 环境下常见 rsyslog + Logstash + Elasticsearch 或商业 SIEM 系统;Windows 环境下可用 Windows Event Forwarding 或第三方日志管理平台。
# 第二章 信息收集与系统攻击
# 2.1 信息收集概述
信息收集是系统攻击的首要步骤,通过获取目标系统的各类信息来提高攻击效率和成功率。收集的信息越全面,攻击的指向性越强。
信息收集的三类目标:
| 目标类别 | 收集内容 | 攻击用途 |
|---|---|---|
| 系统信息 | 域名、网络拓扑、操作系统版本、应用软件及漏洞信息 | 针对性漏洞利用 |
| 组织信息 | 组织架构、地理位置、联系方式、近期重大事件 | 社会工程学准备 |
| 人员信息 | 员工简历、管理员个人信息(如宠物名、爱好) | 密码猜测 / 钓鱼邮件 |
# 2.2 公开信息收集 — 王进喜案例分析
这是一个经典的公开情报(OSINT)分析案例,展示了看似无害的公开信息如何被利用获取关键情报。
案例背景:1964 年中国发现首个大油田(大庆油田),石油开采技术不足需国际招标,中方未透露油田位置和储量以保持招标公平性。
分析过程:
| 信息来源 | 分析内容 | 分析结论 |
|---|---|---|
| 王进喜衣着 | 穿着厚棉袄,戴狗皮帽 | 排除南方,确定位于中国东北寒冷地区 |
| 报道时间与经纬 | 结合气象数据判断拍摄地区 | 北纬 46-48 度(齐齐哈尔至哈尔滨区间) |
| 历史勘探数据 | 日本在东北的勘探记录 | 进一步缩小范围,排除无油区域 |
| 手臂与井把比例 | 推算油井直径 | 推算最大产量 |
| 背景中第二口井 | 判断井距 | 估算油田范围和布局 |
商业结果:日本企业凭借精准分析制定的方案高价中标,中国为炼油设备支付了超额费用。
安全启示:看似普通的信息(照片、新闻稿)经过专业分析可能泄露关键情报。系统攻击前必须进行全面信息收集。
# 2.3 搜索引擎信息收集(Google Hacking)
常见 Google Hacking 语法:
| 语法 | 功能 | 示例 |
|---|---|---|
filetype:ext | 限定搜索特定文件类型 | filetype:doc 保密 |
site:domain | 限定搜索特定网站 | site:qq.com 后台管理 |
inurl:keyword | 搜索 URL 中包含关键词的页面 | inurl:admin 、 inurl:login |
intitle:keyword | 搜索标题中包含关键词的页面 | intitle:管理 、 intitle:index of |
intext:keyword | 搜索正文中包含关键词的页面 | intext:password |
| 组合使用 | 多语法联合搜索 | site:gov.cn filetype:doc 保密 |
高价值文件类型:
| 文件类型 | 关注原因 |
|---|---|
.doc / .docx | 可能包含敏感文字信息 |
.mdb / .sql | 数据库文件,可能包含数据库凭证 |
.ini / .config | 配置文件,可能包含账号密码 |
.old / .back / .bak | 备份文件,可能暴露原有账号和配置 |
.php / .asp | 后台入口或存在注入点的动态页面 |
防御建议:定期扫描并清理暴露的敏感文件,禁用目录列表功能,对后台路径进行隐藏处理。
# 2.4 网络信息收集
# 2.4.1 Ping 与 Tracert 路由探测
Ping:检测目标是否在线,ICMP回显请求/应答
└─ 防御:防火墙过滤ICMP可阻止ping探测
Tracert:显示从本机到目标主机的路由路径(每个跃点的响应时间)
└─ 输出示例:
1 <1 ms 192.168.1.1
2 10 ms 202.96.128.xxx
3 42 ms bjtelecom.net
...
10 129 ms 123.124.177.80 (目标IP)
信息暴露风险:
- tracert 会暴露目标服务器的真实 IP 地址(即使使用了 CDN)
- 超时节点可能表明存在防火墙拦截
- 中间网络设备信息可用于定位目标网络位置
# 2.4.2 WHOIS 查询
通过 whois 服务可查询域名注册信息:
- 域名注册时间、到期时间
- 注册机构、注册者信息(早期含完整 QQ 号等敏感信息)
- 管理和技术联系邮箱(现多已脱敏显示为星号)
防御建议:注册域名时开启隐私保护服务,避免个人信息通过 WHOIS 公开。
# 2.4.3 服务旗标识别与端口扫描
旗标抓取(Banner Grabbing):
示例:连接到FTP服务
> telnet 192.168.1.100 21
220 Microsoft FTP Server (Windows 2008 R2)
FTP 等服务的欢迎信息(旗标)会暴露操作系统类型和软件版本。根据版本信息可在漏洞库(如 CVE/NVD)中查询对应已知漏洞。
端口扫描技术:
| 扫描类型 | 原理 | 特点 |
|---|---|---|
| TCP 全连接扫描 | 完成三次握手 | 准确但易被日志记录 |
| SYN 半开扫描 | 仅发送 SYN,不完成握手 | 隐蔽性强 |
| UDP 扫描 | 发送 UDP 探测包,等待响应或 ICMP 不可达 | 速度慢,可靠性低 |
协议指纹识别:通过分析目标系统 TCP/IP 协议栈响应的细微差异(如 TTL 值、窗口大小、IP 标识位行为等),可远程识别操作系统类型。
防御建议:修改默认服务旗标(如将 Apache Banner 改为 Nginx 风格),变更默认服务端口(如 SSH 从 22 改为非标准端口)。
# 2.5 信息收集防御措施
| 防护层面 | 措施 | 说明 |
|---|---|---|
| 公开信息最小化 | 减少.bak/.old 临时文件暴露 | 遵循 "能不展示就不展示" 原则 |
| 网络层防护 | 防火墙禁止 ICMP 响应、过滤 tracert 探测 | 增加网络探测难度 |
| 系统信息伪装 | 修改服务旗标、变更默认端口 | 使攻击者难以确定系统类型 |
| 敏感文件管理 | 定期清理配置文件、禁用目录列表 | 防止 Web 路径遍历和信息泄露 |
| 注册信息保护 | 域名注册开启隐私保护 | 防止 WHOIS 泄露个人信息 |
# 2.6 缓冲区溢出攻击
# 2.6.1 原理与危害
缓冲区溢出是最危险、最经典的二进制漏洞类型,其本质是利用程序未对输入长度做严格校验的缺陷,通过输入超长数据破坏程序堆栈,改变程序执行流程。
危害等级:可导致攻击者获取系统最高权限。
攻击本质:
用户输入 → 超出缓冲区容量 → 覆盖相邻内存区域 → 劫持EIP寄存器 → 执行恶意代码
# 2.6.2 堆栈结构与溢出过程
EIP 寄存器的关键作用:EIP(Extended Instruction Pointer)存储 CPU 下一条指令的内存地址,是程序执行流程的控制器。
正常堆栈布局: 溢出后堆栈布局:
┌─────────────────┐ ┌─────────────────┐
│ name[0..7] │ │ name[0..7] │ ← 输入数据
├─────────────────┤ ├─────────────────┤
│ name[8..15] │ │ name[8..15] │ ← 溢出覆盖
├─────────────────┤ ├─────────────────┤
│ 其他局部变量 │ │ 被覆盖 │
├─────────────────┤ ├─────────────────┤
│ 保存的EBP │ │ 被覆盖 │
├─────────────────┤ ├─────────────────┤
│ EIP(正常地址) │ │ EIP = 0xaaaa │ ← 恶意地址
└─────────────────┘ └─────────────────┘
CPU读取EIP → 跳转到无效地址 → 崩溃
攻击完整步骤:
- 寻找存在缓冲区溢出漏洞的程序
- 精心构造溢出数据(数据部分嵌入恶意 shellcode)
- 精确计算偏移量,控制 EIP 跳转到 shellcode 起始地址
- shellcode 执行 → 攻击者获取系统控制权
核心难点:必须能精确控制 EIP 中的跳转地址,这需要攻击者了解目标系统的内存布局。
# 2.6.3 防范技术
| 层级 | 防护技术 | 原理 | 效果 |
|---|---|---|---|
| 用户层面 | 及时安装系统补丁 | 修补已知溢出漏洞 | 消除已发现漏洞 |
| 用户层面 | 启用防火墙防护 | 限制异常网络通信 | 阻止远程利用 |
| 开发层面 | 使用安全函数 | strncpy() 替代 strcpy() , snprintf() 替代 sprintf() | 边界检查防止溢出 |
| 开发层面 | 输入验证 | 严格校验用户输入的数据长度和格式 | 源头控制 |
| 编译层面 | Stack Canary | 栈帧中插入检测值,溢出检测后终止 | 阻止栈溢出利用 |
| 系统层面 | DEP/NX | 栈和堆标记为不可执行 | 阻止 shellcode 执行 |
| 系统层面 | ASLR | 随机化基地址 | 增加跳转地址预测难度 |
| 系统层面 | RELRO | 保护 GOT 表 | 阻止 GOT 覆盖攻击 |
CISP 考试重点:理解 EIP 被改写导致控制流劫持的过程,以及 DEP 和 ASLR 两种关键防护技术的原理。
# 第三章 恶意代码防护
# 3.1 恶意代码概述
恶意代码(Malicious Code / Malware)是指以破坏、窃密或非法控制为目标的程序,表现形式包括二进制可执行文件、脚本语言、宏指令等。
常见恶意代码类型:
| 类型 | 特征 | 示例 |
|---|---|---|
| 病毒(Virus) | 寄生于宿主文件,需要宿主程序激活 | CIH 病毒、宏病毒 |
| 蠕虫(Worm) | 自我复制,通过网络自动传播 | Stuxnet(震网)、Slammer |
| 木马(Trojan) | 伪装成正常程序,隐蔽执行恶意功能 | 远控木马(灰鸽子) |
| 后门(Backdoor) | 绕过正常认证机制获取系统访问权限 | 预留账户、隐蔽通道 |
| 勒索软件(Ransomware) | 加密用户数据并索要赎金 | WannaCry、LockBit |
| Rootkit | 深度隐藏自身和攻击者行为,修改内核数据结构 | 内核级 Rootkit |
| 流氓软件(Rogueware) | 虚假安全警告恐吓用户付费(当前最常见类型之一) | 假杀毒软件 |
防护原则:以预防为主,"能不动就不动" 是最佳防护标准。
# 3.2 恶意代码传播方式
三种主要传播途径:
文件传播
- 感染正常文件并嵌入恶意代码
- 典型案例:中国常见的软件捆绑安装(隐藏 "更多" 按钮下的自动安装选项)
网络传播
- 途径:网页挂马、电子邮件附件、即时通讯链接、漏洞利用
- 特点:传播速度快、波及范围广
软件部署
- 隐蔽形式:逻辑炸弹(满足特定条件触发破坏)、预留后门(厂商或开发者预置)、文件捆绑
- 危害:可能连带安装大量恶意软件
# 3.3 恶意代码预防技术
三层防护体系:
意识层:增强安全意识 → 不打开可疑附件、不点击未知链接
漏洞层:补丁管理 + 主机加固 → 减少漏洞数量
威胁层:软件防护 + 硬件防护 → 降低威胁影响
防护技术细节:
| 防护类型 | 技术方案 | 说明 |
|---|---|---|
| 软件防护 | 防病毒软件、反间谍软件 | 终端基本防护 |
| 硬件防护 | 企业级防毒墙 | 部署于流量必经之路,网络层拦截 |
| 设备防护 | 防火墙、路由器严格策略 | 网络边界控制 |
# 3.4 恶意代码检测技术
# 3.4.1 特征码扫描(签名检测)
| 维度 | 说明 |
|---|---|
| 机制 | 基于病毒特征库的精确指纹匹配(恶意代码核心代码不变性) |
| 优点 | 准确率高,误报率低,管理简便 |
| 缺点 | 病毒库不断膨胀影响效率;对新病毒 / 变种无效;滞后于病毒出现 |
| 典型应用 | 传统防病毒软件 |
考试重点:特征码扫描是黑名单机制,只能检测已知恶意代码。
# 3.4.2 行为检测(启发式检测)
| 维度 | 说明 |
|---|---|
| 机制 | 基于统计数据的白名单机制,建立正常行为基线,检测偏离基线的异常行为 |
| 优点 | 可检测未知病毒和变种 |
| 缺点 | 误报率高(符合 "病毒不可判定原则") |
| 改进方案 | 特征码扫描 + 行为检测结合使用(如 360 的多引擎机制) |
易混淆点:特征码扫描 = 黑名单(已知恶意),行为检测 = 白名单(偏离正常)。
行为检测典型场景:文本编辑软件突然进行注册表写入、频繁访问特定网站、大量加密文件操作等异常行为。
# 3.5 恶意代码分析技术
静态分析 vs 动态分析对比:
| 对比项 | 静态分析 | 动态分析 |
|---|---|---|
| 执行方式 | 不执行代码,直接分析二进制 | 在沙盒 / 虚拟机中实际运行 |
| 分析内容 | 文件特性、PE 结构、API 调用表 | 文件读写、注册表操作、网络通信 |
| 优点 | 安全(不触发恶意行为) | 可观察真实行为 |
| 缺点 | 难以分析混淆 / 加壳代码 | 恶意代码可能检测虚拟机环境 |
| 工具 | IDA Pro、Ghidra、strings | Cuckoo Sandbox、Process Monitor |
# 3.6 恶意代码清除方法
| 感染类型 | 清除方法 | 注意事项 |
|---|---|---|
| 引导区感染 | 修复或重建主引导记录(MBR) | 需使用系统修复工具 |
| 附着型文件感染 | 逆向还原:删除嵌入的恶意代码部分 | 需精确理解文件格式结构 |
| 替换型文件感染 | 从备份中还原原始正常文件 | 需确认备份未被感染 |
| 独立文件型 | 先终止内存中进程 → 再删除文件 | 顺序不能颠倒,否则文件重新激活 |
| 软件嵌入型 | 更新或重装软件 | 清除后应及时更改相关密码 |
| 系统级感染 | 重置 / 重装操作系统 | 底层感染(如 Bootkit)时唯一有效方法 |
# 3.7 基于互联网的恶意代码防护
高级防护技术:
蜜罐与蜜网:
- 蜜罐(Honeypot):故意部署的有缺陷系统,诱使攻击者攻击,从而研究和记录攻击行为
- 蜜网(Honeynet):由多个蜜罐组成的模拟网络,提供更真实的攻击场景
云查杀技术:
- 基于分布式计算,客户端无本地病毒库,依赖云端引擎和数据库进行查杀
- 优势:实时更新样本库,减轻终端计算和存储负担
- 代表产品:360 云查杀系统
# 第四章 应用安全
# 4.1 应用安全威胁概述
应用安全是 CISP 计算环境安全的重要组成部分,威胁来源覆盖整个应用架构:
终端用户 ← → 传输协议 ← → 应用服务器 ← → 数据库服务器
↓ ↓ ↓ ↓
浏览器漏洞 HTTP明文 IIS/Apache SQL注入
(XSS等) (窃听) 配置漏洞 (数据泄露)
四大威胁来源:
- 终端用户:客户端受攻击(浏览器漏洞、恶意插件)
- 传输协议:应用协议安全隐患(HTTP 明文传输、弱验证机制)
- 应用服务器:运行软件漏洞或配置不当(IIS、Apache、Tomcat)
- 数据库服务器:存储系统易受攻击(SQL 注入)
# 4.2 HTTP 协议安全
# 4.2.1 HTTP 工作机制
请求包结构:
方法 URL 协议/版本
请求头部(Headers)
请求正文(Body)
示例:
POST /servlet/default.jsp HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/4.0 (Firefox)
Cookie: sessionid=abc123
LastName=Franks&FirstName=Michael
响应包结构:
协议 状态码 状态描述
响应包头(Headers)
实体内容(Body)
示例:
HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
Content-Type: text/html
<!DOCTYPE html>...
关键字段解读:
| 字段 | 说明 | 安全意义 |
|---|---|---|
User-Agent | 标识浏览器类型和版本 | 可用于动态界面适配,也暴露客户端信息 |
Server | 标识服务器软件和版本 | 暴露服务器信息,建议通过配置隐藏 |
Cookie | 维护会话状态 | 可能被窃取(Session 劫持) |
Referer | 标识请求来源 | 可被用于 CSRF 防御,但也可能泄露信息 |
HTTP 状态码分类:
| 分类 | 范围 | 含义 | 示例 |
|---|---|---|---|
| 信息类 | 1xx | 请求已接收,继续处理 | 100 Continue |
| 成功 | 2xx | 成功处理请求 | 200 OK |
| 重定向 | 3xx | 需进一步操作完成请求 | 301/302 跳转 |
| 客户端错误 | 4xx | 请求包含错误 | 404 Not Found, 403 Forbidden |
| 服务端错误 | 5xx | 服务端处理失败 | 500 Internal Server Error |
# 4.2.2 HTTP 协议安全问题
三大核心缺陷:
| 缺陷 | 描述 | 风险 |
|---|---|---|
| 明文传输 | 所有数据以明文在网络上传输 | 数据包捕获可获取用户名、密码等敏感信息 |
| 弱验证机制 | 协议本身不提供强身份认证;HTTP1.1 摘要认证仅用 MD5 封装 | 中间人攻击、凭据窃取 |
| 无状态特性 | 依赖 Session 机制维持用户状 | Session 劫持、Session 伪造 |
解决方案:
- 使用 **HTTPS(HTTP + SSL/TLS)** 替代 HTTP 实现加密传输
- 隐藏服务器敏感信息(Server 头等)
- 加强 Session 管理机制(随机化 Session ID、设置 HttpOnly 和 Secure 标志等)
# 4.3 Web 服务端软件安全
# 4.3.1 服务支撑软件安全
常见安全问题:
| 问题类型 | 案例 | 影响 |
|---|---|---|
| 软件漏洞 | IIS 5.0 超长 URL 拒绝服务漏洞、Unicode 解码漏洞 | 服务器崩溃、目录遍历 |
| 配置缺陷 | 使用默认账号弱口令(admin/123456) | 未授权访问 |
| 配置缺陷 | IIS 允许远程写入 | 文件上传、WebShell 植入 |
| 配置缺陷 | 目录列表启用 | 信息泄露、文件枚举 |
防护措施:
- 部署 Web 应用防火墙(WAF),可阻挡约 90% 的已知攻击
- 对老旧系统(如 Windows Server 2003/2008)尤其有效
注意:任何安防设备都不能 100% 防护所有攻击
# 4.3.2 应用软件安全
开发缺陷:
- 未严格校验用户输入(如特殊字符:
<>'"()等) - 不安全的文件上传处理
- 错误信息暴露敏感信息
网页防篡改机制:
原理:对网页文件计算哈希值(MD5/SHA),定期轮询比对
检测到篡改后 → 自动还原备份(或手动触发)
典型场景:防止黑客修改首页植入政治敏感信息或恶意代码
# 4.4 SQL 注入攻击
# 4.4.1 注入原理
SQL 注入的本质是利用未过滤的用户输入构造非法 SQL 语句,欺骗数据库执行恶意查询。
万能密码原理:
-- 合法语句 | |
SELECT * FROM users WHERE username='admin' AND password='abcd' | |
-- 注入语句(假设输入:username=admin, password=123' OR '1'='1) | |
SELECT * FROM users WHERE username='admin' AND password='123' OR '1'='1' |
关键点:通过单引号 (
') 闭合 SQL 语句,OR 1=1使条件恒真,绕过密码验证。
注入点发现:在 URL 参数、表单输入、Cookie 等用户可控输入位置尝试注入。
-- URL 注入示例 | |
http://www.test.com/showdetail.asp?id=49' AND (SELECT COUNT(*) FROM users)>0 -- |
-- 是 SQL 注释符,用于截断原始语句的剩余部分。
# 4.4.2 SQL 注入攻击类型
| 注入类型 | 特征 | 说明 |
|---|---|---|
| 联合查询注入 | 使用 UNION 合并查询结果 | 直接获取数据内容 |
| 报错注入 | 利用错误信息推断数据库结构 | 信息泄露 |
| 布尔盲注 | 根据页面返回差异逐位推断 | 无回显时使用 |
| 时间盲注 | 根据响应延迟推断条件真假 | 无回显且无差异时可使用 |
| 二阶注入 | 恶意数据先存入数据库,后续操作中触发 | 更隐蔽 |
| 带外注入 | 通过 DNS/HTTP 等外带通道获取数据 | 防御最困难 |
# 4.4.3 危害与防御
SQL 注入的危害:
| 危害 | 说明 |
|---|---|
| 数据泄露 | 检索数据库敏感信息(用户表、支付记录等) |
| 数据操纵 | 增删改数据(如 UPDATE users SET passwd='123' ) |
| 系统入侵 | 利用数据库功能执行系统命令(SQL Server 的 XP_CMDSHELL 扩展存储过程) |
防御方法:
| 防御措施 | 实施方式 | 效果 |
|---|---|---|
| 白名单验证 | 限制输入格式(如只允许数字、固定长度) | 最严格,适用于枚举类参数 |
| 黑名单过滤 | 过滤关键字( UPDATE 、 INSERT 、 DELETE 、 ' 、 -- ) | 辅助手段,可能被绕过 |
| 参数化查询 | 使用 PreparedStatement / 参数化 SQL | 最有效,彻底分离数据和代码 |
| 最小数据库权限 | 应用账号仅授予必要权限 | 限制注入后的损失范围 |
| WAF 防护 | 部署 Web 应用防火墙 | 网络层拦截注入尝试 |
⚠️ 法律提醒:根据《网络安全法》,SQL 注入测试需获得系统所有者的书面授权,未授权测试可能构成违法。
# 4.5 跨站脚本攻击(XSS)
# 4.5.1 原理与分类
XSS(Cross-Site Scripting)的本质是攻击者将恶意脚本注入到可信网站的页面中,利用用户对目标网站的信任关系实施攻击。
根本原因:程序未对用户提交内容中的 HTML/JavaScript 代码进行过滤或转义。
三种 XSS 类型对比:
| 类型 | 特征 | 示例 |
|---|---|---|
| 存储型 | 恶意脚本被永久存储在目标服务器上 | 论坛发帖、用户评论中注入 <script> |
| 反射型 | 脚本作为请求参数立即反射回响应中 | 钓鱼链接: ?search=<script>... |
| DOM 型 | 通过客户端 JavaScript 修改 DOM 实现 | 利用前端框架的 DOM 操作漏洞 |
# 4.5.2 危害与防范
XSS 攻击危害:
- 盗取用户 Cookie → Session 劫持 → 账号盗用
- 伪造用户操作 → 以受害者身份发送请求
- 钓鱼攻击 → 伪造登录页面骗取凭据
- 重定向至恶意网站 → 诱导下载恶意软件
防范措施:
| 措施 | 说明 | 等级 |
|---|---|---|
| 输入过滤 | 对所有用户输入进行严格过滤,转义尖括号等特殊字符 | 基础 |
| 输出编码 | 根据上下文对输出进行编码(HTML 实体、URL 编码、JavaScript 编码) | 关键 |
| CSP 策略 | 内容安全策略,白名单脚本来源,禁止内联脚本 | 强力 |
| HttpOnly Cookie | 在 Set-Cookie 中设置 HttpOnly 标志,阻止 JavaScript 读取 Cookie | 基础 |
| X-XSS-Protection | 启用浏览器内置 XSS 过滤器 | 补充 |
易混淆点提醒:SQL 注入攻击的是数据库后端,XSS 攻击的是浏览器前端用户。两者攻击目标和利用方式完全不同。
# 4.6 其他 Web 应用攻击
| 攻击类型 | 描述 | 防御思路 |
|---|---|---|
| CSRF(跨站请求伪造) | 利用用户已登录状态,诱导其执行非本意操作 | CSRF Token、SameSite Cookie |
| 失效的会话管理 | Session ID 泄露、固定会话攻击 | 随机化 Session ID、HTTPS 传输 |
| 不安全的对象直接引用 | 修改参数访问未授权资源(如修改 URL 中的 ID) | 访问控制检查、不可预测 ID |
| 不安全的配置管理 | 默认配置、调试接口暴露、目录列表开启 | 安全基线配置、定期检查 |
| 未验证的重定向 | 参数控制的 URL 跳转被恶意利用 | 白名单重定向目标 |
| 异常处理不当 | 错误信息暴露堆栈信息或数据库结构 | 自定义错误页面,不暴露细节 |
# 4.7 电子邮件安全
邮件协议机制:
SMTP (25/TCP) → 发信协议,简单请求-响应模式
POP3 (110/TCP) → 收信协议,下载后本地读取
IMAP (143/TCP) → 收信协议,邮件保留在服务器
加密版本:
SMTPS (465/TCP) → SMTP over SSL
POP3S (995/TCP) → POP3 over SSL
IMAPS (993/TCP) → IMAP over SSL
电子邮件安全威胁:
| 威胁 | 描述 |
|---|---|
| 信息泄露 | 明文传输导致账号密码和邮件内容易被窃取 |
| 身份伪造 | SMTP 协议不验证发件人身份,易被伪造(社会工程学攻击) |
| 垃圾邮件 | 滥发商业广告或钓鱼邮件 |
| 附件传播 | 恶意代码通过邮件附件传播(宏病毒等) |
安全加固方案:
| 层面 | 措施 |
|---|---|
| 服务器端 | 采用 S/MIME 或 PGP 端到端加密 |
| 服务器端 | 使用 SSL/TLS 加密传输会话 |
| 服务器端 | 部署反垃圾邮件网关和 SPF/DKIM/DMARC 邮件认证 |
| 客户端 | 使用支持加密的邮件客户端(如 Outlook) |
| 客户端 | 不打开可疑附件,不点击可疑链接 |
# 第五章 数据安全
# 5.1 数据库安全措施
数据库安全的核心目标是保障数据的机密性、完整性、可用性。CISP 框架下的数据库安全措施与操作系统安全高度互补,但更侧重于数据存储层面的保护。
基础防护:
| 安全措施 | 内容 | 说明 |
|---|---|---|
| 用户管理 | 标识与鉴别、授权与访问控制 | 与操作系统类似但粒度更细 |
| 安全审计 | 记录和监控数据库操作 | 需要进行精细到字段级的审计 |
| 数据加密 | 区别于 OS 加密,保护数据存储安全 | TDE 透明数据加密、列级加密 |
| 存储管理 | 缺省存储空间控制、临时数据权限、存储空间限额 | 防止资源耗尽 |
| 资源控制 | CPU 和 IO 资源限额管理 | 防止单用户占用过多资源 |
⚠️ 注意事项:加密操作存在风险,如加密过程中可能出现 bug 导致数据无法恢复。实施加密前必须做完整备份和测试。
# 5.2 数据库安全防护
# 5.2.1 纵深防御体系
用户请求
│
▼
┌─────────────┐
│ 安全边界 │ ← 用户鉴别、过滤非法SQL请求
├─────────────┤
│ 查询引擎 │ ← 存取控制、验证表/字段级权限
├─────────────┤
│ 数据加密 │ ← 可选组件,提供高级别保护
├─────────────┤
│ 审计追踪 │ ← 完整记录所有操作日志
└─────────────┘
纵深防御理念:采用多层防线而非单点防护,安全机制贯穿整个数据库访问流程。
# 5.2.2 安全特性检查
检查维度:
| 检查项 | 具体内容 |
|---|---|
| 基础配置 | 补丁更新状态、数据库协议设置(端口、传输协议) |
| 账户安全 | 用户名密码强度、口令策略执行情况 |
| 权限管理 | 存储过程权限、触发器权限、角色分配 |
| 数据保护 | 备份机制有效性、加密实施情况 |
| 网络控制 | 数据库端口访问来源限制 |
# 5.2.3 运行监控
| 传统方案 vs 现代方案|
| 维度 | 传统机制 | 现代方案 |
|---|---|---|
| 核心 | 身份认证和访问控制为主的被动防御 | 运行时安全性和合规性检查 |
| 监控重点 | 登录审计 | 用户行为分析和违规操作识别 |
监控内容:
- 安全性:入侵检测(特征识别、模式匹配、统计分析)
- 合规性:用户行为审计,违规操作识别与报警
实施方式:通过代理监视器和分析器实现实时监控,覆盖数据库服务器、应用服务器和数据库集群。
# 5.2.4 安全审计
审计对象等级:
| 审计级别 | 范围 | 详解 |
|---|---|---|
| 标准审计 | 系统级、用户级 | 登录登出、DDL 操作 |
| 细粒度审计 | 对象级(特定表 / 字段) | 特定敏感列(如身份证号)的所有操作 |
审计记录要素:
访问来源:应用程序、客户端位置、用户账号
操作详情:操作类型(SELECT/INSERT/UPDATE/DELETE)、时间戳、涉及数据范围
执行结果:操作是否成功、影响行数(若有)
# 5.3 数据防泄露(DLP)
法律要求(《网络安全法》相关条款):
- 未经用户同意不得收集和提供个人信息
- 必须采取技术措施保障信息安全,防止数据泄露
DLP 防护框架:
| 环节 | 内容 | 实施要点 |
|---|---|---|
| 数据识别 | 明确敏感数据类型和分类分级 | 根据行业标准 (如等保 2.0) 定级 |
| 渠道监控 | 覆盖所有可能的外泄途径 | 网络、USB、邮件、打印等 |
| 行为分析 | 识别数据发送者、接收者和传输方式 | 建用户行为基线,检测异常 |
| 策略执行 | 判断违规程度并采取阻断 / 告警 / 审计 | 预防与追溯结合 |
重点行业:金融、医疗等行业有特殊合规要求,需额外关注。
# 附录:知识小结与考试重点
| 知识点 | 核心内容 | 考试重点 / 易混淆点 | 难度 |
|---|---|---|---|
| Windows SID | S-1-5-21-xxx-xxx-xxxx 格式解析 | 21 = 用户 / 80 = 服务;500 = 管理员 / 501 = 来宾 / 1000 = 首用户 | ★★★ |
| Linux UID | 0-65535 范围分配 | 0=root;非 root 账户 UID=0 即后门标志 | ★★★ |
| 权限管理 | rwx/r-x/r-x = 755 | chmod 符号模式与数字模式互转;SUID 的原理(s 位) | ★★★★ |
| SUID 机制 | 普通用户以文件所有者权限执行 | 最难理解:passwd 修改 shadow 的原理、安全风险 | ★★★★★ |
| 内存保护 | 用户空间 vs 内核空间隔离 | ASLR、DEP/NX、Stack Canary 三者的原理区分 | ★★★★ |
| 缓冲区溢出 | 超长输入覆盖 EIP 劫持控制流 | EIP 角色、溢出堆栈布局变化、DEP/ASLR 防御链 | ★★★★★ |
| Google Hacking | site/filetype/inurl/intitle 语法 | 组合搜索语法、敏感文件类型(.mdb/.bak/.old) | ★★★ |
| 信息收集防御 | 旗标修改、默认端口变更 | 最小化公开信息的策略思路 | ★★ |
| 特征码 vs 行为检测 | 黑名单 vs 白名单机制 | 误报率差异、对新病毒的有效性对比 | ★★★ |
| 静态 vs 动态分析 | 不执行 vs 沙盒执行 | 分析内容和适用场景对比 | ★★ |
| SQL 注入 | 'OR 1=1-- 闭合语句构造 | 万能密码原理、参数化查询是最有效防御 | ★★★★ |
| XSS | 存储型 / 反射型 / DOM 型分类 | XSS 攻击前端用户 vs SQL 注入攻击后端数据库 | ★★★★ |
| HTTP 协议安全 | 明文传输、弱验证、无状态三缺陷 | User-Agent 和 Server 字段的信息泄露风险 | ★★★ |
| 纵深防御 | 安全边界→查询引擎→加密→审计 | 多层防护而非单点、审计颗粒度(标准级 vs 对象级) | ★★★★ |
| 数据防泄露 | 识别→监控→分析→执行四环节 | 法律法规要求(《网络安全法》) | ★★★ |
| 密码策略 | 复杂度 + 历史 + 锁定阈值 | 锁定时间与计数器重置的优先级关系 | ★★ |
| 补丁管理 | 测试→备份→部署 | 生产环境必须先验证兼容性 | ★★ |
| EFS vs BitLocker | 文件级 vs 磁盘级加密 | 防御逻辑:访问控制失效后的最后防线 | ★★ |
CISP 计算环境安全核心复习线索:操作系统安全机制(标识→访问→权限→审计→内存→文件)→ 安全配置(最小化 + 补丁 + 远程控制)→ 攻击视角(信息收集→缓冲区溢出)→ 恶意代码防护(特征码 + 行为 + 清除)→ 应用安全(HTTP+SQL+XSS + 邮件)→ 数据安全(数据库纵深防御 + DLP)