原创 国泰君安证券 2025-04-29 08:46 中国香港
展望未来,API安全将更多地依赖于智能化和自动化的解决方案。人工智能和机器学习等新兴技术也将被更广泛地应用于API安全,实现更为主动的安全防护。
摘要:在数字化高速发展的金融行业,攻击面管理(ASM)已成为构建企业安全的核心策略之一。尽管ASM工具帮助企业从攻击者的视角识别和管理互联网资产,但作为金融服务互联互通基石的API接口,往往未在传统攻击面管理中得到足够重视和系统梳理。因此,基于主动安全防护策略,深入探讨如何有效发现、梳理和管理企业的API接口,以提升整体API安全性,确保企业资产与客户信息的安全,全面防范潜在的安全威胁,实现最佳安全实践。
关键字:API安全 主动防护 供应链安全 数据安全 安全运营 开发安全
一、引言
近年来,随着国家对网络和数据安全的重视和实战演练、红蓝对抗演练的深入推进,黑客的攻击手法不断升级演变。数字供应链攻击频繁发生,大量0day漏洞被广泛利用。通过深入分析这些漏洞的利用方式后发现,无论是第三方采购系统还是自研系统,攻击的根源大多集中在API的安全问题上。
二、API安全
1.API漏洞导致的用户信息泄漏
某机构数据泄露案例:2020年,某平台因其终端APP的业务逻辑API被非法调用,导致约3.5亿用户数据泄露;2021年,某家大型电商平台遭遇了API接口被攻击的事件,结果导致超过11.8亿用户的敏感信息,包括用户ID、昵称、手机号和用户评价等被泄露。
国外各行业信息泄露案例:2018年,某国外邮政局修复了一个API安全漏洞,其中有6000万邮政用户受该安全漏洞影响;2018年,国外某交友平台遭遇了多起严重的数据安全漏洞事件,导致大量用户数据被泄露。其中最严重的一次是在9月份,一个安全漏洞导致黑客可能控制了约5000万用户账号。接着在10月,攻击者窃取了约2900万用户的详细个人资料;2021年,攻击者利用API漏洞获取了超过7亿某国外招聘平台用户的数据,并将这些数据在某网站上进行销售。
2.目前的防护手段
为应对这些安全挑战,在开发阶段,实施DevSecOps开发安全流程,结合SAST(静态应用安全测试)和IAST(交互式应用安全测试)等工具,对代码进行全面的安全性检测,提前发现并修复潜在漏洞。上线后,通过部署WAF(Web应用防火墙)和RASP(运行时应用自我保护)等安全设备,提供实时防护。此外,现有的API安全产品从API网关、流量镜像、日志分析等多个方面对API进行全面梳理和监测,实时识别异常流量和潜在攻击行为,及时拦截安全风险。
尽管防护手段和API安全产品能够有效抵御大部分API攻击,但每天仍有大量攻击得逞。因此,可以尝试从黑客的视角实施API攻击面管理,以进一步完善API安全实践。
3.API安全实践方法论
需要遵循以下五大核心原则,即全面性、层次性、适应性、动态性和预防性。
(1)全面性原则要求从宏观角度考虑API接口涉及的所有主体,确保所有相关主体都得到识别和管理。
(2)层次性原则要求对每个主体进行深入分析,深入到每个主体的多层目录,其中不同层目录可能关联不同的系统。
(3)适应性原则要求适应各种不同的前端框架,确保无论在何种技术栈下,都能有效地进行接口管理。
(4)动态性原则要求具备高度的灵活性,能够及时更新和调整各种规则策略。
(5)预防性原则强调在安全问题发生前,通过持续监测及时发现潜在的安全漏洞,并迅速进行修复。
4.API攻击面管理架构
三、API安全实践架构方案
1.访问目标地址提取出自动加载的JS地址和静态地址
获取JS地址有如下三种方式——加载当前域JS、加载CDN JS、加载其它域JS。
(1)加载的当前域JS:访问的URL地址为https://xxx.domain.com,该URL加载了当前域的JS(https://xxx.domain.com/js/yyy.js)。
(2)加载的CDN JS:访问的URL地址为https://xxx.domain.com,该URL加载了CDN的JS(https://xxxcdn.com/js/yyy.js)。
(3)加载的其他域JS:访问的URL地址为https://xxx.domain.com,该URL加载了其它域的JS(https://xxx.domain.com:8080/js/yyy.js)。
(4)静态地址:访问的URL地址为https://xxx.domain.com,该URL地址加载了静态地址(https://xxx.domain.com/path/zzz.html)。提取静态地址的目的是在于全面获取目标网站的所有业务功能页面,确保不遗漏任何相关接口。
2.提取网页未自动加载的JS地址
请求上述步骤获取到的JS地址,通过正则匹配语法,提取出在网页源码里的JS地址。
请求上述步骤获取到的静态地址,通过正则匹配语法,提取出在网页源码里的JS地址。
3.从webpack(JavaScript 应用程序的模块打包工具)提取JS地址
下图就是通过webpack打包JS地址的效果,实际上其中一个JS地址为/static/js/chunk-60893c6c.6867bfa5.js,因此需要通过正则语法精确提取出红框里的内容,并拼接成完整的JS地址。
4.Base URL发现
Base URL可以理解为每个微服务的服务名称。在许多微服务架构的系统中,每个微服务都包含着大量的API接口,因此寻找API接口的关键之一是确定正确的微服务名称。
微服务名称通常体现在URL地址的不同路径中,这个路径我称之为Base URL。
寻找Base URL有两种方式——自动加载的URL地址里就有Base URL、自动加载的API接口里提取出Base URL。
(1)自动加载的URL地址里就有Base URL:访问的URL地址为https://xxx.domain.com,该URL地址自动加载了地址
(https://xxx.domain.com/authControl),那么可以认为authControl就是Base URL。
(2)自动加载的API接口里提取出Base URL:访问的URL地址为https://xxx.domain.com,该URL地址自动加载了某API接口(https://xxx.domain.com/ophApi/checkCode/getCheckCode),在后续的API接口提取步骤中如果发现某API接口是/checkCode/getCheckCode,那么就会将ophApi当作Base URL。
5.API接口的提取和Fuzz
(1)请求上述所有的JS地址,并通过全面的正则表达式规则提取出API接口。例如,下图所示的API接口“/service/getFile?filePath=”。
(2)使用常见的API接口字典进行Fuzz测试,内置了一些常见的API接口字符串,以补充和完善API接口的提取过程。
6.Swagger各版本解析
支持解析各种版本的Swagger规范,能够精确提取所有API接口、请求方式、参数名称和参数类型。
7.过滤危险接口
有些API接口可能涉及删除或取消等业务操作,因此需要对这些接口进行过滤。内置了以下关键字来过滤危险接口。
8.无参三种形式请求所有API接口
上述步骤已提取出所有API接口,并通过GET、POST DATA和POST JSON三种请求方式逐一请求这些接口,保存每个接口的响应包内容。
9.智能提取参数
从无参三种请求形式保存的API接口响应包中提取参数,具体包括以下三种情况:
(1)提取响应包内容中的key作为参数:
如果响应包包含字段名,这些字段名将被提取为参数。例如,提取出id和branchCollegeName。
{"code":0,"msg":"success","data":[{"id":"xxxxxx","branchCollegeName":"xxxxxxxx"}]}
(2)提取key为param或parameter时所对应的value作为参数。例如,提取出imageId。
{"code":200,"data":{"param":"imageId"}}
(3)提取响应包内容报错时,错误信息中提示缺失的内容作为参数。例如,提取出types或accountId。
{"code":1,"msg":"Required List parameter 'types' is not present","data":null}
{"code":500,"msg":"accountId不能为空"}
如下是提取出的参数名列表:
10.有参三种形式请求所有API接口