API安全建设白皮书 目录 前言3 1.API是什么3 1.1.API的定义3 1.2.API的类型4 1.3.小结5 2.API的安全挑战5 2.1.API防护缺失已成业务和数据安全最大风险敞口6 2.2.API面临的主要安全问题6 2.2.1.API资产不可见6 2.2.2.攻击面增加7 2.2.3.API攻击更加隐蔽8 2.2.4.监管合规性挑战9 2.3.小结10 3.API全生命周期安全防护10 3.1.API安全设计的指导原则11 3.1.1.5A原则11 3.1.2.纵深防御原则12 3.2.API生命周期的安全防护模型13 3.2.1.设计阶段:引入威胁建模14 3.2.2.开发阶段:安全开发意识和规范培训,引入安全工具15 3.2.3.测试阶段:漏洞加入测试流程,使用AST类工具提高覆盖率16 3.2.4.上线运行阶段:借助网关、WAF和流量审计工具提早感知攻击面17 3.2.5.迭代阶段:利用安全工具及时审计API变更21 3.2.6.下线阶段:及时下线僵尸影子API21 3.3.小结22 结束语22 前言 数字经济时代,数据成了重要生产要素,对数据要素的掌控和利用能力,已成为经济增长的核心驱动力。数据因其变现价值极高使其成为企业的重要资产,与此同时围绕数据的攻防也变得越来越剧烈,数据的安全是网络安全不可或缺的重要组成部分。 在云计算、大数据、物联网、人工智能、5G等新兴技术的推动下,伴随着近些年的疫情因素,大部分企业都在积极推进数字化和在线化转型。数字化和在线化使得连接数据和应用的API爆炸式增长。企业通过API的能力将数据资源整合,提供给到用户、合作伙伴、内部员工等多方使用,让数据在多方流动起来,并借助云智物大移的技术提高企业的生产效率。API在数字化转型中扮演的角色将愈发重要,通过API来进行数据交换和实现业务逻辑成为最常见的方式,每个API都有可能成为一个攻击面,API增多,漏洞也会增多,API也因此成为攻击者的重点攻击对象。 2022年国家级攻防演练新增了对于数据泄漏的攻防点,说明数据的安全保护逐步从监管法规落实到具体的攻防实战中来。虽然入侵拖库带来的数据泄漏随着网络边界安全水位增高,难度已经非常大了,但近些年因API安全问题导致的数据泄漏事件却频频发生,可以看到API安全是一个常见但似乎又不为人熟知的挑战。OWASP每年整理APISecurityTop10问题都会有新的变化,值得每个企业关注并更新应对策略。从传统的WAF到Gartner提出的WAAP方案,API的安全问题成为行业关注的新焦点。 1.API是什么 1.1.API的定义 API(ApplicationProgrammingInterface,应用程序接口)是一种计算接口,定义了软件之间的数据交互方式、功能类型。随着互联网的普及和发展,API从早期的软件内部调用的接口,扩展到互联网上对外提供服务的接口。调用者通过调用API,可以获取接口提供的各项服务,而无须访问源码,也无须理解内部工作机制的细节。 目前我们讨论的API更多是指WebAPI,不同于由操作系统或库公开给在同一台机器上运行的应用程序的API。WebAPI是一种编程接口,由一个或多个公开暴露的端点组成,指向已定义的请求-响应消息系统,通常以JSON或XML表示。 1.2.API的类型 WebAPI被定义为基于HTTP,今天看到的四种主要类型的WebAPI: RESTfulAPI:可以追溯到RoyFielding在2000年的博士论文,代表性状态传输是最常见的WebAPI类型,通常使用JSON(JavaScript对象表示法)来处理数据。RESTfulAPI很容易被现代前端框架(例如,React和ReactNative)使用,并促进Web和移动应用程序的开发。它们成为任何WebAPI的事实上的标准,包括用于B2B的那些,是目前的主流应用风格。 SOAPAPI:SOAP使用详细的扩展标记语言(XML)进行远程过程调用(RPC)。目前使用比较少,在一些老旧的系统能还能看到。 GraphQLAPI:Facebook开发的新GraphQL标准通过单个POST端点(通常是/graphql)提供数据库访问,多用于具有图结构的数据场景,实际应用目前比较少见。 gRPCAPI:一种新的、Google开发的基于HTTP/2.0的高性能二进制协议,主要用于一些海量用户的高并发请求的场景。 1.3.小结 在当今应⽤程序驱动的世界中,创新的⼀个基本元素就是API。从银⾏、零售、运输到物联⽹、⾃动驾驶汽⻋和智慧城市,API是现代移动端、SaaS和web应⽤程序的关键部分,企业在⾯向客户、⾯向合作伙伴和机构内部的应⽤程序中随处可⻅API的使⽤。Akamai的统计报告指出“API请求已占所有应用请求的83%,预计2024年API请求命中数将达到42万亿次”。从本质上讲,API暴露了应⽤程序的逻辑和敏感数据,如个⼈身份信息,正因为如此,它越来越多地成为攻击者的⽬标。 没有安全的API,快速创新将是不可能的。 2.API的安全挑战 从API的发展过程可了解到,API安全问题一直伴随着API技术的发展而不断变化。API安全是从安全的角度关注API领域的安全问题和这些问题的解决方案,关注的安全领域与传统的Web安全比较接近,但又不同于Web安全。传统Web安全更多的是关注Web应用程序的安全性,以服务器端应用程序安全为主,其漏洞表现形式主要为SQL注入、XSS、CSRF等。而新形势下的API由于承载了业务逻辑和数据流动,随着微服务和云计算的发展,模块之间越来越独立,每个模块可以根据请求需要动态扩容,原来的服务器边界被打破;攻击面不断扩大的情况下带来了新的安全管理问题和安全技术问题,面临的外部环境比传统的Web安全更为复杂。 从云管端的角度来看,API安全在服务器端包含API服务及其运行环境(与传统Web安全相似)的安全,管道侧包括API消息传输的安全,终端包含API客户端应用程序、IoT设备的安全、监管政策的安全风险等。从安全场景分类的角度来看,API安全包含了网络安全、Web应用安全、安全开发、监管合规多个方面。在网络层面,API安全主要关注客户端与API服务器端之间的通信安全;在Web应用层面,重点关注API客户端与API服务器端之间的协议规范、账号的安全、应用安全审计、常见的API漏洞以及如何通过API安全设计规避这些安全问题;在安全开发层面,从API生命周期的角度,结合SDL或DevSecOps模型来综合管理API开发过程的安全性;在监管合规层面,需要结合法律法规和行业监管要求,考虑API数据隐私保护和合规性设计。 2.1.API防护缺失已成业务和数据安全最大风险敞口 2021年IBMSecurityX-Force报告中指出,其分析的数据安全事件中有三分之二是由不安全的API造成的。据Gartner提供的数据显示,到2025年,由于API的爆炸式增长超过了API管理工具的能力,将有50%的企业出现API安全防护缺位,并且有90%的企业仅能为其公开发布的API进行保护,而其它API则不受监控,并且大部分企业缺乏API安全的实践经验。Gartner因此预测,到2022年,API滥用将成为导致企业Web应用程序数据泄露最常见的攻击媒介,甚至在2024年API安全问题引起的数据泄露风险将翻倍。 下图是近些年一些典型的因API漏洞导致的攻击事件: 事件主体 事件经过 Facebook 第三方应用通过API获取5千万用户数据,并用以政治广告投放 Linkedin 因为API滥用导致泄漏7亿用户的姓名、邮件、手机号码、行业等信息 微博 通讯录匹配查询API被撞库,导致5亿用户信息泄漏 美国邮政UPS 因API认证漏洞导致6000万用户信息泄漏 淘宝 两个API的逻辑漏洞导致11亿的用户购物信息泄漏 攻防演练企业 OA系统任意用户登录漏洞、ajax.do文件上传漏洞、任意文件上传漏洞导致靶标系统被攻破等 API是数据交互最重要的传输方式之一,也因此成为攻击者窃取数据的重点攻击对象。与此同时,由于API防护的缺失,企业对外暴露了哪些API、对谁开放API、API通信中哪些敏感数据在流动等问题都未得到应有的重视。攻击者可以通过API认证授权漏洞、数据过度暴露、数据可遍历、安全配置缺陷等攻击API进行数据窃取和业务攻击。 2.2.API面临的主要安全问题 2.2.1.API资产不可见 大部分企业并没有把API资产纳入到资产盘点的范畴,未做好全面的资产梳理工作;而且 API随着业务的变更也在持续的迭代更新,导致企业对API进行安全测评时遗漏了部分资产或长期未对相关应用进行维护。另一方面,API上流动的数据以及关联的账号,大部分企业也没有将其纳入到资产进行统一的管理和维护,一旦某类API框架型漏洞爆发或被黑客入侵时无法及时定位到相关应用节点,将错过最佳的应急响应时间。 资产的可见性是安全的基础,API由于数量大、更新快、且关联有敏感数据和账号的变更,导致API资产很难通过有限人力以静态的方法来完成持续有效的梳理。 2.2.2.攻击面增加 随着云计算技术的广泛应用,越来越多的业务迁移上云,云原生的开发基于微服务架构和k8s等弹性扩容模式,相较于传统数据中心的单点调用,API成为模块间通讯的标准,业务逻辑分散在多个微服务模块,无论东西向和南北向都有无数的API,每个API可能成为一个攻击面,从而导致需要防范的攻击面比原来要大很多。 API常见的攻击面: 攻击面 说明 某些API在设计之初对身份认证的设计存在不足或者缺失,导致攻击者 可以进行未授权或者越权攻击,可以通过API任意访问访问数据 认证授权存在漏洞引入攻击面 权限设计不合理,致使用户A可以访问到属于同一角色的用户B的数据, 出现水平越权访问的攻击;或者普通权限A用户可以操作管理员B用户的功能,出现垂直越权的攻击 密码安全性校验不足,攻击者可利用弱密码发起攻击,进行账号的破解 输入参数校验不严引入攻击面 在API设计和迭代的过程中,研发人员对API的入参缺少校验或者校验不严格,可能会被攻击者利用构造的输入来进行注入类攻击如SQL、XSS、SSRF,或者利用参数遍历与用户身份进行组合带来越权类攻击 设计不合理引入攻击面 数据权限,某些API在设计时为兼容多个功能会将过多的数据杂糅到一起返回至前端,或者将脱敏和明文数据一起返回,然后由前端去筛选相关的数据。这导致API返回过多的数据,攻击者可通过流量拦截等手段 获取API原始返回的数据,从而存在数据泄漏的隐患 对于登录场景类,API在出错提示时对错误信息展示的过于详细,攻击者可以利用提示信息来进行撞库扫号攻击API未对传输数据进行加密设计而直接进行明文传输,攻击者可通过网络嗅探等手段直接获取API的交互格式以及数据,通过对获取的数据进行分析,并进行下一步的攻击API设计时没有考虑到重放逻辑、频率限制、事务完整性逻辑等业务侧逻辑的问题,导致攻击者可以通过重放、修改参数等方式来完成金额修改,篡改交易的攻击 代码实现上存在逻辑bug,导致攻击者可利用bug来进行攻击 安全配置缺陷引入攻击面 允许web服务器任意目录浏览、未关闭HTTP标头配置、没有打开一些认证授权配置开关 未修改业务系统的缺省口令,导致攻击者可使用缺省的口令来进行登录将内部系统部署在公网 使用易受攻击和过时的组件引入的攻击面 开发过程中引入开源或第三方插件、模块、框架等,引用的第三方的软件或模块存在安全问题时,势必会导致代码中的漏洞、恶意代码、“后门”等安全隐患被引入至API接口中 使用的开源或第三方组件的版本过低,存在漏洞可以被攻击 2.2.3.API攻击更加隐蔽 API是需要开放给用户来使用的,具备开放性和承载业务逻辑的特点,攻击者可以和正常用户一样来调用API,导致攻击者的流量隐藏在正常用户的流量里面,其攻击行为会更加隐