【web安全】API安全知识整理

API 安全基本现状 https://www.akamai.com/site/zh/documents/white-paper/2024/api-security-fundamentals.pdf
OWASP API Security TOP 10中文项目 2023 http://www.owasp.org.cn/OWASP-CHINA/owasp-project/owasp-api-security-top-104e2d6587987976ee/OWASP-API%E5%AE%89%E5%85%A8Top10-2023-v1-0818.pdf
OWASP 十大 API 安全风险:2023 年版终于问世 https://www.akamai.com/zh/blog/security/owasp-top-10-api-security-risks-2023-edition
API 安全策略和基础指南 https://xie.infoq.cn/article/fb0ed41639922d2aa90befb97
正确甄别API、REST API、RESTful API和Web Service之间的异同 https://cloud.tencent.com/developer/article/1448167
浅析接口安全之WebService https://xz.aliyun.com/t/7541
菜鸟教程wsdl https://www.runoob.com/wsdl/wsdl-summary.html
SOAP协议安全攻防录 https://xz.aliyun.com/t/13285
SOAP最全Web Service渗透测试总结 https://blog.csdn.net/weixin_50464560/article/details/125022377
Graphql接口安全问题浅析 https://xz.aliyun.com/t/13733
【翻译】GraphQL API 漏洞的常见攻击方法总结 https://xz.aliyun.com/t/14913
GraphQL安全指北 https://www.freebuf.com/articles/web/184040.html

https://salt.security/

Book:API安全实战、API安全技术与实战

类别

使用模式 说明
HTTP API 这类 API 使用超文本传输协议作为 API 调用的通信协议。
RESTful API 表现层状态转换 (RESTful) 可追溯到 Roy Fielding 2000 年的博士论文,是最常见的 Web API 类型,通常使用 JSON(JavaScript 对象表示法)来存储数据。RESTful API 易于供现代前端框架(例如 React 和 React Native)使用
GraphQL API GraphQL 是一种用于 API 的查询语言,它允许客户端以声明的方式定义请求的数据,而不需要了解服务端如何返回数据。GraphQL API 允许客户端在单个请求中同时获取多个资源,从而减少网络请求的数量,并使客户端可以更轻松地使用
SOAP SOAP 使用详细的可扩展标记语言 (XML) 进行远程过程调用(RPC)。
XML-RPC XML-RPC 是通过互联网进行过程调用的一种方法,使用 XML进行编码并用 HTTP 作为通信协议。
gRPC gRPC API 是 Google 开发的 HTTP/2.0 高性能二进制协议,主要用于东西向通信。
OpenAPI OpenAPI 是 API 的一种描述和文档规范。在旧版本中,OpenAPI 被称为 Swagger,两种说法现在仍然经常混淆使用。

什么是南北向 API?
这些 API 是企业供外界访问的 API,主要用于与业务合作伙伴开展业务。这种情况称为 API 开放。例如,支持开放银行业务的银行可能通过 API 向其他金融科技企业或金融服务企业开放其帐户。医疗保健企业可能通过 API 向保险公司和其他医疗企业开放患者记录。南北向 API 通常被认为是安全的,因为 API 访问已获得授权并已经过身份验证。这些 API 通常增长极快且数量庞大,因此对大多数企业而言是很大的攻击面。
什么是东西向 API?
这些 API 是企业内部使用的 API,企业外部的任何人都不应访问。这些 API 连接内部应用程序,或者连接业务单位或部门。

API安全问题

  • 漏洞利用:底层基础架构中的技术漏洞可能会导致服务器受损。此类漏洞的例子很多,从 Apache Struts 漏洞(CVE-2017-9791、CVE-2018-11776 等)到 Log4j 漏洞(CVE-2021-44228 等)都包括在内。
  • 业务逻辑滥用:这些可怕的场景时常让首席信息安全官 (CISO) 彻夜难眠,因为传统的安全控制措施对此毫无用处。逻辑滥用是指攻击者利用应用程序设计或实施的缺陷来引发意外行为和未经批准的行为。
  • 未经授权的数据访问:API 滥用的另一种常见形式是攻击者利用失效的授权机制来访问其无权访问的数据。这些漏洞有很多名称,例如失效的对象级授权 (BOLA)、不安全的直接对象引用 (IDOR),以及失效的功能级授权 (BFLA)。最新的漏洞列表可以在OWASP API 安全项目网站上查看。
  • 帐户接管:在凭据被盗乃至 XSS 攻击之后,帐户可能会被接管。一旦发生这种情况,即使是编写得最好、安全性最高的 API 也可能被滥用。毕竟,如果不执行行为分析,任何经过身份验证的活动都被视为合法使用。
  • 数据抓取:如果企业通过公共 API 提供数据集,攻击者就可能积极查询这些资源,以便批量捕获大体量、有价值的数据集。
  • 业务拒绝服务 (DoS):API 攻击者如果请求后端执行繁重任务,可能引发应用程序层的“服务侵蚀”或完全拒绝服务(GraphQL 中十分常见的一个漏洞,但任何资源密集型 API 端点实施都可能发生这种情况)。

可以使用postman进行测试,优点是方便,种类齐全:https://www.postman.com/downloads/
针对API的安全问题测试和普通的web安全没有什么区别,只是攻击载荷需要满足特定的要求

1
2
3
4
url很多时候就会有特征
/api/openapi.json
/api/v2/swagger.json
/api/v1/swagger.yaml

Web Service API

https://cloud.tencent.com/developer/article/1666998
WSDL(Web Services Description Language)即网络服务描述语言,用于描述Web 服务的公共接口。这是一个基于 XML 的关于如何与 Web 服务通讯和使用的服务描述;也就是描述与目录中列出的 Web 服务进行交互时需要绑定的协议和信息格式。通常采用抽象语言描述该服务支持的操作和信息,使用的时候再将实际的网络协议和信息格式绑定给该服务。SOAP、REST其实也都是Web Service API
wsdl是一个xml,用于说明soap消息及如何使用这些消息,通常形式为asmx?wsdl
查询语法:inurl:(_vti_bin | api | webservice | ws | ?wsdl )`,探测诸如“.dll?wsdl”、“.ashx?wsdl”、“.exe?wsdl”或者“.php?wsdl”等等的Web Service地址。

利用工具:SoapUI、ReadyAPI,这两个都是导入相应的api文档后自动化生成测试用例进行安全测试,Burpsuite的WSDLer插件

SOAP 安全

SOAP(Simple Object Access Protocol)简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于 XML(标准通用标记语言下的一个子集)的协议,它被设计成在 WEB 上交换结构化的和固化的信息。SOAP 不是 Web Service 的专有协议。SOAP 使用 HTTP 来发送 XML 格式的数据,可以简单理解为:SOAP = HTTP +XML
探针:目录&JS 资源
利用:SoapUI&EXP
https://github.com/lijiejie/swagger-exp
https://github.com/jayus0821/swagger-hack
特征指纹:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/swagger
/api/swagger
/swagger/ui
/api/swagger/ui
/swagger-ui.html
/api/swagger-ui.html
/user/swagger-ui.html
/libs/swaggerui
/api/swaggerui
/swagger-resources/configuration/ui
/swagger-resources/configuration/security

Swagger接口漏洞测试类型
接口越权
接口SQL注入(针对所有查询接口)
接口未授权访问(重点针对管理员模块,如对用户的增删改查)
任意文件上传(针对上传接口进行测试)
测试信息泄露(重点针对用户、订单等信息查询接口,以及一些测试数据等)

REST API 安全

REST(Representational State Transfer)即表述性状态传递,在三种主流的Web 服务实现方案中,因为 REST 模式的 Web 服务与复杂的 SOAP 和 XML-RPC 对比来讲明显的更加简洁,越来越多的 Web 服务开始采用 REST 风格设计和实现。例如,Amazon.com 提供接近 REST 风格的 Web 服务进行图书查找;雅虎提供的 Web 服务也是REST 风格的。

Astra:针对REST API的自动化安全测试工具 https://www.freebuf.com/sectool/232503.html

HTTP API

webpack是一个前端的模块化打包(构建)的工具,webpack将一切繁杂的、重复的、机械的工作自动处理,开发者只需要关注于功能的实现的
探针:插件&JS 资源
利用:PackerFuzzer
https://github.com/rtcatc/Packer-Fuzzer
可以使用wapplyzer帮助识别网站是否是由webpack构建

如果看到有很多.js文件之类的,还有webpack就有可能是了

GraphQL 安全

GraphQL是一种API查询语言,是为了促进客户端和服务器之间的高效通信。从这个单词上看,感觉和SQL的区别就在于语句结构吧,术业有专攻,GraphQL是用来查询API的。它使用户能够准确指定他们想要在响应中包含哪些数据,从而有助于避免有时在REST API中出现的大型响应对象和多次调用,这个应该是防止返回意外的数据。
GraphQL服务定义了一个合约,客户端可以通过该合约与服务器进行通信。客户端不需要知道数据保存在哪里。相反,客户端将查询发送到GraphQL服务器,该服务器从相关位置获取数据。由于GraphQL与平台无关,因此它可以使用多种编程语言来实现,并且可用于与几乎任何数据库进行通信。

GraphQL查询是从数据存储中检索数据。它们大致相当于REST API中的GET请求。查询通常具有以下关键组成部分:

  • 一个查询操作类型。这项是可选的,但是一般建议还是选,因为它明确告诉服务器传入的请求是一次查询。
  • 查询名称。就是给你的查询起个名字,也是可选的,但是一般建议还是选,因为它可以方便我们调试。
  • 一种数据结构。这是查询应返回的数据。
  • 可选的一个或多个参数。它们用于创建返回特定对象详细信息的查询(例如”给我ID为123的产品的名称和描述”)

下面的示例显示了一个名为myGetProductQuery的查询,该查询请求获取id为123产品的名称和描述字段:

1
2
3
4
5
6
query myGetProductQuery {
getProduct(id: 123) {
name
description
}
}

变更,顾名思义,就是变更,增删改都属于变更的范畴。大致相当于REST API的POST、PUT和DELETE方法。与查询一样,变更也具有返回数据的操作类型、名称和结构。然而,变更总是需要某种类型的输入。可以是内联值,但实际上通常作为变量引入。
下面的示例显示了创建新产品的变更及其相关响应。在这种情况下,该服务被配置为自动为已按请求返回的新产品分配ID:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mutation {
createProduct(name: "Flamin' Cocktail Glasses", listed: "yes") {
id
name
listed
}
}

{
"data": {
"createProduct": {
"id": 123,
"name": "Flamin' Cocktail Glasses",
"listed": "yes"
}
}
}

如果我们将query{__typename}发送到任何GraphQL端点,它将在其响应中的某处包含字符串{"data": {"__typename": "query"}}。这称为通用查询,是探测URL是否对应于GraphQL服务的有用工具。该查询之所以有效,是因为每个GraphQL端点都有一个名为__typename的保留字段,该字段以字符串形式返回查询对象的类型。可能存在的探测接口如下:

1
2
3
4
5
/graphql
/api
/api/graphql
/graphql/api
/graphql/graphql

如果这些常见端点不返回GraphQL响应,我们还可以尝试/v1附加到路径。我们应该牢记一个知识点,就是GraphQL服务通常会响应任何非GraphQL请求,并显示”查询不存在”或类似错误。

5个最常见的GraphQL安全漏洞 https://zhuanlan.zhihu.com/p/554808001

实践

https://github.com/snoopysecurity/dvws-node

API安全防护视角

  • 设法将 API 安全防护标准和实践整合到企业的软件开发生命周期中
  • 将 API 文档和自动化安全测试纳入持续集成/持续交付 (CI/CD) 管道
  • 确保对 API 应用适当且有效的身份验证和授权控制
  • 实施速率限制措施,帮助防止 API 滥用或崩溃
  • 使用专用网关和/或内容交付网络增强速率限制和其他应用程序级措施,以抵御分布式拒绝服务 (DDoS) 攻击
  • 让 API 安全防护测试成为更大范围的应用程序测试流程中不可或缺的一部分
  • 执行持续的 API 发现
  • 实施系统化的方法来识别和修复常见 API 漏洞,包括OWASP 十大 API 安全风险
  • 使用基于签名的威胁检测和预防,作为针对已知 API 攻击的基准级防护
  • 利用 AI 和行为分析来增强基于签名的检测,使 API 威胁检测的扩展性、准确性和业务相关性更强,并且能够抵御新型威胁
  • 确保 API 安全监控和分析持续数周并覆盖多个 API 会话
  • 作为对 API 安全监控和告警的补充,为威胁搜寻人员、开发人员、DevOps 和支持人员提供对 API 清单和活动数据的按需访问权限

API 安全防护解决方案包含哪些内容?

  • 身份验证和授权: API 安全防护解决方案涉及对访问 API 的用户进行身份验证和授权,确保只有已获得授权的用户才能访问和操作数据。身份验证方法包括多重身份验证、OAuth、OpenID Connect 和 API 密钥,而授权方法包括基于角色的访问控制和基于属性的访问控制。
  • API 网关: API 网关作为所有 API 请求的入口点,是综合性 API 安全防护解决方案的组成部分。网关可以执行多种功能,包括身份验证、速率限制、流量管理和缓存,并且有助于防止分布式拒绝服务 (DDoS) 等攻击。
  • 加密: API 安全防护解决方案还涉及加密,用于保护通过 API 传输的数据的安全,确保攻击者无法拦截数据。加密技术包括 SSL、TLS 和 AES 加密,可用于加密 API 请求、响应和静态数据。
  • 速率限制: 速率限制是 API 安全防护解决方案的一项功能,通过限制用户在指定时间段内可以发出的请求数量,来帮助防止拒绝服务攻击。速率限制可以按不同的 IP 地址、用户帐户或其他参数来设置,有助于防止攻击者用大量请求淹没 API。
  • 审计和日志记录: API 安全防护解决方案还应包括审计和日志记录,通过监测 API 活动来帮助检测和抵御安全威胁。审计涉及跟踪 API 请求和响应,而日志记录涉及用安全、防篡改的方式记录 API 事件和活动。
  • API 测试: API 安全防护解决方案还涉及对 API 进行测试,以识别漏洞和潜在的安全风险。API 测试可以手动执行或使用自动化工具执行,有助于确保 API 安全无虞和按预期运行。
  • API 监控和运行时保护: API 安全防护解决方案必须对 API 行为进行监控。了解正常行为与异常滥用的区别是保护 API 免遭恶意攻击的重要部分。
  • 漏洞管理: API 安全防护解决方案还涉及漏洞管理,这包括识别和解决 API 中的安全漏洞。漏洞管理可以包括漏洞扫描、修补和修复,可帮助防止攻击者利用 API 中的已知漏洞。

Spring Security 的 REST API 与微服务安全(2024 最新版) https://developer.aliyun.com/article/1487156

我感觉其实web安全就是在对api进行测试,其实都是和后端进行交流,只是交流的语言方式不同罢了,所以测试方式也都类似,只是规范化的api会提供相应的词典,一定程度上更加方便了fuzz