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
建议
只需避免在应用程序中使用重定向和转发. 如果使用, 请不要在计算目的地时使用用户参数.
如果无法避免目标参数, 请确保提供的值有效, 并为用户授权.
来源: http://netsecurity.51cto.com/art/201808/582412.htm