OWASP(开放Web应用安全项目)是一个非营利性组织,旨在提高软件安全性。
每四年一个更新,2025年就会再次更新,到时候这篇文章也会实时更新。
我主要从定义,场景,原因,影响,防护措施进行介绍。
2021 OWASP TOP 10
前10名
- Broken Access Control(访问控制缺失)
- Cryptographic Failures(加密失败)
- Injection(注入漏洞)
- Insecure Design(不安全的设计)
- Security Misconfiguration(安全配置错误)
- Vulnerable and Outdated Components(漏洞和过时组件)
- Identification and Authentication Failures(身份识别与认证失败)
- Software and Data Integrity Failures(软件与数据完整性失败)
- Security Logging and Monitoring Failures(安全日志与监控失败)
- Server-Side Request Forgery (SSRF)(服务器端请求伪造)
一.Broken Access Control(访问控制缺失)
(1)定义
应用程序未能正确限制用户对资源的访问,导致未授权的用户可以访问或修改敏感数据。这种漏洞可能导致数据泄露、篡改或其他安全问题。
(2)常见情景
1.用户可以访问其他用户的私人信息(如账户详情、财务信息)。
2.未授权的用户可以执行管理员操作(如删除数据、修改权限)。
3.API接口没有适当的身份验证,允许任意用户进行操作。
(3)漏洞原因
1.缺乏授权检查:应用程序未在敏感操作前验证用户是否具有相应的权限。
2.错误的URL访问:通过直接访问URL,攻击者可以绕过前端界面的访问控制。
3.不安全的默认设置:某些框架或组件的默认配置可能导致安全性不足。
(4)影响
1.敏感数据被未授权用户访问。
2.违反数据保护法规。
3.用户信任度下降,影响声誉。
(5)防护措施
1.强制访问控制:在每个敏感操作中实施严格的访问控制检查。
2.使用最小权限原则:确保用户只能访问其所需的资源和操作。
3.安全编码实践:在开发阶段进行代码审查,确保安全逻辑的正确性。
4.定期安全测试:通过渗透测试和代码审计发现潜在的访问控制缺失。
5.利用角色和权限:合理设计用户角色和权限,确保细粒度的访问控制。
6.监控与日志记录:记录访问请求,监控异常活动以便及时响应。
二.Cryptographic Failures(加密失败)
(1)定义
Cryptographic Failures指的是在加密过程中使用不安全的算法、配置或实施方式,导致敏感数据被攻击者获取或篡改。
(2)常见情景
1.使用过时的加密算法,比如:MD5、SHA-1。
2.密钥管理不当,导致密钥泄露。
3.传输中的数据未加密,易受中间人攻击。
(3)漏洞原因
1.不当的算法选择:未使用行业标准的强加密算法。
2.弱密钥生成:使用容易被猜测或暴力破解的密钥。
3.缺乏数据保护:在存储或传输敏感信息时未采取适当加密措施。
(4)影响
1.数据泄露:敏感信息(如密码、信用卡信息)被攻击者窃取。
2.系统完整性受损:数据被篡改,导致信任危机。
3.法律责任:可能违反数据保护法规,面临罚款。
(5)防护措施
1.使用强加密算法:选择AES、RSA等当前被广泛认可的加密标准。
2.安全密钥管理:使用安全的密钥存储解决方案,并定期更换密钥。
3.加密敏感数据:确保所有敏感数据在存储和传输过程中都经过加密。
4.实施安全协议:使用TLS等安全协议来保护数据传输。
5.定期安全审计:对加密实施进行定期检查和审计,确保符合最佳实践。
三.Injection(注入漏洞)
(1)定义
注入漏洞是指攻击者通过将恶意代码或数据注入到应用程序中,导致应用程序执行非预期的操作。这类漏洞通常出现在Web应用程序中,最常见的包括SQL注入、命令注入、XML注入等。
(2)常见类型
SQL注入:
- 攻击者通过输入恶意SQL语句,操控数据库执行未授权的查询或操作。
- 例如,通过在登录表单中输入特制的SQL代码,绕过身份验证。
命令注入:
- 攻击者将命令插入到应用程序可以执行的系统命令中,导致系统执行未授权的操作。
- 例如,在Web应用中执行系统命令来获取敏感信息。
XML注入:
- 攻击者向XML输入中插入恶意内容,可能导致信息泄露或服务拒绝(DoS)。
- 例如,篡改XML数据以改变处理逻辑。
脚本注入(如XSS):
- 攻击者将恶意脚本注入到网页中,导致其他用户的浏览器执行该脚本。
- 这可以用来窃取Cookies、会话信息等。
(3)漏洞原因
1.缺乏输入验证:应用程序未对用户输入进行充分的验证和清理。
2.拼接SQL查询:直接将用户输入拼接到SQL查询中,而不使用参数化查询。
3.不安全的API调用:在构造系统命令时直接使用用户输入。
(4)影响
1.数据泄露:攻击者可以获取敏感信息。
2.数据篡改:未授权的修改数据库或其他数据。
3.系统损害:执行系统命令可能导致服务中断或数据丢失。
4.信任丧失:用户对应用程序的信任度降低,可能导致用户流失。
(5)防护措施
1.输入验证:对所有用户输入进行严格的验证,确保符合预期格式。
2.参数化查询:在数据库查询中使用参数化或预编译语句,避免直接拼接SQL。
3.使用安全API:调用系统命令时,避免直接使用用户输入,使用安全的API接口。
4.编码输出:在向用户输出数据前,进行适当的编码,防止脚本注入。
5.定期安全审计:对应用程序进行安全测试,识别和修复潜在的注入漏洞。
四. Insecure Design(不安全的设计)
(1)定义
不安全的设计指的是在软件或系统的架构和设计阶段未考虑安全性,导致最终产品容易受到攻击。这类设计缺陷可能使得系统脆弱,无法有效抵御威胁。
(2)常见特征
1.缺乏安全原则:未遵循安全设计原则,如最小权限、默认拒绝等。
2.不充分的身份验证和授权:设计中未有效区分用户权限,导致未授权访问。
3.未考虑数据保护:敏感数据在存储或传输时未加密,增加泄露风险。
4.脆弱的用户界面:设计的用户界面容易导致用户误操作或输入错误。
(3)影响
1.数据泄露:攻击者利用设计缺陷获取敏感信息。
2.系统破坏:不当设计可能导致服务拒绝(DoS)或系统崩溃。
3.信任丧失:用户对应用程序的信任度降低,影响业务声誉。
(4)防护措施
1.安全设计原则:在设计阶段引入安全性考虑,确保遵循最佳实践。
2.风险评估:定期进行风险评估,识别潜在的安全问题。
3.用户教育:通过培训和文档帮助用户理解安全实践,降低误操作风险。
4.持续安全测试:在开发过程中进行安全测试,以便及时发现并修复设计缺陷。
五.Security Misconfiguration(安全配置错误)
(1)定义
安全配置错误指的是在应用程序、服务器或网络设备配置时,未遵循安全最佳实践,导致系统易受攻击。这种错误常发生在部署、升级或维护过程中。
(2)常见类型默认设置未更改:使用厂商默认用户名和密码,未更改初始配置。
不必要的功能启用:启用不必要的服务、端口或功能,增加潜在攻击面。
错误的权限设置:文件、目录或数据库权限配置不当,导致未授权访问。
不充分的错误信息:系统错误信息过于详细,可能泄露敏感信息。
(3)影响
1.数据泄露:攻击者可利用配置错误获取敏感数据。
2.服务中断:不当配置可能导致服务拒绝(DoS)或系统崩溃。
3.信任问题:用户对系统的信任度降低,影响企业声誉。
(4)防护措施
1.安全基线配置:制定并实施安全基线,确保所有系统遵循相同的安全配置标准。
2.定期审计:定期检查和审核系统配置,及时发现并修复安全漏洞。
3.最小化权限:仅为用户和服务提供必要的权限,遵循最小权限原则。
4.更新与补丁管理:定期更新软件和应用,修复已知的安全漏洞。
六.Vulnerable and Outdated Components(漏洞和过时组件)
(1)定义
漏洞和过时组件指的是在软件或系统中使用了已知存在安全漏洞或不再维护的第三方库和框架。这类组件增加了攻击面,容易被利用。
(2)常见问题
1.已知漏洞:使用的组件存在公开的安全漏洞,未及时修复。
2.过时版本:使用不再更新的组件,缺乏安全补丁和支持。
3.依赖性风险:某些组件依赖于其他库,可能间接引入安全风险。
(3)影响
1.数据泄露:攻击者可能利用已知漏洞获取敏感信息。
2.系统入侵:过时组件的漏洞可能被利用,导致系统被攻陷。
3.合规问题:使用不安全组件可能导致违反行业合规要求。
(4)防护措施
1.定期更新:及时更新和修补所有组件,确保使用最新版本。
2.使用工具扫描:利用自动化工具扫描项目中的依赖,识别潜在漏洞。
3.维护清单:保持组件使用的详细清单,便于管理和审计。
4.选择可信赖来源:仅从信誉良好的源获取组件,降低安全风险。
七. Identification and Authentication Failures(身份识别与认证失败)
(1)定义
身份识别与认证失败是指在用户身份验证和访问控制过程中存在的漏洞,导致未授权用户可以访问系统、应用程序或数据。这些问题通常源于设计缺陷、实现错误或不当配置。
(2)常见问题
1.弱密码策略:允许用户选择简单或常见的密码,容易被猜测或破解。
2.缺乏多因素认证(MFA):未实施多因素认证,使得单一密码成为系统的唯一防线,增加了账户被攻陷的风险。
3.会话管理不足:会话在用户注销后未及时失效,或会话令牌易被窃取,从而导致会话劫持。
4.错误的身份验证流程:身份验证过程不够严格,如未验证电子邮件或手机号码,可能允许冒名顶替。
5.过于宽松的权限控制:用户被赋予不必要的权限,导致敏感信息泄露或被篡改。
(3)影响
1.未授权访问:攻击者可以获得敏感数据或功能,可能造成数据泄露。
2.账户劫持:用户账户被恶意用户控制,导致信息滥用或破坏。
3.财务损失:企业可能遭受直接财务损失及后续的法律责任。
(4)防护措施
1.强密码政策:要求用户设置复杂密码,包含字母、数字和特殊字符,定期强制更换密码。
2.启用多因素认证:增加额外的身份验证步骤,如短信验证码、身份验证应用程序或生物识别。
3.安全的会话管理:确保会话在用户注销后立即失效,并在一定时间不活动后自动注销。
4.定期审计和监控:定期检查和监控身份验证流程,及时识别并修复潜在的安全漏洞。
5.用户教育: 提高用户的安全意识,指导其如何创建强密码及识别钓鱼攻击等威胁。
八. Software and Data Integrity Failures(软件与数据完整性失败)
(1)定义
软件与数据完整性失败指的是在应用程序或数据处理过程中,未能确保软件和数据的准确性、完整性和一致性。这种失败可能导致数据损坏、篡改或不可信。
(2)常见问题
1.缺乏验证机制:未对输入数据进行验证,导致恶意数据被接受。
2.不安全的数据存储:数据未加密存储,易受到篡改或泄露。
3.软件更新不及时:未及时应用安全更新,可能导致已知漏洞被利用。
4.使用过时的库或组件:使用包含漏洞的第三方组件,增加风险。
(3)影响
1.数据损坏:篡改或错误的数据可能导致应用程序崩溃或输出错误结果。
2.信任问题:用户对系统的信任度降低,可能影响企业声誉。
3.合规性风险:未满足行业标准或法律要求,可能导致法律责任。
(4)防护措施
1.输入验证:强制执行数据输入的验证和清理,确保数据有效性。
2.数据加密:对存储和传输的数据进行加密,保护数据的完整性和机密性。
3.定期更新:定期检查和更新软件及其依赖,修复已知漏洞。
4.使用完整性检查:实施哈希校验或数字签名,以确保软件和数据在传输和存储过程中未被篡改。
九. Security Logging and Monitoring Failures(安全日志与监控失败)
(1)定义
安全日志与监控失败是指在系统中缺乏有效的日志记录和监控机制,未能及时捕捉和响应安全事件,导致潜在威胁未被发现或及时处理。
(2)常见问题
1.日志记录不足:关键事件或操作未被记录,导致难以追踪和分析安全事件。
2.日志安全性差:日志未加密或未妥善存储,容易被篡改或删除。
3.监控机制缺失:缺乏实时监控,无法及时发现异常行为或攻击迹象。
4.日志分析能力不足:未部署有效的分析工具,无法从日志中提取有价值的信息。
(3)影响
1.事件响应延迟:未能及时发现和响应安全事件,可能导致损失扩大。
2.取证困难:在发生安全事件时,缺乏有效的日志,增加调查难度。
3.合规性问题:未遵循行业标准或法规要求,可能面临法律责任。
(4)防护措施
1.全面的日志记录:记录所有关键操作和事件,包括用户登录、数据访问等。
2.确保日志安全:对日志进行加密存储,并设置适当的访问控制,防止篡改。
3.实时监控:部署实时监控工具,及时发现并响应异常活动。
4.定期审计和分析:定期审计日志记录和监控活动,利用自动化工具进行数据分析,以识别潜在威胁。
十.Server-Side Request Forgery (SSRF)(服务器端请求伪造)
(1)定义
SSRF是一种网络攻击,攻击者通过向受害服务器发送请求,诱使其访问本地或远程资源。这种攻击通常利用了服务器对外部请求的处理权限,可能导致敏感信息泄露或内部服务被攻击。
(2)攻击方式
利用内部网络:攻击者可以请求本地服务,访问通常无法从外部访问的资源。
绕过防火墙:SSRF可以绕过安全防护措施,直接与内部系统交互。
信息泄露:通过获取响应内容,攻击者可能获取敏感信息,如配置文件或API密钥。
(3)影响
数据泄露:内部系统信息被暴露,增加了后续攻击的风险。
服务中断:可能引发对内部服务的拒绝服务攻击。
权限提升:利用获取的内部信息,攻击者可能获得更高权限。
(4)防护措施
输入验证:对用户输入的URL进行严格验证,限制访问范围。
网络隔离:限制服务器访问内部网络,采用网络分段策略。
访问控制:实施强有力的访问控制,确保服务器仅能访问必要的外部资源。
日志监控: 监控和审计请求活动,及时识别异常行为。
总得来说,2021年的漏洞名称是真的怪。