Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. Java
  3. 正文
                           

【八戒】猪八戒网DevOps之Java组件安全检测

2023-02-19 1076点热度 0人点赞 0条评论

一、文章摘要
应用安全一直是一个非常重要的课题,2021年12月7日Log4j2爆出核弹级漏洞,Log4j2作为一款优秀的日志框架,其高使用率加上此漏洞利用难度低,导致企业安全风险剧增。那么猪八戒网是如何应对此类漏洞的呢?

此文主要讲述猪八戒在Java组件安全方面实施的防护措施,如何阻断存在安全漏洞的Java应用上线,在出现类似Log4j2这样的漏洞后如何及时发现哪些应用存在安全风险,同时也为猪八戒的研发小伙伴解惑,我们是如何扫描出你代码中的漏洞组件的。
二、检测流程
在这里插入图片描述
标准检测:开发人员通过DevOps 发布应用到测试环境,在Jenkins进行构建生成应用Jar包或者War包,此时执行安全检测脚本对生成物进行安全检测,并将应用引入的组件名称和版本号上报至SDLC安全审核平台,安全审核平台使用其配置的安全规则进行检测,例如此次爆发的Log4j2漏洞,会检测上报的log4j-core版本是否是存在漏洞的版本,如果是则同步返回给Jenkins中断本次发布,并发送漏洞信息给相关人员。

批量检测:由于猪八戒网绝大部分应用都是通过DevOps流水线发布,所以绝大部分应用的组件版本信息在SDLC安全审核平台都有记录,但由于某些项目是历史项目,则可以通过非标准流程,即通过CMDB批量作业平台执行安全检测脚本将组件名称和版本号上报至SDLC安全审核平台,至此实现了历史全量Java应用漏洞扫描。

三、如何实现毫秒级检测
Java应用依赖组件的检测,第一种思路就是通过项目所使用的构建工具,使用构建工具的命令列出所有依赖的组件,如Maven可以使用mvn dependency:tree或mvn dependency:list 列出应用所有依赖的组件和组件版本,然而这种方案的缺点也很明显,此种检测比较重,由于依赖特定的构建工具,所以对我们CMDB批量检测不是很好实现,对现有的CI/CD过程也会带来一定风险。由于我们的项目在一个应用中分了多模块开发,要执行mvn dependency:tree 命令,需要使用mvn install将多模块安装在本地仓库,而我们构建Java 项目时执行的是mvn package ,在多模块开发的应用中,并不需要将多模块中的jar安装到本地仓库和私服中。mvn install会将模块打包安装到本地仓库,一是构建耗时增加,二是将模块打到本地但并没有上传到私服,会不会导致被其他项目引用到,导致代码出现非预期情况?虽然此种情况比较极端,但是我们还是要规避。

那么有没有更好的方案呢?第二种思路是绕过构建工具这一层,直接从构建好的Jar包或者War包入手,不管是jar还是war都会将依赖组件放到/lib目录下,基于这些规律,我们做如下实现。

第一步:我们使用jar vtf xx.jar |grep lib 提取lib/目录下的所有包信息。
在这里插入图片描述
第二步:用脚本将依赖jar包的artifactId和version解析出来。
在这里插入图片描述
第三步:将artifactId和version信息上报至SDLC安全审核平台,触发漏洞检测并返回检测结果,流水线根据结果选择阻断或者继续。
在这里插入图片描述在这里插入图片描述
整个过程耗时不超过1秒,实现了毫秒级检测。并且脚本可实现通用,不受构建工具制约,方便通过CMDB跑批量检测

四、如何应对突发漏洞
以上是正常流程,可以规避应用引入已知的漏洞。那么突发安全漏洞,我们怎么快速发现哪些应用存在安全风险呢?由于应用每一次发布都会将组件和版本信息同步至SDLC安全审核平台,所以从SDLC平台筛选组件名称和存在漏洞的版本即可找到哪些应用存在漏洞,并及时通知相关负责人进行漏洞修复。
在这里插入图片描述
至此,面对类似Log4j2这样的突发安全事件,我们有了抓手,可以有效从容应对。

 

希望以上内容能对有需要的人有所帮助
欢迎大家一起探讨交流

更多文章:

  1. Spring中@Autowired和@Inject注解的区别?
  2. log4j2同步日志引发的性能问题
  3. mysql-connect-java驱动从5.x升级到8.x的CST时区问题
  4. 手把手教你实战TDD
  5. JAVA字节码增强解密(下)
  6. JAVA字节码增强解密(上)
  7. 高效开发与设计:提效Spring应用的运行效率和生产力
  8. 6种限流实现,附代码![通俗易懂]
  9. 用图讲解SOLID设计原则
  10. JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇(长文)
标签: 八戒 安全检测 devops Log4j2 Java
最后更新:2023-02-19

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >
广告
最新 热点 推荐
最新 热点 推荐
干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议 视频笔记:什么是微服务,为什么是微服务? 视频笔记:什么是AI 智能体? 视频笔记:什么是Flink? 如何秒级实现接口间“幂等”补偿:一款轻量级仿幂等数据校正处理辅助工具
Elasticsearch 使用误区之六——富文本内容写入前不清洗基于 MySQL Binlog 实现可配置的异构数据同步马蜂窝消息总线——面向业务的消息服务设计干货 | 论Elasticsearch数据建模的重要性你可以不用RxJava,但必须得领悟它的思想!如何秒级实现接口间“幂等”补偿:一款轻量级仿幂等数据校正处理辅助工具视频笔记:什么是Flink?视频笔记:什么是AI 智能体?
Spring中@Autowired和@Inject注解的区别? 万字长文全面了解学习Netty! Elasticsearch 使用误区之一——将 Elasticsearch 视为关系数据库! 浅谈SQL优化小技巧 JAVA字节码增强解密(下) 系统设计 | 系统设计中需要考虑到的时间问题 从MVC到DDD,该如何下手重构? 浅析设计模式2 —— 策略模式

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (2) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (18) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2

x