冬训营丨基于安全开发响应Log4j
上图左侧是源码安全扫描套件AntiySCS,其包含用于源代码扫描的白盒测试工具 应用静态安全检测AntiySAST,以及用于确定软件中所用组件和库的来源,并识别是否存在已知漏洞的软件组成分析AntiySCA。
该套件用于实践“安全左移”思想,更多的关注研发流程的“左”边,即在更早的环节中进行安全介入和管控。
右侧在检测和响应部分,除了传统的流量安全设备如WAF、探海,我们还提供了基于运行时自我保护技术的应用威胁自免疫AntiyRASP,通过两者的互补性结合可以为应用提供更完善的安全防护、监控与分析能力。
在预防阶段,我们提供了容器镜像安全扫描工具,分析容器镜像中的安全风险。
基于灰盒扫描的应用交互式测试工具IAST,尚在开发阶段,未来也会从属于源码安全扫描套件中。
2.1 源码安全扫描套件其一:应用静态安全检测 AntiySAST
相比于上线后,通过各类黑盒众测,亡羊补牢地发现漏洞并修复,如果能在开发期间就发现漏洞,并将问题扼制在源头,将使修复难度、成本大幅下降。这也是在实践SecDevOps流程中,核心的关键点之一:安全左移。
实践安全左移(也即:代码原生安全)的方式,除了增强安全意识教育、安全框架的引入等,更需要AST(Application Security Testing)应用安全测试类工具在SecDevOps中的使用。而AST工具中最基础的就是基于白盒的静态应用安全测试工具SAST(Static Application Security Test)。
SAST工具不需要运行目标应用程序,因此可以在开发生命周期的早期使用,因为修复成本很低。
AntiySAST目前可检出的安全风险类型,包含了OWASP、CWE中常见的漏洞分类,除此之外我们还扩充了的一套安全风险规则库,帮助开发者避免使用废弃函数、不安全加密等可能的安全风险。
AntiySAST目前支持Java、Python的检测,使用的主要检测技术包含正则匹配、AST(抽象语法树)语法分析、静态污点分析技术。
图2 AntiySAST扫描结果截图
再谈及SAST工具的一个难以绕过的问题,就是误报率问题。
误报率高是传统SDL流程中SAST类工具的一大痛点,一方面我们在降低误报率上做出了很多努力,效果显著,另一方面在实际的SecDevOps实践中,较短的CI间隔使得误报率问题对开发人员造成的负担有所降低。因为扫描结果是增量迭代的。少量多次的增量内容能让开发人员更好进行针对性研判、修复,并能感知开发过程中的安全风险变化。
2.2 源码安全扫描套件其二:软件组成分析 AntiySCA
保障供应链安全的痛点
我们常会遇到这样的问题,如何快速自查资产的依赖版本是否在受影响清单中?或者该升级到哪个版本?是否存在间接依赖导致修复不完整的情况?
即使运维人员能够在某个时刻保证所有依赖版本的安全性,但随着新依赖的增加,或更多安全补丁的引入,运维人员又需要重新进行依赖安全的评估。而一个中小型项目的依赖数量能达到近百个,这无疑加大了运维人员的负担。
AntiySCA介绍
为了解决上述的几个常见问题,自动化的软件组成分析工具在SecDevOps流程中的引入必不可少。
AntiySCA是一种针对源码工程或者二进制可执行文件的成分分析工具,它可以识别代码库中的开源软件及其对应的历史漏洞信息,并提供修复建议。SCA能够替代繁重的人工步骤,在开发阶段及时阻断不安全的组件,从而防止来自供应链的污染。
上图为某真实案例的依赖扫描结果。
AntiySCA目前支持多种语言依赖的扫描,包括C/C++、Java、Golang、JavaScript、Node、Python、PHP、Ruby、Rust。
AntiySCA主要优势有以下两点:
能识别出不安全的间接依赖;
能识别出二进制可执行文件、安卓应用程序、IOT固件中的不安全组件。
2.3 源码安全扫描套件 AntiySCS
安全如果能够无感知,就能在开发流程中让开发人员本身实现大部分的安全需求,同时减少因沟通产生的矛盾,极大提升开发效率。通过使开发安全工具变得易用,让开发人员自己可以快速解决各种开发环境中存在的问题,最终最小化安全对开发产生的影响。形成了将安全作为日常的文化,才能让安全融入到开发的各个环节,才能做到持续安全。
图5 源码安全扫描套件 AntiySCS 全局视图
通过AntiySCS的全局视图,可以在时间范围、项目两种筛选维度进行筛选,统计视图中,包含了各等级漏洞统计趋势图、风险分布图、出现最多的漏洞信息等。
3应用威胁自免疫AntiyRASP
传统流量安全设备与运行时自我保护技术配合起来相得益彰
RASP是什么技术
• RASP全称运行时自我保护技术(Runtime application self-protection)。
• RASP通过挂钩(HOOK)技术将防御能力内嵌至应用本身,将安全校验遍布整个请求的业务响应流程中,保证各关键功能函数执行前(如:反序列化前、文件操作前)不被恶意参数污染。
以一个比喻来通俗的解释,以WAF为代表的应用外的安全措施,就像是戴口罩,将攻击请求拦截在应用外部,而RASP就像是打疫苗,为应用自身提供防御能力。
AntiyRASP目前支持Java语言的防护,Python、PHP、Golang语言的防护能力尚在开发当中。
AntiyRASP的检测能力覆盖了大部分的OWASP TOP 10漏洞,包括不安全的反序列化、敏感数据泄露、SSRF、XXE漏洞、SQL注入、命令注入、敏感数据泄露等。
WAF与RASP配合起来相得益彰
4.1 Log4j漏洞简单介绍
之所以造成如此巨大的影响,一方面是因为Log4j漏洞的利用简单,另一方面是Log4j组件自身的使用非常广泛。即使业务系统没有直接依赖于它,但包含Spring、Elasticsearch,Struts2等在内的网络基础设施组件都有依赖于Log4j。
对于事前预防常规采取WAF、IDS等基于流量检测的技术,但本次Log4j漏洞的响应过程中,基于规则的匹配算法具有滞后性,难以在漏洞公开前达到较好的防御效果。除此之外因JNDI协议本身的复杂性,出现了包括“拆分关键字”、“增加空格”等多种绕过方式,我们可以发现普通的攻击载荷与恶意变形的载荷的形式上有较大区别,因此仅通过攻击者有限的请求信息进行匹配,可能会因为规则过宽而导致大量误报的产生,但过于严谨的规则又可能被攻击者绕过,难以达到平衡。
4.2 针对Log4j漏洞披露前,工具链如何保障应用不受侵害
首先应用威胁自免疫AntiyRASP可以对远程命令执行的提供一个较为全面的防御,应用遭遇Log4j 漏洞攻击后,在即将执行系统命令时,AntiyRASP会使用一系列防御算法进行检测。对Log4j漏洞有较好防御效果的有如下四种:“调用栈检测算法”、“危险命令拦截算法”、“命令注入检测算法”、“命令执行全拦截”。
4.3 Log4j 漏洞披露后,工具链持续响应
应用威胁自免疫 (AntiyRASP) 新增检测算法
■ “DNS查询检测算法”,开启后,可记录应用发起的所有的DNS查询,对常见的DNSlog域名进行匹配拦截。
应用静态安全检测(AntiySAST)添加了新的污点传播规则
软件组成分析(AntiySCA )增加Log4j漏洞信息(CVE-2021-44228)
■ 影响面确认:通过自动化的SCA扫描,确认公司是否受到影响,以及那些资产受影响。
■ 风险同步:邮件通知到对应的资产责任人,将漏洞可能造成的影响、官方的解决方案或缓解措施给到资产责任人。 ■ 持续跟踪:在SecDevOps流水线中,持续同步漏洞的最新进展。
如下图所示,通过AntiySCA,可以发现由间接依赖所导致的供应链威胁
5总结
5.1 安天SecDevOps工具链一览
5.2 SaaS化版本试用
SecDevOps工具链,真诚地希望能得到更多宝贵的用户反馈与建议。