前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Xcheck之Golang安全检查引擎

Xcheck之Golang安全检查引擎

原创
作者头像
腾讯代码安全检查Xcheck
修改2020-12-02 11:37:31
1.2K0
修改2020-12-02 11:37:31
举报
文章被收录于专栏:Xcheck代码安全检查

0x00 Golang安全检查引擎

Go语言近几年开始越来越流行,凭借其强大的性能和跨平台的优势,对web和后台开发都是一个不错的选择。Xcheck支持Golang的代码安全检查,覆盖常用web框架,包括golang内建的net/http,以及一些流行的第三方web框架:gin,iris,mux,httprouter,fasthttp,fasthttprouter等。自然,也可以通过Xcheck的扩展能力,来适配其他框架。目前覆盖的Web漏洞类型包括但不限于以下:

  • 命令注入
  • SQL注入
  • URL跳转
  • 路径穿越
  • SSRF
  • ...

0x01 检测数据

我们在github上面选取了10000个golang项目进行安全检查,发现其中存在风险的项目182个,风险数317个,误报数19个,整体误报率6%左右。

项目

数据

Github项目数

10000

存在风险的项目数

182

问题总数

317

误报数

19

误报率

6%

漏洞类型分布
漏洞类型分布

使用Xcheck扫描内部golang项目19w次任务,其中耗时小于1分钟的项目占18万个,换句话说,90%以上的项目都在1分钟内扫描完毕。

0x02 检测案例

SQL注入漏洞

这是整理的部分golang进行sql查询时不正确地使用方式会引发风险的函数。

package

函数

database/sql

Query,QueryRow,QueryContext,QueryRowContext

gorm

Exec,Raw,Select,Where

xorm

Query,QueryString,SQL,Where

以国外安全团队NemoSecurity在github的一个golang靶场项目GoVWA(https://github.com/0c34/govwa.git)为例:

检测结果
检测结果

靶场中共存在两个sql注入漏洞,以其中一个为例,触发漏洞的所用的package为database/sql。数据流分析如下:

  1. /vulnerability/sqli/sqli.go 72行 引入污点:uid := r.FormValue("uid")
  2. /vulnerability/sqli/sqli.go 74行 获取一个profile的实例p:p := NewProfile()
  3. /vulnerability/sqli/sqli.go 79行 调用p的方法UnsafeQueryGetData: err := p.UnsafeQueryGetData(uid)
  4. /vulnerability/sqli/function.go 37行 拼接sql语句
  5. /vulnerability/sqli/function.go 41行 将拼接的sql参数进行查询。

vulnerability/sqli/sqli.go 引入污点
vulnerability/sqli/sqli.go 引入污点
vulnerability/sqli/function.go 触发漏洞
vulnerability/sqli/function.go 触发漏洞

这里我们也使用了github开源高星项目的gosec代码扫描工具进行检测,很遗憾,工具报错了未能得到结果。

命令注入

对于命令注入,Golang引擎原生支持识别os/exec相关的函数和结构体,包括exec.Command,exec.CommandContext以及相关实际执行函数CombinedOutput/Output/Run/Start。

package

执行函数

os/exec

CombinedOutput,Output,Run,Start

举一个实际项目的案例,图中317行是一个污点,318行是一个Cmd的实例,339行才是真实执行。值得注意的是,如果没有执行Start函数(319行),是不会报漏洞的。

命令注入图1
命令注入图1
命令注入图2
命令注入图2

URL跳转和SSRF

对于扫描引擎来说,这两类漏洞的检测除了支持一些相关触发函数的识别外,难点在于对url字符串的精确判断和分析,如果能做到这个效果,就能降低一些误报。

来看一个SSRF案例,Xcheck识别出这是一个SSRF问题,但是在最后的触发点,“过滤”字段提示这个url的host部分不可控制,其实无法造成危害,对于这种无法被利用的风险,Xcheck给出的漏洞级别是“提示(可忽略)”,这也是Xcheck精准识别的一个体现。

SSRF
SSRF

0x04 结束语

随着golang在web后台开发等领域越来越流行,goalng的安全是个不可忽视的关注点。网上关于golang的代码审计文章也较少,后续xcheck也会持续输出golang代码审计的一些文章,共同学习进步。


想了解Xcheck更多信息或者代码安全审计相关技术欢迎关注xcheck公众号~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 Golang安全检查引擎
  • 0x01 检测数据
  • 0x02 检测案例
    • SQL注入漏洞
      • 命令注入
        • URL跳转和SSRF
        • 0x04 结束语
        相关产品与服务
        应用安全开发
        应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档