golang 代码安全审计

前言

Go语言主要用作服务器端开发语言,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。Go语言是强类型语言,它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。

由于Go语言代码审计资料较少,这里就把最近学习的对Vulnerability-goapp项目的审计过程分享一下。整个审计过程结合代码安全扫描工具和人工审计,期间也发现代码安全审计工具的漏报误报问题,以下将会细述。

审计对象

经过在github上查找,发现https://github.com/Snow-HardWolf/Vulnerability-goapp这个项目适合入门,涵盖了常见的go web安全漏洞。Gitclone之后在goland IDE里打开看到如下项目结构:

Asserts目录是静态资源文件,跳过。

Pkg目录是使用go实现的业务逻辑代码,重点关注。

Runenv是数据库配置文件和生成数据库的脚本,简单看下就好。

Trap目录是一个CSRF漏洞的演示,重点关注。

Views目录是前端视图页面,简单看下就好。

代码安全扫描

首先我们使用代码安全扫描工具扫描,发现4类高危,2类中危漏洞,我们分别进行验证。

命令注入-数据流分析

在pkg/admin/admin.go的52行发现命令注入,直观可以看出取出cookie的内容拼接命令语句执行。

我们看一下污点跟踪过程:

我们通过污点跟踪分析过程可以确认这是一个高危漏洞。

接下来在实际环境中演示一下,通过nc接收数据确认可执行shell命令。

不安全的传输—语义分析

在main.go的156行,使用了http协议进行通信,存在明文传输数据的问题

秘钥硬编码-代码结构分析

在asserts/js/bootstrap.bundle.js文件的360行发现秘钥硬编码,不过人工确认这里不是秘钥,是工具的误报

用户隐私泄露-数据流分析

在pkg/admin/admin.go的86行检测到用户隐私泄露,这里看到直接把用户输入的密码打印到控制台了,是一种不安全的处理方式。

cookie未启用httponly-代码结构分析

在pkg/admin/admin.go的110行检测到cookie未启用httponly,低危漏洞。

不安全的随机数-代码结构分析

在asserts/js/bootstrap.bundle.js文件的135行发现使用了伪随机数,不过这个漏洞可以忽略,危害太小了。

人工代码审计

经过对代码扫描工具识别出的漏洞进行分析,我们发现存在一些误报,那么是否存在漏报呢,毕竟我们工具的扫描规则只有400多条,我们接下来通过人工分析代码发现可能存在的漏报

XSS-数据流分析

在pkg/post/post.go里我们发现Posts结构体,内有Uids、UserPosts、Created_at、UserImages结构体变量,猜测这里跟论坛发帖有关,我们人工进行一下污点数据跟踪分析:

通过ShowAddPostPage的post请求传入帖子内容写入数据库,然后通过ShowAddPostPage的get请求读出数据库内容写入前端页面,整个过程没有做特殊字符的净化处理,可以确定这里存在存储XSS中危漏洞。

我们在实际环境演示一下漏洞:

输入xss payload保存后再次刷新页面触发xss弹框

反射xss低危漏洞分析过程类似,不再重复描述。

Sql注入-数据流分析

在pkg/search/search.go里我们发现searchPosts方法,sql查询是直接拼接sql语句:

在拼接前并未对用户输入做净化处理,因此可确认这是一个sql注入的高危漏洞。

我们在实际环境中演示一下这个问题:

Csrf-代码结构分析

对于CSRF的分析我找了两处写数据库的接口进行尝试,一个接口是存在csrf,一个接口不存在csrf,首先看修改密码的接口:

在pkg/user/usermanager.go里我们发现ConfirmPasswdChange方法,不过这里进行了referer()的检查,在实战中referer校验虽然不像加token那样可以完全避免csrf,但伪造referer成本较高,所以这里不作为审计发现漏洞。

而在另一个更新用户个人信息的方法里却忽视了对referer的校验,可以确认存在csrf漏洞。

我们在实际环境中进行演示确实存在csrf漏洞。

任意文件上传-数据流分析

在pkg/image/imageUploader.go里发现处理上传文件的方法,没有对文件名和文件内容进行校验

可以上传任意文件,不过由于web路由的限制好像解析不了go语言代码,解析静态资源文件是可以的,这里尝试着目录穿越写文件到其他目录。

以下在实际环境中进行漏洞演示:

利用条件挺苛刻,需要等着重启crontab服务,加载定时任务

越权-数据流分析

以pkg/user/usermanager.go为例来看,这里的功能是展示用户个人信息,通过取出cookie里的uid在数据库进行查询得到用户基本信息,在查询前有对cookie的有效性进行校验,避免修改cookie实现水平越权。

CheckSessionId里有一个ValidateCorrectCookie的方法校验cookie

ValidateCorrectCookie通过将用户输入的cookie和后台数据库存储的信息进行比对,如发现uid被篡改就返回404页面。

经过在实际环境验证,在读写操作数据库操作前使用cookie.CheckSessionID()对cookie做校验是不会存在越权问题,而这个安全校验一旦去掉,越权问题就出现了。

服务器敏感信息泄露-代码结构分析

数据库异常,go的异常都有捕获在服务端打印log,没有向前端web页面返回,web页面报错统一跳转自定义404页面,服务器敏感信息泄露问题不存在。

如下是main.go里统一的记录http异常日志的代码:

不安全配置-配置文件分析

web路由配置正常,没有引用不安全的第三方库。

资源泄露、空指针分析-控制流分析

数据库、文件等资源文件使用完成后及时释放,未发现异常的控制流。

总结

本次审计经过语义分析、数据流分析、代码结构分析、配置文件分析和控制流分析,共审计14类常见安全漏洞,发现存在10类漏洞,另外4类漏洞确认不存在,汇总信息如下:

目前代码安全扫描工具存在对golang的规则数量比较少,存在漏报问题,另外还有一定的误报,仍有比较大的优化提升空间。

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BlueBird Website Statistic 2 即蓝鸟网站流量统计软件,是基于 PHP 及 文本方式的应用程序。 本流量统计程序采用文本方式存储数据(对于数据库版本将在以后推出); 运用先进的数据存储结构和程序算法;使用限制日 IP 访问的方式,不仅可 以准确的反映网站访问的真实情况,而且也相对节约了系统资源。 在这个版本中继承了以往版本的优秀之处,修改了全部已知错误。可提供 网站运行期间的年、月、日、24小时及星期流量统计,并可提供历史数据查 询;更增加了浏览者 IP 地址、来访页面、浏览者使用的软件(浏览器和操 作系统)等统计数据。管理员还可以对各种统计资料页面进行锁定,使重要 信息不至于外泄。 本程序为免费程序,仅提供给个人使用,不得用于任何商业用途。用户可 对源代码进行部分的修改、美化,但您不可以从本软件中去掉其版权声明; 并保证为其代码复制版权声明。您有义务向作者提供修改后的代码。在未经 作者本人同意或本站授权,任何人不得擅自将修改后的版本提供下载。 如果在使用中您发现了任何 BUG 或者有好的建议,请尽快反馈给我们。 ================= 安装须知 ================= 将软件解压缩,上传到主页上,默认的数据存储目录是 ./_Data 需要保证该 目录和其下的子目录权限为 777 ;默认的 IP 地址数据库是 ./IP_DATA 。 不建议修改。 配置:在 config.php 中按要求配置即可。默认的帐号 admin 密码为 pass 。 使用:将 stat.php 文件包含在所要统计的网页中。如: include "stat.php"; 对于 JavaScript 的调用还没有时间写。也恨简单,只要在将 stat.php 输出为 JavaScript 格式就行了。 高级:在 main.php 中修改 $StatTypes 参数,设置安全页面。0 表示该页 不可见,只有管理员可见;1 为任何人都可见。如默认的“来访者详 细信息【最近 50 条】”设为 0 你可以看一下效果。 ========================= BlueBird 2 最新特色 ========================= A. 重写全部代码,使程序更紧凑,运行效率更高; B. 全新页面操作风格,方便实用; C. 修改了文本数据格式,使得非法用户无法用浏览器直接获取; D. 增加了 1864 条 IP 地址的地理所在地的数据信息,使来访者“无所盾藏”; E. 增加管理员模块,可以控制各种统计数据页面是否公开; F. 采用增量数据存储方式,对于重要统计数据可以进行历史查询; G. 更新操作系统、浏览器的类型判别模块,可识别 90% 以上的主流软件 BlueBird (蓝鸟)网站流量统计 更新历史 History BlueBird (蓝鸟)网站流量统计 常见问题 FAQ BlueBird (蓝鸟)网站流量统计 自述文件 Readme ============= 程序下载 ============= 安装环境: PHP 4.0 操作系统: Windows/Uinx 文件尺寸: 120k 更新时间: 2004.2.20 下载地址:http://xpower.jilinfarm.com/ http://hotage.myrice.com/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值