文章插图
在过去的两个月里,我一直在研究采用Go语言编写的恶意软件 。
【针对一款采用GO语言编写的新型Linux勒索软件的分析】Go,又称Golang,是谷歌公司开发的一种编程语言,如今正在被越来越多的恶意软件开发者所使用的 。
在这篇文章中,我就将针对一款采用GO语言编写的新型linux勒索软件进行分析 。
GO二进制文件概述这里分析的样本,是一个被剥离了编译和调试信息的ELF可执行文件,这使得逆向工程变得困难 。值得庆幸的是,一款补救工具(REDRESS: https://go-re.tk/redress/)可以为我们提供帮助 。
下面是使用参数“-src”分析此样本的输出:
文章插图
图1.恶意软件的源代码
通过图1,我们可以看出该恶意软件由三个Go文件组成 。
此外,我们还可以看到它所有的函数以及它们的代码行号 。根据一些函数的名称,我们大致就能判定,它应该是一种勒索软件 。
源代码仅有300多行,说明这款勒索软件并不复杂,可能还处于初始开发阶段 。
接下来,就让我们在调试器中开始动态调试吧 。
在这里,我使用的是Radare2(Radare2: https://rada.re/r/) 。这是因为对于分析被剥离了的Go二进制文件而言,它比GDB更合适 。
Go二进制文件的动态分析我在Radare2中发出命令“aaa”以执行自动分析,在图2中,我们可以看到Radare2很好地还原并识别了函数名和符号名 。
文章插图
图2.使用Radare2还原的函数名称和符号
如你所见,函数init()在主函数之前执行,函数check()在函数init()中调用 。
在函数check()中,勒索软件首先会通过向hxxps://ipapi.co/json/发送一个http请求来获取受感染主机的位置信息,目的是避免感染一些特定国家的用户,如白俄罗斯(BY)、俄罗斯(RU)和乌克兰(UA) 。
文章插图
图3.过滤掉白俄罗斯(BY)、俄罗斯(RU)和乌克兰(UA)
在main()函数中,它将首先删除Go二进制文件,然后调用函数randSeq()生成一个随机AES密钥,其大小为0x20字节,如下图所示:
文章插图
图4.生成随机AES密钥
接下来,它将调用函数makesecret(),目的是使用以二进制形式硬编码的RSA公钥来加密AES密钥 。在这个函数中,它通过调用函数EncryptPKCS1v15以使用RSA加密和PKCS#1 v1.5中的填充方案对给定的AES密钥进行加密 。
文章插图
图5. Go二进制文件中的硬编码RSA公钥
使用RSA加密后的数据如下:
文章插图
图6.使用RSA加密后的AES密钥
接下来,它将在Golang包编码/base64中调用函数EncodeToString,以使用base64算法对先前加密的数据进行编码 。
文章插图
图7.使用Base64编码的AES密钥
然后,它将为解密的README文件(赎金票据)形成一个缓冲区,如图8所示:
文章插图
图8.解密的README文件的缓冲区
我们可以看到,加密的AES密钥以Base64编码的形式被写入了解密的README文件中 。
在加密文件之前,它还会通过发出命令“service stop [pname]”或“systemctl stop [pname]”来杀死以下进程 。
文章插图
图9.目标服务
当它尝试停止Apache2.service时,会弹出一个标题为“Authentication Required(需要身份验证)”的对话框,提示用户输入系统密码以完成此操作 。
文章插图
图10. apache2.service身份验证对话框
最后,它将通过在Golang包“path/filepath”中调用函数Walk(根字符串,walkFn WalkFunc)来遍历根目录“/”,然后开始加密文件 。
文章插图
图11.遍历根目录并加密文件
值得一提的是,该勒索软件还包含一份加密目录黑名单,目的是避免加密这些目录下面的文件 。
推荐阅读
- python渗透库大集合
- 分享一款免费的Mac软件卸载工具:AppCleaner
- Mac软件序列号工具
- 碧螺春采用什么种植方式
- 可代替powerdesigner 分享一款开源数据库建模工具--PDMan
- 一款让你拜服的百度官方数据分析工具
- 下腹部针对性训练,6个动作,简单方便,帮你紧实小腹变平坦
- Google 按图搜索的原理
- 小壶茶采用创新包装适应消费升级
- 强烈推荐一款MySQL语句优化辅助工具,值得收藏