一种集中管理 API 的方式
什么是 API?
什么是对 API 的威胁?
什么是 API 网关?
什么是 API 网关安全?
-
身份验证。API 网关可以验证 ID 令牌等凭据,从而对所有 API 请求的身份进行验证。 -
速率限制和节流。 API 网关安全措施包括限制 API 在特定时间段内的调用次数,以确保不会超出其处理能力或不堪重负。这有助于防范拒绝服务攻击以及暴力破解攻击和试错攻击,在后面这两种攻击中黑客会反复使用各种凭据来尝试访问系统。
-
策略执行。 API 网关可以强制要求 API 在访问微服务和后端服务时遵循各种策略和规则,尤其是与身份验证、授权及访问控制措施相关的策略和规则。
-
基于签名的防护。 API 可以识别出已知攻击的签名和模式,从而拦截一些威胁。
-
日志记录和监控。 API 网关能够持续监控与 API 使用相关的 API 流量和指标。此外,API 网关也可以记录所有事务,方便用户深入了解使用情况和安全问题。
-
分离。 为了增强安全性,API 网关将后端服务与前端应用程序分离,以消除两者之间的任何直接接触。这可以帮助阻止将恶意代码注入后端数据库的 SQL 注入攻击。
API 网关安全的有效性如何?
API 网关安全的最佳实践有哪些?
企业及其安全团队可通过遵循以下最佳实践来增强 API 网关安全。
-
集中管理身份验证。 一些微服务会尝试独立管理身份验证过程中的访问权限、令牌验证及其他要素,这会导致复杂性增加并带来安全漏洞。通过在网关处集中管理 API 身份验证,企业可以充分地降低每个此类微服务的风险。
-
实施速率限制。 控制 API 请求的数量不仅可以防止过量的恶意或合法请求使服务过载,还能够抵御 DoS 或 DDoS 攻击。
-
持续监控。 持续监控和分析可以帮助检测潜在威胁,并解决客户端访问和请求问题。
-
移除不使用和已弃用的 API。 通过跟踪所有 API 并移除不再使用或不再支持最新安全措施的 API,安全团队可以增强 API 网关安全。
-
启用 Web 应用程序防火墙 (WAF)。 在网络和 API 安全计划中部署 WAF,可以根据已定义的规则和条件来限制对 API 的访问,从而阻止注入攻击和跨站点脚本攻击等常见威胁。
-
利用行为分析。 基于 SaaS 的行为分析解决方案可以记录所有 API 活动,以确定正常行为的基准。然后,它可以对潜在威胁发出告警,并提供防御或主动响应建议。
划重点,如何做?
经常听人说,某某系统被黑了,某某 app 的短信 1 分钟内被狂刷了几万条,某某应用的系统瘫痪了...诸如此类不一而足。追根溯源,从问题分析的经验来看,不管系统攻击者采用何种手段,多数情况下,最终攻击的入口,或者说最终的受害者还是汇聚到了API 这一层,可见,API 可以说是系统的守卫员,不容有失。
API 安全常见问题
接口被恶意调用
当系统的某些接口被攻击者或别有用心的人恶意调用时,可能有如下表现:
·系统被狂刷短信...
·某个页面直接卡死,导致其他用户无法访问页面...
·系统服务器 CPU 瞬间飙升...
·平台内关联的其他应用也无法正常使用...
为什么 API 接口会被恶意调用呢?经验来看,无非就那点,树大招风,你的产品被竞争对手盯上了,人家眼红了。
接口数据被篡改
这也是一种比较场景的 API 安全问题,一个常见的场景就是,当你登录某个系统时,你的会话信息,像存在浏览器中的 cookie 信息,被别有用心者劫持了,然后这个人拿着你的信息冒充你的身份去请求 API 的数据,甚至修改你的数据返回给你进行诈骗等目的。使用过 Fiddler 抓包工具的同学可以在自己公司的产品中模拟下这个过程。
接口敏感数据被窃取
通常在 B 端产品中,会对某些 API 返回的部分字段数据进行脱敏,比如手机号,邮箱等,以保证用户的信息隐私。
尽管 API 层面对敏感数据做了脱敏处理,但敏感数据如果未进行加密处理,或加密的强度不够,或者没有安全的存储加密数据,以至于攻击者仍然能够获得敏感信息,进而攻击者可能利用此漏洞对客户端,或服务器发送特殊构造的数据,发出攻击,从而了解后台数据库表等信息,对系统安全构成威胁。这也就是接口敏感数据被窃取了。
XSS 攻击
深究起来,XSS 攻击更多偏向于前端这一层,但是对于一个能够提供充分安全保障的系统来说,API 的对于参数的安全校验也是非常重要的一环,对于系统来说,应该确保核心 API 的业务对于所有的入参都应该是安全,可信且经过校验之后才能进行数据存储的。这样可以从源头上保障 XSS 攻击影响的范围进一步缩小。
系统层面的安全防护解决措施
在系统架构设计之初,系统安全一定是一个重要的考量因素被纳入到架构设计规划中,系统安全关乎着既关乎公司的生存,也关乎产品的盈利,更进一步说,更关乎着法律法规对公司的监管合规性依据。下图所示,为一个通用的微服务业务架构图。
从实践经验来看,安全在一个系统的架构设计中占据着举足轻重的地位,从上图来看,可以说,安全考虑在架构设计的每一环都有着落地的目标,拆开来看,具体如下所述。
前端安全
系统级防火墙
防火墙本身具有较强的抗攻击能力,它是提供信息安全服务、实现网络和信息安全的基础设施之一。
防火墙对于一个互联网公司的重要意义毋庸置疑,尤其是金融类,银行类等 B 端产品,防火墙的作用可以说是不可替代的,尽管这个技术已经不是什么新鲜的东西,但基本上所有的软件公司在产品发布到线上环境之后,所有来自外部的请求,都会经过服务器厂商的防火墙,只有通过了防火墙这一层请求才能继续往下进行。
关于防火墙的作用,这里简单列举如下:
·防止来自被保护区域外部的攻击,保护易受攻击的网络服务资源和客户资源;
·集中安全管理,通过集中的安全策略配置,以便统一管理和执行安全政策;
·防止信息外泄和屏蔽有害信息,执行安全检查,严格控制进出网络的数据,过滤和屏蔽有害信息,防止信息外泄;
·安全审计和告警,通过对网络存取访问进行监控审计,有效跟踪各类网络活动,及时发现问题和及时报警。
网关
关于网关,基本上所有的人都多少有一定的了解,网关在一个安全的系统架构设计中的作用,可以说是承上启下,至关重要,大体来说,从安全的角度来讲,主要体现在如下几个方面:
屏蔽真实的API地址
拿 nginx 来说,如果后端的接口真实地址是:/API/v2/user/get/1,为了确保接口安全,屏蔽真实的地址,通过nginx 的反向代理之后,接口可能变成这样:/platform/biz/API/v2/user/get/1。
负载均衡,均衡流量
从系统安全和系统可用性的角度讲,为了确保系统的高可用性,通常应用服务集群部署,这样可以避免单节点压力过大而造成业务高峰时系统不可用,有了网关这一层,就可以通过网关的配置动态实现负载均衡,以达到均衡流量的效果,从而对系统过载形成防护。
拦截恶意请求,定向黑白名单
以 nginx 来说,提供了可编程式的配置,通过编写脚本代码,对经过 nginx 的请求进行监控,尤其是对于那些恶意刷接口的请求,可以很好的进行识别,甚至可以在 nginx 这一层对那些恶意请求的 IP,IP 段进行黑名单的设置,从而对后台的服务进行第一层的安全防护。
限流
对一个系统来说,可用性已然成了系统是否稳定的考量因素的重要标准,当业务高峰期时,不管是外部的恶意请求,还是类似抢单这样的瞬间大流量来说,为了保障系统的整体可用性,必要的限流措施也是确保系统安全的重要手段,而网关作为承载系统流量的入口,在网关这一层做一定的限流管控是很有必要的。
API 层面安全设计的常用解决方案
·对外暴露且不需要鉴权的接口做好流控,避免被刷,比如有些登录接口中需要用到短信验证码的场景;
·对外暴露且不需要鉴权的接口做好严格的参数校验,避免 XSS 字符的入库存储;
·需要走鉴权的接口,最好走统一的安全校验逻辑,比如 SDK 或者内部封装的组件;
严格规范 API 的使用类型
这种 API,即内部应用和外部应用都可以调用的 API,这类 API 的设计,通常需要通过一个统一的凭证颁发入口,调用者拿到这个凭证,在调用 API 时传过去,认证通过后,API 给与数据响应,由于凭证是系统内部的服务颁发,可以认为是安全的,同时,如果更进一步的话,可以对凭证做有效期的设定,甚至是加密处理等措施。
系统内部可调用的 API
API 敏感参数加密处理
·密码的 MD5 加密,甚至可以混合盐值提高加密的安全等级;
·对称或非对称加密(根据业务需要选择);
·JWT,也是当下流行的一种轻量化的加解密方案;
API 请求 header 中混合特殊参数
·根据来源 IP,核心业务字段的组合进行恶意请求的识别,限制这类请求频次,减少对服务端的压力;
·API 采用限流组件,或者引入开源限流 SDK,或者自己编写限流算法工具包,对热点 API 进行限流;
·日志追踪,针对那些恶意刷接口的 IP,记录在日志,并接入告警平台,定向的上报监控告警;
尽量对请求参数进行封装
API 参数校验
·校验账户中是否有特殊字符,比如$% 这样的字符;
说这么多防护细节,有没有高效直接的?
有,肯定有,有开源和商业化的解决方案,具体详情希望感兴趣或者有治理需求的朋友,后台留言,或者文章留言,根据情况看是否分享对应的解决方案。
欢迎关注“三沐数安”,请分享给更多的网安爱好者,大家一起研究网络安全技术。三沐专注于数据安全建设和网络安全建设,解决您身边的网络安全问题,成为您的安全好帮手。
原文始发于微信公众号(三沐数安):什么是API 安全?如何做好API数据安全的防护?
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论