【技术分享】猪八戒网DevOps之Java组件安全检测
点击关注“八戒技术团队”,阅读更多技术干货
文章摘要
应用安全一直是一个非常重要的课题,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这样的突发安全事件,我们有了抓手,可以有效从容应对。
希望以上内容能对有需要的人有所帮助
欢迎大家一起探讨交流
请点击下方名片关注我们
诚 邀各位IT大佬加入我们“西南名猿交流群”
一个交流技术、招聘的场地
全国程序猿皆可扫码上车噢~
- 【技术分享】微服务开发的幸福感,是如何提升的?
- 【技术分享】强烈推荐小白必看的Java反射
- 【技术分享】高效编程之告别996基础篇
- 【技术分享】同源策略和跨域的简单理解
- 【技术分享】SSR解决方案探索
- 【技术分享】教你如何一键生成加密渠道包
- 【技术分享】如何解决开发中常见的跨域问题?
- 【技术分享】猪八戒网DevOps之Java组件安全检测
- 【Tips】如何在UIView中释放监听
- 前端权限验证控制与实现
- 教你用Java开发一个简单的JVM
- 如何利用ClickHouse搭建OLAP?
- 你必学的Vue.js的进阶教程
- 如何用Python Selenium Execl实现UI自动化
- 如何设计一款高性能分布式锁,实现数据的安全访问?
- 【技术分享】历经16年猪八戒网如何成功实现双活流量架构
- 编码风格不一,代码杂乱无章?5招解决你的痛点
- postman安全使用及变量设置
- VueJS异步与并发管理
- Jmeter工具之接口测试