OWASP Top 10 学习/复习/回顾


OWASP Top10 2013

Top 10

A1-Injection
A2-Broken Authentication and Session Management
A3-Cross-Site Scripting (XSS)
A4-Insecure Direct Object References
A5-Security Misconfiguration
A6-Sensitive Data Exposure
A7-Missing Function Level Access Control
A8-Cross-Site Request Forgery (CSRF)
A9-Using Components with Known Vulnerabilities
A10-Unvalidated Redirects and Forwards

2013 Top 10 List


A1-Injection

Injection flaws, such as SQL, OS, and LDAP injection occur when untrusted data is sent to an interpreter as part of a command or query. The attacker’s hostile data can trick the interpreter into executing unintended commands or accessing data without proper authorization.(注入攻击漏洞,例如:SQL、OS以及LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。)


A2-Broken Authentication and Session Management

Application functions related to authentication and session management are often not implemented correctly, allowing attackers to compromise passwords, keys, or session tokens, or to exploit other implementation flaws to assume other users’ identities.{与身份认证和会话管理相关的应用程序功能往往得不到正确的实现,这就导致了攻击者破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份。{使身份伪造成为可能}}


A3-Cross-Site Scripting (XSS)

XSS flaws occur whenever an application takes untrusted data and sends it to a web browser without proper validation or escaping. XSS allows attackers to execute scripts in the victim’s browser which can hijack user sessions, deface web sites, or redirect the user to malicious sites.{当应用程序接收到含有不可信的数据,在没有进行适当的验证和转义的情况下,就将它发送给一个网页浏览器,这就会产生跨站脚本攻击(XSS)。XSS允许攻击者在受害者的浏览器上执行脚本,从而劫持用户会话、危害网站、或者将用户转至恶意网站。}


A4-Insecure Direct Object References

A direct object reference occurs when a developer exposes a reference to an internal implementation object, such as a file, directory, or database key. Without an access control check or other protection, attackers can manipulate these references to access unauthorized data.{当安全人员暴露一个对内部实现对象的引用时,例如:一个文件、目录或者数据库密钥,就会产生一个不安全的直接对象引用。在没有访问控制检测或其他保护时,攻击者会操控这些引用去访问未授权数据。}(将本来不该被外部知道的文件名or目录名or数据库连接信息暴露了出去,比如在给备份文件起名字时要非常注意!


A5-Security Misconfiguration

Good security requires having a secure configuration defined and deployed for the application, frameworks, application server, web server, database server, and platform. Secure settings should be defined, implemented, and maintained, as defaults are often insecure. Additionally, software should be kept up to date.{好的安全需要对应用程序、框架、应用程序服务器、Web服务器、数据库服务器和平台定义和执行安全配置。由于许多设置的默认值并不是安全的,因此,必须定义、实施和维护这些设置。这包含了对所有的软件保持及时的更新,包括所有应用程序的库文件。}{就比如说那个:cgi.fix_pathinfo默认配置导致的nginx解析漏洞}


A6-Sensitive Data Exposure

Many web applications do not properly protect sensitive data, such as credit cards, tax IDs, and authentication credentials. Attackers may steal or modify such weakly protected data to conduct credit card fraud, identity theft, or other crimes. Sensitive data deserves extra protection such as encryption at rest or in transit, as well as special precautions when exchanged with the browser.(许多Web应用程序没有正确保护敏感数据,如信用卡、税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取,或者其他犯罪。敏感数据值得额外的保护,比如在存放或在传输过程中的加密,以及在与浏览器交换时进行特殊的预防措施。


A7-Missing Function Level Access Control

Most web applications verify function level access rights before making that functionality visible in the UI. However, applications need to perform the same access control checks on the server when each function is accessed. If requests are not verified, attackers will be able to forge requests in order to access functionality without proper authorization.{大多数Web应用程序在用户通过权限认证之前是不会将所有的功能全部放在可见的UI上的。但是,应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求以在未经适当授权时访问该功能。}{就好比:已登录用户的页面上会出现添加/删除功能的按钮,而未登录用户的页面上只能进行浏览,但如果攻击者自行构造某一功能的数据包没有被检查,则可能会引起权限控制绕过的漏洞}


A8-Cross-Site Request Forgery (CSRF)

A CSRF attack forces a logged-on victim’s browser to send a forged HTTP request, including the victim’s session cookie and any other automatically included authentication information, to a vulnerable web application. This allows the attacker to force the victim’s browser to generate requests the vulnerable application thinks are legitimate requests from the victim.{一个跨站请求伪造攻击迫使登录用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其它认证信息,发送到一个存在漏洞的Web应用程序。这就允许攻击者迫使用户浏览器向存在漏洞的应用程序发送请求,而这些请求会被应用程序认为是用户的合法请求。}


A9-Using Components with Known Vulnerabilities

Components, such as libraries, frameworks, and other software modules, almost always run with full privileges. If a vulnerable component is exploited, such an attack can facilitate serious data loss or server takeover. Applications using components with known vulnerabilities may undermine application defenses and enable a range of possible attacks and impacts.{组件,比如:库文件、框架和其他软件模块,几乎总是以全部的权限运行。如果一个带有漏洞的组件被利用,这种攻击可以造成更为严重的数据丢失或服务器接管。应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,并使一系列可能的攻击和影响成为可能。}{例如之前出现的Struts2漏洞和OpenSSL漏洞的影响是极广的!}


A10-Unvalidated Redirects and Forwards

Web applications frequently redirect and forward users to other pages and websites, and use untrusted data to determine the destination pages. Without proper validation, attackers can redirect victims to phishing or malware sites, or use forwards to access unauthorized pages.{Web应用程序经常将用户重定向和转发到其他网页和网站,并且利用不可信的数据去判定目的页面。如果没有得到适当的验证,攻击者可以重定向受害用户到钓鱼软件或恶意网站,或者使用转发去访问未授权的页面。}{例如:QQ邮箱在每次点击外部URL的时候都会提示不要轻易输入用户名密码}{还有就是:重置密码的URL在用过了1次之后就应该立即使其失效,否则也会引起一些安全问题}

 

OWASP Top10漏洞的预防措施


A1-Injection

根本方法就是—数据和代码相分离;

1.使用安全的API

2.层层过滤

3.白名单策略


A2-Broken Authentication and Session Management

会话劫持漏洞的防御手段/方法:

一套强大的认证和会话管理控制系统;同时避免因为别的漏洞(如XSS)而导致信息泄露。


A3-Cross-Site Scripting (XSS)

防止XSS:

将不可信数据与动态的浏览器内容区分开

1.过滤、转义;

2.白名单(和具体的功能需求息息相关);

3.考虑用CSP(内容安全策略)来抵御整站的跨站脚本攻击。


A4-Insecure Direct Object References

预防不安全的直接对象引用漏洞:

使用基于用户或者会话的间接对象引用{例如:token认证};

检查访问、访问控制。


A5-Security Misconfiguration

预防安全配置错误漏洞:

1.一个经过验证的自动化安全加固流程;

2.能及时进行补丁更新的自动化流程;

3.安全的架构;

4.周期性的漏洞扫描和审计。


A6-Sensitive Data Exposure

预防敏感信息泄露:

1.信息加密;

2.临时文件及时清除{如:vim的自动备份文件/.bak后缀的文件};

3.合适的算法以及强壮的密钥;

4.禁用自动完成等可能会引起敏感数据收集的功能。


A7-Missing Function Level Access Control

预防功能级访问控制缺失:

与业务逻辑层有些关系;然后在默认情况下,应该拒绝所有的访问;对于每个功能的访问,需要明确特定角色的访问权限–责任到家制。


A8-Cross-Site Request Forgery (CSRF)

预防CSRF漏洞:

1.不可预测&唯一的token;

2.避免token被轻易收集&分析;

3.对敏感操作进行重新认证。


A9-Using Components with Known Vulnerabilities

使用含有已知漏洞的组件:

1.及时更新软件/配置文件;

2.在可能的情况下进行二次安全开发/封装。


A10-Unvalidated Redirects and Forwards

未验证的重定向和转发漏洞:

1.尽量避免使用重定向和转发;

2.在需要进行重定向和转发时进行一些用户信息的绑定;

3.利用网上的白名单进行验证;

4.在一次使用之后及时进行销毁{个人觉得非常重要}。

 

看《白帽子讲Web安全》的过程中总结/提取出的一些经验:
数据与代码分离原则

这一原则广泛适用于由“注入”而引发的安全问题的场景

不可预测性原则

即使无法修复code,但是如果能够使得攻击的方法无效,那么也可以算是成功的防御(在设计token的时候就应该考虑到这一点)

XSS的防御:

HttpOnly:对重要的cookie设置httponly标志
输入检查:{如:XSS Filter}
输出检查:{如:HTMLEncode JavaScriptEncode URLEncode}
标签、属性、事件等的选择尽量使用白名单,不要使用黑名单。

CSRF的防御

1.验证码
2.referer check
3.anti-csrf-token
足够随机,安全随机数生成token
生成多个有效的token,多页面共存
避免token曝露,将token隐藏在表单中,POST方式提交

注入攻击

{注入攻击的本质是把用户输入的数据当作代码执行,这里有两个关键条件:1.用户能够控制输入2.原本程序要执行的代码,拼接了用户输入的数据。}{数据与代码分离}

SQL注入的防御{除了下面的措施还要注意:最小权限原则+功能性限制}:

1.使用预编译语句
2.使用安全的存储过程;
3.检测数据类型;
4.使用安全函数。

XML注入{对用户输入的数据进行转义}

代码注入{主要由一些不安全的函数或方法引起,如:eval/system}

CRLF注入{处理好”r”和”n”这两个特殊字符即可,尤其是那些使用换行符作为分隔符的应用}

应用层DDOS

CC攻击{在黑洞Collapasar的防御下仍能有效完成拒绝服务攻击}{其原理非常简单,就是针对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务器端资源的目的。而在Web应用中,查询数据库、读/写硬盘文件等操作,资源消耗相对较大}{应用层ddos攻击是针对服务器性能的一种攻击,所以优化服务器性能的方法都或多或少的能减缓此种攻击}限制客户端的访问频率

PHP安全
  • 文件包含漏洞
  • 变量覆盖漏洞
  • 代码执行漏洞{禁用一些危险的函数:popen/system/passthru/exec/eval}
一个cookie的使用过程如下:

1.浏览器向服务器发送请求,这时候没有cookie;
2.服务器返回时发送set-cookie头,向客户端浏览器写入cookie;
3.在该cookie到期前,浏览器访问该域下的所有页面,都将发送该cookie。

HTTPONLY就是在set-cookie时标记的,对于有多个cookie的情况,服务器应对所有重要的cookie都加上HTTPONLY标记。

浏览器所持有的cookie分为2种:一种是“session cookie”,又称“临时cookie”;另一种是“Third-party cookie”,也称为“第三方/本地cookie”。
两者的区别在于session cookie没有被设置Expire时间,在浏览器被关闭后session cookie失效;而Third-party cookie是在到了Expire时间后就失效了。
在浏览网站的过程中,若是一个网站设置了session cookie,那么在浏览器进程的生命周期内,即使浏览器新打开了Tab页面,session cookie也是有效的,因为session cookie保存在浏览器进程的内存空间中,session cookie没有被指定Expire时间,在浏览器被关闭后,session cookie就失效了;
Third-party cookie是服务器在set-cookie时指定了Expire时间,只有到了Expire时间之后Third-party cookie才会失效,所以这种cookie会保存在本地。

,

《 “OWASP Top 10 学习/复习/回顾” 》 有 18 条评论

  1. 冷门知识 — NoSQL注入知多少
    https://www.anquanke.com/post/id/97211
    https://github.com/bibotai/research_of_nosql_injection
    NoSQL注入的分析和缓解
    http://www.yunweipai.com/archives/14084.html
    `
    NoSQL注入分类
    我找到了两种NoSQL注入分类的分类方式,第一种是按照语言的分类:PHP数组注入,js注入和mongo shell拼接注入等等。

    第二种是按照攻击机制分类:重言式,联合查询,JavaScript注入等等,这种分类方式很像SQL注入的分类方式。

    我们详细讨论下第二种分类方式:
    1) 重言式
    又称为永真式,此类攻击是在条件语句中注入代码,使生成的表达式判定结果永远为真,从而绕过认证或访问机制。

    2) 联合查询
    联合查询是一种众所周知的SQL注入技术,攻击者利用一个脆弱的参数去改变给定查询返回的数据集。联合查询最常用的用法是绕过认证页面获取数据。

    3) JavaScript注入
    这是一种新的漏洞,由允许执行数据内容中JavaScript的NoSQL数据库引入的。JavaScript使在数据引擎进行复杂事务和查询成为可能。传递不干净的用户输入到这些查询中可以注入任意JavaScript代码,这会导致非法的数据获取或篡改。
    `

  2. 客户端 session 导致的安全问题
    https://www.leavesongs.com/PENETRATION/client-session-security.html
    `
    0x01 什么是客户端session
    0x02 保护客户端session
    0x03 flask客户端session导致敏感信息泄露
    0x04 flask验证码绕过漏洞
    0x05 CodeIgniter 2.1.4 session伪造及对象注入漏洞

    作为一个开发者,如果我们使用的web框架或web语言的session是存储在客户端中,那就必须牢记下面几点:
    没有加密时,用户可以看到完整的session对象
    加密/签名不完善或密钥泄露的情况下,用户可以修改任意session
    使用强健的加密及签名算法,而不是自己造(反例discuz)
    `

  3. retire.js - 扫描JavaScript库漏洞
    https://mp.weixin.qq.com/s/4B-QxuWG79gZAiNO5nX_rQ
    https://github.com/retirejs/retire.js/
    `
    有很多javascript库可用于网络和node.js应用程序。这大大简化了开发过程,但我们需要及时了解安全修补程序。

    “使用具有已知漏洞的组件”现在是owasp安全风险前10名列表的一部分,不安全的库可能会给您的web应用程序带来巨大风险。

    retire.js的目标是帮助您检测使用具有已知漏洞的js-library版本。
    `

  4. 同源策略和跨域访问学习笔记
    https://uknowsec.cn/posts/notes/%E5%90%8C%E6%BA%90%E7%AD%96%E7%95%A5%E5%92%8C%E8%B7%A8%E5%9F%9F%E8%AE%BF%E9%97%AE%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0.html
    `
    所谓同源是指以下三者相同:
    协议相同
    域名相同
    端口相同

    同源策略的目的:
    是为了保证用户信息的安全,防止恶意的网站窃取数据。

    跨域实现方式:
    document.domain
    window.name
    window.postMessage
    JSONP
    iframe
    CORS
    `

  5. 我的CSP绕过思路及总结
    https://paper.tuisec.win/detail/d0c059e34504568
    https://xz.aliyun.com/t/5084
    `
    CSP简介
    CSP的绕过
      location.href
      link标签导致的绕过
      使用Iframe绕过
      用CDN来绕过
      站点可控静态资源绕过
      站点可控JSONP绕过
      Base-uri绕过
      不完整script标签绕过nonce
      object-src绕过(PDFXSS)
      SVG绕过
      不完整的资源标签获取资源
      CSS选择器获取内容
      CRLF绕过
    后话
    参考链接
    `

  6. NSA和CISA红蓝团队揭示“10大网络安全配置错误”
    https://www.4hou.com/posts/yAyW
    `
    近日,美国国家安全局(NSA)和网络安全与基础设施安全局(CISA)联合发布了一份网络安全咨询报告,以强调大型组织中最常见的网络安全配置错误,并详细介绍了威胁行为者滥用这些错误配置的战术、技术和程序(TTPs)。

    通过NSA和CISA红蓝团队的评估,以及NSA和CISA捕获和事件响应团队的活动,这些机构确定了以下10个最常见的网络安全配置错误:

    1. 软件和应用程序的默认配置;

    2. 用户/管理员权限的不当分离;

    3. 内部网络监控不足;

    4. 缺乏网络分段;

    5. 补丁管理不善;

    6. 系统访问控制的绕过;

    7. 弱或误配置的多因素认证(MFA)方法;

    8. 不充分的网络共享和服务的访问控制列表(ACLs);

    9. 糟糕的凭证卫生;

    10. 无限制的代码执行。

    这些配置错误说明了许多大型组织——包括那些具有成熟网络态势的组织的系统性漏洞和攻击风险,凸显了软件开发商采用“设计即安全”(secure-by-design)原则的重要性和紧迫性。
    `
    NSA and CISA Red and Blue Teams Share Top 10 Cybersecurity Misconfigurations
    https://media.defense.gov/2023/Oct/05/2003314578/-1/-1/0/JOINT_CSA_TOP_TEN_MISCONFIGURATIONS_TLP-CLEAR.PDF
    `
    1. Default configurations of software and applications
    2. Improper separation of user/administrator privilege
    3. Insufficient internal network monitoring
    4. Lack of network segmentation
    5. Poor patch management
    6. Bypass of system access controls
    7. Weak or misconfigured multifactor authentication (MFA) methods
    8. Insufficient access control lists (ACLs) on network shares and services
    9. Poor credential hygiene
    10. Unrestricted code execution
    `

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注