33、网页应用程序安全测试全解析

网页应用程序安全测试全解析

1. 前期准备测试

在网页应用程序投入生产或正式上线之前,配置管理测试是必不可少的。这有助于确保在应用程序推出之前,检测并纠正任何与配置相关的漏洞。

2. 维护阶段的管理与检查

2.1 变更管理与验证

变更管理是项目中采用的一套完整流程,旨在确保变更以可见、可控和有序的方式实施。其目的是保证从变更发起、部署到监控的整个过程都能有序进行。在应用程序开发过程中,变更管理也很有必要,以确保对应用程序的任何更改都先经过讨论、批准,然后再实施。部署阶段的变更管理包括补丁管理、配置更改、操作系统或其他平台资源的升级等。具体步骤如下:
1. 提出“变更请求”,请求方必须解释变更的原因。
2. 变更请求需得到跨职能主管(如 IT 主管、信息安全官和/或数据所有者)的批准。
3. 在测试环境中对变更进行测试,观察其对生产环境中数据的影响。
4. 只有当测试结果为阳性时,才会推出变更。
5. 还制定了变更请求回滚的程序,以防变更对系统产生不利影响。

2.2 定期健康检查

应用程序部署到环境中后,并不意味着不需要进一步的测试、检查和评估。实际上,在实时生产环境中维护应用程序的平稳运行是一项巨大的挑战。健康检查结合了配置管理测试、定期漏洞评估和渗透测试活动,以确保应用程序不会因时间推移(平台元素中的某些漏洞被利用)或在运行过程中出现不安全配置而受到各种威胁。健康检查的目的是识别并纠正这种情况下的任何异常。

3. 有效安全测试的威胁模型

3.1 威胁模型概述

威胁模型是一种详细的场景,描述了特定威胁如何识别和利用给定的漏洞或一组漏洞来破坏应用程序并获取敏感信息资产。它可以帮助我们了解各种威胁源及其对敏感信息资产的访问点,进而推导出网页应用程序的安全要求。在网页应用程序的安全测试中,威胁模型也具有重要价值。安全测试人员可以使用威胁模型来设计安全测试,以识别网页应用程序中的潜在漏洞,并防止其被用于利用用户。

3.2 以登录用例为例

3.2.1 基本用例
  • 用户访问网页应用程序,会看到一个登录屏幕,包含用户名和密码字段。
  • 用户在字段中输入用户名和密码。
  • 系统根据输入的用户名和密码验证用户,并将用户登录到系统中。
3.2.2 替代流程
情况 结果
用户输入无效用户名 应用程序显示错误,用户再次看到登录页面
用户输入正确用户名但错误密码 应用程序显示错误,用户再次看到登录页面
用户连续三次输入正确用户名但错误密码 应用程序显示用户账户已锁定的错误,并提示用户通过回答密码问题重置账户密码
3.2.3 威胁模型
  • SQL 注入攻击 :攻击者可能会使用应用程序的登录字段执行 SQL 注入攻击,以访问用户数据库,然后以用户身份登录。例如,攻击者可能会使用“‘value’ OR ‘1’=‘1’”等 SQL 注入向量来绕过访问控制系统。
  • 强制浏览 :攻击者可能会通过直接访问(即无需对应用程序进行身份验证)来访问应用程序的受限页面。例如,攻击者可能会试图通过强制浏览直接访问 admin.jsp 页面。
  • 篡改认证参数 :攻击者可能会篡改提交给 Web 服务器的认证参数,从而允许访问应用程序的资源。在某些情况下,应用程序会根据发送到服务器的参数(如“authenticated”,值为‘Yes’或‘No’)来验证登录是否成功。攻击者可能会将这些参数修改为‘Yes’以登录 Web 应用程序。
  • 篡改会话标识符 :攻击者可能能够篡改会话标识符以访问合法用户会话。攻击者可能能够猜测不安全的会话标识符(如 0001)并递增它以访问用户会话。

4. 网页应用程序安全测试的关键成功因素

4.1 修复补丁方法与安全 SDLC 方法

  • 修复补丁方法 :这种方法是在几乎没有或没有进行测试的情况下将应用程序部署到生产环境中。应用程序存在大量安全漏洞,可能会被利用,之后组织会意识到某些漏洞并为其开发补丁,然后将其部署到网页应用程序中。几天后,可能会发现网页应用程序的另一组漏洞,导致相同的循环重复。这是一种战术性的网页应用程序安全方法,组织以战术方式处理安全问题,不太关注这个循环的长期影响。
  • 安全 SDLC 方法 :这种方法主张从网页应用程序的初期就考虑其安全功能。SDLC 与风险管理过程集成,旨在将安全纳入应用程序。编码、配置等基于对应用程序存储、处理和传输的关键信息资产所面临风险的理解。这种方法通过实施最佳安全功能并结合使用安全编码实践来保护网页应用程序,系统地减轻(或在某些情况下降低)对网页应用程序关键信息资产的风险。该方法还提供了一种面向过程的测试方法,提倡在整个 SDLC 中进行平衡的活动,确保将应用程序漏洞降低到最低程度。这是一种具有长期安全愿景和承诺的战略方法。

4.2 测试频率

在整个 SDLC 中使用某些测试程序是非常推荐的做法。大多数开始在网页应用程序中构建安全性的组织通常会因为缺乏测试(即疏忽)而失去这一目标。因此,在 SDLC 早期开始对网页应用程序进行测试很重要。随着时间的推移,网页应用程序的底层基础设施需要防范针对某些漏洞编写的攻击。此外,针对网页应用程序的攻击也在不断演变,网页应用程序开发组织需要意识到并积极确保应用程序能够应对新时代的复杂攻击。补丁管理、定期渗透测试和漏洞评估是确保关键任务网页应用程序安全的日常工作。

4.3 安全文档

组织必须有一套明确的程序来进行网页应用程序的安全测试。文档是安全测试过程成功的一个重要因素。所有针对网页应用程序进行的测试结果都必须进行适当记录,并根据严重程度或其他指标对发现的问题进行排名。同时,也需要有证据证明所执行的测试程序是基于风险进行评估的。文档还包括补救措施这一重要方面,对安全测试程序所发现问题采取的补救措施也需要进行记录。这在组织进行人力规模扩大或缩小时特别有用,因为它可以为承担网页应用程序安全测试工作的人员提供全面的参考指南。

4.4 测试组合

漏洞评估(VA)和渗透测试(PT)需要通过手动和自动化方法来执行。虽然自动化工具部署非常方便,只需点击一个按钮就能进行相当全面的漏洞评估,但自动化漏洞评估工具无法涵盖逻辑缺陷和更高级类型的攻击,而熟练的渗透测试人员和漏洞评估人员可以执行这些测试。因此,在进行网页应用程序的黑盒安全测试时,必须结合使用手动程序以及自动化漏洞评估和渗透测试工具。

5. 网页应用程序安全测试与安全合规性

大多数安全合规性要求并没有具体规定网页应用程序安全测试或任何特定类型的安全测试。例如,《萨班斯 - 奥克斯利法案》更侧重于内部控制和财务报表编制的控制。是否启动涉及漏洞评估和渗透测试的安全测试过程完全取决于审计师的意见。HIPAA 则基于风险评估,并依赖于从风险评估中得出的控制措施,而 GLBA 和 SB - 1386 则没有关注安全测试的具体要求。然而,PCI 标准有具体的安全测试要求,以下是一些相关要求:
- 要求 11.2 :组织需要每季度或在网络拓扑发生“重大”变化后进行内部和外部漏洞扫描。内部漏洞扫描可以由内部人员进行,但外部漏洞扫描必须由经支付卡行业安全标准委员会(PCI - SSC)批准的扫描供应商(ASV)进行。内部和外部漏洞扫描都需要关注网络和应用层漏洞,并能够检测网页应用程序漏洞(如跨站脚本攻击)。PCI - SSC 的扫描规范还要求检测不安全的数据库配置等漏洞。
- 要求 11.3 :组织需要每年进行一次内部和外部渗透测试。该渗透测试应同时关注网络和应用层。标准规定,这两项渗透测试必须由有能力执行此类测试的人员进行。
- 其他要求 :除了要求 11 之外,PCI 标准的要求 6(在 PA - DSS 情况下为要求 5)要求对所有范围内的网页应用程序进行 OWASP 前 10 大漏洞(包括跨站脚本攻击和 SQL 注入)的测试。此外,PCI 标准的要求 6.6 还要求面向外部的网页应用程序至少每年进行一次手动或自动化的网页应用程序漏洞评估,或者在面向公众的网页应用程序前部署网页应用程序防火墙。

6. 实际网页应用程序安全测试

6.1 方法与目标

网页应用程序漏洞评估(VA)的目的是尽可能多地发现系统中存在的漏洞。VA 包括对网页应用程序及其平台元素(如 Web 服务器/应用服务器、数据库和操作系统)进行测试,以识别漏洞并根据其对网页应用程序的严重程度对发现的漏洞进行排名。VA 活动通常会跟进渗透测试(PT),PT 会进一步模拟现实世界的攻击者对网页应用程序进行攻击,以提供组织可能面临的潜在攻击的概念验证,并识别和保护系统中可能存在的其他漏洞。因此,在网页应用程序部署到实时生产环境之前,同时进行 VA 和 PT 是很有价值的。

6.2 实用工具和技术

6.2.1 主要工具 - 网页应用程序代理

网页应用程序代理是一种专门用于进行网页应用程序安全评估的工具。它本质上是一个 Web 代理,可以拦截与网页应用程序之间的请求和响应,并允许测试人员修改 HTTP 请求和响应信息,以评估网页应用程序的安全漏洞。网页应用程序代理还提供了针对 XSS、SQL 注入、路径遍历等的现成攻击向量,方便测试人员进行漏洞评估和渗透测试。测试人员可以根据需要轻松修改参数信息、添加或减少参数,并更改 HTTP 请求和响应头信息。其主要功能如下:
- 蜘蛛爬行 :网页应用程序代理会爬行目标网页应用程序,以收集有关目录结构和文件的信息,并提供有关响应 HTTP 200(成功请求)和其他 HTTP 响应(如 HTTP 401(未授权进入)、HTTP 500(内部服务器错误)等)的页面信息。
- SSL 支持 :网页应用程序代理可以在 HTTPS 连接上工作,通过使用代理提供的内置 SSL 证书,可以拦截浏览器与网页应用程序之间的连接。
- 请求和响应捕获 :代理能够捕获 HTTP 请求和响应,使测试人员能够在将信息传输到网页应用程序之前实时编辑请求和响应信息。请求参数以表格形式显示,方便测试人员查看和修改。隐藏参数在网页应用程序代理中也可见。捕获请求和响应特别有用,因为用户可以绕过 JavaScript 对用户输入的验证,并拦截发送到服务器的信息。代理还具有将字符串转换为不同编码格式(如 Base64、SHA - 1 和 MD5 等)的功能。
- 扫描 :一些网页应用程序代理(如 Burp Suite Professional 和 Paros)还提供网页应用程序漏洞扫描器,用于对网页应用程序进行自动化测试。自动化漏洞评估方法与手动方法相结合,对于完成全面的网页应用程序安全评估是必要的。由于网页应用程序的攻击向量不断演变,确保代理更新到最新版本至关重要。

6.2.2 通用安全评估工具

除了网页应用程序代理之外,还可以使用一些通用安全评估工具来辅助进行网页应用程序的安全测试,但文中未详细提及这些工具的具体信息。

综上所述,网页应用程序的安全测试是一个复杂而重要的过程,需要综合考虑多个方面,包括前期准备、维护阶段的管理和检查、威胁模型的应用、关键成功因素以及实际测试的方法和工具等。同时,还需要遵守相关的安全合规性要求,以确保网页应用程序的安全性和可靠性。

7. 网页应用程序安全测试流程总结

为了更清晰地展示网页应用程序安全测试的整体流程,下面通过 mermaid 流程图和文字说明来进行总结。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(前期配置管理测试):::process
    B --> C{进入维护阶段?}:::decision
    C -->|是| D(变更管理与验证):::process
    C -->|否| E(漏洞评估 VA):::process
    D --> E
    E --> F(渗透测试 PT):::process
    F --> G{通过合规性检查?}:::decision
    G -->|是| H([结束]):::startend
    G -->|否| I(根据合规要求整改):::process
    I --> E

7.1 流程说明

  1. 前期配置管理测试 :在应用程序投入生产或上线前,进行配置管理测试,检测并纠正与配置相关的漏洞。
  2. 维护阶段管理
    • 变更管理与验证 :变更需按流程提出请求、获得批准、在测试环境测试,若有不利影响可回滚。
    • 定期健康检查 :结合配置管理测试、漏洞评估和渗透测试,识别并纠正异常。
  3. 漏洞评估(VA) :对网页应用程序及其平台元素进行测试,识别漏洞并排名。
  4. 渗透测试(PT) :模拟真实攻击者对应用程序进行攻击,提供潜在攻击的概念验证,识别其他漏洞。
  5. 合规性检查 :根据相关安全合规要求(如 PCI 标准)进行检查,若不通过则进行整改,重新进行 VA 和 PT。

8. 不同安全测试方法对比

为了帮助大家更好地理解不同安全测试方法的特点和适用场景,下面通过表格进行对比。

测试方法 优点 缺点 适用场景
修复补丁方法 快速解决已发现的漏洞 缺乏整体规划,长期安全风险高 临时应急处理,对安全要求不高的场景
安全 SDLC 方法 从源头考虑安全,系统降低风险 实施成本高,周期长 对安全要求高,长期运行的关键应用程序
自动化漏洞评估 方便快捷,可覆盖大量基础漏洞 无法检测逻辑缺陷和高级攻击 初步扫描,快速发现常见漏洞
手动渗透测试 能发现复杂漏洞和逻辑缺陷 效率低,成本高 对安全要求极高,需要深入检测的场景

9. 应对常见攻击的建议

9.1 SQL 注入攻击

  • 输入验证 :对用户输入进行严格的验证和过滤,确保输入符合预期格式,不包含恶意 SQL 代码。
  • 使用参数化查询 :在数据库查询中使用参数化查询,避免直接将用户输入嵌入 SQL 语句中。

9.2 强制浏览攻击

  • 访问控制 :实施严格的访问控制策略,确保只有授权用户能够访问受限页面。
  • URL 重写 :避免在 URL 中暴露敏感信息或直接使用文件路径,可采用 URL 重写技术进行隐藏。

9.3 篡改认证参数攻击

  • 加密传输 :使用 HTTPS 协议对认证参数进行加密传输,防止中间人攻击篡改参数。
  • 服务器端验证 :在服务器端对认证参数进行严格验证,确保参数的完整性和合法性。

9.4 篡改会话标识符攻击

  • 安全的会话管理 :使用安全的会话标识符生成算法,定期更新会话标识符,防止会话劫持。
  • 会话超时 :设置合理的会话超时时间,当用户长时间不活动时自动注销会话。

10. 总结与展望

网页应用程序的安全测试是保障应用程序安全稳定运行的关键环节。通过前期的配置管理测试、维护阶段的有效管理、合理运用威胁模型以及采用合适的测试方法和工具,可以有效降低应用程序面临的安全风险。同时,遵守相关的安全合规要求也是必不可少的。

未来,随着网络攻击技术的不断发展和演变,网页应用程序安全测试也需要不断创新和完善。例如,人工智能和机器学习技术可能会被更多地应用于安全测试中,以提高漏洞检测的准确性和效率。此外,对新兴技术(如区块链、物联网等)在网页应用程序中的安全应用也需要进一步研究和探索。总之,保持对安全测试的高度重视和持续投入,才能确保网页应用程序在复杂的网络环境中始终保持安全可靠。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值