API接口安全
1 基本概念
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
简单的说,就是通过某一预先定义的渠道读/写数据的方式。
例如:
条形码查询:http://xxxx.com/
接口:
http://xxxx.com/barcode/barcode?barcode=6936292120079
方式:GET
请求参数:
参数:barcode
位置:urlParam
必填:是
说明:条形码(8-14位数字),正则:/^[0-9]{8,14}$/
返回示例:
{
"name": "石药阿莫西林胶囊0.25g×50粒/盒",
"price": "9",
}
API接口广泛应用于APP、客户端、网页、软件等,不仅适用于获取数据(读),也适用于更新数据、删除数据(写)以及其他操作等。
API接口的数据传输方式不仅仅局限于HTTP协议,也可以使用TCP、UDP协议等。
宽泛的说,API接口就是一种传输(操作)数据的方式。
互联网无非就是数据的传输,可以说互联网所有APP、客户端、网页,均应用了API接口这一技术。
2 背景
由于API被程序(而不是人)使用,所以他们经常缺少UI,并且还使用复杂的协议和复杂的数据结构,这些因素使安全测试变得困难。 API的广泛性和复杂性使得难以进行有效的自动化安全测试,这可能导致虚假的安全感。
另基于云计算互联网应用正变得越来越普及,在这个过程中,有更多的站点将自身的资源开放给开发者来调用。对外提供的API调用使得站点之间的内容关联性更强,这些开放的平台也为用户、开发者和中小网站带来了更大的价值。
目前API接口安全目前越来越被安全组织所重视。
2.1 OWSP:top10
A10—未受到充分保护的API
现代应用程序通常涉及富客户端的应用程序和API,如:在浏览器和移动应用程序中的JavaScript,它们连接到某种API(如:SOAP/XML、REST/JSON、RPC、GWT等)。这些API通常是没有保护的, 并且包含大量漏洞。
API给web应用程序带来更大的攻击风险,对于攻击者而言,API是非常有指示性的工具,能够告诉你应用程序如何运行,它具有自我描述性,能够为应用程序提供路线图。
2.2 CSA:Cloud conputing top threats in 2016
Threat #3: Insecure Interfaces and APIs
“开放”是云计算时代的一个重要的业务变革方向。云计算服务商需要提供大量的网络接口和API(应用程序编程接口)来整合上下游、寻找业务伙伴,甚至直接提供业务。但是,开发过程中的安全测试、运行过程中的渗透测试,以及测试工具、测试方法等,在针对网络接口和API上都还不够成熟,这些通常工作于后台相对安全环境的功能被开放出来后,将会带来新的安全威胁。
对于云计算来说,API接口的重要程度无须赘述,对于整个平台和服务来说,一个安全的API接口就显得尤为重要了,IT管理员们会利用API对云服务进行配置、管理、协调和监控。API对一般云服务的安全性和可用性来说极为重要。企业和第三方因而经常在这些接口的基础上进行开发,并提供附加服务。
企业要明白使用、管理、协调和监控云服务会在安全方面带来什么影响。安全性差的API会让企业面临涉及机密性、完整性、可用性和问责性的安全问题。
3 如何保护API接口安全
保护API的关键在于确保您充分了解威胁模型以及防御方式:
1)、平面隔离,确定接口所属平面,且平面已清晰隔离等。
2)、安全传输,安全传输是否已默认启用,相关算法、套件以及证书管理符合要求等。
3)、认证,默认账户公开,强口令策略,防暴力破解机制以及会话管理机制等
4)、鉴权,确保所有接口都已鉴权,不存在横向和纵向越权问题,不存在直接对象引用问题等。
5)、敏感数据和隐私保护,敏感数据均需要加密存储及传输,加密算法符合要求,文件权限控制得当。
6)、web安全,如果是WebApi接口,需要考虑覆盖web安全相关内容,如文件上传下载、输入编码输出校验、参数服务端校验等
7)、接口Fuzz,对于接口需要从传输层、应用层分别考虑协议的Fuzz,包括应用层API接口Fuzz
8)、泛洪攻击,从传输层、应用层以及鉴权未鉴权消息角度分别考虑DOS、DDOS攻击风险
9)、安全日志,管理操作需要记录日志。
10)、业务逻辑安全,除了基础的安全之外,还要考虑接口业务逻辑上的安全设计是否合理,是否可能被绕过;重点关注登陆、忘记密码、重置密码等高危操作。
11)、WebServer配置安全,如果是web服务,需要考虑容器的安全配置,可使用工具扫描
12)、源码安全,测试过程中结合接口源码,覆盖安全功能点,主要关注自研接口代码。
详细参见如下:
4 如何保护接口安全
在实际产品中,对外提供的不一定是API接口,有时候直接是封装好的UI界面或者客户端,但从本质上看,依然可以认为这是“客户端+API接口”的组合,而且安全的重点还是在API接口上,在实际安全测试过程中也应该更多从API接口角度去考虑。常见接口如:
1)WebService(SOAP/XML)
2)RESTful
3)MML
4)ONVIF
5)各标准协议端口,如SIP、SSH等
此外,产品对外提供的接口(服务)一般都会以开放端口的方式呈现,在对一个产品安全评估时,需要覆盖产品所有对外开放的端口。
从接口角度,建议对产品采取如下步骤评估:
1、 获取产品端口矩阵
2、 筛选端口矩阵中的对外提供服务的服务端端口
3、 对每一个服务端端口进行“如何保护API接口安全”章节的评估,如HTTPS(443)端口等
另外,不同的接口协议都可能有他特有的协议安全,在针对每个接口测试时需要单独考虑。
详细测试用例可参见产品线用例基线,可通过【API接口安全标签】进行筛选。
5 附录:
5.1 OWASP对API接口安全的理解
ESAPI是OWASP组织的一个开源项目,网址:http://www.owasp.org/index.php/ESAPI
ESAPI是一个免费、开源的Web应用程序安全控制组件,可以帮助编程人员开发低风险应用程序。
ESAPI很适合一个新的开发项目的安全组件,各版本的ESAPI包含如下基本设计:
具有一个安全接口集;
对每一种安全控制有一种参考实现;
对每一种安全控制可以有你自己的实现方法。
很多著名的大公司开始将ESAPI作为自己保障Web应用程序安全的手段,ESAPIf提供的安全接口主要有以下方面:
5.2 参考资料
• OWASP REST Security Cheat Sheet
• OWASP Web Service Security Cheat Sheet
• Increasing Importance of APIs in Web Development
• Tracking the Growth of the API Economy
• The API Centric Future • The Growth of the API
• What Do You Mean My Security Tools Don’t Work on APIs?!!
• State of API Security