随着云计算、移动互联网、物联网的蓬勃发展,越来越多的应用开发深度依赖于API之间的相互调用。特别是疫情常态化后,协同办公、在线教育、直播短视频等线上应用蓬勃发展,API在其中既能够起到连接服务的功能,又可以用来传输数据,随着API的绝对数量持续增长,通过API传递的数据量也飞速增长。
与此同时,API也正成为攻击者重点光顾的目标。据Salt Security《State of API Security Report, Q3 2021》报告显示,2021年上半年,整体API流量增长了141%,API攻击流量则增长了348%,针对API的攻击流量正在以普通API流量的3倍速度增长。报告还发现,安全问题在API项目关注的名单中名列前茅,很少有受访者认为他们有信心识别和阻止API攻击。
这是由于API的广泛使用和链接为恶意攻击者提供了广阔的攻击面,一旦成功攻击API,就能获取大量企业核心业务逻辑和敏感数据。除此之外,很多企业并不清楚自己拥有多少API,也并不能保证每个API都具有良好的访问控制,被遗忘的影子API和僵尸API,为攻击者提供了唾手可得的机会。相对于传统Web窗体,攻击API的成本更低、价值更高。
正因如此,2021年发生了很多重量级的API攻击事件,引发了社会各界的广泛关注,例如:黑客通过API漏洞入侵了7亿多Linkedln用户的数据,并在暗网上出售这些数据;黑客攻击Parler网站的API安全漏洞,非法获得1000万用户超过60TB的数据;Clubhouse因API安全漏洞泄露了130万条用户记录。
可以预见,2022年针对API的攻击将成为恶意攻击者的首选,越来越多的黑客利用API窃取敏感数据并进行业务欺诈,为API构建安全防护体系已势在必行。
新兴网络威胁下,传统API网关局限性凸显
一个严峻的事实是,API发展到现在,授权认证体系已经比较完善,但是在授权之后访问的控制相对薄弱。管控的颗粒度因API接口业务需要而不同,在带来访问便利的同时,也可能被恶意利用,带来信息泄漏和被滥用的风险。API设计之初就是为程序调用准备的,天然是工具行为,利用自动化工具通过合法授权下的API滥用,已成为API攻击的难题。从API的提供方角度,为使用和管理的方便,过度的API开放和宽泛的API调用参数返回,既可能被恶意利用,也可能无形中造成信息泄漏和被滥用的风险。因此传统API安全网关提供的身份认证、权限管控、速率限制、请求内容校验等安全机制几乎无用武之地。
例如,身份认证机制可能存在单因素认证、无口令强度要求、密码明文传输等安全隐患,而访问授权机制风险通常表现为用户权限大于其实际所需权限。同时,即使建立了身份认证、访问授权、敏感数据保护等机制,有时仍无法避免攻击者以机器模拟正常用户行为、运用大量代理IP进行大规模攻击等多种方式来避免速率限制。
在如今互联网的开放场景下,API的应用和部署面向个人、企业、组织机构等不同用户群,是外部网络攻击的主要对象之一,因此更需时刻警惕外部安全威胁。针对API的常见网络攻击包括:重放攻击、DDoS 攻击、注入攻击、会话 cookie 篡改、中间人攻击、内容篡改、参数篡改等,这些新型的安全威胁正在变得更加复杂化、多样化、隐蔽化、自动化。
解铃还须系铃人,提前预防常见的API漏洞,尽可能的保护API的安全
1、图形验证码
将图形校验码和手机验证码进行绑定,在用户输入手机号码以后,需要输入图形校验码成功后才可以触发短信验证,这样能比较有效的防止恶意攻击。目前大部分应用都是采用这种方式。
2、限定请求次数
在服务器端限定同一IP地址,同一设备,同时间范围内的接口请求次数。比如同一号码重复发送的时间间隔,一般为60或120秒;设置每个IP每天最大的发送量;设置单个手机号每天的最大发送量。
3、流程条件限定
将手机短信验证放在最后进行,比如需要用户必须注册后,或者用户必须填写了某些条件才能进行短信验证。
4、归属地是否一致
服务器端检查用户的IP所在地与手机号归属地是否匹配,如果不匹配则提示用户手动操作等。
5、服务器接口验证
当用户登录成功后,返回一个由Token签名生成的秘钥信息(Token可使用编码和md5加密,可以放在请求的Header中),然后对每次后续请求进行Token的封装生成,服务器端在验证是否一致来判断请求是否通过。
(1) 常规的方法:用户登陆后生成token,返回客户端,然后服务器使用AOP拦截controller方法,校验token的有效性,每次token是一样的;
(2) 用户登陆后生成临时token,存到服务器,并返回客户端,客户端下次请求时把此token传到服务器,验证token是否有效,有效就登陆成功,并生成新的token返回给客户端,让客户端在下一次请求的时候再传回进行判断,如此重复。 这种方法有性能问题,但也有一个漏洞,如果用户在一次请求后,还未进行下一次请求就已被黑客拦截到登录信息并进行假冒登录,他一样可以登录成功并使用户强制下线,但这种方法已大大减少被假冒登录的机会。
(3) 两层token:一般第一次用账号密码登录服务器会返回两个token,时效长短不一样,短的时效过了之后,发送时效长的token重新获取一个短时效,如果都过期,那么就需要重新登录了。当然更复杂你还可以做三层token,按照业务分不同token。
6、采用https
线上的api接口开启https访问,这样做的被抓包的难度会提高很多,而且https需要秘钥交换,可以在一定程度上鉴别是否为伪造的网络非真人IP地址。
7、服务器端代理请求
这也是解决网站跨域的方案之一,采用服务器代理可以有效的防止接口真实地址的暴露。