# 使用说明

# 扫描规则

目前内置了几千条扫描规则,可以通过语言、问题级别、类型以及规则名称对规则进行筛选。
An image
点击规则列表的每行可以查看规则检查详情页,在详情页中可以对规则进行编辑
注:只有企业管理员有扫描规则的编辑权限
An image
编辑时可以修改规则的问题级别以及类型。取消编辑可以取消编辑状态,点右下角的确定是保存编辑内容,取消则是关闭规则详情页。
An image

# 规则集

在代码库设置扫描规则时需要设置规则集,对代码进行扫描时将会按照规则集中的规则出具报告。

系统内置了一个规则集,包括所有的规则,企业管理员也可以自定义规则集,点右上角的新建,自定义规则集。新建包括两种形式:一种是直接新建另一种是从其他规则集复制。

An image

  • 直接新建规则集:需要填写规则集名称、说明、可以直接设置规则集的管理员、按照语言、问题级别、类型以及规则名称对规则进行筛选并将规则添加到规则集中。

An image

  • 从其他规则集复制:需要填写规则集名称、说明、可以直接设置规则集的管理员、选择规则集时可以选择多个规则集,若选择多个规则集时规则取已选择的规则集的并集。

An image

  • 查看、复制、删除:可直接点击规则集列表中的每行直接查看规则集详情,也可以点右侧的查看浏览规则集详情。在列表页可以直接进行规则集的复制和删除。

An image

  • 编辑:在规则集的详情页可以直接对规则集进行编辑,取消编辑可以取消编辑状态,点右下角的确定是保存编辑内容,取消则是关闭规则详情页。

An image

# 被检项目

# 被检项目列表

支持对git/svn协议的第三方代码库进行代码扫描,支持手动扫描、单次定时扫描、周期性定时扫描
An image

# 添加被检项目

填写仓库基本信息,包括:git/svn地址、用户名和密码。
An image
填写被检项目的手动和周期性定时扫描配置,点击【保存】,被检项目添加完成。
手动全量扫描配置页
An image
定时全量扫描配置页
An image

# 被检项目权限管理

点击被检项目的【成员与角色】按钮,可以查看被检项目的角色管理和成员管理。
角色管理tab页展示管理员、普通成员、访客的角色权限
An image
成员管理tab页,展示不同角色下成员信息,支持被检项目管理员添加、删除成员操作
An image

# 手动发起扫描

点击被检项目的【手动发起扫描】按钮,用户填写完需要扫描的分支后,手动触发代码扫描。
An image
An image
手动扫描支持设置单次定时扫描。触发方式选择【定时扫描】后,设置运行时间,单次执行的定时扫描设置完成。
An image

# 扫描历史任务

点击被检项目的【扫描历史任务】按钮,查看被检项目执行过的所有历史任务记录,点击扫描记录,展示扫描报告详情
An image
An image

# 问题审计

用于管理企业内所有过滤的代码问题、组件漏洞问题、组件许可证风险。支持查看问题详情、问题过滤人、过滤时间。支持取消过滤操作
问题审计主要包含以下几个问题审计维度:
1、代码问题
An image
2、组件漏洞
An image
3、组件许可证风险
An image

# 扫描DotNet Framework项目

# 基于经典.Net Framework开发的项目(如微软已经停止维护的.Net Framework4.6或者更低的版本,不支持跨平台),扫描时计算资源要求采用Machine模式的Windows主机节点,在接入计算资源配置参数时,执行命令shell类型请采用PowerShell(若无执行脚本权限请设置执行策略:Set-ExecutePolicy ByPass)

扫描过程中需要对项目进行编译,请确保用于执行扫描任务的Windows主机节点上满足项目编译环境(基于MSBuild),且已安装了Java jre(建议版本java11), Git, StyleCop(按需安装,见下方说明), NodeJs(可选)

注:此部分基础环境由用户自己配置,以上可执行程序及编译器MSBuild.exe确保已配置到了全局Path路径,若项目中除了C#同时还有Js等其他语言文件要扫描,请安装扫描工具所需的NodeJs环境(推荐版本v14)

在扫描配置页请选择主机集群并构建.Net Framework项目。 目前主机模式编译扫描尚不支持开源组件漏洞和许可证分析,在扫描配置页面开启组件扫描将不生效。
An image

# 上面的基础环境准备好后,下载压缩包(命令中的域名地址已脱敏,请替换命令中的地址),然后解压到固定目录C:\ProgramData\Scan\下面即可

下载命令:curl -o scanner_win64.zip "https://{此处替换平台Saas版地址}/pkg/scan/raw/file/snapshot?version=v1.0.0&pkgName=scan/scanner_win64" -k -u scan:55804412da4f4ba4bcfb4e0fb418bd8a1672909786203

解压后在C:\ProgramData\Scan\下包含子目录:scanner、MSBuildScanner、security-scan4x

  • scanner目录下main.exe是扫描器终端程序(基于python3.9.11 win64环境打包);start_scanner.ps1脚本是构建任务启动脚本

  • MSBuildScanner下是.Net Framework项目的扫描工具(依赖Java运行环境,建议Java11)

  • security-scan4x是.Net Framework 4.x安全扫描工具

  • 编码规范扫描工具StyleCop需自己安装,通过dotnet tool install --global rookxx.stylecopanalyzers-cli --version 1.1.0安装全局命令行工具style.exe,或离线安装并配置Path环境变量(离线安装建议重启机器),
    扫描时将会调用style.exe命令进行分析,如果都配置了扫描时还是提示找不到工具,可以尝试在start_scanner.ps1启动脚本中修改Path变量:$Env:Path = $Env:Path;{此处追加style.exe所在目录路径}

# 自定义编译指令

.Net Framework项目在扫描时默认编译指令是MSBuild.exe xxx.sln /t:Rebuild。默认指令可能编译失败,若需根据自己的项目自定义编译指令,可以在项目根目录自己添加一个scan.build文件写入自定义编译指令。
根目录中存在这个文件,扫描程序则不会再执行默认指令,而执行文件中自定义的指令。

文件里面的指令内容可以比较灵活,比如先调用一个已经封装好的脚本文件或程序来执行一些编译准备工作,然后再执行项目的编译指令。

# SpotBugs扫描参数说明

Java项目流水线编译构建插件支持对编译产出进行扫描,目前支持Maven, Gradle, Ant三种构建插件。

# - 编译产出路径

请填写编译产出文件的相对路径:每次构建任务默认会有一个工作目录/build/{当前构建编号},生成的文件都会在这个工作目录下。

若项目编译后的class文件在工作目录相对路径/output/classes下,请填写output/classes,扫描工具会遍历目录/build/{当前构建编号}/output/classes下的class文件进行分析。

若要直接分析jar包文件,同理填写jar包所在的目录即可。

注意

  • 如果指定目录下同时包含jar包和class文件,则扫描工具只会分析jar包忽略class文件;可同时分析目录下的多个jar包。
    若有不用分析的三方jar包或class文件,请注意不要放在该目录下,避免因三方文件过多造成不必要的分析甚至会分析超时。

  • 对于Ant编译产出,由于SpotBugs原始分析结果中仅包含代码问题所属的类、方法等粗略信息,而缺失代码问题所在文件、行号等关键信息,扫描报告中目前还未展示问题行号以及具体的代码片段。
    在处理扫描报告时会根据类、方法等信息匹配代码库文件路径(前提是文件名和类名是一致的)。

# - 只需扫描的包名

对于大项目,包比较多扫描时间较长或者只想关注部分核心的包,可以指定只想扫描的包名,支持通配符。

  • 包名或class需填写完整的引用路径,例如:com.foobar.pkgname.*

  • 如果要分析所有子包,将*换成-,例如:com.foobar.pkgname.-

参数说明原文:

onlyAnalyze: com.foobar.MyClass, com.foobar.mypkg.*:

Restrict analysis to find bugs to given comma-separated list of classes and packages. Unlike filtering, this option avoids running analysis on classes and packages that are not explicitly matched: for large projects, this may greatly reduce the amount of time needed to run the analysis. (However, some detectors may produce inaccurate results if they aren’t run on the entire application.) Classes should be specified using their full classnames (including package), and packages should be specified in the same way they would in a Java import statement to import all classes in the package (i.e., add .* to the full name of the package). Replace .* with .- to also analyze all subpackages.

# 组件扫描说明

组件扫描不需要复杂的扫描配置,只需要开启【组件扫描】开关即可。
组件扫描
如果需要对组件漏洞进行质量管控,可以在【质量门禁】配置项中,增加相应的组件类型门禁条件即可
组件扫描

# 平台支持组件漏洞扫描的语言及扫描的依赖文件

支持语言 扫描的依赖文件
java pom.xml
python requirements.txt 、setup.py、poetry.lock、Pipfile.lock
php composer.lock、 composer.json
go go.mod
c/c++ conan.lock、conanfile.txt
nodejs package-lock.json、yarn.lock、popm-lock.yaml、npm-shrinkwrap.json
c# packages.config、.csproj
ruby Gemfile.lock
rust Cargo.toml、Cargo.lock
dart pubspec.lock

# 平台支持组件许可证分析的语言及扫描的依赖文件

支持语言 支持扫描的依赖文件
java pom.xml
python requirements.txt 、setup.py、poetry.lock、Pipfile.lock
php composer.lock、 composer.json
go go.mod
c/c++ conan.lock、conanfile.txt
nodejs package-lock.json、yarn.lock、popm-lock.yaml、npm-shrinkwrap.json

# 本地扫描说明

平台目前提供客户端命令行程序支持在研发环境本地触发扫描,可以在提交变更代码之前提前检查并处理代码问题,避免重复发起评审。

# 使用方法

  • 在代码库扫描页面右上角,有本地扫描命令的使用说明入口,点击可查看详细说明,可以根据研发环境系统架构类型下载客户端程序。为了方便使用,请将程序所在目录加入到系统环境变量。Mac和Linux系统用户需要手动给与工具响应执行权限。命令:chmod +x scan。

  • 首次使用需要编辑程序配置文件(同级目录下会自动生成config.yaml文件),设置平台域名以及个人access_token信息(平台右上角个人设置 > 访问令牌,需开启相应权限)。

  • 代码库需要在平台开启手动扫描配置(为了尽量复用配置),每次变更代码提交之前执行scan start命令即可触发扫描。

  • 基于平台云原生的特性,客户端触发扫描使用的计算资源默认是平台内置集群资源,若希望使用自己的主机作为计算资源,可以在计算资源页面接入自己的机器。
    使用自己的机器资源可以减少平台内置集群压力,且在任务多的时候不用排队等待计算资源,推荐用户接入自己的研发机器。

# 基本流程

客户端命令行扫描