4.1.9-映射应用程序体系结构

映射应用程序体系结构

ID
WSTG-INFO-10

总结

为了有效地测试应用程序,并能够就如何解决所识别的任何问题提供有意义的建议,了解实际测试的内容非常重要。此外,确定是否应将特定组件视为超出测试范围可能会有所帮助。

现代 Web 应用程序的复杂性差异很大,从在单个服务器上运行的简单脚本到分布在数十个不同系统、语言和组件的高度复杂的应用程序。还可能还有其他网络级组件,例如防火墙或入侵防护系统,这些组件可能会对测试产生重大影响。

测试目标

  • 了解应用程序的体系结构和正在使用的技术。

如何测试
从黑盒角度进行测试时,重要的是要尝试清楚地了解应用程序的工作原理以及哪些技术和组件已到位。在某些情况下,可以测试特定组件(如 Web 应用程序防火墙),而其他组件可以通过检查应用程序的行为来识别。

以下各节提供了常见体系结构组件的高级概述,以及如何识别它们的详细信息。

应用程序组件

网页服务器

简单的应用程序可以在单个服务器上运行,可以使用指南的部分 Web服务器指纹识别中讨论的步骤进行识别。

平台即服务 (PaaS)

在平台即服务 (PaaS) 模型中,Web 服务器和底层基础结构由服务提供商管理,客户仅对部署在其上的应用程序负责。从测试的角度来看,有两个主要区别:

  • 应用程序所有者无法访问底层基础结构,这意味着他们将无法直接修复任何问题
  • 基础结构测试可能超出任何服务的范围

在某些情况下,可以识别 PaaS 的使用情况,因为应用程序可能使用特定的域名(例如,部署在 Azure 应用服务上的应用程序将具有*.azurewebsites.net 域 - 尽管它们也可能使用自定义域)。在其他情况下,很难确定 PaaS 是否正在使用中。

Serverless无服务器

在无服务器模型中,开发人员提供的代码直接作为单个函数在托管平台上运行,而不是运行部署在 webroot 中的传统大型 Web 应用程序。这使得它非常适合基于微服务的架构。与 PaaS 环境一样,基础结构测试可能超出范围。

在某些情况下,无服务器代码的使用可能由特定 HTTP 标头的存在来指示。例如,AWS Lambda 函数通常会返回以下标头:

X-Amz-Invocation-Type
X-Amz-Log-Type
X-Amz-Client-Context

Azure Functions 不太明显。它们通常返回 Server: Kestrel 标头 - 但这本身不足以确定它是一个 Azure 应用函数,因为它可能是在 Kestrel 上运行的其他一些代码。

微服务

在基于微服务的体系结构中,应用程序 API 由多个离散服务组成,而不是作为整体应用程序运行。服务本身通常在容器内运行(通常使用 Kubernetes),并且可以使用各种不同的操作系统和语言。尽管它们通常位于单个 API 网关和域后面,但使用多种语言(通常在详细的错误消息中指示)可能表明正在使用微服务。

静态存储

许多应用程序将静态内容存储在专用存储平台上,而不是直接将其托管在主 Web 服务器上。两个最常见的平台是Amazon的S3存储桶和Azure的存储帐户,可以通过域名轻松识别:

  • BUCKET.s3.amazonaws.coms3.REGION.amazonaws.com/BUCKET 适用于亚马逊 S3 存储桶
  • ACCOUNT.blob.core.windows.net对于 Azure 存储帐户

这些存储帐户通常会公开敏感文件,如测试云存储指南部分所述。

数据库
大多数重要的 Web 应用程序使用某种数据库来存储动态内容。在某些情况下,可以确定数据库。这通常可以通过以下方式完成:

  • 端口扫描服务器并查找与特定数据库关联的任何开放端口
  • 触发与 SQL(或 NoSQL)相关的错误消息(或从搜索引擎查找现有错误)

当无法最终确定数据库时,测试人员通常可以根据应用程序的其他方面做出有根据的猜测:

  • Windows IIS和 ASP.NET 经常使用Microsoft SQL Server。
  • Embedded systems( 嵌入式系统)通常使用SQLite
  • PHP 经常使用 MySQL 或 PostgreSQL
  • APEX 经常使用 Oracle(甲骨文)

这些不是硬性规定,但如果没有更好的选择,当然可以给你一个合适的参考。

Authentication(认证)

大多数应用程序都具有用户身份验证。可以使用多个身份验证后端,例如:

  • Web 服务器配置(包括.htaccess 文件)或在脚本中硬编码密码.htaccess
    • 通常显示为 HTTP 基本身份验证,由浏览器中的弹出窗口和 WWW-Authenticate: Basic HTTP 标头指示
  • 数据库中的本地用户帐户
    • 通常集成到应用程序的表单或 API 端点中
  • 现有的中央身份验证源,例如 Active Directory 或 LDAP 服务器
    • 可以使用 NTLM 身份验证,由 WWW-Authenticate: NTLM HTTP 标头指示
    • 可以以表单形式集成到 Web 应用程序中
    • 可能需要以“域\用户名”格式输入用户名,或者可能提供可用域的下拉列表
  • 使用内部或外部提供商的单点登录 (SSO)
    • 通常使用 OAuth、OpenID Connect 或 SAML

应用程序可以为用户提供多个身份验证选项(例如注册本地帐户或使用其现有的 Facebook 帐户),并且可以对普通用户和管理员使用不同的机制。

第三方服务和 API
几乎所有 Web 应用程序都包含加载或客户端与之交互的第三方资源。这些可能包括:

  • 活动内容(如脚本、样式表、字体和 iframe)
  • 被动内容(例如图像和视频)
  • 外部接口
  • 社交媒体按钮
  • 广告网络
  • 支付网关

这些资源由用户的浏览器直接请求,使其更容易使用开发人员工具或拦截代理进行识别。虽然识别它们很重要(因为它们会影响应用程序的安全性),但请记住,它们通常超出了测试范围,因为它们属于第三方。

网络组件

反向代理

反向代理位于一个或多个后端服务器的前面,并将请求重定向到相应的目标。它们可用于实现各种功能,例如:

  • 充当负载均衡器或 Web 应用程序防火墙
  • 允许在单个 IP 地址或域(在子文件夹中)上托管多个应用程序
  • 实施 IP 过滤或其他限制
  • 从后端缓存内容以提高性能

并非总是能够检测到反向代理(特别是如果其背后只有一个应用程序),但有时您可以通过以下方式识别它:

  • 前端服务器和后端应用程序不匹配(例如具有 ASP.NET 应用程序的 Server: nginx标头)
  • 这有时会导致请求走私漏洞
  • 重复的标头(尤其是 Server 标头)
  • 托管在同一 IP 地址或域上的多个应用程序(特别是如果它们使用不同的语言)

负载均衡器

负载均衡器位于多个后端服务器的前面,并在它们之间分配请求,以便为应用程序提供更大的冗余和处理能力。

负载均衡器可能很难检测,但有时可以通过发出多个请求并检查响应的差异来识别,例如:

  • 系统时间不一致
  • 详细错误消息中的不同内部 IP 地址或主机名
  • 从服务器端请求伪造 (SSRF) 返回的不同地址

它们也可能通过特定 Cookie 的存在来指示(例如,F5 BIG-IP 负载均衡器将创建一个名为 BIGipServer.

内容分发网络 (CDN)

内容分发网络 (CDN) 是一组地理位置分散的缓存代理服务器,旨在提高站点性能。

它通常是通过将面向公众的域指向 CDN 的服务器,然后将 CDN 配置为连接到正确的后端服务器(有时称为“源”)来配置的。

检测 CDN 的最简单方法是对域解析到的 IP 地址执行 WHOIS 查找。如果它们属于CDN公司(例如Akamai,Cloudflare或Fastly - 有关更完整的列表,请参阅维基百科Wikipedia for a more complete list)),则很可能正在使用CDN。

在测试 CDN 后面的站点时,应牢记以下几点:

  • IP 地址和服务器属于 CDN 提供商,可能超出基础结构测试的范围
  • 许多 CDN 还包括机器人检测、速率限制和 Web 应用程序防火墙等功能
  • CDN 通常缓存内容。因此,在后端所做的更改可能不会立即显示在站点上。

如果站点位于 CDN 后面,则识别后端服务器可能很有用。如果未实施适当的访问控制,测试人员可能能够通过直接访问后端服务器来绕过 CDN(及其提供的任何保护)。有各种不同的方法可以允许人们识别后端系统:

  • 应用程序发送的电子邮件可能直接来自后端服务器,这可能会显示其IP地址
  • 域的 DNS 研磨、区域传输或证书透明度列表可能会在子域中显示它
  • 扫描公司已知使用的IP范围可能有助于识别后端服务器
  • 利用服务器端请求伪造 (SSRF) 可能会泄露 IP 地址
  • 来自应用程序的详细错误消息可能会暴露 IP 地址或主机名

安全组件

网络防火墙

大多数 Web 服务器将受到数据包过滤或状态检查防火墙的保护,该防火墙会阻止任何不需要的网络流量。要检测此问题,请对服务器执行端口扫描并检查结果。

如果大多数端口显示为“关闭”(即,它们返回 RST数据包以响应初始SYN数据包),则表明服务器可能不受防火墙保护。如果端口显示为“已过滤”(即,将SYN 数据包发送到未使用的端口时未收到响应),则防火墙很可能已到位。

此外,如果不适当的服务暴露在全世界(如 SMTP、IMAP、MySQL 等),这表明没有防火墙,或者防火墙配置不当。

网络入侵检测与防御系统

网络入侵检测系统 (IDS) 旨在检测可疑或恶意的网络级活动(如端口或漏洞扫描)并发出警报。入侵防御系统 (IPS) 的功能类似,但也采取措施来防止活动,通常通过阻止源 IP 地址。

通常可以通过对目标运行自动扫描工具(如端口扫描程序)并查看源 IP 是否被阻止来检测 IPS。但是,IPS 可能无法检测到许多应用程序级工具(尤其是在它不解密 TLS 的情况下)。

Web 应用程序防火墙 (WAF)

Web 应用程序防火墙 (WAF) 检查 HTTP 请求的内容,并阻止那些看似可疑或恶意的请求。它们还可用于动态应用其他控件,例如 CAPTCHA 或速率限制。它们通常利用一组已知的错误签名和正则表达式(例如 OWASP 核心规则集)来识别恶意流量。WAF 可以有效地防范某些类型的攻击(如 SQL 注入或跨站点脚本),但对其他类型的攻击(如访问控制或业务逻辑相关问题)的效果较差。

WAF 可以部署在多个位置,包括:

  • 在 Web 服务器本身上
  • 在单独的虚拟机或硬件设备上
  • 在云中,在后端服务器前面

由于WAF拦截恶意请求,因此可以通过向参数添加常见攻击字符串并观察它们是否被拦截来检测恶意请求。例如,尝试添加使用 ' UNION SELECT 1>等值调用 foo 的参数。如果这些请求被阻止,则可能存在 WAF。此外,块页面的内容可能会提供有关正在使用的特定技术的信息。最后,某些 WAF 可能会将 Cookie 或 HTTP 标头添加到可以显示其存在的响应中。
如果正在使用基于云的 WAF,则可以使用内容交付网络部分中讨论的相同方法,通过直接访问后端服务器来绕过它。

你可能感兴趣的:(4.1,信息收集,web安全)