Log4Shell检测方法综述

自从Log4Shell远程代码执行漏洞(RCE)的公共利用在2021年12月10日被发现以来,全世界的安全团队一直在争先恐后的了解其环境风险。这种争夺的一部分是为了确定哪些工具最适合帮助检测漏洞,哪些方法最有效,哪些还有缺陷?在这篇短文中,我们将描述Log4Shell漏洞检测的一些方法,并讨论每种方法的优缺点。

  • Software Composition Analysis(SCA)

SCA工具主要关注与第三方库相关的风险。因此,它们非常适合于识别Java应用程序和其他Java代码库中存在的易受攻击的log4j核心组件。重要的是,SCA工具可以精确定位并报告正在使用的确切版本。

任何仅仅因为“log4j”出现在文件名中就报告Log4Shell存在的工具都会导致误报和时间浪费。例如,“log4j-api”和“log4j-web”库就不易受Log4Shell的攻击。

确保您的SCA工具分析了完整的代码库,包括可依赖的传递项。仅仅检查基于maven的代码存储库中的POM文件是不够的,POM只引用开发人员包含的直接依赖项。按照目前的软件构建方式,当构建运行时,所有未在POM中引用的必须组件(如可传递依赖项)都会被自动拉入,以构建适合部署的完整应用程序。

泛联新安的BinSearch提供了一个健壮的解决方案。BinSearch是一款基于逆向分析、分布式计算、大数据与机器学习的二进制代码大规模同源分析平台,具有自主知识产权。它能够精准分析识别代码组成成分和引用第三方组件、了解引用开源代码许可合规性、检测代码安全漏洞、分析植入恶意代码及溯源等,支持10万余条漏洞能力,涵盖CVE、NVD、CNNVD漏洞信息,能有效的检测出Log4Shell等漏洞。

  • Static Application Security Testing(SAST)

SAST的主要目的是识别自编代码中的安全缺陷,开发人员编写这些代码是为了构建应用程序最基础的功能。一些人质疑为什么几年前的SAST工具没有报告Log4Shell漏洞,这是因为开源库通常不使用SAST进行扫描。

  • Dynamic Application Security Testing(DAST)

DAST是一种快速而简单的扫描面向公共web应用程序的方法,特别是针对那些未经身份验证的应用程序。尽管DAST扫描可以告诉您是否发现了漏洞,但它无法指出代码库中的哪个位置可以被修复。为了保证你的web应用程序不会受到Log4Shell的攻击,不仅要运行未经身份验证的扫描,还要对web应用程序支持的每个用户角色进行身份验证扫描,这需要很大的工作量。

另外,请记住,对生产环境进行经过身份验证的DAST扫描可能会有潜在风险,因为扫描程序可以访问与用户相同的功能(俗称黑盒测试)。如果在产品网络应用程序上运行验证扫描,那么生产数据可能会被扫描程序修改或删除。在生产环境中使用高权限用户或管理员运行经过身份验证的扫描特别危险,建议不要这样做。

由于Log4Shell的特性,DAST工具支持OOB检测机制,比如DNS传感器,这可能最适合用于查找易受攻击的web应用程序。例如Burp Collaborator和Qualys Periscope。

如果您的DAST工具确实在扫描web应用程序中发现了Log4Shell漏洞,可以考虑使用开源的Log4Shell工具进行快速修复,这样至少可以防止被不法分子利用。这个工具利用Log4Shell漏洞本身,在服务器上执行一个有效负载,禁用log4j设置,从而允许开发进行。(建议在库可以更新为安全版本之前,只将该工具的瞬态模式用作临时措施。)

  • Source Code Management(SCM)

一些源代码管理平台提供对它们所托管的软件项目的监控,并且当发现已知的易受攻击的组件时可以发送警报。GitHub的Dependabot就是一个例子,它在某些情况下可以提供帮助,还可以使您的开发团队意识到log4j的一个易受攻击的版本被作为直接依赖项引用。它们的不足之处在于,这些工具实际上并没有构建项目,而且不能看到基于maven的Java项目的可传递依赖关系。

  • 网络、基础设施扫描

如果您的组织已经有了解决方案,那么使用基础设施扫描查找易受攻击的log4j组件是可行的。否则,它将需要大量的努力在您的云和前置网络上扫描和运行。扫描Log4Shell的基础设施还要求扫描器能够登陆到希望扫描的机器上的操作系统。

此外,虽然它们可以有效的识别操作系统级别的漏洞和错误配置,但基础设施扫描解决方案通常不被设计为“能感知的应用程序”。换句话说,他们可能不理解java web应用程序的结构,也不能进入文件系统上已部署的应用程序的WAR中检查log4j是否存在。

  • 结语

千万不要搞错了,开源库将继续在所有行业中使用。虽然使用开源库现在已经是软件开发中公认的实践,但是从安全的角度来看,采用它们仍然面临巨大的挑战。上周,它是一个Java中的零日漏洞,但是明天,它可能就会是一个JavaScript库、Python或者其他编程语言。

使用过时且易受攻击的开源库是一个常见的问题,特别是在Java生态系统中。据不完全统计,在开发者无法跟上应用程序中所使用的最安全的库版本的语言列表中,Java排在Ruby和JavaScript之后,位列第三。而且Java中近65%的开源依赖项在首次使用后从未进行过更新。

综上所述,在漏洞检测方面,当开源库中出现新的漏洞时,SCA工具应该是最有效的选择。SCA工具适用于准确的识别和维护应用程序组合中的开源组件清单,并为理解应用于特定版本的漏洞提供最好的释义。

部分资料来源:

1. https://www.veracode.com/blog/managing-appsec/review-log4shell-detection-methods

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GitMore

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值