Blog chevron_right 未分类

从 Log4j 到 Long4j

两年前,Java 社区中的许多人意识到,受 Log4j 日志库中一个可远程利用的漏洞影响,自己将度过一个“值得记住的 12 月”。为了搜寻存在漏洞的 Log4j 版本,许多开发团队和安全团队耗费了多个晚上和周末。他们需要从版本中将其移除,扫描容器和虚拟机,并应用补丁。然而,尽管付出了这些努力,Veracode 的报告指出,有超过三分之一的 Java 应用程序仍旧在使用存在漏洞的 Log4j 版本

如今,大多数 Java 工程师都认为此类问题应进行妥善处理。我们更新了管道,更换了版本,并应用了补丁。但很遗憾,这样做并不够,我们之所以仍应感到失望,原因有二:

  1. 用于扫描软件的安全工具依然会产生大量干扰信息,导致许多团队选择忽略它们。既然这类工具总是宣称漏洞无处不在,那我们为何还要操心?
  2. 尽管补丁可能存在,但它们不一定能够得到应用,或者具有漏洞的版本(没有补丁)仍在广泛部署。

当安全扫描程序指出存在 Log4j 时,并不表示该应用程序一定容易受到攻击。尽管有些应用程序确实容易受攻击,但许多 Java 应用程序包含未使用的依赖项。未使用的依赖项是指存在于应用程序中,但并未实际加载或执行的库。虽然扫描程序报告存在漏洞并没有错,但大多数组件/漏洞管理分析程序无法区分仅存在的代码和被使用的代码。在 Log4j 漏洞首次被曝光的那个 12 月,这种无能为力令人十分遗憾,因为许多补丁团队只能无的放矢,找出所有使用 Log4j 的地方(无论它们是否受到影响)。Quarkus 是一个经常遭到错误标记的库,这引发了很多问题,因此开发团队不得不发表一篇博客文章澄清:“不,我们的应用程序未受影响”。 

Quarkus 以及它的扩展和依赖项并未使用 Log4j 版本 2 的核心库,因此不易受到该漏洞的影响……它确实被暴露使用 log4j API jar,但其本身并不容易受到攻击。它仅仅是一个兼容及转换层,用于将调用映射到另一个日志后端 (JBoss Logging)。因此,任何直接使用 log4j API 的地方都不会受到影响……
尽管如此,但执行安全扫描的工具智能程度不高,无法区分传递依赖项和最终实际捆绑和/或配置在应用程序中的内容。因此,我们确实会看到此类工具误报称 Quarkus 或其生态系统中的一些扩展受到了影响,但实际上并非如此。

Quarkus 未受 Log4j 漏洞影响,2021 年 12 月 15 日

如果要指出 Java 应用程序是否容易受到攻击,扫描程序就需要执行更精细的分析,确定实际是否在使用那些代码。Azul JVM 可以观测 Java 应用程序中 ClassLoader 的行为,提取这一信息,以确定是否在使用特定的库。这不是基于假设的扫描视角,而是能证实 JVM 是否将加载并初始化那些代码。

警报疲劳令人极度困扰

根据《Orca Security 2022 年云安全警报疲劳报告》,警报疲劳正在给安全团队造成实质性问题。 

  • 59% 的安全团队每天收到超过 500 次云安全警报 
  • 43% 的安全团队表示超过 40% 的警报都是误报 
  • 49% 的安全团队表示超过 40% 的警报都是低优先级警报 
  • 56% 的安全团队每天花费超过 20% 的时间查看警报,并决定优先处理哪些警报 

警报数量过多,会严重阻碍团队运作、事业发展以及业务成果的取得。

  • 62% 的安全团队表示警报疲劳导致了人员流失
  • 60% 的安全团队表示警报疲劳造成了内部摩擦

55% 的受访者表示重要警报会被遗漏,其中:

  • 41% 的安全团队表示警报每周都会被遗漏
  • 22% 的安全团队表示警报每天都会被遗漏

这并不是说 Log4j 未带来实质影响或其影响不值得关注。朝鲜组织 Lazarus Group 利用 Log4j 漏洞部署远程访问木马。行业并非无法找到 Log4j 或未意识到它的存在。问题在于,团队不得不浏览大量未经过滤的警报,导致其难以将工作做好。

监控生产堆栈

众多团队的另一项需求是对生产进行监控。只有铺设了安全版本,在构建阶段进行的检测和修补才能发挥作用。我们从 Veracode 的 Log4j 报告中了解到,人们仍在部署存在漏洞的 Log4j 版本:有时是由客户部署,有时是由于自动化管道重新部署旧版本后,未额外执行其他安全检查。

监控生产环境有两大好处:

  1. 可以在环境中辨别代码是已被使用,还是仅仅存在。若想知道 JVM 中是否存在具有漏洞但并未加载的 Log4j,就可以在此时进行追踪。
  2. 可以在生产中追踪实际使用的内容,而不是团队认为正在使用的内容。许多工程团队认为自己已经解决了 Log4j 问题,但它却仍反复出现。

Azul Vulnerability Detection

Azul Vulnerability Detection 旨在解决工程团队因安全扫描程序造成的困扰。其 JVM 所做的不仅仅是报告应用程序中存在的内容,它还会事先了解类路径的详细信息,并负责加载代码。  

通过监控加载事件,系统可以分辨存在但未被应用程序实际使用的 Java 依赖项,这将节约团队的时间,避免每次出现新的安全警报时都需要采取紧急行动。 

我们当然希望存在漏洞的 Log4j 版本减少,但不能仅凭它的存在就认为应用程序易受攻击。