GO安全
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
代码混淆
特征清除
相关文章
相关工具
- boy-hack/go-strip - 清除 Go 编译时自带的信息
# 打印出读取的信息 go-strip -f binary.exe # 消除Go的编译信息 go-strip -f binary.exe -a -output new.exe
禁用符号表和调试信息
虽然 Go 是编译成二进制后运行的,但其默认编译机制(Release With Debug Info)会泄漏一些信息。
默认情况下, Go 程序在运行出错时,会输出如上报错信息(在哪个线程,哪个文件,哪个函数,哪行出的错)。
这两个信息可以在编译时进行禁用:
go build -ldflags "-s -w” <package>
隐藏环境变量
报错信息中目录信息的来源是编译器运行时所处环境的环境变量。
编译时,Go 会从 $GOPATH 寻找我们的代码,从 $GOROOT 提取标准库。在打包时将 $GOPATH 改写为 $GOROOT_FINAL 并作为调试信息的一部分写入目标文件。
要隐藏真实的 $GOPATH ,需要在另外一个目录里对真实的 $GOPATH 创建一个软链接,编译器在寻找时就会把软链接的目录名写到最终文件里,从而达到隐藏目的。
ACTUAL_GOPATH = "~/Project"
export GOPATH = '/tmp'
export GOROOT_FINAL = $GOPATH
[ ! -d $GOPATH ] && ln -s "$ACTUAL_GOPATH" "$GOPATH"
[[ ! $PATH =~ $GOPATH ]] && export PATH=$PATH:$GOPATH/bin
Go代码审计
Go代码审计
免责声明
本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
环境搭建
推荐 goland 配置远程 debug 调试,参考笔记 goland 远程调试
相关工具
- praetorian-inc/gokart - A static analysis tool for securing Go code
go install github.com/praetorian-inc/gokart@latest gokart scan <directory> # 扫描远程项目 gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -v # 指定分支 gokart scan -r https://github.com/ShiftLeftSecurity/shiftleft-go-demo -b actions_fix
- madneal/sec-dog - goland sca 插件
相关文章
相关靶场
硬编码
通用关键词
命令执行
审计函数
exec.Command
点击关注,共同学习!
安全狗的自我修养