前言
Apache Log4j2远程代码执行漏洞(以下简称“Log4j RCE漏洞”)的爆发引起了整个IT/互联网行业的积极关注。之所以会造成如此巨大的影响,是因为大部分网络基础设施均有依靠Log4j,包含Spring、Elasticsearch,Struts2等超级组件。因此,漏洞的爆发也导致了包括苹果、百度、特斯拉等各大巨头公司的业务受到了不同程度的影响。
▲ 一张图感性化理解Log4J的重要程度与安全隐患[1]
因为Log4j具有上手简单、应用高效、使用广泛等特性,加之安全维护资源的不足,所以,在其曝光存在漏洞时就不可避免的被大量利用,如:发动APT攻击、组建僵尸网络、投递挖矿木马、实施勒索攻击等。
针对此类安全漏洞,如何快速构筑一套动态综合的防护方案,建立有效应对事前、事中、事后的实际场景,至关重要。
本文通过模拟遭遇Log4j RCE漏洞的各个关键节点,分享事前、事中、事后对应的解决方案。
2.0day事前预防(安天应用威胁自免疫系统-AntiyRASP)
事前预防常规采取WAF、IDS等基于流量检测的技术,但本次Log4j RCE漏洞的响应过程中,因JNDI协议本身的复杂性,出现了包括“拆分关键字”、“增加空格”等多种绕过方式,且基于规则的匹配算法具有滞后性,难以在漏洞公开前达到较好的防御效果,因此仅通过攻击者有限的请求信息进行匹配,可能会因为规则过宽而导致大量误报的产生,但严谨的规则又可能被攻击者绕过,难以达到平衡。
为解决上述问题,RASP技术(即:运行时自我保护技术)应运而生。RASP通过挂钩(HOOK)技术将防御能力内嵌至应用本身,在关键函数调用前对参数进行安全校验。区别于WAF仅对请求的校验,RASP校验逻辑遍布整个请求的业务响应流程中,保证关键功能函数执行前(如:反序列化前、文件操作前)不被恶意参数污染。
安天基于上述原理,研发了安天应用威胁自免疫系统(以下简称为:AntiyRASP)。
在应对此次Log4j RCE漏洞的问题上,由于该漏洞的利用方式是通过JNDI注入来达到远程代码执行的,检测正常业务的命令执行和通过漏洞进行命令执行是检测的关键。AntiyRASP根据远程代码执行(RCE)漏洞的原理编写了多套通用检测算法,包括“调用栈检测算法”、“危险命令拦截算法”、“命令注入检测算法”等,经测试,上述检测算法都可以不同程度地防御此时尚未公开的Log4j漏洞。
以“调用栈检测算法”为例:应用遭遇Log4j RCE漏洞攻击后,在即将执行系统命令时,AntiyRASP会收集当前程序的实时调用堆栈,并检测其是否由JNDI、Fastjson等特殊框架触发;当检测到Log4j RCE漏洞使用的JNDI的框架,会抛出安全异常,停止应用的业务响应流程,并将攻击者导向预定的拦截页面。
如下图所示,AntiyRASP发现Log4j RCE漏洞利用时可以实时发现和阻断:
▲ 标红处为:命令执行过程中应用堆栈中存在JNDI危险函数签名
进一步地,对于无需执行系统命令的应用,通过一键开关,可以直接阻断业务系统所有的命令执行。
除命令执行检测外,AntiyRASP通过在Web应用程序运行过程中结合应用动态解密、格式化后的数据和上下文信息,配合启发式的行为检测匹配算法,实现准确检测并拦截漏洞,包括但不限于反序列化、SQL注入、SSRF(Server-Side Request Forgery:服务器端请求伪造)等漏洞。
下图演示了AntiyRASP为应用提供安全保护的过程:
相比于传统WAF产品,AntiyRASP的优势体现在以下三个方面:
1. 极低的误报率:安天应用威胁自免疫系统(AntiyRASP)通过获取到执行函数(HOOK点)上下文的堆栈信息、异常信息、用户输入、参数等信息,配合启发式行为检测算法,能够准确分辨正常业务请求与攻击请求的区别;
2. 可防御未知漏洞:安天应用威胁自免疫系统(AntiyRASP)基于产生漏洞的原理,聚焦攻击向量产生的行为,而非其本身的特征,使得安天应用威胁自免疫系统(AntiyRASP)可以对0day攻击、应用自身可能产生的未知漏洞进行检测和防御;
3. 能处理加密请求:安天应用威胁自免疫系统(AntiyRASP)处于应用内部,站在与业务统一的视角,直接面对解密后、结构化后、格式化后、反序列化后的数据对象,而无需困扰于HTTPS、应用流量自加密等问题。
除此之外,触发报警的同时,安天应用威胁自免疫系统(AntiyRASP)会向相关责任人发送通知邮件,邮件中包含了攻击者的完整请求参数、漏洞触发的整个调用栈等相关信息,便于维护人员快速定位漏洞位置与攻击者特征。
3.1day事中处理(安天软件组成分析-AntiySCA)
当Log4j RCE漏洞的相关升级补丁推出时,用户如何快速自查资产的依赖版本是否在受影响清单中?或者该升级到哪个版本?是否存在间接依赖导致修复不完整的情况?
即使运维人员能够在某个时刻保证所有依赖版本的安全性,但随着新依赖的增加,或更多安全补丁的引入,运维人员又需要重新进行依赖安全的评估。而一个中小型项目的依赖数量能达到近百个,这无疑加大了运维人员的工作量。
为了解决上述的几个常见问题,自动化工具Software Composition Analysis (以下简称:SCA)在DevSecOps流程中的引入必不可少。SCA是一种针对源码工程或者二进制可执行文件的成分分析工具,它可以识别代码库中的开源软件,及其对应的历史漏洞信息。SCA能够替代繁重的人工步骤,在开发阶段及时阻断不安全的组件,从而防止来自供应链的污染。
在现代的DevSecOps环境中,早期和持续进行的SCA测试使开发人员和安全团队能够在不影响安全和质量的情况下提高生产力。
基于这样的需求,安天打造了一款SCA产品安天软件组成分析(以下简称:AntiySCA),通过在DevSecOps流程中引入AntiySCA,用户可以很好地解决上述三个问题。
1. AntiySCA实现了一套业界先进的识别技术,能够针对源代码工程、二进制可执行文件做精准而高效的识别,并进一步分析供应链上引入的污染及其来源,分析出开源组件的漏洞信息并提供修复建议,帮助开发人员修复依赖上的缺陷(包括DLL、jar包等第三方依赖),将供应链安全问题封堵在源头(部分功能1.1版本后引入)。
2. AntiySCA支持扫描C/C++、Java、Golang、JavaScript、Node、Python、PHP、Ruby、Rust等主流编程语言的源代码工程以及多种二进制文件,并可以进一步分析出不安全的间接依赖,防止来自供应链的安全隐患。
例如,Elasticsearch的客户端依赖,可能就包含了log4j低版本的嵌套依赖。使用AntiySCA扫描如下图所示:
▲ 通过AntiySCA,可以发现由间接依赖所导致的供应链威胁
3. 通过简单配置接入CI/CD流程后,AntiySCA可做到每次发版前,自动化进行软件组件扫描并生成报告并通过邮件发送给相关责任人。
4.事后自查(安天应用静态安全检测-AntiySAST)
当漏洞得以修复,事件逐渐平息,人们该如何反思此次安全事件带来的影响?
Log4j作为开发者广泛使用的日志框架,以方便、高效、功能强大等多种优势在众多日志框架中脱颖而出,受到了不少开发者的欢迎,但其存在多年的严重漏洞时至今日才被发现,一方面体现了代码安全本身的复杂度,另一方面也对代码安全审计提出了更高的要求。
本次出现的安全漏洞再次提醒我们:开源不等于安全。尽管开源代码是可以审计的,但很多时候并不会真正有人去认真检查;相反,这还可能让人们放松警惕,为 Log4j RCE这类漏洞的出现埋下安全隐患。
另一个值得反思的问题是:如何能在尽量不影响开发进度的同时,预先发现漏洞和缺陷并进行及时修复?
相比于上线后,通过各类黑盒众测,亡羊补牢地发现漏洞并修复,如果能在开发期间就发现漏洞,并将问题扼制在源头,将使修复难度、成本大幅下降。这也是在实践DevSecOps流程中,最为核心的关键点之一:安全左移。
实践安全左移(也即:代码原生安全)的方式,除了增强安全意识教育、安全框架的引入等,更需要AST(Application Security Testing)类工具在DevSecOps中的使用。
而AST中最基础的就是基于白盒的静态应用安全测试工具SAST(Static [XPF1] Application Security Testing)。
安天推出的安天应用静态安全检测(以下简称:AntiySAST)内置精确的数据流分析引擎,包含了加载检测规则、加载扩展插件、检测目标类型、统计目标代码信息、匹配安全风险规则等功能,支持对Java和Python开发语言工程的扫描,可以解决和规避由于开发人员技术水平和安全意识不足产生的可能会成长为0day漏洞的安全隐患。
下图所示,为某实际项目中的扫描报告截图。
▲ AntiySAST对某项目检测的结果
5.二合一SCS代码安全扫描平台(SCA+SAST)
为了能更好地融入企业的DevOps流程中,安天推出了代码安全扫描平台(SCS),它集成了AntiySCA和AntiySAST,能够旁路接入现有的CI/CD流水线,无需复杂的部署方案即可使用。
▲ SCS(代码安全扫描平台)集成了AntiySCA和AntiySAST
开发者可以根据AntiySCA和AntiySAST的扫描报告明确知道自己代码的哪一行存在问题,或者引入了哪个带有风险的第三方依赖,以及如何最优地去整改。
管理人员可以从SCS的全局视角中,直观了解现有漏洞类型和数量,以及具体到某个工程下的漏洞分布;管理人员还可以根据图表,了解到自己团队代码的安全情况和趋势,以便及时梳理代码安全问题,在每次重大安全事件处理上更加游刃有余。
从AntiySCA与AntiySAST的统计视图中,用户可了解到一定时间内所有CI/CD项目中每次扫描的汇总数据。
▲ AntiySCA全局统计视图
AntiySCA的统计视图中,包含了各等级漏洞统计趋势图、风险分布图、出现最多的漏洞信息等;
▲ AntiySAST全局统计视图
AntiySAST的统计视图中,则包括了检测到的如硬编码密码,错误配置等一系列风险的类型分布,以及它们的统计趋势图、风险分布图等
总结
安全对抗是无止境的,本文尝试模拟了遭遇Log4j RCE漏洞后,如何通过流程化、程序化的策略,正确应对与处理漏洞带来的问题。
在事前防御阶段,使用安天应用威胁自免疫系统(AntiyRASP),能够及时拦截未知漏洞攻击,并上报攻击详情至相关责任人,为后续正式修复提供缓冲时间。
在事中处理阶段,对代码库中的开源软件及其对应的历史漏洞信息进行扫描识别,有助于技术人员掌握漏洞信息,从而有针对性地进行修补,减少人工扫描的工作量,大大缩短对漏洞的修复时间,安天软件组成分析(AntiySCA)可以在这一阶段提供相应支持;
在事后自查阶段,为防止出现相似的安全漏洞,通过安天代码安全扫描平台(SCS)将安天软件组成分析(AntiySCA)与安天应用静态安全检测(AntiySAST)的功能进行整合,接入现有的DevOps流程,不仅可以在不影响开发进度的同时,监测代码安全,还可以帮助管理人员直观了解现有漏洞类型和数量,以及团队代码的安全情况和趋势,对开发过程中的漏洞问题实现早发现、早解决。
值得一提的是,AntiyRASP经过紧急更新后,已新增了专针对于Log4j RCE漏洞的缓解特性,并单独增加了JNDI、DNSlog的Hook以及检测算法,为一下次出现相似利用逻辑的漏洞时,能做到防患未然。
2021年12月28日 Apache Log4j2 官方发布了 Apache Log4j2 远程代码执行漏洞(CVE-2021-44832)。我们第一时间对该漏洞进行了分析,当攻击者有权限控制日志配置文件,恶意配置JDBCAppender的数据源可造成JNDI 注入实现远程代码执行。该漏洞利用条件比较苛刻,且安天应用威胁自免疫系统(AntiyRASP)无需升级即可直接防御该漏洞。
安天软件组成分析(AntiySCA)也在第一时间增加了Log4j相关的依赖升级策略;安天应用静态安全检测(AntiySAST)则添加了新的污点传播规则尝试发现更多类似的漏洞。
为了方便读者能更好的理解上述产品,下表展示了各产品的主要功能与特性。
用户可以通过垂直响应平台网站获取试用安天应用威胁自免疫系统(AntiyRASP)、安天软件组成分析(AntiySCA)的SaaS版本:
垂直响应平台地址:https://vs.antiy.cn/
用户使用期间,如有任何疑问,欢迎致电安天全国服务热线:400-840-9234
同时也可发送邮件至安天服务支持邮箱:[email protected]
参考资料:
[1]漫画《Dependency》,作者:Randall Munroe.
如若转载,请注明原文地址