API威胁防护实践之天清Web应用安全网关系统

发布时间 2018-06-25

随着 Web 2.0 时代的到来,由于 JSON 数据格式简单,容易开发。开发者更喜欢使用 JSON 格式来编写 API,Web API 也呈现爆发性的增长。特别是近几年来,随着社交媒体和在线服务的发展,服务的提供者更喜欢对外提供开放的 Web API 供开发者调用。开发者通过网络调用 Web API 实现登录认证、消息推送、订单支付等功能,API 之间的相互调用极大的提高了开发效率,开发者可以在短时间内完成应用的设计与开发。只要服务提供者对外公开了 API,开发者就可以很简单的将服务集成进自己的应用,直接的享用该服务,不同的服务提供者集合在一起谋求共同发展。

Web API 是指使用 HTTP 协议进行网络调用的API(Application Programming Interface),是一个应用的外部接口。对于一个应用程序,人们通常不关注内部结构实现细节,只关心外部功能的使用。那么调用应用程序完成某个功能的规范方法即可称之为程序的 API。

◆Web API 安全隐患◆

由于 Web API的广泛普及与使用,与传统的 Web 安全问题一样,也存在敏感信息被恶意获取,用户权限被恶意使用等问题。除了天气预报、地理位置等这类公共服务信息的提供,几乎所有的 API 服务都存在用户认证、权限控制等,以便于服务提供商进行管理和收费。

近年来随着移动应用、云端应用的普及,Web 站点与 Web API 配套开发的情形越来越多,API  安全问题也是与日俱增。假如 Web  API 缺陷被恶意利用,用户隐私被公开或者盗用,那么服务提供者将会失去信用、失去用户,可能导致服务提供者破产倒闭,永远无法再次赢得用户的信任。

例如Instagram 在2017年由于 API 存在 bug,不少认证用户都发现自己的个人资料(包括邮箱地址、电话号码等)可轻易被他人获取。事情发生后,Instagram 虽然并未对漏洞细节做过多解释,只是表示漏洞已经修复。Instagram 对所有的注册用户发了电子邮件,提醒他们提防此次攻击,并小心可能会出现的钓鱼攻击,还有那些通过社工手段(邮件,短信,电话等方式)所带来的攻击。

● 安全隐患一:
客户端与服务器之间的监听与嗅探

Web API 和普通的 Web 站点一样,通过 HTTP 协议在互联网上进行数据传输,由于HTTP协议本身并未有任何加密的设计,因此不能保证通信过程中不被监听。越来越多的公共Wi-Fi被黑客盯上,通常黑客设法和受害用户连接在同一局域网内,只要打开嗅探监听工具,受害者在网络中的传输过的敏感信息将被黑客获取。如果被窃取的信息中直接含有个人信息和密码,黑客可能通过这个信息直接登录受害人的用户,进一步可能造成信息泄露或财产损失。另外一种,黑客也可能劫持受害者用户的会话,服务器将无法区分受害者还是黑客,黑客可以进行受害者权限范围内的一切操作。

Web API 在通信时使用了 HTTPS 协议通信,将极大增强会话的安全性。那么是不是只要使用了HTTPS协议通信就能保证会话不被劫持,敏感信息不被获取呢?答案是否定的。

2014年4月爆发的Heartbleed安全漏洞,导致攻击者可能获取到服务器上保存的明文信息。另外,使用 HTTPS加密通信时,也有可能存在中间人攻击,因此需要保证使用有效的SSL证书进行加密认证。

● 安全隐患二:
使用浏览器访问API时产生的安全意外

Web API 是专门为程序间相互调用而设计的,如果意外的使用浏览器来访问 Web API 则也可能存在安全问题。

▪ XSS攻击

XSS攻击将用户的非法输入的JavaScript脚本在响应页面的HTML中执行。攻击者可能利用XSS漏洞劫持会话、盗取Cookie、篡改页面等操作。在Web API 返回 JSON 数据时,如果Content-Type 设置不合理便会造成 XSS 漏洞攻击。

当服务器返回该 JSON 数据时,将响应头中的Content-Type设置为test/html 或者设置为Content-Type: text/plain(IE下可以执行)时,该 JSON 数据被解释为 HTML 代码,浏览器直接执行了其中的JavaScript代码。

▪ CSRF攻击

Web API 防护CSRF 攻击的方法和常规的 Web 网站并没有什么不同。通常需要禁止通过GET方法修改服务端的数据,而是采用 POST、PUT、DELETE等方法进行标准化操作。即使设置了不允许GET方式修改服务器数据,CSRF依然可以通过Form表单使用POST方法发起攻击,而且不受同源策略的影响。

● 安全隐患三:
业务层面的恶意访问

▪ 篡改ID非法获取用户敏感信息

篡改请求参数获取敏感信息,攻击者可以通过修改客户端发送到服务器的参数,企图获取权限范围之外的敏感信息。例如使用以下形式的

URL:
https://api.example.com/v1/user/123?info=email

从形式上来看,URL中的123可能为用户ID,假如提交该URL请求可以获取到ID为123用户的email信息,那么攻击者通过修改用户ID就能获取到其他用户的email信息。

下面具体分析一下这个问题,一般的有些Web API 设计友好,通常在URL里面使用user关键字或者在参数里面使用email关键字来表明业务的一些相关信息。设计者初衷是为了开发者更加简单明了的使用API来实现程序调用,但是也给攻击者带来可乘之机。攻击者通过分析URL的形式特征并结合具体的业务对关键字进行篡改,企图非法获取敏感信息。

▪ 参数异常输入导致未授权操作

API的设计者在设计之初是为了方便的使用API进行程序间的调用,有时考虑不到太多的异常输入造成的安全隐患。例如知名的WordPress网站系统曾经存在REST API 由于异常输入造成权限绕过,攻击者可以通过API篡改网站页面内容。

WordPress 4.7以上的版本,WordPress REST API提供了一组易于使用的HTTP端点,用户可以以简单的JSON格式访问网站的数据,包括用户,帖子,分类等。检索或更新数据与发送HTTP请求一样简单。API 提供了对用户、文章、分类等不同功能的控制,也可以通过 API 检索或修改文章。在WorePress 4.7.0和4.7.1版本中存在漏洞,由于权限控制失效导致内容注入或修改,攻击者通过修改id为一个异常值就可以完成网站内容的篡改,而不需要任何认证信息。

Wordpress 提供的部分 API 功能:

查看文章列表
GET /index.php/wp-json/wp/v2/posts

检索文章
GET /index.php/wp-json/wp/v2/posts/1

修改文章
POST /index.php/wp-json/wp/v2/posts/1?id=1
Content-Type: application/json
{"title":"test"}

提交以上修改文章的请求,服务器返回401 未认证。

如果稍微修改以上的URL内容,例如修改为POST /index.php/wp-json/wp/v2/posts/1?id=1abc,即将id参数的值由1修改为1abc,再次尝试提交。服务器返回200 OK,WordPress网站的第一篇文章标题被修改为test,攻击成功。

◆WAF检测与防护◆

Web API和普通的应用相似都是通过HTTP协议对外服务,普通Web应用中存在的漏洞和缺陷,在Web API 中同样也会存在。启明星辰WAF产品有专门API防护模块,通过该防护模块与WAF功能相结合可对Web API的问题进行检测与防护,Web API防护模块及API攻击检测上报事件,如下:

 



启明星辰WAF产品适应从小型企业到大型数据中心等各种规模和客户业务模型下的网络环境,并广泛应用于金融、运营商、政府、能源、大企业、烟草、税务、交通、卫生、教育等行业领域。

启明星辰作为中国信息安全行业的领航企业,一直秉承诚信和创新精神,致力于提供具有国际竞争力的、自主创新的WAF安全产品。启明星辰WAF产品入围Gartner魔力象限,根据第三方Frost& Sullivan权威机构WAF市场占有率连续5年排名第一,启明星辰WAF产品连续多年在大中国区WAF市场名列前茅。