OWASP(Open Worldwide Application Security Project)是一家致力于应用安全威胁研究的非盈利机构。通过对超过20万个组织进行调研分析,该机构每三年左右就会发布一次《Web应用安全风险Top10》报告,这个报告已经成为全球企业开展Web应用安全防护时的重要参考。然而最近,卡巴斯基的一个安全研究小组却发现,OWASP 所给出的Web应用安全威胁排名,和其实际遵循黑盒、灰盒和白盒等应用程序风险评估方法实际测试后所得出的结论有着较大差异,组织应该根据威胁的潜在影响和可利用性,更灵活地评估自身Web应用安全威胁态势。
在本次测试中,卡巴斯基的安全研究团队在2021年至2023年上线的Web应用程序安全评估样本中收集数据,其中近一半的应用程序(44%)用Java编写,其次是用NodeJS(17%)和PHP(12%)编写,有三分之一以上(39%)的应用程序使用了微服务架构。测试人员遵循黑盒、灰盒和白盒方法对所获得的数据进行了评估分析,并以此总结了过去三年(2021-2023年)全球企业组织面临的最普遍、最严重的10大Web应用安全威胁(详见下表)。
1
访问控制中断
本次测试所分析的所有Web应用程序中,70%的项目被发现含有与访问控制问题相关的安全威胁。而几乎一半的访问控制中断安全威胁具有中等风险级别,37%的项目具有高级别风险。这些风险隐患可能导致Web应用程序出错,并影响组织的业务开展。对于Web应用程序而言,所提交的数据验证不足将使攻击者可以非法访问内部服务,并可能执行导致财务损失的攻击。
防护建议:
组织应该根据基于角色的访问模式实施身份验证和授权控制。除非某个Web应用程序是面向所有人公开访问,否则就应该在默认情况下拒绝访问。
2
数据泄露
这种类型的安全威胁在Web应用程序中大量存在。与访问控制中断相比,敏感数据泄露含有数量更多的低风险级漏洞隐患,但也存在高级别的风险漏洞。研究人员在分析过程中发现的敏感数据包括纯文本密码和凭据、Web应用程序发布完整路径以及其他可用于了解应用程序架构的涉密信息。
防护建议:
应该严格禁止在Web应用程序发布目录中存储含有敏感数据(如密码或备份)的文件。同时,在访问应用程序函数时需要加强敏感数据检测防护,除非该函数本身用于访问敏感数据。
3
服务器端请求伪造(SSRF)
云计算和微服务架构的应用已经非常普遍,与传统架构相比,会有更多的服务通过HTTP(或其他轻量级协议)进行通信,因此微服务架构扩大了SSRF滥用的攻击面。在本次测试所分析的应用程序中,一半以上(57%)的应用程序含有服务器端请求伪造安全威胁,这让恶意攻击者可以绕过应用程序逻辑与内部服务进行非法链接通信。恶意分子还可以结合使用SSRF与其他漏洞,策划攻击Web服务器的方法或读取应用程序源代码。
防护建议:
组织应该为应用程序可以请求的资源创建一份允许列表(白名单),并阻止请求该列表之外的任何资源,不接受含有完整URL的请求。此外,还设置防火墙过滤器,防止用户访问未授权的域。
4
SQL注入
在本次测试中,研究人员发现大多数高风险漏洞都与SQL注入有关。不过,由于测试中所分析的应用程序中只有不到一半(43%)的项目易受该类安全威胁的攻击,因此研究人员将该类别排在10大Web应用安全威胁的第四位。
这种类型的漏洞可能导致敏感信息被盗或远程代码执行。在一些测试项目中,研究人员对那些向公众用户开放注册的应用程序实施了SQL注入,最终成功获得了内部系统管理员的凭据。
防护建议:
组织应该在应用程序源代码中使用参数化的SQL查询,而不是将它们与SQL查询模板相结合。如果不能使用参数化的SQL查询,就应该优先确保用户输入并用于生成SQL查询的数据无法用于修改查询逻辑。
5
跨站脚本(XSS)
本次测试所分析的Web应用程序中61%存在跨站脚本安全威胁。在大多数情况下,这一威胁具有中等风险水平,因此研究人员将其排在第五位,尽管它很普遍。超过一半(55%)的XSS漏洞与第三方科技公司开发的应用程序有关,39%的XSS漏洞与公共部门使用的应用程序有关。
针对应用程序客户端的XSS攻击可用于获取用户身份验证信息,比如cookie、网络钓鱼或传播恶意软件。在一些攻击场景中,结合其他安全漏洞的XSS攻击允许将用户密码改为已知值,从而利用该用户的特权获得应用程序访问权。
防护建议:
组织可以将HTML页面中不安全的格式化字符替换为非格式化的等效字符,并提供处理用户输入的安全机制。针对从外部数据源获得,并在浏览器中显示的任何数据,都应该这么做。
6
中断的身份验证
研究人员在这个类别中发现的几乎一半的安全威胁具有中等风险水平(47%),但也存在高风险漏洞,允许代表用户的客户端访问Web应用程序。比如说,某个应用程序没有JWT(Jason Web Token)签名检查,恶意分子就可以篡改自己的JWT(通过指定另一个用户的ID来篡改),并使用生成的令牌在账户内执行各种操作。
防护建议:
组织应该对用于访问应用程序的身份验证数据进行适当的验证。如果使用令牌和会话ID签名,进行验证。用于身份验证的密文(密钥和签名等)应该是唯一的,并具有高度的熵。此外,组织要严格禁止在应用程序代码中存储密文。
7
安全配置不当
研究人员发现,在所有被测试的应用程序中,近一半的项目存在安全配置不当的威胁隐患。该类漏洞涵盖从启用的调试模式到禁用的身份验证等一系列安全威胁。例如,一个应用程序的Nginx服务器允许访问父目录下的文件(相对于Alias指令中指定的目录),这就导致了可以用于访问含有机密数据的文件。
防护建议:
组织在配置IT基础设施中使用的系统时,应遵循安全最佳实践。应该将设置过程自动化,以消除安装新系统时出现的错误。此外,对测试系统和生产系统使用不同的凭据,并禁用不使用的组件。
8
蛮力攻击防护不足
在本次测试的应用程序中,超过三分之一允许蛮力攻击。一次性密码和针对各种资源(比如账户或文件系统)的身份验证是Web应用程序中最易受攻击的因素。
具体来说,当组织对蛮力攻击防护能力不足时,攻击者就会通过蛮力执行OTP攻击,从而绕过现有的身份验证因素,未经授权访问应用程序。
防护建议:
组织应该使用CAPTCHA使攻击者更难蛮力破解凭据。用户还可以使用预防控制(WAF和IPS)及时阻止蛮力攻击尝试,不仅应对针对同一账户的多次失效登录,还可以应对同一来源针对不同账户的多次失效登录。
9
薄弱的用户密码
在本次测试的所有Web应用程序中,22%的项目被发现应用了薄弱密码。这类漏洞的比例比较低,一个解释是,安全分析师经常使用客户测试平台,而不是实际系统。虽然含有此类漏洞的应用程序数量很少,但利用弱凭据的后果可能很严重。视账户类型的不同,攻击者可以访问基本的应用程序功能或管理场景,这可能会影响业务流程。
防护建议:
组织应该实施弱密码检查机制,比如针对10000个最薄弱的密码列表执行检查,以发现新密码或更改的密码。强制执行密码长度、复杂性和过期要求,以及其他基于证据的现代密码策略。
10
未修复的已知漏洞
最后一项安全威胁是Web应用程序中存在大量未修复的已知漏洞。易受攻击的组件包括框架和各种应用程序依赖项,比如库和模块。其中一些允许研究人员访问应用程序使用的服务器,从而渗入到客户的内部网络。
防护建议:
组织应该定期清点用户使用的软件组件,并根据需要进行补丁更新。同时,应该仅使用已成功通过安全测试的受信任组件,禁用任何未使用的组件。