Gosec是一个通过扫描Go AST来检查源代码是否存在安全问题的开源项目
gosec分析Go源代码,查找可能导致安全问题的常见编程错误。
版本: 2.19.0
GIT标记: v2.19.0
构建日期: 2024-02-12T09:15:52Z
用法:
# 检查单个包
$ gosec $GOPATH/src/github.com/example/project
# 检查当前目录下的所有包,并将结果保存为json格式
$ gosec -fmt=json -out=results.json ./...
# 运行特定的规则集(默认情况下将运行所有规则):
$ gosec -include=G101,G203,G401 ./...
# 运行除提供的规则之外的所有规则
$ gosec -exclude=G101 $GOPATH/src/github.com/example/project/...
选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| -color 将带有颜色的文本格式报告打印到标准输出(默认为true) -concurrency int 并发值 (默认为8) -conf string 可选配置文件的路径 -confidence string 过滤掉置信度低于给定值的问题。有效选项是:低、中、高(默认"低") -exclude value 要排除的规则ID列表,以逗号分隔。(参见规则列表) -exclude-dir value 从扫描中排除文件夹(可多次指定) -exclude-generated 排除生成的文件 -fmt string 设置输出格式。有效选项是:json、yaml、csv、junit-xml、html、sonarqube、golint、sarif或text(默认为"text") -include string 要包含的规则ID列表,以逗号分隔。(参见规则列表) -log string 将消息记录到文件而不是标准错误 -no-fail 即使发现问题也不会失败扫描 -nosec 设置时忽略#nosec注释 -nosec-tag string 设置#nosec的替代字符串。一些例子:#dontanalyze、#falsepositive -out string 设置结果的输出文件 -quiet 只在发现错误时显示输出 -r 将"./..."附加到目标目录。 -severity string 过滤掉严重程度低于给定值的问题。有效选项是:低、中、高(默认"低") -show-ignored 如果启用,则会打印被忽略的问题 -sort 按严重程度对问题进行排序(默认为true) -stdout 将结果输出到标准输出,同时也将其写入输出文件 -tags string 以逗号分隔的构建标记列表 -terse 只显示结果和总结 -tests 扫描测试文件 -track-suppressions 输出抑制信息,包括其种类和理由 -verbose string 在将结果输出到标准输出时覆盖输出格式,同时将它们保存在输出文件中。 有效选项是:json、yaml、csv、junit-xml、html、sonarqube、golint、sarif或text -version 打印版本信息并以退出代码0退出
|
规则:
G101: 查找硬编码的凭据
G102: 绑定到所有接口
G103: 审核不安全块的使用
G104: 审核未检查的错误
G106: 审核ssh.InsecureIgnoreHostKey函数的使用
G107: 将Url提供给HTTP请求作为有污染的输入
G108: 自动暴露分析端点
G109: 将strconv.Atoi结果转换为int32/int16
G110: 在解压缩时检测使用io.Copy而不是io.CopyN
G111: 将http.Dir('/')检测为潜在风险
G112: 检测未配置ReadHeaderTimeout作为潜在风险
G113: 在math/big中使用Rat.SetString时溢出
G114: 使用不支持设置超时的net/http serve函数
G201: 使用格式字符串构造SQL查询
G202: 使用字符串连接构造SQL查询
G203: 在HTML模板中使用未转义的数据
G204: 审核命令执行的使用
G301: 创建目录时使用了不当的文件权限
G302: 创建文件或使用chmod时使用了不当的文件权限
G303: 使用可预测的路径创建临时文件
G304: 文件路径被提供为受污染的输入
G305: 解压缩归档文件时出现文件路径遍历
G306: 写入文件时使用了不当的文件权限
G307: 使用os.Create创建文件时使用了不当的文件权限
G401: 检测DES、RC4、MD5或SHA1的使用
G402: 查找不当的TLS连接设置
G403: 确保最小RSA密钥长度为2048位
G404: 不安全的随机数源(rand)
G501: 导入黑名单:crypto/md5
G502: 导入黑名单:crypto/des
G503: 导入黑名单:crypto/rc4
G504: 导入黑名单:net/http/cgi
G505: 导入黑名单:crypto/sha1
G601: RangeStmt中隐式内存别名</document_content>
快速安装
在此下载最新的release,如gosec_2.8.1_darwin_amd64.tar.gz,解压后,将二进制文件移动到GOBIN目录下
使用
进入想要扫描的代码目录下, 执行 gosec -fmt=json ./...
该命令的意思是:检测当前目录下的所有的代码,并以Json的格式输出到终端。
出去json,支持的格式还有text, yaml, csv, sonarqube, JUnit XML, html
可使用gosec -fmt=json -out=自定义文件名.json ./...,将扫描结果输出到指定文件
可使用 gosec -include=G101,G203,G401 ./...指定使用某几个规则
可使用 gosec -exclude=G303 ./...排除了某几个规则
具体规则如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| ◈ G101:查找硬编码凭证
◈ G102:绑定到所有接口
◈ G103:审计 unsafe 块的使用
◈ G104:审计未检查的错误
◈ G106:审计 ssh.InsecureIgnoreHostKey 的使用
◈ G107: 提供给 HTTP 请求的 url 作为污点输入
◈ G108: /debug/pprof 上自动暴露的剖析端点
◈ G109: strconv.Atoi 转换到 int16 或 int32 时潜在的整数溢出
◈ G110: 潜在的通过解压炸弹实现的 DoS
◈ G201:SQL 查询构造使用格式字符串
◈ G202:SQL 查询构造使用字符串连接
◈ G203:在 HTML 模板中使用未转义的数据
◈ G204:审计命令执行情况
◈ G301:创建目录时文件权限分配不合理
◈ G302:使用 chmod 时文件权限分配不合理
◈ G303:使用可预测的路径创建临时文件
◈ G304:通过污点输入提供的文件路径
◈ G305:提取 zip/tar 文档时遍历文件
◈ G306: 写到新文件时文件权限分配不合理
◈ G307: 把返回错误的函数放到 defer 内
◈ G401:检测 DES、RC4、MD5 或 SHA1 的使用
◈ G402:查找错误的 TLS 连接设置
◈ G403:确保最小 RSA 密钥长度为 2048 位
◈ G404:不安全的随机数源(rand)
◈ G501:导入黑名单列表:crypto/md5
◈ G502:导入黑名单列表:crypto/des
◈ G503:导入黑名单列表:crypto/rc4
◈ G504:导入黑名单列表:net/http/cgi
◈ G505:导入黑名单列表:crypto/sha1
◈ G601: 在 range 语句中使用隐式的元素别名
|
参考:
免费开源的代码审计工具 Gosec 入门使用
使用 gosec 检查 Go 代码中的安全问题
golang的一些安全问题
原文链接: https://dashen.tech/2010/03/13/Go安全扫描工具/
版权声明: 转载请注明出处.