OWASP TOP 10
OWASP:开放式Web应用程序安全项目(Open Web Application Security Project),是一家开放的、非盈利的国际性组织机构,致力于协助政府、企业开发、升级各类应用程序以保证其可信任性。
OWASP TOP 10每四年发布一次,现在最新的OWASP是2021年的OWASP top 10。
2021 OWASP TOP 10
A01:Broken Access Control
A02:Cryptographic Failures
A03:Injection
A04:Insecure Design
A05:Security Misconfiguration
A06:Vulnerable and Outdated Components
A07:Identification and Authentication Failures
A08:Software and Data Integrity Failures
A09:Security Logging and Monitoring Failures
A10:Server-Side Request Forgery
A01:Broken Access Control
越权访问:服务端对客户端提出的数据操作请求过分的信任,一个用户一般只能对自己本身的信息进行增删改查,然而由于后台开发人员的疏忽,没有在用户进行增删改查时进行用户判断。忽略了该用户的权限判定,导致攻击账户拥有了其他账户的增删改查。
越权访问漏洞分为 水平越权访问(相同权限下不同的用户可以互相访问)和垂直越权访问(低权限的用户可以访问到权限较高的用户)。
垂直越权
垂直越权原因: 由于后台没有做权限控制或者权限控制存在漏洞,导致可以访问或控制高权限角色拥有的数据或页面,达到权限提升的目的。
垂直越权危害:通过垂直越权,能够获得一个更高级别的权限。拥有高等级权限后,就能够获取到隐私数据。除此之外,通过高等级的权限,能对系统后台进行访问造成更大的危害,也能禁用审计功能、删除相关日志,从而隐匿行踪,无法发现攻击事件的存在。
水平越权
水平越权原因:系统只验证了访问权限的,而没有对数据做细分或者对访问者进行充分的校验,导致访问相同权限用户的数据。
水平越权危害:水平越权获取了另外一个相同权限用户的权限。尽管权限等级没变,但因为用户身份发生了变更,所以能够获得新的数据和权限,这对相同权限用户的隐私信息安全和财产安全都会造成极大的危害,例如盗号或者任意登录问题就是水平越权问题。
A02:Cryptographic Failures
加密机制失效:在应用程序或系统中出现与密码学相关的失效或缺乏加密,导致敏感信息泄露的弱点。加密机制失效可能包括使用弱加密算法、默认的加密密钥、缺乏适当的密钥管理、未强制执行加密等问题。攻击者可以通过利用这些弱点来获取敏感数据,如密码、信用卡号等,从而对系统进行攻击。包括很多小平台或者老平台都存在相关问题,尽管大多不是明文直接传输,但是过于简单和老旧的加密方法,使得数据的加密形同虚设,而且为了方便存在的固定密钥也是引发这一问题的一大源头。
A03:Injection
注入:注入是一种非常常见且存在时间很长的攻击手段,常见的注入有SQL、NoSQL、OS命令、ORM、LDAP 、EL、OGNL注入。SQL注入漏洞也是普遍的漏洞之一。由于存在时间很长,其实相关的应对措施也很多了,大部分代码审计平台也都会对是否可能被注入进行测试,重点还是选择安全的API并按照规范去使用。
A04:Insecure Design
不安全设计:不安全设计是一个广泛的类别,代表许多不同的弱点,表现为 “缺失或无效的控制设计”。缺少不安全的设计是缺少控制的地方。安全设计需要安全的开发生命周期、某种形式的安全设计模式或铺砌道路组件库或工具,以及威胁建模。并且安全设计只是暂时的,一个对于当前认知的安全设计,随着技术的革新与发展,可能一段时间后就成为不安全设计了,所以对于设计要定期进行安全审查并针对新技术新问题及时更新。
A05:Security Misconfiguration
安全配置问题:安全配置问题是指在代码配置中存在的错误或漏洞,允许攻击者访问敏感数据。这些问题可能涉及从网络安全到密码保护等各个方面,通常由于过于依赖开箱即用的代码或服务而发生。安全配置问题的影响可大可小,但通过适当的预防和网络安全措施,可以尽可能避免它们的发生。
安全配置问题的危害:安全配置问题涉及到安全配置的缺陷,可能导致数据泄露甚至系统完全被攻破。这些错误可能被利用来访问敏感数据,甚至用来修改应用程序的某些部分。并且安全配置问题是多种多样的的,它的风险是潜在的难以察觉发现的。
A06:Vulnerable and Outdated Components
易受攻击和已淘汰的组件:易受攻击和已淘汰的组件一般是最新更新的组件可能还不够完善或者使用的组件存在问题未加入修复补丁。为了避免这种情况最好,定期更新补丁和组件,项目中尽量使用稳定版官方版组件而非追求最新版免费版,也要按照组件要求安装相关依赖项,在没有十足把握时不要随意修改组件。
A07:Identification and Authentication Failures
身份验证失败:对于用户身份验证失败的问题也是长期存在的,主要问题是单因素的漏洞和多因素的有效性和一致性,对于撞库攻击的防范现在比之前好多了,但是由于多因素的不一致和身份验证机制的不严谨不完善,任意登录问题还是较为普遍,感觉重点可以着手于不变量验证。
感兴趣的可以看一下我的相关文章,微信小程序的身份识别 - 掘金 (juejin.cn)、支付宝小程序的身份识别 - 掘金 (juejin.cn)、百度小程序的身份识别 - 掘金 (juejin.cn)、抖音小程序的身份识别 - 掘金 (juejin.cn)。
A08:Software and Data Integrity Failures
软件和数据完整性故障:软件和数据完整性故障与不能防止完整性违规的代码和基础设施有关。在对象或数据被编码或序列化为攻击者可以看到和修改的结构的情况下,很容易受到不安全的反序列化的影响。另一种形式是应用程序依赖来自不受信任的来源、存储库和内容交付网络的插件、库或模块。不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损。最后,许多应用程序现在包括自动更新功能,其中更新在没有充分完整性验证的情况下被下载并应用于以前受信任的应用程序。攻击者可能会上传自己的更新以分发并在所有安装上运行。
A09:Security Logging and Monitoring Failures
安全日志记录和监控失败:日志记录是很基础的一件事,但是有些编程语言的日志库并不完善或者在过去并不完善,导致程序存在日志不全或者操作日志较为简单的问题,处理这个问题还是需要日志上传云端确保一致性并且在编写程序时对日志系统进行完善的思考和编写,并且要部署日志防护系统防止日志被轻易操作。
A10:Server-Side Request Forgery
服务器端请求伪造:服务器端请求伪造(SSRF)是一种安全漏洞,其中网络连接源自于应用程序服务器内部IP。攻击者可以利用这种连接来规避网络控制,从而扫描或攻击那些其他方式未暴露的内部资源。具体而言,SSRF的漏洞可能取决于对URI特定部分的控制,以及用于建立连接的库。每当Web应用程序在未验证用户提供的URL的情况下获取远程资源时,就可能出现SSRF缺陷。这种漏洞允许攻击者强制应用程序发送精心设计的请求到意外的目的地,即使目标受到防火墙、VPN或其他类型网络ACL的保护。随着现代Web应用程序为最终用户提供更多方便的功能,获取URL的需求变得更加普遍,从而导致SSRF的发生率上升。此外,由于云服务和架构的复杂性增加,SSRF的严重性也在逐渐提高。
要防止SSRF最好的做法是采用间接方法,即创建一个合法资源名的列表,用户只能从中进行选择。这种方法不仅通过在输入之前拒绝列表中的内容来选择性地拒绝或避免潜在的危险字符,而且还能防止用户直接使用其输入指定资源名称。尽管任何拒绝列表都可能不完整并随时间过时,但更好的方法是创建一个字符列表,只允许被认可的字符组成用户输入,并确保用户输入仅用于在目标系统上指定资源。URI的方案、主机和端口应由应用程序控制,从而最大程度地减小攻击者可能造成的损害。