什么是Log4Shell?Log4j漏洞解读

来源:龙智  作者:龙智   发布时间:2021-12-30 09:50

image blog sa log4j

一个影响使用Java的设备和应用程序的新漏洞已经在开源Apache日志库Log4j中被发现。该漏洞被称为Log4Shell,是目前互联网上最重要的安全漏洞,其严重程度为10分。幸运的是,Perforce静态分析和SAST工具——Helix QACKlocwork——可以提供帮助。

本文解释了什么是Log4j漏洞,提供了一个Log4j的例子,并解释了像Klocwork这样的SAST工具是如何帮助预防和检测漏洞的,比如Log4Shell。

什么是Log4j?

Log4j是一个Java库,用于记录企业应用程序中的错误信息,其中包括自定义应用程序、网络和许多云计算服务。

此外,在过去十年中开发的大部分Java程序都使用了它,包括服务器和客户端应用程序。

什么是Log4Shell:Log4j漏洞解读

Log4Shell,也被称为CVE-2021-4428,是一个影响Apache Log4j2核心功能的高危漏洞。

该漏洞使攻击者能够进行远程代码执行。这使他们能够:

  • 通过受影响的设备或应用程序访问整个网络
  • 运行任何代码
  • 访问受影响设备或应用程序上的所有数据
  • 删除或加密文件

受影响的版本,即Log4j第二版(Log4j2),包含在:

  • Apache Struts2
  • Apache Solr
  • Apache Druid
  • Apache Flink
  • ElasticSearch
  • Flume
  • Apache Dubbo
  • Logstash
  • Kafka
  • Spring-Boot-starter-log4j2
  • Swift frameworks
哪些设备和应用程序容易受到Log4Shell的影响?

如果一个连接到互联网的设备运行Apache Log4j,版本2.0-2.14.1,那么他们就容易受到Log4Shell的攻击。

Klocwork如何检测Log4j的漏洞

作为一个静态分析和SAST工具,Klocwork检查你的源代码,以发现可能使你的设备或应用程序受到攻击的设计和编码缺陷,如污损的数据问题。Klocwork可以沿着你的代码中所有可能的执行路径,包括Log4Shell(CVE-2021-4428),追踪被污染的、不受信任的或其他可疑的数据。

Klocwork的SV.LOG_FORGING检查器 “开箱即用”,可以检测到被传递给日志应用程序的污点数据。Perforce提供一个小型知识库文件扩展该检查器,以检测Log4j的漏洞(详情请咨询Perforce中国授权合作伙伴龙智)。

此外,Klocwork还有一个特点,即可与Secure Code Warrior集成,有助于为这些类型的缺陷提供补救指导,以及额外的软件安全培训。Secure Code Warrior突出了安全漏洞,并提供了如何修复这些错误的指导。

如何用Klocwork防止Log4j漏洞的发生

现在你更好地理解了什么是Log4j漏洞以及Klocwork如何识别它,这里有一个Log4j的例子。此外,还有一个分步指南,展示Klocwork如何帮助你检测和补救这个严重的漏洞。

  1. 使用Klocwork SV.LOG_FORGING检查器

要使用Klocwork的SV.LOG_FORGING检查器。进入应用程序的Klocwork Portal项目,添加知识库文件,并确认SV.LOG_FORGING检查器已启用。

该扩展将Log4j方法添加到SV.LOG_FORGING的污损数据的危险目的地列表中。这使得你可以识别Log4j的漏洞,即Log4Shell。

  1. 定位Log4j漏洞

一旦整个应用集成分析完成,任何错误或漏洞都会被突出展示。

下面的序列突出了日志伪造的可能性,使攻击者能够利用日志记录,以便操纵它们。

1 public class Test2 implements HttpHandler {

2 static Logger log = LogManager.getLogger(Test2.class.getName() )。

3 public void handle(HttpExchange he) {

4 String apiVersion = he.getRequestHeaders().getFirst(“X-Api-Version”)。

5 log.info(“Api Version:{}”, apiVersion);

6    }

7 }

一旦分析完成,Klocwork将在第5行报告该漏洞。

  1. 防止Log4j漏洞缺陷的发生

Apache已经发布了Log4j的新版本——2.16版,其中不包含Log4Shell漏洞。

此外,如果你不能更新到最新版本,Apache已经提供了缓解Log4j漏洞的解决方案。

在>=2.10版本中,这种行为可以通过设置系统属性log4j2.formatMsgNoLookups或环境变量LOG4J_FORMAT_MSG_NO_LOOKUPS来缓解。

对于从2.0-beta9到2.10.0的版本,缓解措施是将JndiLookup类从classpath中移除:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class。

用Klocwork阻止漏洞比如Log4Shell

Log4Shell是一个令人担忧的软件安全漏洞,不幸的是,它不是唯一的漏洞。它只是CWE-117和OWASP A10:2017漏洞类型中比较突出的一个例子。

通过使用Klocwork这样的SAST工具,你可以轻松地执行软件安全标准,如CWE、OWASP和CERT,以更好地检测、预防和消除软件安全漏洞,如Log4Shell。

亲身体验一下Klocwork是如何通过尽早发现漏洞来保护你的软件的。联系Perforce中国授权合作伙伴龙智,立即开始免费试用。

Klocwork——针对C, C++, C#, Java程序的 静态代码分析工具