zoukankan      html  css  js  c++  java
  • 对于OWASP API TOP 10的一些理解

    前言

      OWASP API 安全项目是第一次发布,在查找OWASP API TOP 10相关解读资料的时候,发现中文资料比较少,但是API在万物云化的今天越来越重要,因此考虑自己写点东西以加深自己的理解。

       API全称为Application programming interface,意为应用程序编程接口。这个概念较为广泛,更像是一种资源交互方式。

    OWASP API Security Top 10具体为:

    API 1 Broken Object Level Authorization-----------失效的对象级别授权

    API 2 Broken Authentication---------------------------失效的用户身份验证

    API 3 Excessive Data Exposure------------------------过度的数据暴露

    API 4 Lack of Resources & Rate Limiting-----------资源缺乏和速率限制

    API 5 Broken Function Level Authorization----------失效的功能级授权

    API 6 Mass Assignment-------------------------------- 批量分配

    API 7 Security Misconfiguration-----------------------安全配置错误

    API 8 Injection-----------------------------------------------注入

    API 9 Improper Assets Management--------------------资产管理不当

    API 10 Insufficient Logging & Monitoring-------------日志和监控不足

     附中文版链接: http://www.owasp.org.cn/owasp-project/OWASPAPITop102019.pdf

    通过对比表发现和OWASP Top 10还是具有一定差异的。我通过查询找到下面这个图。可以看到红色的是主要差异项,绿色的是排名不变的,黄色的是排名发生了变化的项目。通过这个排名可以知道,在api安全方面,侧重点是不一样的,XXE、反序列化、敏感信息泄露、XSS、使用具有已知漏洞的组件是API安全TOP 10里是没有的。没有的原因不是说API安全不存在这些问题,而且这些问题排名在10名开外,因此不在其中。

     

    接下来,结合案例来看看API安全提及的一些问题。

    1、失效的对象级别授权

    这里直接上图,文中的对于API 1的定义类似于IDOR,也就是说API 安全中排名第一的问题是权限问题,提供的案例也是越权。如遍历用户ID方式,以用户角色为维度。因此,尝试去hackerone上找相关的公开报告。

    https://hackerone.com/reports/763994

    https://hackerone.com/reports/853130

    https://hackerone.com/reports/975047

    https://twitter.com/samwcyo/status/1350025970615529473?s=20

    2、失效的用户身份认证

    排名第二的是身份认证问题。这个问题基本上围绕认证方面,如弱口令、明文存储、弱加密、密码爆破、GET方式传输令牌和密码等,这里案例就比较多了。弱口令就不说了,完全是管理问题。明文存储国内案例有CSDN、网易,国外有 facebook,而GET方式传输令牌和密码,某运营商目前仍这样处理,由于查询余额、积分、账单等敏感操作都是用GET请求方式,后续大部分查询操作referer都可以看到令牌和sessionid,又由于令牌等几个值一直不变,过期时间较长,因此很容易泄露用户个人数据。而爆破的话,H1上案例也不少。

    https://hackerone.com/reports/708013

    https://hackerone.com/reports/970157

     3、过度的数据暴露

    这个问题比较容易理解,字面上的意思即是问题的所在。API在对查询进行响应的时候返回了过多的敏感信息。之前在测试一个微信公众号,就遇到过这样的问题,明明只查了待缴金额,结果把余额、账单等信息都返回过来了。

    4、资源缺乏和速率限制

    这个问题偏向于资源竞争。我在其他文章里找到更容易懂的解释-----API不会对客户端/用户可以请求的资源大小或数量施加任何限制。这不仅会影响API服务器的性能,从而导致拒绝服务(DoS),而且还为诸如暴力破解之类的身份验证漏洞敞开了大门。

    https://hackerone.com/reports/764434

    https://hackerone.com/reports/887321

    5、失效的功能级授权

    这个问题和API 1有点像,都是授权方面的问题。但是这个更偏向于在功能授权上的问题,像是垂直越权。比如,管理员面板,普通用户正常情况无法访问,但存在此类越权问题时即可访问管理员面板。

     https://twitter.com/hunter0x7/status/1352572216119062528

     

    6、批量分配

    这个问题从字面上是最难理解的。但仔细看定义,还好理解。大致就是API存在用户可控的参数。

    https://hackerone.com/reports/452959

    https://hackerone.com/reports/813300

    7、安全配置错误

    这个范围会大一些,如明文传输、敏感信息泄露、存储桶未授权访问、错误配置CORS等问题。之前测几个小程序的时候,接口未授权访问出现的频率最高,有的接口可遍历所有用户信息。个别参数客户端可控,导致返回了明文敏感信息。因此在测试接口时,仔细看重要操作的数据包还是十分必要的。

    https://hackerone.com/reports/1021906

    https://hackerone.com/reports/1001951

    8、注入

    属于输入验证漏洞类别。如sql注入、HTML注入、命令注入、LDAP注入等漏洞类别。

    https://hackerone.com/reports/816254

    https://hackerone.com/reports/1034625

    https://hackerone.com/reports/950180

    9、资产管理不当

    这个问题就是字面上的意思,很好理解。资产管理的问题。如暴露测试接口地址、未下线的旧接口。而此类接口的发现,我总结了三种方式,一是捕风捉影,通过检测所有流量包来查找;二是按图索骥,通过JS等信息收集方式发现去寻找并构造API;三是无中生有,通过猜解、遍历方式去获取接口。而在实践中,这三种方式都有成功的记录。

     10、日志和监视不足

    最后一个无需多说,是以资产拥有方的角度出发的。和日常安全测试关系不大。

    参考链接:

    http://r6d.cn/acMHU

    https://owasp.org/www-project-api-security/

    https://nordicapis.com/testing-owasps-top-10-api-security-vulnerabilities/

    https://apisecurity.io/encyclopedia/content/owasp/owasp-api-security-top-10.htm

    https://apisecurity.io/encyclopedia/content/owasp-api-security-top-10-cheat-sheet-a4.pdf

    https://portswigger.net/daily-swig/owasp-reveals-top-10-security-threats-facing-api-ecosystem

    好记性真的不如烂笔头......
  • 相关阅读:
    论.Net 2.0消失的虚拟内存空间
    检查IE版本的方法
    升级.Net 4.0遇到的两个问题
    关于ID生成算法
    探秘.Net 4.0的StringBuilder实现
    关于填充DataTable的效率问题
    [已解决]请教:时间格式“2008109公元 10:43:27,AM”,这种时间格式是该怎么恢复默认设置
    请教:c#中的窗体怎么才能像c++的那窗体一样按键后可以调出输入法?
    在access中执行SQL,SQL中包含IIF,取出来的结果集字符串被截断了,请教各位大侠,这个是为什么呀?谢谢!
    请教:PL/SQL中执行to_date(to_char(a.lastupdatedate, 'YYYYMMDD HH24:MI:SS'),'YYYYMMDD HH24:MI:SS') ,上午12点整为什么格式化出来没有时分秒?
  • 原文地址:https://www.cnblogs.com/iamver/p/14331357.html
Copyright © 2011-2022 走看看