攻击面中每个资产的分类实践指南
TLDR
本文详细介绍了从业者可用于分类攻击面中每个Web应用程序和资产的方法和工具(从DNS记录和IP地址到HTTP分析和HTML内容)。您将学会从攻击者的视角查看资产,不仅了解资产的存在,还能准确理解其性质。
引言
“你无法保护你不知道存在的东西。”这是网络安全领域的常见说法(而且理由充分!)。但现实更为复杂:仅仅知道某物存在是不够的。要有效保护资产,您需要了解每个资产的具体情况。没有正确的分类,应用适当的安全流程或工具就变成了猜谜游戏。
您认为暴露的内容与实际暴露的内容之间存在差异。关键的是,攻击者只关心实际可访问的内容,而不是您认为的内容。Detectify的研究表明,平均每个组织未能测试其十分之九的复杂Web应用程序,这些程序都是潜在的攻击目标。
假设您已经识别出数千个暴露在互联网上的资产。关键的下一个步骤是确定您实际暴露的内容。不同的工具可以根据攻击面上的内容提供帮助,但与其立即关注特定工具,不如专注于用于理解每个资产的方法和数据点。
外部视角的数据点
许多数据点可用于分类。让我们按照典型连接流的顺序检查它们,假设采用外部视角的黑盒分析。内部网络数据或基于源代码的方法需要不同的方法。
本指南涵盖的资产分类方法
握手阶段
- DNS:DNS托管在哪里?使用了哪些类型的指针(A、CNAME、MX等)?它们指向哪里?是否有信息丰富的TXT记录(例如SPF、DKIM、DMARC)?
- IP:IP地址的地理位置在哪里?它属于哪个自治系统号(ASN)?是单个IP还是较大范围的一部分?
- 端口:哪些端口开放或关闭?防火墙行为如何(例如,TCP与UDP的处理,丢弃与拒绝的数据包)?
- 协议/模式:开放端口上响应什么协议(例如HTTP、FTP、SSH)?是否有嵌套协议(例如TLS上的HTTP、HTTP上的WebSocket)?
- SSL/TLS:哪个证书颁发机构(CA)颁发了证书?JARM指纹和握手数据揭示了什么?列出了哪些主题备用名称(SAN)?
深入HTTP
可用于深度分类的数据在很大程度上取决于遇到的协议。对于本博客文章,我们将主要关注HTTP,这是Web应用程序的骨干。
关键的HTTP数据点包括:
- 响应代码:是200 OK、30X重定向(重定向到哪里?)还是50X服务器错误?
- 头部:响应头部特别丰富,包括自定义X头部、Cookie和安全头部。
- 文件签名:这些是文件二进制数据的一部分的唯一标识符,通常出现在响应体的前几个字节中。
- Content-Type和Length:响应是JSON、XML、HTML吗?响应的大小是多少?
进一步深入HTML
如果响应是HTML,我们可以更深入地挖掘:
- Favicon:许多应用程序使用默认的favicon。哈希这些图标可以快速识别已知软件。
- URL模式:URL中是否有可检测的模式(例如/wp-admin/、/api/v1/、特定的查询参数结构)?
- Meta标签:name属性(例如描述、关键词、生成器)或http-equiv属性(模拟响应头部)可以揭示底层技术或CMS。
- 表单标签:表单中的结构、输入字段名称和操作URL(尤其是登录表单)可以指示特定系统。
- 代码中的链接:是否有硬编码的链接指向已知来源、文档或许可协议?
- 代码模式:JavaScript、HTML结构或CSS中的可检测模式可以指向特定框架或库。
- 第三方资源:正在加载哪些外部资源(脚本、图像、API、跟踪像素),以及从哪里加载?
其他协议
如果我们没有走HTTP和HTML的路径(例如,我们遇到了SSH或SMTP服务器),那么我们将进一步研究二进制响应或特定协议的握手数据,以了解正在运行的软件组件。然而,这是另一篇文章的主题。
数据点解析
当我们单独检查每个数据点时,指纹识别和理解暴露资产的重要机会就会出现。结合它们可以提供更丰富的见解:
DNS
- NS记录和CNAME:可用于了解托管提供商(例如AWS、Azure、GCP)、第三方SaaS应用程序和CDN/WAF。分析域名本身通常会产生这些信息。
- DNS安全记录(例如SPF、DMARC):可以揭示用于营销自动化或发票等功能的第三方服务,这可能与供应链风险评估或社会工程攻击向量相关。
工具和技术:对于小规模分析,可以使用dig命令和基本的人类模式识别进行手动检查。对于大规模测试,像MassDNS这样的开源工具非常有效。
IP
- ASN(自治系统号):有助于确定组织所有权、网络规模和范围以及地理足迹。ASN数据还可以指示底层技术提供商,因为供应商通常将IP块分配给不同的产品或服务。
工具和技术:Nmap是广泛使用的IP和端口扫描工具。大规模扫描的替代方案包括Zmap和MASSCAN。Whois查询(命令行或基于Web的)对于ASN信息至关重要。
端口
了解哪些端口开放有助于确定存在的防火墙和底层运行的系统。
- 单个端口:虽然特定端口通常与某些服务相关联(例如端口80用于HTTP),但这并不能保证。配置错误可能导致端口和服务的奇怪组合。端口状态是一种指示,而不是证明;需要探测服务以进行确认。
- 端口组合:某些开放端口的组合可以强烈指示底层系统。例如,Cloudflare通常呈现一组标准的13个开放端口,而Imperva Incapsula可能显示所有TCP端口为开放。
- 端口“欺骗”/防火墙行为:如果防火墙检测到端口扫描,它可能通过显示没有开放端口、丢弃数据包或指示所有端口开放来响应。详细分析此行为可以提供有关正在使用的边缘设备(防火墙/WAF)的线索。
- 畸形请求:发送不符合RFC的畸形请求有时可以引发比标准请求更多信息的响应。
工具和技术:对于大规模扫描,masscan速度很快,但可能会产生较多的误报。您需要在速度和准确性之间做出决定,因为它们通常涉及权衡。Nmap提供更高的准确性和服务检测功能。
协议/模式
识别的协议/模式与请求中的主机名(例如用于域前置的Host头部,或使用SNI的基于TLS的路由)、IP地址和端口的组合相关联。
- 嵌套通信:通信可以嵌套。许多基本工具可能无法捕获这些嵌套通信,无论它们是故意设计还是配置错误的结果。这可能导致对真正暴露内容的不完整理解。
工具和技术:Nmap是最著名的服务。其他工具如JA4T(用于TLS客户端/服务器指纹识别)和fingerprintx也可以帮助识别协议和服务。
SSL/TLS
- 证书颁发机构:证书是手动更新还是自动更新(例如Let’s Encrypt证书寿命短且通常自动化)?基础设施的不同部分是否使用不同的证书颁发机构?这可以暗示内部流程甚至供应链元素。
- 主题备用名称(SAN):证书是否用于其他域?从中学到什么?例如,google.com的证书在SAN下列出了50多个域。
- JARM:被动分析JARM哈希(一种主动TLS指纹识别技术)可以按配置对不同的服务器进行分组,识别默认应用程序或基础设施,甚至指纹识别恶意软件命令和控制服务器。
- 握手细节:不同的TLS服务器实现在主动探测时响应不同。分析支持的密码和TLS版本可以深入了解服务器的配置和潜在漏洞。
工具和技术:JARM指纹识别工具主动探测服务器。证书透明度(CT)日志是发现域颁发证书的宝贵公共数据源,例如crt.sh。
深入HTTP响应
响应代码
简单的200 OK状态码单独可能提供有限的信息。然而,观察应用程序对精心设计的负载的响应状态码可能更具揭示性。不同的负载将触发不同的行为,WAF可能会干扰。此外,响应代码可能因用户代理和接受头部而异。
- 10X(信息性):通常在升级到WebSocket或使用Expect头部时看到。
- 20X(成功):在没有进一步上下文的情况下,单独用于系统识别的用途有限。
- 30X(重定向):重定向头部可以提供关于底层系统、认证流程或应用程序结构的提示。例如:
|
|
重定向的响应体明确声明使用了nginx。
- 40X(客户端错误):这些通常非常有趣,因为它们可以通过针对特定类型系统量身定制的精心设计的负载触发。不同的系统有独特的404页面或错误消息。
- 50X(服务器错误):50X错误呈现自定义错误页面或详细错误消息并不罕见,这些消息可以与特定系统类型、框架甚至编程语言相关联。如果可以触发50X错误,您可能能够检测到更多。
工具和技术:常见的Web扫描工具如Burp Suite,结合人类的智慧,可以帮助我们理解更多。例如,有时触发非200状态码可能会暴露有关系统或底层技术的更多信息。作为一个例子,如果您想识别运行IBM Notes/IBM Domino的资产,请求一个不存在的nsf文件可能会有所帮助。向example.com/foo.nsf发送GET请求可以触发404响应,其中包含诸如<h1>Error 404</h1>HTTP Web Server: IBM Notes Exception - File does not exist</body>
的字符串。然而,仅仅向不存在的路径(如example.com/foo)发送请求不会触发相同的描述性错误。
响应头部
这个类别非常广泛,因此我们将重点关注关键领域:
- X-头部:自定义头部可以明确声明目标使用的技术(例如X-Powered-By: Express, X-Generator: Drupal)。一些X-头部是特定技术或中间设备独有的。
- Server头部:通常指定Web服务器软件(例如Server: Apache/2.4.58, Server: nginx)。
- 安全头部:
- 内容安全策略(CSP):可以帮助了解正在加载的底层资源,例如CDN、用于静态资产的云存储桶,或使用的跟踪像素/营销系统类型。(这对于构建潜在客户列表的销售团队也非常宝贵!) 示例:检查paypal.com的CSP可以揭示对Salesforce的依赖:
|
|
工具和技术:命令行工具如curlor HTTPie。Web模糊器如ffuf、dirsearch或gobuster(通常用于内容发现)也可用于观察基于不同路径或输入的头部变化。
文件签名
许多文件类型可以通过文件的前几个字节来识别。 工具和技术:file命令和其他命令如xxd或hexdump可用于检查这些字节。
Content-Type和Length
Content-Type头部和Content-Length的组合可以指示应用程序类型:
- 传统Web应用程序:通常响应HTML和较长的Content-Length以获取完整页面。
- API:响应JSON、XML,并且通常对于未经认证的请求具有较短的Content-Length。
- 单页应用程序(SPA):通常响应HTML,通常包含至少一个
<script>
标签,但通常比传统Web应用程序的Content-Length短得多。
工具和技术:curl在这里很有用。
进一步深入HTML
Favicon指纹识别
借助已知favicon(或其哈希)的库,这可以是一种非常快速扫描大量资产的方法。在广泛的域集上运行favicon指纹识别可以产生关于所用技术的重要见解。 工具和技术:像httpx -favicon这样的工具或像Shodan(具有favicon哈希搜索)这样的平台可以自动化此过程。
URL模式
URL的结构可能非常具有揭示性。最基本的例子是在特定路径存在管理页面(例如WordPress的/wp-admin)。其他例子是产品类别或用户配置文件如何表示(例如/product/{id}, /user/{username}),参数中使用的编码以及目录列表的存在。 工具和技术:常见路径的单词列表可以使用Burp Intruder、ffuf或dirsearch等工具发送。然后可以将正则表达式模式应用于响应数据以识别有趣的结果。
Meta标签
- name属性:默认描述、关键词或生成器标签通常指示特定的CMS或框架。
1 2 3
<meta name="generator" content="WordPress 6.2.2" /> <meta id="shopify-digital-wallet" ...> <meta name="shopify-checkout-api-token" ...>
- http-equiv属性:可以以与HTTP响应头部相同的方式使用,因此可以携带类似的识别信息。
工具和技术:这些技巧通常隐藏在工具中,并且通常是不透明的。任何DAST工具都适合此类别;例如,Nuclei具有用于这些目的的开源签名。像Wappalyzer和WhatWeb这样的工具也可以包括在内,因为它们利用类似的技术。
表单标签
表单标签中的结构和模式,尤其是登录表单,以及它们的操作URL,可以提供关于底层CMS的有力线索。 工具和技术:一些可以使用的工具是Wappalyzer、WhatWeb、curl+grep。
代码模式
查看代码模式涉及识别特征片段、函数名称、变量命名约定、CSS类结构或HTML元素排列,这些是某些框架或库的典型特征。 在分析代码模式时,我们越来越多地使用统计和语言模型来将识别的应用程序与已知示例匹配。一种方法是检查代码的语言结构并删除所有纯文本内容。然而,当代码被混淆或压缩时,这个过程变得更具挑战性。 工具和技术:BishopFox利用了Tree-sitter的绑定来解析JavaScript的抽象语法树(AST)。Detectify联合创始人兼安全研究员Fredrik Almroth探索了ANTLR用于类似目的, specifically aiming to parse GraphQL。一些有用的链接是https://tree-sitter.github.io/tree-sitter/ 和 https://www.antlr.org/。在获得AST后比较树结构涉及一个相对高级的数学领域。
代码中的链接
CMS、主题或插件包含指向其文档或许可协议的默认链接并不罕见。例如:
|
|
第三方资源
应用程序经常加载第三方资源,这些资源的类型和位置都可以提供关于应用程序本身的见解。这些信息可以揭示任何供应链依赖性或正在利用的技术组件的细节。例如,分析平台(如Amplitude)的存在通常表明应用程序具有重要意义并且正在积极开发中。 工具和技术:Wappalyzer提供这些信息,突出显示可能存在于外部JavaScript中的独特属性,例如托管在CloudFront上的那些,这是链接、域、API操作等的绝佳来源。偶尔,这些JavaScript文件可能包含敏感信息。一些值得收藏的有趣链接是TruffleHog和KeyHags。
结合所有方法
虽然单个数据点很有帮助,但它们的真正力量在结合时才能释放。只有这样,我们才能回答关于攻击面的更复杂和关键的问题。人们可能设想一个AI代理将这些拼凑起来,但更标准的方法涉及定义问题,然后选择所需的数据点和工具。
有些问题可能只需要一个数据点,而其他问题则需要结合许多数据点才能在分类中达到可接受的置信水平。考虑以下问题:
- 我们是否有陈旧的DNS端点?
- 我们是否遵守内部批准的证书颁发机构政策?
- 我们的重定向配置是否正确,其目标是否适当?
- 我们是否遵循内部安全政策关于所需技术栈?
- 所有应用程序是否都覆盖了适当的保护?
- 我们所有的API在哪里?
- 我们的配置管理数据库(CMDB)是否准确且与实际暴露的内容保持最新?
- 我们评估攻击面的全面性如何?
系统地收集和分析这些不同的数据点可以帮助安全团队超越简单的资产发现,进入更深入的理解、分类和潜在测试他们的Web应用程序。一些工具可以自动化资产分类,并提供关于哪些资产是潜在攻击目标并值得深度测试的智能建议。
了解更多
有兴趣了解更多关于Detectify的信息吗?开始2周免费试用或与我们的专家交谈。 如果您已经是Detectify客户,请不要错过What’s New页面以获取最新的产品更新、改进和新漏洞测试。