本文为看雪论坛优秀文章
看雪论坛作者ID:Heavenml
最近在工作中遇到不少的go语言编写的恶意样本,也整理了在分析go恶意样本的一些基础知识,各位同学可以先看看这篇文章《GO恶意样本分析》,对go语言的分析基础有一定了解。
在平常的工作中遇到的情况来看,go语言的恶意样本可以分为如下的三个等级以及对应的等级的说明。
非常简单:未去除符号以及未混淆的的恶意软件。
一般简单:去除符号的恶意软件。
困难:混淆的恶意软件。
我找了几个对应的样本,大家可以一起学习学习。
WellMesss是疑似具有俄罗斯背景的APT组织,在今年披露的该组织的一个样本(Botlib)是使用go语言编写的,具有Linux和Windows双平台的版本,在这里分析了Linux版本的Botlib。
md5:4d38ac3319b167f6c8acb16b70297111
通过函数名,我们可以很清楚的看到,该样本是未被去除符号的。通过函数名和源代码路径可以对该样本的功能有一个基本的认识。
<;head;>3139322e3136382e35362e3132387c7c72656d6e75787c72656d6e7578e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855/p<;head;><;title;>a:1_0<;title;><;service;>p<;service;>
在获取C2下发的数据后,解密后通过service字段的值执行不同的任务
Zebrocy downloader是APT28组织的一个用于初始攻击的攻击组件,常常和诱饵文档被打包都一起,诱惑目标用户点击执行,在2018年左右,APT28使用go语言写了第一个版本的zebrocy downloader版本,这也是我分析的第一个go语言的恶意程序。样本md5:6bc5f53d4082f12dd83aca45bae81e64
go zebrocy 此版本使用时间范围在2018年左右,针对欧洲的外交机构进行攻击。功能方面与zebrocy的其他的版本无大的差别。在查阅了相关的信息确认后,这应该APT28首次将go语言纳入武器库开发语言,也是首次go zebrocy用于实际的攻击。
go zebrocy将符号信息已经去除掉了,借用ida的插件IDAGolangHelper对go zebrocy符号进行还原。
2. 通过cmd执行tasklist,获得系统进程信息。
3. 通过cmd执行wmic命令,获取系统磁盘信息。
4.通过调用第三方截图包screenshot,获取截图数据。
最后利用post对相关数据进行上传,并根据C2返回的数据利用cmd执行系统命令。
IDAGolangHelper利用的是golang的运行时符号,在go编译的二进制文件中,存在一张表(pclntable)用于记录go二进制文件的运行时符号。在go编译的elf文件中,存在一个pclntable section用来存储这这张表。
1.funcs
typedef struct Funcs
{
DOWRD func_entry;
DOWRD func_struct_offset;
}funcs;
typedef struct Pclntab
{
DWORD magic; //0x0FFFFFFFB
WORD reserve; //0x0000
Byte ptrsion;
DWORD func_numbers;
funcs funcs[func_numbers];
}pclntab;
package main
import(
"fmt"
"io/ioutil"
"net/http"
)
var url = "https://www.baidu.com/";
func httpget() string {
client := &http.Client{}
req, _ := http.NewRequest("GET",url,nil)
req.Header.Set("Connection","Keep-Live")
res,err := client.Do(req)
if err != nil{
fmt.Println("do error\n")
return "NULL"
}
defer res.Body.Close()
body,err := ioutil.ReadAll(res.Body)
return string(body)
}
func main(){
var body = httpget()
fmt.Println(string(body))
}
看雪ID:Heavenml
https://bbs.pediy.com/user-home-771815.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!