乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具
上个月,Seal 软件供应链防火墙 v0.2(以下简称“Seal”)正式发布,这一版本实现了可扩展架构,用户可以根据自身需求插件式集成原生或第三方解决方案,灵活扩展扫描能力。
在前一个版本中,Seal 集成了 SCA、SAST 和配置检查等功能,在这一架构中最大的优势是调试方便、调用链路短,但同时也伴随着模块耦合、依赖树深以及扩展困难等问题。因此,在新版本中使用了新的 ⌈插件化框架⌋ 来重构了 SCA、SAST和配置检查的集成,并以此解决上面谈及的扩展性问题。
之前的演示中,我们展示了如何使用 v0.2.0 的插件管理:把IaC 配置检查 ⌈插件⌋,⌈无缝⌋地集成到 Seal 里。本文将介绍插件化框架的底层原理以及演示如何将代码规范工具集成到 Seal软件供应链防火墙中。
插件化框架的工作原理
通常,实现一个框架的插件化,我们需要考虑以下问题:
降低插件化的成本。
规范插件调用的输入输出。
配置(限制)插件调用的权限。
(可选)管理插件调用的状态数据。
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 研发团队会持续丰富插件功能,优化插件策略及配置机制,为用户提供丝滑的可插拔体验。
欢迎访问下方链接,申请产品试用,体验灵活的插件化扩展:
乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具的更多相关文章
- 基于 Docker 的现代软件供应链
[编者按]本文作者为 Marc Holmes,主要介绍一项关于现代软件供应链的调查结果.本文系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 3 月初,为了了解软件供应链的现状以及 D ...
- SLSA 框架与软件供应链安全防护
随着软件供应链攻击浪潮愈演愈烈,Google 发布了一系列指南来确保软件包的完整性,旨在防止影响软件供应链的未经授权的代码修改.新的 Google SLSA 框架(Supply-chain Level ...
- CNCF社区首个!KubeEdge达到软件供应链SLSA L3等级
摘要:在v1.13.0版本中,KubeEdge项目已达到 SLSAL3等级(包括二进制和容器镜像构件),成为CNCF社区首个达到SLSA L3等级的项目. 本文分享自华为云社区<CNCF社区首个 ...
- Seal 0.4 发布:软件供应链安全洞察更上一层楼!
今天,我们很高兴宣布 Seal 0.4 已正式发布!在上一个版本中,Seal 完成了从单一产品到全链路平台的转变,通过全局视图帮助用户掌握软件开发生命周期各个环节的安全状况. 在 Seal 0.4 中 ...
- Linux防火墙之iptables基本匹配条件和隐式扩展匹配条件
一.iptables的基本匹配条件 上一篇博文我们说到了iptables的基本工作原理.数据报文在内核的走向和管理链.管理规则.以及查看规则.导入和导出规则:回顾请参考https://www.cnbl ...
- Kubernetes 时代的安全软件供应链
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 汤志敏 阿里云 ...
- OpenSSF安全计划:SBOM将驱动软件供应链安全
在 软件成分分析(SCA)一文中,我们简单提到软件物料清单(SBOM)在安全实践中的价值. 本期文章将带你深入了解 "SBOM 无处不在"计划是什么,以及 SBOM 对未来软件供应 ...
- CSO视角:Sigstore如何保障软件供应链安全?
本文作者 Chris Hughes,Aquia的联合创始人及CISO,拥有近20年的网络安全经验. SolarWinds 和 Log4j 等影响广泛的软件供应链攻击事件引起了业界对软件供应链安全的关注 ...
- wemall软件交易平台微信图文编辑器部分代码分享
wemall软件交易平台微信图文编辑器部分代码,可下载: controller.php <?php date_default_timezone_set("Asia/chongqing& ...
- AOP在大规模软件开发项目中的应用(图)
AOP在大规模软件开发项目中的应用(图) 本文的写作源于一个真实的大型软件开发项目,我们努力尝试在这个项目中推广应用AOP.在此我们将对曾经面临过的一些实际问题与困难进行分析,试图引发关于面向方面软件 ...
随机推荐
- Java8新特性(Lambda表达式、Stream流、Optional类)等
1. Lambda表达式由来 1 package java8; 2 3 public class EmployeeTest { 4 public static void main(String[] a ...
- win10如何美化cmd[添加新字体+配色方案+窗口栏样式]
最近学mysql的时候用到很多cmd操作,但是cmd那默认界面实在是丑到没朋友.在网上收集了些资料最后把cmd美化成这样: 修改方法: 1.修改字体,新建一个txt文件,里面粘贴以下代码: Windo ...
- 在RT-thread studio 中生成 Doxgen文档
转载自RTT论坛 实测可以使用
- 🔥🔥通过访问URL地址,5分钟内渗透你的网站!很刑很可拷!
今天我来带大家简单渗透一个小破站,通过这个案例,让你深入了解为什么很多公司都需要紧急修复各个中间件的漏洞以及进行URL解析拦截等重要操作.这些措施的目的是为了保护网站和系统的安全性.如果不及时升级和修 ...
- 深入了解HMAC加密技术:原理、应用与实践
一.引言 在网络安全领域,消息认证码(MAC)是一种重要的技术手段.Hash-based Message Authentication Code(HMAC)作为其中的一种,凭借其简单.高效.安全的特性 ...
- Django学习(一) 之 环境搭建
写在前面 最近比较迷AI绘图,那就上个图吧,我感觉还挺好看的. 可能会有人说,之前不一致分享的是flask吗,怎么突然改到django了? 这个问题问得好,开发环境遇到了一些小困难! 不过django ...
- 简易的git命令行入门教程
一.Git 全局设置 git config --global user.name "用户名" git config --global user.email "邮件地址@1 ...
- HBase的实验原理
功能组件: master Region Region到底被存到哪里去了 HBase的三层结构 三层结构中各个层次的名称和作用
- 后端程序员必会的前端知识-01:html、css
第一章. HTML 与 CSS HTML 是什么:即 HyperText Markup language 超文本标记语言,咱们熟知的网页就是用它编写的,HTML 的作用是定义网页的内容和结构. Hyp ...
- 从Redis读取.NET Core配置
在本文中,我们将创建一个自定义的.NET Core应用配置源和提供程序,用于从Redis中读取配置.在此之前,您需要稍微了解一些.NET Core配置提供程序的工作原理,相关的内容可以在Microso ...