TCA-Armory-R
工具介绍
TCA-Armory-R 是 TCA 自研商业工具,是一款增强正则匹配工具,通过正则规则来匹配检出项目中的文件或代码问题。
工具支持 Go 正则语法 Regexp ,并兼容.NET 正则引擎 Regexp2(支持零宽断言等正则表达式)。
| 自定义规则 | 自定义框架适配 |
|---|---|
| ✅ | ❌ |
正则工具对比
相较于 RegexScan、RegexFileScan 两款自研非商业工具,TCA-Armory-R 工具:
扫描速度更快,平均减少 60% 的耗时。
单个工具即可完成文件名称和文件内容的检查。
单条规则内支持多条正则表达式。
支持正则过滤。
支持匹配分组和熵检测。
自定义规则
适用场景
检测项目中的文件名,比如漏洞文件 log4j-core-2.10.1.jar
检测代码文件中的文本内容,比如高危函数 vsscanf
检测配置文件中的文本内容,比如账号密码明文
以下是自定义规则流程:
点击添加规则
访问 TCA 平台工具管理页面,找到 TCA-Armory-R 工具并进入自定义规则列表页,点击添加规则按钮。
填写规则信息
按业务需求设计规则并配置规则信息,配置完毕后点击确认按钮,完成规则创建。
需根据规则参数配置说明设计规则,参见:规则参数配置说明。
使用自定义规则
进入团队/项目分析方案,在分析方案规则配置中点击添加规则按钮,搜索并选中该规则,完成规则添加。
规则参数配置说明
规则参数字段:
[必选] regex 参数 :用于指定扫描的正则表达式。例如:
regex=((ghp|gho|ghu|ghs)_[0-9a-zA-Z]{36})。建议先测试好正则表达式是否正确,正则表达式测试网站推荐:http://tool.oschina.net/regex。
[必选] msg 参数:用于自定义提示信息,例如:
msg = 函数方法 %s 已经废弃,请使用 xxx 方法。如果正则表达式(regex)中定义了捕获组(group,即使用
()括起来的部分),则 msg 中的%s会按顺序依次替换为这些捕获组匹配的内容。如果正则表达式未定义捕获组(group),则 msg 中最多只能包含一个
%s,并将替换为整个正则匹配到的字符串。如果 msg 中不包含
%s,则会直接完整显示该信息。如果未提供 msg 参数,将使用默认提示:
发现不规范代码:%s(建议根据具体场景自定义提示信息,避免默认描述过于笼统)。
[可选]
regex{N}参数:需已有regex参数,用于扩展扫描的正则表达式,其中 N >= 1,例如:regex1=EAAAACZAVC6ygB[0-9A-Za-z]+、regex2=EAAAAZAw4[0-9A-Za-z]+。regex{N}和regex参数的表达式均为或关系。[可选]
regex_not参数:用于指定过滤的正则表达式,例如:regex_not=(?i)example。用于对
regex{N}和regex正则匹配的字符串进行过滤,如果匹配则过滤该结果。[可选]
regex_not{N}参数,需已有regex_not参数,用于扩展过滤的正则表达式,例如:regex_not1=(?i)test、regex_not2=(?i)fake。regex_not{N}和regex_not参数的表达式均为或关系。(可选) match_group 参数:用于指定正则匹配的分组,数值不能大于正则匹配分组数,例如:
regex=(aws_account_id)\s{0,50}(:|=>|=)\s{0,50}([0-9]{12}),match_group=3,则匹配到第 3 个分组([0-9]{12})。(可选) entropy 参数:用于指定正则匹配结果的最小信息熵,例如:
entropy=3,熵不大于 3 的匹配结果将被过滤。- 信息熵:熵(信息论) 可用于敏感信息(密钥、token)的检测,可以理解为字符串的混乱程度,字符越随机,熵越大。因此,设置合适的熵,可以过滤掉一些误报或者人为测试用例。
[可选] ignore_comment 参数:用于指定是否忽略注释代码,可选值:True、true、False、false,默认 False。例如:
ignore_comment=True。[可选] file_scan 参数:用于指定是否扫描文件名称,可选值:True、true、False、false,默认 False。例如:
file_scan=True。[可选] include 参数:用于指定分析的文件范围,使用 unix 的文件匹配格式(通配符格式),多项使用英文分号
;分隔。例如:include=path/to/dir;path/to/\*.cpp。[可选] exclude 参数:用于指定不分析的文件范围。格式同 include 参数。
提示
include、exclude 参数采用 Glob-Style 的匹配模式,除了 ** 用来匹配零或多个目录,本工具会默认匹配前后目录,如:
exclude=*.py:会忽略诸如 main.py、src/main.py、main.py/install.sh 等文件。exclude=tests:会忽略诸如 tests/test.py、a/tests/b/test.py 等文件。include=main.*:会只扫描诸如 src/main.py、app/main.go 等文件。include=src+exclude=src/lib:则会只扫描诸如 src/main.py、src/project/proj.py;忽略诸如 src/lib/lib.py、src/lib/package/pack.js 等文件。
规则示例:
用于检测项目代码中是否存在明文的 github token,是则会检出风险。
regex=((ghp|gho|ghu|ghs)_[0-9a-zA-Z]{36})
msg=found github token: %s
ignore_comment=false
exclude=tests/*
match_group=1
entropy=3.5
环境变量参数
REGEXSCANNER_ALL:默认工具会限制扫描文件的后缀,只会扫描通用的后缀文件,如果需要扫描所有文件,需要在分析方案添加环境变量:REGEXSCANNER_ALL=true。以下是默认会扫的文件后缀清单:CPP_EXT = ('.c', '.cpp', '.h', '.hpp', '.m', '.mm', '.swift', '.go', '.cxx', '.cc', '.cs', '.json', '.proto', '.pch', '.mod') HTML_EXT = ('.html', '.htm') XML_EXT = ('.xml', '.vcproj', '.vcxproj') JAVA_EXT = ('.java', '.kt') LUA_EXT = ('.lua',) PY_EXT = ('.py',) JS_EXT = ('.js', '.jsbundle', '.jsx', '.ts', '.tsx', '.vue', '.css') PHP_EXT = ('.php',) RUBY_EXT = ('.rb',) RUST_EXT = ('.rs',) SCALA_EXT = ('.scala',) SQL_EXT = ('.sql',) DART_EXT = ('.dart',) YAML_EXT = ('.yml', '.yaml', '.toml', '.conf', '.properties', '.sh') MARKDOWN_EXT = ('.md',) DOCKFILE_EXT = ('dockerfile',) NPMRC_EXT = ('.npmrc',) INI_EXT = ('.ini',) OTHER_EXT = ('.tpc', '.idl', '.txt', '.gradle')