安全评估与测试:技术解析与实践指南
1. 访问控制与认证
1.1 物理访问控制
锁是一种物理访问控制手段,可阻止不必要的访问,具有预防作用,还能因增加访问难度而威慑潜在入侵者。但它并非指令控制,因为无法控制主体的行为。
1.2 认证协议
不同系统和应用使用不同的认证协议:
- Windows 使用 Kerberos 进行认证。
- RADIUS 常用于无线网络、调制解调器和网络设备。
- OAuth 主要用于 Web 应用。
- TACACS+ 用于网络设备。
1.3 端口与服务
常见服务使用的端口如下表所示:
| 服务 | 端口 |
| — | — |
| SSL/TLS LDAP 目录信息 | 636 |
| 全局目录服务(SSL/TLS) | 3269 |
| 不安全的 LDAP | 389 |
| 不安全的全局目录服务 | 3268 |
| NetBIOS 服务(TCP 和 UDP) | 137 - 139 |
| Active Directory | 445 |
| Microsoft SQL | 1433 |
| HTTPS 服务器 | 443 |
| FTP | 21 |
| Telnet | 23 |
| SSH | 22 |
| SMTP | 25 |
| POP3 | 110 |
2. 测试技术与工具
2.1 软件测试方法
- 突变测试 :对程序进行小的修改,测试修改后的程序是否按预期运行或失败,用于设计和测试软件测试用例。
- 静态代码分析 :不运行应用程序或代码,通过检查代码来发现问题。
- 回归测试 :确保更改不会引入新问题。
- 接口测试 :确保软件模块符合接口规范,能正确交换数据。
- 误用测试 :关注系统或应用可能被滥用的情况。
- 用例测试 :验证期望的功能是否正常工作。
- 动态测试 :测试软件在运行环境中如何处理随时间变化的变量。
- 手动测试 :手动测试代码。
2.2 测试工具
- Fuzzers :向应用程序提供无效或意外输入,测试格式字符串漏洞、缓冲区溢出等问题。
- OpenVAS :开源漏洞扫描工具,可进行远程网络扫描并生成漏洞报告。
- Nmap :开源端口扫描器。
- Nessus :曾是开源的漏洞扫描工具,现闭源。
- Nikto :用于扫描 Web 服务器和应用程序的漏洞。
- sqlmap :自动化检测和测试 SQL 注入漏洞的工具。
- zzuf :专门用于修改网络和文件输入以测试 Web 浏览器、图像查看器等软件的模糊测试工具。
2.3 测试类型
- 黑盒测试 :渗透测试人员对系统、软件或网络的配置和设计一无所知,是最真实的渗透测试类型。
- 白盒测试 :为测试人员提供攻击者所需的所有信息。
- 灰盒测试 :提供部分信息。
3. 日志与监控
3.1 日志协议
Syslog 是广泛用于事件和消息日志记录的协议,而 Eventlog、netlog 和 Remote Log Protocol 是虚构的术语。
3.2 日志管理
- 组策略通过 Active Directory 可确保一致的日志记录设置,并定期强制执行策略。
- 定期配置审计可能无法捕捉到审计之间的更改,本地策略可能因本地更改或部署差异而漂移。
- Windows 系统生成的日志为 Windows 原生日志格式,若要发送 Syslog 事件,需辅助应用程序或工具;企业无线接入点、防火墙和 Linux 系统通常支持 Syslog。
3.3 监控技术
- 合成监控 :使用模拟或记录的事务来监控响应时间、功能或其他性能指标的变化。
- 被动监控 :使用端口镜像或其他方法复制流量并实时监控。
- 日志分析 :通常针对实际日志数据进行,但也可对模拟流量进行分析以识别问题。
mermaid 格式流程图:
graph LR
A[日志记录] --> B[日志传输]
B --> C[日志存储]
C --> D[日志分析]
D --> E[监控与告警]
4. 漏洞管理
4.1 漏洞扫描
- 漏洞扫描器通过远程扫描收集信息,包括响应查询和连接的指纹、服务的横幅信息等。
- 认证扫描使用只读账户访问配置文件,可更准确地测试漏洞。
4.2 漏洞修复
- 简单更新应用程序提供的版本号可能会使漏洞扫描器不再标记该漏洞,但无法解决根本问题。
- 打补丁、使用解决方法或安装应用层防火墙或 IPS 可帮助修复或限制漏洞的影响。
4.3 漏洞评估报告
- SOC 报告在 2010 年取代了 SAS - 70 报告,若要做出设计和运营有效性决策,可能需要 SOC Type II 报告。
- 测试覆盖率报告衡量测试用例的完成情况,用于提供测试指标。
5. 渗透测试
5.1 渗透测试类型
- 黑盒渗透测试 :不提供关于组织、系统或防御的任何信息。
- 白盒渗透测试 :提供攻击者所需的所有信息。
- 灰盒渗透测试 :提供部分信息。
5.2 渗透测试流程
- 规划阶段 :最重要的是获得授权,其次是收集工具、搭建实验室和确定测试类型。
- 发现阶段 :包括主动和被动发现,常用端口扫描工具(如 nmap)评估目标提供的服务。
- 漏洞扫描阶段 :使用 Nessus、Nikto 等工具进行漏洞扫描。
- 利用阶段 :尝试利用发现的漏洞,可使用 Metasploit 等工具。
- 报告阶段 :生成渗透测试报告,需考虑如何安全存储和传输漏洞数据。
mermaid 格式流程图:
graph LR
A[规划阶段] --> B[发现阶段]
B --> C[漏洞扫描阶段]
C --> D[利用阶段]
D --> E[报告阶段]
6. 威胁建模与分类
6.1 应用程序威胁建模
威胁分类是应用程序威胁建模的重要部分,有助于评估攻击者的目标,从而确定应采取的控制措施。
6.2 威胁分类模型
Microsoft 的 STRIDE 威胁评估模型将威胁分为六类:
-
欺骗(Spoofing)
:涉及用户凭据和认证,或伪造合法通信。
-
篡改(Tampering)
:恶意修改数据。
-
否认(Repudiation)
:导致用户无法否认的行为发生。
-
信息泄露(Information disclosure)
:数据暴露给未经授权的个人。
-
拒绝服务(Denial of service)
:拒绝合法用户的服务。
-
权限提升(Elevation of privilege)
:为未经授权的用户提供更高权限。
7. 代码审查与测试覆盖
7.1 代码审查方法
- 静态程序审查 :通常由自动化工具执行。
- 手动代码审查 :人工逐行审查代码,适合理解代码的上下文和业务逻辑。
7.2 测试覆盖类型
- 语句覆盖 :验证测试期间代码的每一行是否都被执行。
- 分支覆盖 :验证每个 if 语句在所有 if 和 else 条件下是否都被执行。
- 条件覆盖 :验证代码中的每个逻辑测试在所有输入集下是否都被执行。
- 函数覆盖 :验证代码中的每个函数是否都被调用并返回结果。
7.3 Fagan 检查步骤
- 规划(Planning)
- 概述(Overview)
- 准备(Preparation)
- 检查(Inspection)
- 返工(Rework)
- 跟进(Follow - up)
8. 网络安全相关问题
8.1 无线网络安全
- 主动扫描 :可能触发无线 IPS 警报,需注意避免误扫客人或邻居的设备。
- 被动扫描 :可通过捕获不匹配的 MAC 地址供应商 ID、验证系统与硬件清单是否匹配以及监控 rogue SSID 或连接来识别 rogue 设备。
8.2 蓝牙安全
- 主动蓝牙扫描可确定 PIN 强度和设备的安全模式,但由于蓝牙范围有限和个人蓝牙设备的普及,扫描具有挑战性。
- 被动蓝牙扫描仅检测活动连接,通常需要多次访问才有机会识别所有设备。
8.3 网络端口安全
- 若要防止窃听,可阻止 HTTP 协议使用的端口 80,限制 Web 访问为 HTTPS 协议的端口 443。
- 若要限制管理连接,可阻止 SSH 协议使用的端口 22。
9. 关键指标与风险管理
9.1 关键绩效指标
- 修复漏洞的时间是安全团队常用的关键绩效指标。
- 代码测试的覆盖率用于衡量代码测试的有效性。
9.2 关键风险指标
识别和监控关键风险指标有助于在生命周期早期识别高风险区域,而年度风险评估仅提供某个时间点的视图,渗透测试可能会错过与安全不直接相关的风险。
9.3 风险管理标准
- NIST SP 800 - 53A 涵盖评估和测量联邦信息系统和组织中安全和隐私控制的方法。
- NIST SP 800 - 137 概述了组织建立、实施和维护 ISCM 的过程。
10. 日志管理与时间同步
10.1 日志管理问题
日志管理系统设计需考虑多方面因素,如日志数据量、网络带宽消耗、数据安全性以及分析数据所需的工作量。而缺乏足够的日志源虽可能让安全管理人员担忧数据获取问题,但并非日志管理系统设计的关键考量。
10.2 时间同步
网络时间协议(NTP)可确保系统使用相同的时间,从而为集中式日志记录基础设施中的日志提供时间顺序。Syslog 用于系统向日志服务器发送日志,无法解决时间顺序问题,而 logsync 和 SNAP 并非行业术语。
10.3 日志问题分析
常见的日志问题及原因如下表所示:
| 问题 | 原因 |
| — | — |
| 时间戳不一致 | 时区设置不当或系统时钟设置差异,常表现为一个系统使用本地时间,另一个使用格林威治标准时间(GMT) |
| 多源日志问题 | 来自多个源的日志会导致集中化和收集问题 |
| 不同日志格式 | 不同的日志格式会给解析日志数据带来挑战 |
| 日志被修改 | 这往往是入侵或恶意意图的迹象 |
11. 扫描与测试相关要点
11.1 端口扫描
Nmap 是一款非常流行的开源端口扫描器,默认情况下仅扫描 1000 个 TCP 和 UDP 端口,包括“知名”端口范围(0 - 1024)之外的端口。若使用默认设置,可能会错过大量端口。例如,默认设置下会错过 64,535 个端口。
11.2 扫描权限
当测试人员没有原始数据包创建权限(如未在受感染主机上提升权限)时,可使用 TCP connect 扫描。而 TCP SYN 扫描在大多数 Linux 系统上需要提升权限,因为需要写入原始数据包。UDP 扫描会错过大多数通过 TCP 提供的服务,ICMP 扫描只是对响应 ping 的系统进行 ping 扫描,无法识别服务。
11.3 漏洞验证
漏洞扫描器识别出潜在问题后,需要进行验证以确认问题是否确实存在。只有在确认漏洞后,才能进行报告、打补丁或其他修复操作。
11.4 测试覆盖报告
测试覆盖报告用于衡量测试用例的完成情况,是使用测试用例时提供测试指标的一种方式。而代码覆盖报告衡量的是代码的测试比例,行覆盖报告是代码覆盖报告的一种类型。
mermaid 格式流程图:
graph LR
A[漏洞扫描] --> B[发现潜在问题]
B --> C[漏洞验证]
C --> D[确认漏洞存在]
D --> E[报告与修复]
12. 代码审查与分析
12.1 静态分析
静态分析是在不运行代码的情况下审查代码,依赖数据流分析等技术,分析代码在给定输入集下的行为。黑盒和灰盒分析并非代码审查类型,黑盒和灰盒通常用于描述渗透测试类型。而 fuzzing 是向软件提供意外或无效数据输入,以测试软件的响应。
12.2 手动代码审查
当需要理解代码的上下文和业务逻辑时,手动代码审查是最佳选择。人工逐行审查代码,能考虑程序员的意图,而 fuzzing、动态和静态代码审查虽能发现手动代码审查可能遗漏的错误,但不会考虑程序员的意图。
12.3 代码审查方法对比
| 审查方法 | 特点 |
|---|---|
| 静态程序审查 | 通常由自动化工具执行 |
| 手动代码审查 | 人工逐行审查,考虑上下文和业务逻辑 |
| fuzzing 代码审查 | 提供意外或无效输入,发现软件响应问题 |
| 动态代码审查 | 测试软件在运行环境中的表现 |
13. 威胁建模与相关概念
13.1 威胁建模语言
误用案例图使用了超出典型用例图的语言,如“威胁”和“缓解”。威胁树用于映射威胁,但不使用“威胁”和“缓解”等专业语言。STRIDE 是威胁建模中使用的助记符和模型,DREAD 是风险评估模型。
13.2 威胁与控制措施
通过使用基于角色的访问控制(RBACs)进行特定操作,可以确保用户无法执行不应执行的操作。审计和日志记录有助于检测滥用行为,但不能防止滥用。数据类型、格式检查和白名单等方法可用于防止 SQL 注入和缓冲区溢出等攻击,但并非直接针对授权问题。
13.3 交易识别问题
由于共享对称密钥可被任何服务器使用,因此由共享密钥导致的交易识别问题可能涉及否认问题。如果无法通过服务器唯一识别加密交易,则无法证明交易来自特定服务器。
14. 其他安全相关要点
14.1 打印机安全
网络打印机通常通过 TCP 515 和 9100 提供服务,并在 TCP 80 和 443 上具有非安全和安全的 Web 管理接口。Web 服务器、接入点和文件服务器通常不会在 LPR 和 LPD 端口(515 和 9100)上提供服务。
14.2 蓝牙扫描
蓝牙主动扫描可确定 PIN 的强度和设备的安全模式,但由于蓝牙范围有限和个人蓝牙设备的普及,扫描具有挑战性。被动蓝牙扫描仅检测活动连接,通常需要多次访问才有机会识别所有设备。
14.3 日志归档
当日志达到允许的最大大小(如 20 MB)时,会进行归档并保留,这可能会填满磁盘。日志数据不会被覆盖,归档时也不应丢失。但仅根据给定信息,无法确定是否会遗漏必要的日志信息。
14.4 渗透测试风险
渗透测试旨在识别漏洞,利用漏洞是测试过程的一部分,而非风险。但渗透测试可能带来一些危害,如应用程序崩溃、由于系统、网络或应用程序故障导致的拒绝服务,甚至数据损坏。
15. 标准与规范
15.1 NIST 标准
- NIST SP 800 - 53A 名为“评估联邦信息系统和组织中的安全和隐私控制:构建有效的评估计划”,涵盖评估和测量控制的方法。
- NIST 800 - 12 是计算机安全的介绍。
- NIST 800 - 34 涵盖应急计划。
- NIST 800 - 86 是“将法医技术集成到事件响应中的指南”。
15.2 审计相关标准
COBIT(信息和相关技术控制目标)、ISO 27002 和 SSAE - 18(鉴证业务标准声明第 18 号)都用于审计,而 ITIL(信息技术基础设施库)是一套 IT 服务管理实践,通常不用于审计。
15.3 安全控制分类
不同的 TCP 扫描类型及其特点如下:
| 扫描类型 | 特点 |
| — | — |
| TCP Connect | 完成三次握手 |
| TCP ACK | 发送伪装成活动控制一部分的数据包 |
| TCP SYN | 发送打开新连接的请求 |
| Xmas | 发送设置了 FIN、PSH 和 URG 标志的数据包 |
mermaid 格式流程图:
graph LR
A[NIST 标准] --> B[NIST SP 800 - 53A 评估控制]
A --> C[NIST 800 - 12 计算机安全介绍]
A --> D[NIST 800 - 34 应急计划]
A --> E[NIST 800 - 86 法医技术集成]
F[审计标准] --> G[COBIT 审计]
F --> H[ISO 27002 审计]
F --> I[SSAE - 18 审计]
J[ITIL] --> K[IT 服务管理]
超级会员免费看
3596

被折叠的 条评论
为什么被折叠?



