上个月,Seal 软件供应链防火墙 v0.2(以下简称“Seal”)正式发布,这一版本实现了可扩展架构,用户可以根据自身需求插件式集成原生或第三方解决方案,灵活扩展扫描能力。

在前一个版本中,Seal 集成了 SCA、SAST 和配置检查等功能,在这一架构中最大的优势是调试方便、调用链路短,但同时也伴随着模块耦合、依赖树深以及扩展困难等问题。因此,在新版本中使用了新的 ⌈插件化框架⌋ 来重构了 SCA、SAST和配置检查的集成,并以此解决上面谈及的扩展性问题。

之前的演示中,我们展示了如何使用 v0.2.0 的插件管理:把IaC 配置检查 ⌈插件⌋,⌈无缝⌋地集成到 Seal 里。本文将介绍插件化框架的底层原理以及演示如何将代码规范工具集成到 Seal软件供应链防火墙中。

插件化框架的工作原理

通常,实现一个框架的插件化,我们需要考虑以下问题:

  1. 降低插件化的成本。

  2. 规范插件调用的输入输出。

  3. 配置(限制)插件调用的权限。

  4. (可选)管理插件调用的状态数据。

Seal 通过让插件的改动最小化来降低插件化的成本,换言之,Seal 可以让插件保留其原有的配置方式,用户仅需适配插件调用的输入输出即可。插件的配置项可以通过 Seal 的策略面板暴露成策略,最终作用到 Seal 的各个拦截点上。

# policies.yaml
- code: # <string>, 策略代码,唯一标识
category: # <string>, 策略分类,所在的一级组
type: # <string>, 策略类型,所在的二级组
name: # <string>, 策略名称(或原有配置项的名称)
description: # <string>, 策略描述(或原有配置项的描述)
enabled: # <bool>, 默认启用
builtIn: # <bool>, 默认内置(内置,是相对于使用插件的使用者而言)
bindings: # 作用的拦截点
isAllResource: # <bool>, 作用于源代码仓库
isAllProxy: # <bool>, 作用于代理
constraint: {} # 约束,结构化的配置
expression: "" # 表达式或原配置项
action: # <string>, 违反该策略后,应该做出的动作
severity: # <string>, 违反该策略后,应该声明的严重程度
- code: ...
category: ...
...

然后, Seal 在某个拦截点上运行检查时,会拉取相应的已启用的策略,生成配置文件和拦截点上的状态数据(例如,对于源码仓库的检测,拦截点为源码仓库,状态数据为检测时刻的源代码)作为插件调用的输入。当插件检查完毕后,将结果以 SARIF的格式输出到指定路径。

最后, Seal 将所有插件的 SARIF 输出汇总,并根据策略定义的行为(action)决定实施拦截、通过还是告警。

另外,对于信任(trusted)的插件,Seal 会在插件调用时注入 API Token (SEAL_API_TOKEN),从而允许插件获得 Seal 的能力:风险评估、漏洞数据、合规信息等。

集成代码规范工具

假设,有个 style-checker 的组件,它可以检查源代码的书写规范,支持丰富的风格检查配置。其中,有一条配置项:K&R 风格检查。当源代码中有风格违反配置规则时,style-checker 会输出失败信息。

style-checker \
--path="/path/to/your/code" \
--kr-style="true" \
--msvc-style="false" \
--... \
--report="/path/to/record/illegal/result"

首先,需要给 style-checker 做一个包裹器(wrapper-style-checker),这个包裹器是用来接收 Seal 的输入输出。wrapper-style-checker 可以用任何语言编写,在运行时,从环境变量中获取以下内容:

SOURCE_DIR="/path/to/your/code" \
PLUGIN_POLICY_FILENAME="/path/to/receive/configuration" \
PLUGIN_OUTPUT_FILENAME="/path/to/output/sarif_report" \
SEAL_API_TOKEN="" \
SEAL_URL="" \
wrapper-style-checker

然后,规整 style-checker 的配置项,按照合适的粒度构建出相应的策略。这里,以每个配置项作为一条策略。Seal 会在安装插件的阶段阅读这个策略文件(policies.yaml),把其中的每一项都呈现到 Seal 的策略面板。


# policies.yaml
- code: STYLE-CHECKER-POL-1
category: sast
type: style
name: kr-style
description: 检查是否严格使用K&R风格编码。
enabled: true
builtIn: true
bindings:
isAllResource: true
expression: |
KRStyle: true
MSVCStyle: false

接着,实现 wrapper-style-checker 对策略文件的理解(转换),把 expression 的信息转化成对 style-checker 的调用,并把执行后的结果按 SARIF 格式输出。

# pseudo code
var policies = read(${PLUGIN_POLICY_FILENAME})
var config = parseInput(policies)
var result = call("style-checker") on (${SOURCE_DIR}) with (config)
var sarif = parseOutput(result)
write(${PLUGIN_OUTPUT_FILENAME}) with (sarif)

最后,用元信息文件(metadata.yaml)描述 wrapper-style-checker 插件的信息,包括UI展示,多语言等。

category: sast
format: yaml
resourceKinds: ["repository"]
policies:
- type: style
conditions: []
locales:
en:
"policy.style": "Style Checker"
zh:
"policy.style": "风格检查"

插件安装

完成以上步骤后,可以把 wrapper-style-checker(二进制可执行文件) 、策略文件(policies.yaml)和元信息文件(metadata.yaml)打包成一个 tar.gz 包,并通过 Seal 的 ⌈插件管理⌋ 页面进行下载安装,实现开箱即用。

总结

得益于插件化框架的扩展能力,Seal 为用户提供了 IaC 配置检查功能,并且可以快速适应部署环境已有的复杂性。用户也可以根据自身需求利用插件化框架灵活扩展扫描能力,轻松为代码安全提供进一步保障。在后续版本中,Seal 研发团队会持续丰富插件功能,优化插件策略及配置机制,为用户提供丝滑的可插拔体验。

欢迎访问下方链接,申请产品试用,体验灵活的插件化扩展:

https://seal.io/trial

乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具的更多相关文章

  1. 基于 Docker 的现代软件供应链

    [编者按]本文作者为 Marc Holmes,主要介绍一项关于现代软件供应链的调查结果.本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 3 月初,为了了解软件供应链的现状以及 D ...

  2. SLSA 框架与软件供应链安全防护

    随着软件供应链攻击浪潮愈演愈烈,Google 发布了一系列指南来确保软件包的完整性,旨在防止影响软件供应链的未经授权的代码修改.新的 Google SLSA 框架(Supply-chain Level ...

  3. CNCF社区首个!KubeEdge达到软件供应链SLSA L3等级

    摘要:在v1.13.0版本中,KubeEdge项目已达到 SLSAL3等级(包括二进制和容器镜像构件),成为CNCF社区首个达到SLSA L3等级的项目. 本文分享自华为云社区<CNCF社区首个 ...

  4. Seal 0.4 发布:软件供应链安全洞察更上一层楼!

    今天,我们很高兴宣布 Seal 0.4 已正式发布!在上一个版本中,Seal 完成了从单一产品到全链路平台的转变,通过全局视图帮助用户掌握软件开发生命周期各个环节的安全状况. 在 Seal 0.4 中 ...

  5. Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件

    一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...

  6. Kubernetes 时代的安全软件供应链

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 汤志敏  阿里云 ...

  7. OpenSSF安全计划:SBOM将驱动软件供应链安全

    在 软件成分分析(SCA)一文中,我们简单提到软件物料清单(SBOM)在安全实践中的价值. 本期文章将带你深入了解 "SBOM 无处不在"计划是什么,以及 SBOM 对未来软件供应 ...

  8. CSO视角:Sigstore如何保障软件供应链安全?

    本文作者 Chris Hughes,Aquia的联合创始人及CISO,拥有近20年的网络安全经验. SolarWinds 和 Log4j 等影响广泛的软件供应链攻击事件引起了业界对软件供应链安全的关注 ...

  9. wemall软件交易平台微信图文编辑器部分代码分享

    wemall软件交易平台微信图文编辑器部分代码,可下载: controller.php <?php date_default_timezone_set("Asia/chongqing& ...

  10. AOP在大规模软件开发项目中的应用(图)

    AOP在大规模软件开发项目中的应用(图) 本文的写作源于一个真实的大型软件开发项目,我们努力尝试在这个项目中推广应用AOP.在此我们将对曾经面临过的一些实际问题与困难进行分析,试图引发关于面向方面软件 ...

随机推荐

  1. C++快读、快写模版

    inline int read() { char ch = getchar(); int x = 0,f = 1; while (!isdigit(ch)) if (ch == '-') f = -1 ...

  2. 如何在Notepad++中轻松删除包含指定文本的字符串

    如果你需要在大量文本中删除指定模式的字符串,可以使用Notepad++中的正则表达式功能.下面是一个示例,让你可以快速学会如何删除包含指定文本的字符串.我们将使用以下示例字符串: This is a ...

  3. C#Winform使用NPOI获取word中的数据

    公众号「DotNet学习交流」,分享学习DotNet的点滴. 需求 想要获取word里面的内容,如下图所示: 有一张表和一段文本,并将它们存入数据库或者Excel. 步骤 添加NPOI的库,如下图所示 ...

  4. 【uniapp】学习笔记day03 | 页面制作【外包杯】

    一.开发层级结构介绍 page.json 对uniapp进行全局配置,决定页面文件的路径.窗口样式.原生的导航栏.底部的原生tabbbar manifest.json 应用的配置文件,指定应用的名称. ...

  5. [NewStarCTF WEEK5] pwn-planet 详解

    这道题目更多是考pwner的逆向功底(虽然程序逻辑也不是非常复杂=_=) 老规矩,先checksec查看程序 保护全开 看一下main函数 __int64 __fastcall main(int a1 ...

  6. Go笔记(3)-3种go语言的键盘输入详解

    go语言的键盘输入详解 go语言中有三种输入函数,分别是: fmt.Scanf() 可以按照指定的格式进行输入 fmt.Scanln() 通过指针将值赋值给变量 fmt.Scan() (1)fmt.S ...

  7. STM32外设:定时器TIM

    主要外设: TIM:Timer 定时器 TIM中的基本电路 定时器 计数器的基本功能 复位:计数器值=初值.产生一个输出脉冲.产生更新事件(UEV)脉冲.更新中断标志UIF=1 计数:计数器值递增或递 ...

  8. keystone和beaengine的编译

    编译Keystone 根据github的文档编译不出来,所以还是用CMake项目转成Visual Studio的项目来编译 1.下载源码 https://github.com/keystone-eng ...

  9. DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)

    前言 什么是UNC 什么是DNSlog注入 DNSlog注入的条件 防止DNSlog注入的几个措施 sqli-labs试验 前言 前几天面试的时候,面试官问我知不知道OOB(带外数据). 当时我蒙了, ...

  10. 通用 Mapper 的批量插入实现

    具体的 SQL 模板实现如下所示: import org.apache.ibatis.mapping.MappedStatement; import tk.mybatis.mapper.MapperE ...