日志库logback的攻击路径
字数 1646 2025-08-25 22:58:34

Logback日志库安全攻击路径分析

1. Logback简介

Logback是log4j创始人设计的开源日志组件,相比log4j具有以下优势:

  • 性能更高(关键路径性能提升十倍)
  • 内存占用更小
  • 文档更完善
  • 功能更全面

被8000+项目使用,包括Spring Boot在内的多个框架已将其作为默认日志组件。

2. 攻击路径分析

2.1 配置文件加载机制

Logback通过ContextInitializer.findURLOfDefaultConfigurationFile()查找配置文件:

  1. 首先读取启动参数logback.configurationFile获取配置文件地址(支持远端URL)
  2. 若未指定,则在classpath下依次查找:
    • logback-test.xml
    • logback.groovy(最新版本可能不再支持)
    • logback.xml

2.2 XXE漏洞

漏洞位置

  • JoranConfigurator.doConfigure()(实现在父类GenericConfigurator.doConfigure()中)
  • SaxEventRecorder.recordEvents()解析XML配置文件时存在XXE漏洞

触发条件

  • 配置文件以文件形式保存(URL以file://开头)
  • 配置文件中配置了scan属性(启用配置文件变更监控)

2.3 动态加载机制

Logback支持配置文件动态更新:

  • 配置scan属性后,会启动scan task监控配置文件变动
  • 支持配置文件变更时自动重新加载

限制条件

  • 配置文件必须是以文件形式保存(file://
  • 若配置文件在jar包中(jar://),则不会启动scan task

2.4 JNDI注入

攻击方式

  • 在配置文件中配置<insertFromJNDI>标签
  • JNDI远端路径通过env-entry-name属性指定

完整攻击链条件

  1. logback配置文件以文件形式保存
  2. 配置文件中配置了scan属性
  3. 存在上传接口可覆盖logback配置文件

2.5 JMX攻击

攻击方式

  • 在配置文件中配置<jmxConfigurator />空标签
  • Web应用会开放JMX端口供jconsole连接调用

JMXConfigurator MBean公开的接口

  • 可查看tomcat管理属性
  • 可调用tomcat和logback提供的MBeans操作接口

3. 实战验证

3.1 环境搭建

  1. 使用spring-mvc-showcase项目
  2. 修改pom.xml将log4j依赖替换为logback
  3. 添加logback.xml配置文件并配置scan属性

3.2 攻击步骤

  1. 通过存在目录穿越漏洞的上传接口覆盖logback.xml
  2. 在配置文件中添加<insertFromJNDI>标签指向恶意JNDI服务
  3. 等待扫描周期(默认30秒)后触发JNDI请求
  4. 恶意程序成功执行

3.3 JMX攻击验证

  1. 上传包含<jmxConfigurator/>标签的logback.xml
  2. 等待扫描周期后查看tomcat进程,发现新增JMX端口
  3. 使用jconsole无认证连接,可查看和操作MBeans

4. 防御建议

  1. 禁用scan功能:生产环境不应启用配置文件动态更新
  2. 配置文件保护
    • 确保logback配置文件不可被外部修改
    • 避免将配置文件存储在可写目录
  3. 输入验证
    • 严格校验上传文件内容和路径
    • 防止目录穿越攻击
  4. 最小化权限
    • 运行服务的账户应具有最小必要权限
  5. 版本更新
    • 及时更新到最新版本,关注安全公告

5. 总结

Logback通过scan参数提供的动态更新功能虽然便利,但也带来了安全风险。攻击者可通过覆盖配置文件实现多种攻击:

  • XXE攻击
  • JNDI远程RCE
  • JMX未授权访问
  • MBeans操作

安全团队应充分了解这些攻击路径,在开发和使用Logback时采取适当的安全措施。

Logback日志库安全攻击路径分析 1. Logback简介 Logback是log4j创始人设计的开源日志组件,相比log4j具有以下优势: 性能更高(关键路径性能提升十倍) 内存占用更小 文档更完善 功能更全面 被8000+项目使用,包括Spring Boot在内的多个框架已将其作为默认日志组件。 2. 攻击路径分析 2.1 配置文件加载机制 Logback通过 ContextInitializer.findURLOfDefaultConfigurationFile() 查找配置文件: 首先读取启动参数 logback.configurationFile 获取配置文件地址(支持远端URL) 若未指定,则在classpath下依次查找: logback-test.xml logback.groovy(最新版本可能不再支持) logback.xml 2.2 XXE漏洞 漏洞位置 : JoranConfigurator.doConfigure() (实现在父类 GenericConfigurator.doConfigure() 中) SaxEventRecorder.recordEvents() 解析XML配置文件时存在XXE漏洞 触发条件 : 配置文件以文件形式保存(URL以 file:// 开头) 配置文件中配置了 scan 属性(启用配置文件变更监控) 2.3 动态加载机制 Logback支持配置文件动态更新: 配置 scan 属性后,会启动scan task监控配置文件变动 支持配置文件变更时自动重新加载 限制条件 : 配置文件必须是以文件形式保存( file:// ) 若配置文件在jar包中( jar:// ),则不会启动scan task 2.4 JNDI注入 攻击方式 : 在配置文件中配置 <insertFromJNDI> 标签 JNDI远端路径通过 env-entry-name 属性指定 完整攻击链条件 : logback配置文件以文件形式保存 配置文件中配置了 scan 属性 存在上传接口可覆盖logback配置文件 2.5 JMX攻击 攻击方式 : 在配置文件中配置 <jmxConfigurator /> 空标签 Web应用会开放JMX端口供jconsole连接调用 JMXConfigurator MBean公开的接口 : 可查看tomcat管理属性 可调用tomcat和logback提供的MBeans操作接口 3. 实战验证 3.1 环境搭建 使用spring-mvc-showcase项目 修改pom.xml将log4j依赖替换为logback 添加logback.xml配置文件并配置scan属性 3.2 攻击步骤 通过存在目录穿越漏洞的上传接口覆盖logback.xml 在配置文件中添加 <insertFromJNDI> 标签指向恶意JNDI服务 等待扫描周期(默认30秒)后触发JNDI请求 恶意程序成功执行 3.3 JMX攻击验证 上传包含 <jmxConfigurator/> 标签的logback.xml 等待扫描周期后查看tomcat进程,发现新增JMX端口 使用jconsole无认证连接,可查看和操作MBeans 4. 防御建议 禁用scan功能 :生产环境不应启用配置文件动态更新 配置文件保护 : 确保logback配置文件不可被外部修改 避免将配置文件存储在可写目录 输入验证 : 严格校验上传文件内容和路径 防止目录穿越攻击 最小化权限 : 运行服务的账户应具有最小必要权限 版本更新 : 及时更新到最新版本,关注安全公告 5. 总结 Logback通过scan参数提供的动态更新功能虽然便利,但也带来了安全风险。攻击者可通过覆盖配置文件实现多种攻击: XXE攻击 JNDI远程RCE JMX未授权访问 MBeans操作 安全团队应充分了解这些攻击路径,在开发和使用Logback时采取适当的安全措施。