

Gosec:Go语言源码安全分析工具
source link: http://www.freebuf.com/sectool/179549.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

gosec是一个Go语言源码安全分析工具,其通过扫描Go AST(抽象语法树)来检查源代码是否存在安全问题。
许可证
根据Apache 2.0版本的License;除非符合许可,否则你将不能使用该文件。你可以 在这里 获取到一个许可证的副本。
安装
$ go get github.com/securego/gosec/cmd/gosec/...
使用
我们可以将Gosec配置为仅运行某个规则子集,如排除某些文件路径,生成不同格式的报告等。在默认情况下,Gosec将对提供的输入文件运行所有规则。要从当前目录递归扫描,你可以提供’./…’ 作为输入参数。
选择规则
默认情况下,gosec将针对提供的文件路径运行所有规则。但如果你要指定运行某个规则,则可以使用 ‘-include=’ 参数,或者你也可以使用 ‘-exclude=’来排除那些你不想运行的规则。
可用规则
G101:查找硬编码凭证 G102:绑定到所有接口 G103:审计不安全区块的使用 G104:审计错误未检查 G105:审计math/big.Int.Exp的使用 G106:审计ssh.InsecureIgnoreHostKey的使用 G201:SQL查询构造使用格式字符串 G202:SQL查询构造使用字符串连接 G203:在HTML模板中使用未转义的数据 G204:审计命令执行情况 G301:创建目录时文件权限分配不合理 G302:chmod文件权限分配不合理 G303:使用可预测的路径创建临时文件 G304:作为污点输入提供的文件路径 G305:提取zip存档时遍历文件 G401:检测DES,RC4或MD5的使用情况 G402:查找错误的TLS连接设置 G403:确保最小RSA密钥长度为2048位 G404:不安全的随机数源(rand) G501:导入黑名单列表:crypto/md5 G502:导入黑名单列表:crypto/des G503:导入黑名单列表:crypto/rc4 G504:导入黑名单列表:net/http/cgi
# Run a specific set of rules $ gosec -include=G101,G203,G401 ./... # Run everything except for rule G303 $ gosec -exclude=G303 ./...
注释代码
与所有自动检测工具一样,gosec也会出现误报的情况。如果gosec报告已手动验证为安全的,则可以使用“#nosec”来注释代码。
注释将导致gosec停止处理AST中的任何其他节点,因此可以应用于整个块或应用于单个表达式中。
import "md5" // #nosec func main(){ /* #nosec */ if x > y { h := md5.New() // this will also be ignored } }
在某些情况下,你可能还需要重新访问已使用#nosec注释的位置。那么你可以执行以下命令来运行扫描程序以及忽略#nosec注释:
$ gosec -nosec=true ./...
build标签
gosec能够将Go构建标签传递给分析器。它们可以以逗号分隔的列表提供,如下所示:
$ gosec -tag debug,ignore ./...
输出格式
gosec目前支持text,json,yaml,csv和JUnit XML的输出格式。默认情况下,结果将以stdout(标准输出)。但我们也可以使用 ‘-fmt’参数指定输出格式,以及’-out’来指定输出文件。
# Write output in json format to results.json $ gosec -fmt=json -out=results.json *.go
开发
按照此处的说明安装dep: https://github.com/golang/dep
安装最新版本的golint: https://github.com/golang/lint
Build
make
Tests
make test
发布版本
确保你已安装了 goreleaser ,然后你可以按以下方式发布gosec:git tag 1.0.0 export GITHUB_TOKEN= make release
dist文件夹中提供了该工具的已发布版本。build信息应该会被展示在usage文本中。
./dist/darwin_amd64/gosec -h gosec - Golang security checker gosec analyzes Go source code to look for common programming mistakes that can lead to security problems. VERSION: 1.0.0 GIT TAG: 1.0.0 BUILD DATE: 2018-04-27T12:41:38Z
注意,所有已发布的存档也会被同步到GitHub上。
Docker image
你可以执行一个发布版本并build docker镜像:
git tag <VERSION> export GITHUB_TOKEN=<Your GitHub token> make image
在容器中运行gosec:
docker run -it -v <YOUR LOCAL WORKSPACE>:/workspace gosec /workspace
生成TLS规则
可以从Mozilla的 TLS ciphers 建议生成TLS规则配置。
首先,你需要安装generator工具:
go get github.com/securego/gosec/cmd/tlsconfig/...
现在你可以在项目的根目录中调用go generate:
go generate ./...
这将生成一个rules/tls_config.go文件,其中包含来自Mozilla的当前ciphers建议。
*参考来源: github , FB小编 secist 编译,转载请注明来自FreeBuf.COM
Recommend
-
93
安全工具源码剖析之子域名收集
-
225
gosec -Golang Security Checker Inspects source code for security problems by scanning the Go AST. License Licensed under the Apache License, Version 2.0 (the "License"); you may not use thi...
-
17
你假笨5月前 jstat是hotspot自带的工具,和java一样也位于JAVA_HOME/bin下面,我们通过该工具可以实时了解当前进程的gc,compiler,class,memory等相关的情...
-
25
文末福利:开发者藏经阁 NO.1 前言 传统前端 App 多语言最简单的实现可以由一套响应式数据流管理系统来托管多语言...
-
4
上一节主要介绍了Linux内核中的自旋锁,知道了自旋锁是不能睡眠的,因此只适合用于短时间的保护临界区。如果需要较长时间的持有锁,就不应该再使用自旋锁了,因为这会大量消耗 cpu 的性能,大大降低整个系统的效率。不过,在Linux内核开发中,不可避免的...
-
8
开源的 c 语言网络协程库 state_thread 源码分析 仅限深圳|现场揭秘:腾讯云原生数据库架构探索与实践 >> ...
-
9
Webfinger 这是一款很小巧的工具,由Python2编写,使用Fofa的指纹库 Github地址:https://github.com/se55i0n/Webfinger 可以参考官方的截图: 这个工具的使用体验非常不友...
-
9
Go语言GC实现原理及源码分析 Posted on 2021年3月20日2021年3月22日 by luozhiyun 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:
-
4
贪吃蛇 C 语言源码与算法分析 经典的贪吃蛇游戏算法,无疑是一个较大的挑战,综合性较高,像我这种刚入门C语言的也差不多花了整整一周时间才差不多理解透彻,内部包含了较多的函数,数组,二维...
-
5
合集 - Go(1)1.从源码分析 Go 语言使用 cgo 导致的线程增长06-05 TDengine Go 连接器
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK