【漏洞修复】SpringBoot应用监控Actuator安全隐患及解决方案

大家好,我是一直默默努力的大龄程序媛大丫姨,今天收到国家互联网应急中心发的“网址存在信息泄露漏洞的情况通报”,告知了存在漏洞的网站地址为https://XXX/actuator/env。

漏洞威胁:综合利用漏洞,允许攻击者获取敏感信息,构成信息泄露和运行安全风险。

处置建议:针对信息泄露漏洞,建议限制敏感配置文件访问权限


根据漏洞链接发现网络地址是一个springclode的网关工程,而真正暴露的是springboot应用监控Actuator的env,于是找了几个有价值的参考网站,对于springclode工程解决如下:

解决办法:在nacos的配置中增加对我暴露端口的限制,如“env”、"health”,然后重启gate_way网关,问题解决

将env和health禁止暴露,配置页面如下:

访问后报404,问题解决

参考的文章的部分内容拷贝如下:

概述

微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题,而微服务的特点决定了功能模块的部署是分布式的,运行在不同的机器上相互通过服务调用进行交互,业务流会经过多个微服务的处理和传递,在这种框架下,微服务的监控显得尤为重要。

而Actuator正是Spring Boot提供的对应用系统的监控和管理的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的Spring beans信息、系统环境变量的配置信以及Web请求的详细信息等。如果使用不当或者一些不经意的疏忽,可能造成信息泄露等严重的安全隐患。

Actuator使用

Actuator应用监控使用只需要添加spring-boot-starter-actuator依赖即可,如下:

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

可以在application.properties中指定actuator的访问端口、访问路径等信息:

# 访问示例:http://localhost:9595/monitor

management:

  endpoints:

    web:

      # actuator的访问路径,替换默认/actuator

      base-path: /monitor

      # 设置是否暴露端点 默认只有health和info可见

      exposure:

        # include: env  # 方式1: 暴露端点env,配置多个以,隔开

        include: "*"    # 方式2: 包括所有端点,注意需要添加引号

        # 排除端点

        exclude: shutdown

  server:

    port: 9595  #新开监控端口,不和应用用同一个端口

  endpoint:

    health:

      show-details: always # 显示db、redis、rabbti连接情况等

    shutdown:

      enabled: true  #默认情况下,除shutdown以外的所有端点均已启用。手动开启


此时,运行示例,访问/monitor/即可查看所有端点信息,再访问/monitor/env即可查看该应用全部环境属性,如图:

Endpoints(端点)介绍

Endpoints 是 Actuator 的核心部分,它用来监视应用程序及交互,spring-boot-actuator中已经内置了非常多的Endpoints(health、info、beans、httptrace、shutdown等等),同时也允许我们扩展自己的端点。

Endpoints 分成两类:原生端点和用户自定义端点;自定义端点主要是指扩展性,用户可以根据自己的实际应用,定义一些比较关心的指标,在运行期进行监控。

原生端点是在应用程序里提供的众多 restful api 接口,通过它们可以监控应用程序运行时的内部状况。原生端点又可以分成三类:

应用配置类:可以查看应用在运行期间的静态信息:例如自动配置信息、加载的spring bean信息、yml文件配置信息、环境信息、请求映射信息;

度量指标类:主要是运行期间的动态信息,例如堆栈、请求连、一些健康指标、metrics信息等;

操作控制类:主要是指shutdown,用户可以发送一个请求将应用的监控功能关闭。

Actuator 默认提供了以下接口,具体如下表所示:


安全措施

如果上述请求接口不做任何安全限制,安全隐患显而易见。实际上Spring Boot也提供了安全限制功能。比如要禁用/env接口,则可设置如下:

endpoint:

 env:

enabled:false

另外也可以引入spring-boot-starter-security依赖,具体可以看文末的参考链接,我只操作了发的这一步,将env禁用了

安全建议

只开放某些无敏感信息的端点。

打开安全限制并进行身份验证,访问Actuator接口时需要登录。

Actuator访问接口使用独立端口,并配置不对外网开放。

————————————————

参考链接:https://blog.csdn.net/Y0Q2T57s/article/details/120407319

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容