当前位置: 首页 > 科技观察

如何检查Java项目是否依赖Log4j

时间:2023-03-14 21:29:37 科技观察

漏洞【.com速递】著名的Log4j漏洞,定义和跟踪为CVE-2021-44228,也称为Log4Shell,允许攻击者执行任意代码。因此,如果您的应用程序使用Log4j从2.0-alpha1到2.14.1,您应该尽快更新到最新版本(当前为2.16.0)。对此,瑞士政府发布了一张可以很好解释该漏洞的攻击流程图,请参考下图:让我们根据上图深入研究与之相关的缓解策略。使用Maven的依赖插件在Maven项目中,可以使用如下简单的命令在依赖树中搜索log4j-core相关的依赖,查看项目是否使用了受影响的依赖。纯文本mvndependency:tree-Dincludes=org.apache.logging.log4j:log4j-core该命令使用MavenDependencyPlugin显示项目的依赖树(包括各种传递依赖)。该命令通过以下参数过滤并输出log4-core的依赖。因此,如果您的项目依赖于存在漏洞的Log4j版本,您将看到如下内容:在本例中,输出显示该项目直接使用Log4j的2.14.1版本。显然,它很脆弱。因此,本项目需要以下依赖:XMLorg.apache.logging.log4jlog4j-core2.14.1替换为:XMLorg.apache.logging.log4jlog4j-core2.16.0同样,我在MariaDB数据库的JDBCconnector项目中进行了如下测试,得到了相应的结果:幸好项目没有使用Log4j,所以是不容易受到Log4Shell的攻击。有关MariaDB特定案例的更多信息,请参阅https://dzone.com/articles/is-the-mariadb-jdbc-driver-affected-by-the-log4j-v。使用Maven的helpplugin如果想进一步调查,需要查看有效的POM(ProjectObjectModel,项目对象模型),搜索项目中使用的日志框架。让我们将注意力转回MariaDBJDBC连接器项目。我使用Maven助手插件来生成有效的POM。由于我使用的是类Unix操作系统(macOS,如您在屏幕截图中所见),我使用以下grep命令(在Windows中,您可以使用findstr)来过滤输出:纯文本mvnhelp:effective-pom|greplog并从mvn得到以下输出:从输出中可以看出,MariaDBJDBC驱动程序使用Logback作为日志记录框架。虽然Logback不受Log4Shell的影响,但它在1.2.8和1.3.0-alpha11版本中存在相关漏洞。当然,它的严重性要轻得多,我们不必过度恐慌。我查看了它的连接器(connector)的版本,版本号是1.3.0-alpha10。尽管Logback作为测试依赖项包含在MariaDB驱动程序中,但我在GitHub上发送了一个拉取请求来更新它。在这里,我鼓励你对你的各种开源项目做同样的事情,以尽早发现那些易受攻击的依赖项。使用Syft和Grype在包含大量JAR文件的更复杂的项目中,您可以使用Syft和Grype等工具。其中,Syft是一个CLI(命令行界面)工具和Go语言库,可用于从容器镜像和文件系统生成软件物料清单(SBOM)。Grype可以通过多级嵌套的方式扫描每个容器镜像和文件系统中的漏洞。两者可以串联使用。使用LunaSec工具,由一个开源数据安全平台开发的LunaSec工具,可以通过扫描目录和匹配文件哈希来找出是否存在与Log4j依赖相关的漏洞。该工具适用于Windows、Linux和macOS系统。你只需要在相关的交付目录中使用以下命令触发工具的扫描过程:plaintextlog4shellscanyour-project-dir如果目标是有漏洞的项目,那么你将得到以下输出:plaintext10:04AMINFiidentifiedvulnerablepathfileName=org/apache/logging/log4j/core/net/JndiManager$1.classpath=test/struts-2.5.28-all/struts-2.5.28/apps/struts2-rest-showcase.war::WEB-INF/lib/log4j-core-2.12.1.jarversionInfo="log4j2.8.2-2.12.0"使用log4j-scan另外,FullHunt团队还提供了一个开源工具log4j-scan。作为一个自动且全面的扫描器,它可用于查找易受攻击的Log4j主机。也就是说,它使团队能够扫描自己的基础设施并测试可能导致代码执行的各种WAF(Web应用程序防火墙)绕过攻击。虽然该工具可以提供多种选择,但其最基本的服务是用户可以将要扫描的URL传递给该工具,以便直接获得有关检测到的漏洞的报告。例如可以使用如下命令:纯文本python3log4j-scan.py-uhttps://log4j.lab.secbot.local扫描结果输出为:UseHuntressLog4Shellvulnerabilitytesterasanonlineopensourcetool,HuntressLog4Shell漏洞测试器可以帮助您检查应用程序是否使用了易受攻击的Log4j版本。您可以使用该工具生成的字符串作为要检查的应用程序的输入。例如,您可以在页面上的文本输入框中使用它。该字符串可能包括针对LDAP服务器的JNDI(Java命名和目录接口,Java命名和目录接口)查询。服务器记录来自应用程序的每个请求并显示发出此类请求的IP地址。具体操作细节请参考演示视频。总结目前,越来越多的Log4j工具层出不穷。作为一名安全从业者,我建议您通过链接——https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228关注各个安全专家发布的相关内容。正如我在上面为MariaDB的JDBC连接器所做的那样,我还建议向任何使用Log4j的开源项目发送补丁,以发现和更新易受攻击的版本。原标题:HowtoCheckifaJavaProjectDependsonAVulnerableVersionofLog4j,作者:AlejandroDuarte