上个月,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. Python 日期和时间处理教程:datetime 模块的使用

    Python 中的日期不是独立的数据类型,但我们可以导入一个名为 datetime 的模块来使用日期作为日期对象. 示例:导入 datetime 模块并显示当前日期: import datetime ...

  2. BI 数据可视化平台建设(1)—交叉表组件演变实战

    作者:vivo 互联网大数据团队 - Zhu Jianchen 本文是vivo互联网大数据团队<BI数据可视化平台建设>系列文章第1篇 - 交叉表组件. 交叉表在数据分析里应用广泛,通过本 ...

  3. P-III曲线水文频率计算程序(方法)

    P-III曲线水文频率计算程序(方法) 最近遇到水文频率曲线拟合计算相关的问题,在网上查阅了一下,毕竟是专业性比较强的知识内容,好像没有比较系统全面的资料,一时兴起,做了一些研究,总结了一下所了解的一 ...

  4. Unity学习笔记--数据持久化之PlayerPrefs的使用

    数据持久化 PlayerPrefs相关 PlayerPrefs是Unity游戏引擎中的一个类,用于在游戏中存储和访问玩家的偏好设置和数据.它可以用来保存玩家的游戏进度.设置选项.最高分数等信息.Pla ...

  5. 学生开发者勇担青年使命,用AI守护少数人的“视界”

    本文分享自华为云社区<[先锋开发者云上说]学生开发者勇担青年使命,用AI守护少数人的"视界">,作者:华为云社区精选 . 青年动人之处,在于他们的勇气,和非凡的创造探索 ...

  6. 通过Span实现高性能数组,实例解析

    Span<T> 是 C# 7.2 引入的一个强大的数据结构,用于表示内存中的一块连续数据.它可以用于实现高性能的数组操作,而无需额外的内存分配.在本文中,我将详细介绍如何使用 Span&l ...

  7. Excel表格存在不同大小的合并单元格怎么排序?

    当Excel表格中存在不同大小的合并单元格时,进行排序可能会出现一些难题.因为合并单元格会影响数据的布局,导致排序结果不符合预期. 下面我将详细介绍如何在包含不同大小合并单元格的Excel表格中进行排 ...

  8. Android 图表开源库调研及使用示例

    原文地址: Android图表开源库调研及使用示例 - Stars-One的杂货小窝 之前做的几个项目都是需要实现图表统计展示,于是做之前调研了下,做下记录 概述 AAChartCore-Kotlin ...

  9. [ARC122D] XOR Game

    Problem Statement There are $2N$ integers written on a blackboard. The $i$-th integer is $A_i$. Alic ...

  10. 校验码——循环校验码CRC,海明校验码