OWASP简介
简单点说,OWASP概括了“10项最严重的Web应用程序安全风险列表”,总结了Web应用程序最可能、最常见、最危险的十大漏洞,是开发、测试、服务、咨询人员应知应会的知识。OWASP每四年发布一次,现在最新的OWASP是由2021年公布的。
TOP10 2021漏洞列表
- 失效的访问控制
- 加密机制失效
- 注入
- 不安全设计
- 安全配置错误
- 自带缺陷和过时的组件
- 身份识别和身份认证错误
- 软件和数据完整性故障
- 安全日志记录和监控故障
- 服务端请求伪造
失效的访问控制
失效的访问控制,指的是由于程序开发时因各方面因素导致的缺陷,使这些限制并没有生效,从而产生了失效的访问控制漏洞。
主要分为水平越权(同级账户横向移动)、垂直越权(普通用户获取管理员权限)和上下文越权。
例子,数据包携带Cookie值表示已经登录,如果删除Cookie值(即没登录状态)还能使用登录后才能使用的功能,这样的就是具有失效的访问控制。
与失效的访问控制类似的漏洞还有目录遍历(文件包含、文件读取等)和未授权访问漏洞(常见的Redis未授权访问漏洞)。
失效的访问控制漏洞一般都出现在需要登录的系统,这类系统一般都具有后台管理模块,并且具有权限划分。通过信息收集我们可能收集到一些接口地址信息,如果没有登录账号,就可以尝试直接访问接口,看看能否越权访问;如果有低级别的账号,就可以尝试访问高级别身份的功能,查看是否有垂直越权的漏洞;如果前两个都无法实现,还可以留意一下CSRF攻击,看是否存在跨站请求伪造,存在CSRF漏洞可以借助钓鱼的方式利用,如果还发现XSS漏洞还可以配合使用,从而使目标执行恶意请求。
加密机制失效
需要重点注意密码、银行卡号码、身份证号码和商业秘密等显而易见的敏感数据。
主要检查以下几个方面检查是否存在加密体制失效漏洞:
- 数据传输过程是否以明文进行传输(HTTP协议)
- 是否使用了被废弃或者已经被破解的加密算法(DES已经被破解,AES)?是否使用了加密算法的不安全模式(ECB分组密码模式)?
- 秘钥强度是否足够?秘钥管理方法是否安全?密钥是否嵌入在代码中?(Shiro小于1.2.24的密钥是固定的且被爆出)
- 是否强制加密?(有的通过一个接口的参数控制加不加密)
- 是否验证了证书的合法性?
- 敏感信息是否使用明文存储
- 是否使用了被弃用的哈希算法(如MD5或SHA1)?是否使用了已弃用的加密填充方法(例如PKCS1)?是否使用了已废弃的安全协议(例如SSL)?
注入
主要有SQL注入、XSS注入、LDAP注入、POC注入等
不安全设计
主要的就是一些逻辑漏洞
1、业务逻辑的几大体现:
- 支付逻辑
- 密码找回
- 验证码暴力破解
- 验证码重复使用
- 验证码客户端回显
- 验证码绕过
- 验证码自动识别
2、支付逻辑漏洞
所有涉及购买、支付等方面的功能处就有可能存在支付漏洞
- 修改支付价格
- 修改支付状态
- 修改购买数量
- 修改优惠券、积分
- 修改支付接口
- 多重替换支付
- 重复支付
- 最小额支付
- 最大额支付
- 无限制试用
安全配置错误
可能出现的风险点:
- 应用程序启用或者安装了不必要的安全功能
- 默认账户名和密码没有修改
- 应用软件已过期或者未更新新版本
- 应用程序服务器,应用程序框架等未进行安全配置
- 错误处理机制泄露大量敏感信息
- 对于更新的系统,禁用或不安全地配置安全功能
比如有说:
由于XML配置错误(引入外部实体)而导致的XEE注入
再比如说,任意目录穿越漏洞、Tomcat的弱密码漏洞等
自带缺陷和过时的组件
容易出现的场景:
- 不清楚使用的组件和依赖的组件的版本
- 使用了不再维护或者已经过时的版本
- 没有定期扫描漏洞或订阅相关组件的安全情报
- 在被爆出漏洞的情况或有新版本的情况下,没有及时修复或升级版本
- 测试人员没有测试更新、升级或补丁
- 应用程序的安全配置没有配置正确
比如一些常见的框架漏洞和中间件漏洞:
Springboot/Shiro/Fastjson/Tomcat/Apache...
身份识别和认证漏洞
通常有几大方面:
- 网络钓鱼攻击
指的是通过伪装成指的信赖的组织或企业,欺骗用户泄露其敏感信息。应当注意要求提供登录凭据的未经请求的电子邮件或消息。
- 撞库攻击
使用一个平台窃取而来的用户名和密码,访问不同网站的多个账户,就会产生撞库。应当尽量不在不同平台上使用相同账号密码。
- 弱密码
最常见身份验证漏洞之一,必须使用强密码。
- 不安全的身份验证
过时或不安全的身份验证协议易受攻击。必须使用安全、最新的身份验证方法。
- 蛮力攻击
尝试所有可能的密码组合,直到找到正确密码。应当设置一定登录失败次数。
- 会话劫持
拦截并窃取用户的会话标识符。应当实施安全的通信通道(如HTTPS),生成安全的、随机生成的会话令牌。
- 缺少多因素身份验证(MFA)
缺少MFA是用户忽略的一个重大漏洞。要求启用MFA,如验证码、短信等。
软件和数据完整性故障
- 未验证完整性的情况下对软件更新、关键数据和CI/CD数据传递通道所做的假设
- 反序列化漏洞
要做到不接受来自不受信任源的序列化对象。
安全日志记录和监控失败
如果没有日志记录和监控,就无法检测到漏洞。任何时候都会发生日志记录、检测、监控和主动响应不足的情况:
- 不记录可审计的事件,如失败登录等
- 警告和错误不生成、不充分或不清楚
- 不会监控应用程序和API的日志是否存在可疑活动
- 日志仅存储在本地(很容易攻击者侵入后删除日志然后无法追查)
- 适当的警报阈值和响应升级流程没有到位或有效
- 被进行渗透测试或扫描不会触发警报
- 应用程序无法实时检测、升级或警告主动攻击
- 日志泄露敏感信息
服务器请求伪造
也就是SSRF漏洞。
参考链接: