RESTful API 类渗透测试的特点
REST 是一种软件体系架构,而 RESTful API 则是其使用 REST 风格进行 HTTP 接口数据交互的一种接口表现形式,常用的接口数据格式有 JSON、XML、text 等。
相对于传统 Web 网页的 URL 携带参数的传递方式,RESTful API 这种接口形式的改变导致其渗透测试过程有着不同的特性,其主要特性如下。
RESTful API 的接口数据交互格式大多数为 JSON 格式,由多个参数或键值对组成的 JSON 结构作为参数与服务器端进行交互,这种请求参数的格式,对于渗透测试人员来说,Fuzz 测试时很容易混淆。
大多数 API 都有认证机制,比如 OAuth 2.0、APPID/APPKEY,尤其是客户自定义认证方式时,渗透测试工作的开展更加困难,需要先理清其业务逻辑才能更好地开展。
RESTful API 与传统的 Web 网页不同,API 通常是纯后端的应用,这种不可见或无持续连接状态的特性,导致渗透测试人员容易忽略某些接口或无法发现接口。
RESTful API 协议的 HTTP 状态码与普通 HTTP 协议存在差异,对安全辅助工具的自动化判断产生影响。
RESTful API 接口描述、参数格式与传统 Web 网页差异性较大,没有很好的自动化工具支撑,定制化工作多,对渗透测试人员的能力要求较高。
在目前前端技术栈比较丰富的情况下,很多接口交互的发起使用 Ajax 请求,比如 Vue、Angular、React,这对安全扫描工具自动化地捕获 API 流量是很大的挑战。
正是因为 RESTful API 渗透测试的这些特性,在渗透工作开展时,抓住要点,快速地发现问题显得更加重要。以下是渗透测试时的关键要点。
尽可能的先获取 API 规范描述文件,如在线接口文档、api-docs.json 文件、Swagger 文件,RAML 文件,API-Blueprint 文件等,通过文件来获取 API 端点和详细调用方式及参数定义。
在无界面的情况下,除了 API 规范描述文件,通过 Proxy 代理方式,对流量进行分析也是获取 API 详情的一种手段。
关注可攻击的点,比如请求参数、请求方法 GET/POST/PUT/DELETE、是否存在授权绕过(令牌是否正确验证,是否令牌有时效性)、是否存在注入点(MySQL、NoSQL)、是否存在批量分配的问题等。
关注通用的安全问题,比如是否存在 Key 泄露、是否存在暴力破解的可能、同一 API 多个版本不一致问题、XSS、CSRF 等。
面向不同层次会话的攻击,比如传输层是否使用 SSL 或使用可信的数字证书、应用层会话是否设置超时或采取限流熔断机制等。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/e200496ef81fe36f12b20ffae】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论