OWASP或Open Web Security Project是一家非营利性慈善组织,致力于提高软件和Web应用程序的安全性。
- 该组织根据来自各种安全组织的数据发布顶级Web安全漏洞列表。
- 根据可利用性,可检测性和对软件的影响,Web安全漏洞具有优先级。
- 可开发性 -
- 利用安全漏洞需要什么?当攻击仅需要Web浏览器且最低级别是高级编程和工具时,可攻击性最高。
- 可检测性 -
- 检测威胁有多容易?最高的是显示在URL,表单或错误消息上的信息,最低的是源代码。
- 影响或损坏 -
- 如果安全漏洞暴露或受到攻击,将会造成多大的破坏?最高的是完整的系统崩溃,最低的是什么都没有。
OWASP Top 10的主要目标是向开发人员,设计人员,经理,架构师和组织介绍最重要的安全漏洞。
你不知道这10个Web安全漏洞,就别说自己是黑客
根据OWASP Top 10,十大安全漏洞是:
- SQL Injection(SQL注入)
- Cross Site Scripting(xss跨站脚本)
- Broken Authentication and Session Management(身份验证和会话管理中断)
- Insecure Direct Object References(不安全的直接对象引用)
- Cross Site Request Forgery(跨站点请求伪造)
- Security Misconfiguration(安全配置错误)
- Insecure Cryptographic Storage(不安全的加密存储)
- Failure to restrict URL Access(无法限制URL访问)
- Insufficient Transport Layer Protection(传输层保护不足)
- Unvalidated Redirects and Forwards(未经验证的重定向和转发)
SQL注入
描述
SQL注入是一个安全漏洞,允许攻击者通过操纵用户提供的数据来更改后端SQL语句。
当用户输入作为命令或查询的一部分被发送到解释器并且欺骗解释器执行非预期的命令并且允许访问未授权的数据时,发生注入。
由Web应用程序执行时的SQL命令也可以公开后端数据库。
意义
- 攻击者可以将恶意内容注入易受攻击的字段。
- 可以从数据库中读取敏感数据,如用户名,密码等。
- 可以修改数据库数据(插入/更新/删除)。
- 管理操作可以在数据库上执行
易受攻击的对象
- 输入字段
- 与数据库交互的URL。
例子:
- 登录页面上的SQL注入
在没有有效凭据的情况下登录应用程序。
有效的userName可用,密码不可用。
测试网址:http://demo.testfire.net/default.aspx
用户名:sjones
密码:1 = 1'或pass123
创建SQL查询并将其发送到Interpreter,如下所示
SELECT * FROM Users WHERE User_Name = sjones AND Password = 1 = 1'或pass123;
建议
- 白名单列出输入字段
- 避免显示对攻击者有用的详细错误消息。
xss跨站脚本
描述
Cross Site Scripting也简称为XSS。
XSS漏洞针对嵌入在客户端(即用户浏览器而不是服务器端)的页面中嵌入的脚本。当应用程序获取不受信任的数据并将其发送到Web浏览器而未经适当验证时,可能会出现这些缺陷。
在这种情况下受害者浏览器,攻击者可以使用XSS对用户执行恶意脚本。由于浏览器无法知道脚本是否可靠,脚本将被执行,攻击者可以劫持会话cookie,破坏网站或将用户重定向到不需要的恶意网站。
XSS是一种攻击,允许攻击者在受害者的浏览器上执行脚本。
意义:
- 利用此安全漏洞,攻击者可以将脚本注入应用程序,可以窃取会话cookie,破坏网站,并可以在受害者的计算机上运行恶意软件。
易受攻击的对象
- 输入字段
- 网址
例子
1. http://www.vulnerablesite.com/home?" < script > alert(" xss") </ script >
上述脚本在浏览器上运行时,如果站点易受XSS攻击,将显示一个消息框。
如果攻击者想要显示或存储会话cookie,则可以进行更严重的攻击。
2. http://demo.testfire.net/search.aspx?txtSearch <iframe > <src = http://google.com width = 500 height 500> </ iframe>
上面的脚本运行时,浏览器会加载一个指向http://google.com的隐形框。
通过在浏览器上运行恶意脚本可以使攻击变得严重。
建议
- 白名单输入字段
- 输入输出编码
身份验证和会话管理中断
描述
网站通常为每个有效会话创建会话cookie和会话ID,这些cookie包含敏感数据,如用户名,密码等。当会话通过注销或浏览器突然关闭结束时,这些cookie应该无效,即每个会话应该有一个新的cookie。
如果cookie未失效,则敏感数据将存在于系统中。例如,使用公共计算机(Cyber Cafe)的用户,易受攻击的站点的cookie位于系统上并暴露给攻击者。攻击者在一段时间后使用相同的公共计算机,敏感数据会受到损害。
以同样的方式,用户使用公共计算机,而不是注销,他突然关闭浏览器。攻击者使用相同的系统,当浏览同一个易受攻击的站点时,受害者的上一个会话将被打开。攻击者可以通过窃取个人资料信息,信用卡信息等做任何他想做的事情。
应该进行检查以找到身份验证和会话管理的强度。密钥,会话令牌,cookie应该在不影响密码的情况下正确实施。
易受攻击的对象
- 在URL上公开的会话ID可能导致会话固定攻击。
- 注销和登录前后的会话ID相同。
- 会话超时未正确实施。
- 应用程序为每个新会话分配相同的会话ID。
- 应用程序的经过身份验证的部分使用SSL进行保护,密码以散列或加密格式存储。
- 会话可由低权限用户重用。
意义
- 利用此漏洞,攻击者可以劫持会话,对系统进行未经授权的访问,从而允许泄露和修改未经授权的信息。
- 使用盗取的cookie或使用XSS的会话可以高举会话。
例子
- 航空公司预订应用程序支持URL重写,将会话ID放在URL中:
- http://Examples.com/sale/saleitems;jsessionid=2P0OC2oJM0DPXSNQPLME34SERTBG/dest=Maldives(出售马尔代夫门票)
- 该网站的经过身份验证的用户希望让他的朋友了解该销售并发送电子邮件。朋友收到会话ID,可用于进行未经授权的修改或滥用保存的信用卡详细信息。
- 应用程序容易受到XSS攻击,攻击者可以通过XSS访问会话ID并可用于劫持会话。
- 应用程序超时未正确设置。用户使用公共计算机并关闭浏览器,而不是注销并离开。攻击者稍后使用相同的浏览器,并对会话进行身份验证。
建议
- 应根据OWASP应用程序安全验证标准定义所有身份验证和会话管理要求。
- 永远不要在URL或日志中公开任何凭据。
- 还应该做出很大的努力来避免可用于窃取会话ID的XSS漏洞。
不安全的直接对象引用
描述
当开发人员公开对内部实现对象的引用(例如URL或FORM参数中的文件,目录或数据库键)时,就会发生这种情况。攻击者可以使用此信息访问其他对象,并可以创建将来的攻击来访问未经授权的数据。
意义
- 使用此漏洞,攻击者可以访问未经授权的内部对象,可以修改数据或破坏应用程序。
易受攻击的对象
- 在URL中。
例子:
更改以下URL中的“userid”可以使攻击者查看其他用户的信息。
http://www.vulnerablesite.com/userid=123修改为http://www.vulnerablesite.com/userid=124
攻击者可以通过更改用户标识值来查看其他信息。
建议:
- 实施访问控制检查。
- 避免在URL中公开对象引用。
- 验证对所有引用对象的授权。
csrf跨站点请求伪造
描述
Cross Site Request Forgery是来自跨站点的伪造请求。
CSRF攻击是指恶意网站,电子邮件或程序导致用户的浏览器在用户当前已对其进行身份验证的受信任站点上执行不需要的操作时发生的攻击。
CSRF攻击强制登录受害者的浏览器向易受攻击的Web应用程序发送伪造的HTTP请求,包括受害者的会话cookie和任何其他自动包含的身份验证信息。
当用户在登录原始网站时点击URL时,攻击者将向受害者发送链接,该数据将从网站上被窃取。
意义
- 将此漏洞用作攻击者可以更改用户配置文件信息,更改状态,代表管理员创建新用户等。
易受攻击的对象
- 用户档案页面
- 用户帐户表单
- 商业交易页面
例子
受害者使用有效凭据登录银行网站。他收到攻击者的邮件说“请点击此处捐赠1美元。”
当受害者点击它时,将创建一个有效请求以向特定帐户捐赠1美元。
http://www.vulnerablebank.com/transfer.do?account=cause&amount=1
攻击者捕获此请求并创建以下请求,并嵌入一个按钮,说“我支持原因”。
http://www.vulnerablebank.com/transfer.do?account=Attacker&amount=1000
由于会话已通过身份验证并且请求通过银行网站发送,因此服务器将向攻击者转移1000美元。
建议
- 在执行敏感操作时强制用户在场。
- 实现CAPTCHA,重新认证和唯一请求令牌等机制。
安全配置错误
描述
必须为应用程序,框架,应用程序服务器,Web服务器,数据库服务器和平台定义和部署安全性配置。如果这些配置正确,攻击者可能会未经授权访问敏感数据或功能。
有时这种缺陷会导致系统完全妥协。保持软件最新也是很好的安全性。
意义
- 利用此漏洞,攻击者可以枚举底层技术和应用程序服务器版本信息,数据库信息并获取有关应用程序的信息以进行更多攻击。
易受攻击的对象
- 网址
- 表格字段
- 输入字段
例子
- 应用程序服务器管理控制台将自动安装,不会被删除。默认帐户不会更改。攻击者可以使用默认密码登录,并可以获得未经授权的访问。
- 您的服务器上未禁用目录列表。攻击者发现并可以简单地列出目录以查找任何文件。
建议
- 强大的应用程序架构,可在组件之间提供良好的分离和安全性。
- 更改默认用户名和密码。
- 禁用目录列表并实施访问控制检查。
不安全的加密存储
描述
不安全的加密存储是一种常见的漏洞,在敏感数据未安全存储时存在。
用户凭据,配置文件信息,健康详细信息,信用卡信息等属于网站上的敏感数据信息。
该数据将存储在应用程序数据库中。如果不使用加密或散列*来不正确地存储此数据,则它将容易受到攻击者的攻击。
(* Hashing是将字符串字符转换为固定长度或密钥的较短字符串。要解密字符串,用于形成密钥的算法应该可用)
意义
- 通过使用此漏洞,攻击者可以窃取,修改此类受弱保护的数据,以进行身份盗用,信用卡欺诈或其他犯罪。
易受攻击的对象
- 应用数据库。
例子
在其中一个银行应用程序中,密码数据库使用未加保留的哈希*来存储每个人的密码。SQL注入漏洞允许攻击者检索密码文件。所有未加盐的哈希都可以在任何时候强行进行,而盐渍的密码则需要数千年的时间。
(*无盐哈希 - 盐是附加到原始数据的随机数据。在哈希之前将盐附加到密码)
建议
- 确保适当的强标准算法。不要创建自己的加密算法。仅使用经过批准的公共算法,如AES,RSA公钥加密和SHA-256等。
- 确保异地备份已加密,但密钥是单独管理和备份的。
无法限制URL访问
描述
Web应用程序在呈现受保护的链接和按钮之前检查URL访问权限 每次访问这些页面时,应用程序都需要执行类似的访问控制检查。
在大多数应用程序中,特权页面,位置和资源不会呈现给特权用户。
通过智能猜测,攻击者可以访问权限页面。攻击者可以访问敏感页面,调用函数和查看机密信息。
意义
- 利用此漏洞攻击者可以访问未经授权的URL,而无需登录应用程序并利用此漏洞。攻击者可以访问敏感页面,调用函数和查看机密信息。
易受攻击的对象:
- 网址
例子
- 攻击者注意到URL表示角色为“/ user / getaccounts”。他修改为“/ admin / getaccounts”。
- 攻击者可以将角色附加到URL。
http://www.vulnerablsite.com可以修改为http://www.vulnerablesite.com/admin
建议
- 实施强大的访问控制检查。
- 身份验证和授权策略应基于角色。
- 限制对不需要的URL的访问。
传输层保护不足
描述
处理用户(客户端)和服务器(应用程序)之间的信息交换。应用程序经常通过网络传输敏感信息,如身份验证详细信息,信用卡信息和会话令牌。
通过使用弱算法或使用过期或无效的证书或不使用SSL,可以允许将通信暴露给不受信任的用户,这可能会危及Web应用程序和/或窃取敏感信息。
意义
- 利用此Web安全漏洞,攻击者可以嗅探合法用户的凭据并获取对该应用程序的访问权限。
- 可以窃取信用卡信息。
易受攻击的对象
- 通过网络发送的数据。
建议
- 启用安全HTTP并仅通过HTTPS强制执行凭据传输。
- 确保您的证书有效且未过期。
例子:
1.不使用SSL的应用程序,攻击者只会监视网络流量并观察经过身份验证的受害者会话cookie。攻击者可以窃取该cookie并执行Man-in-the-Middle攻击。
未经验证的重定向和转发
描述
Web应用程序使用很少的方法将用户重定向并转发到其他页面以实现预期目的。
如果在重定向到其他页面时没有正确的验证,攻击者可以利用此功能,并可以将受害者重定向到网络钓鱼或恶意软件站点,或者使用转发来访问未经授权的页面。
意义
- 攻击者可以向用户发送包含附加编码恶意URL的真实URL的URL。用户只需看到攻击者发送的URL的真实部分就可以浏览它并可能成为受害者。
例子
1. http://www.vulnerablesite.com/login.aspx?redirectURL=ownsite.com
修改为
http://www.vulnerablesite.com/login.aspx?redirectURL=evilsite.com
建议
只需避免在应用程序中使用重定向和转发。如果使用,请不要在计算目的地时使用用户参数。
如果无法避免目标参数,请确保提供的值有效,并为用户授权。