网站首页 > 开源技术 正文
在过去的两个月里,我一直在研究采用GO语言编写的恶意软件。
Go,又称Golang,是谷歌公司开发的一种编程语言,如今正在被越来越多的恶意软件开发者所使用的。
在这篇文章中,我就将针对一款采用GO语言编写的新型Linux勒索软件进行分析。
GO二进制文件概述
这里分析的样本,是一个被剥离了编译和调试信息的ELF可执行文件,这使得逆向工程变得困难。值得庆幸的是,一款补救工具(REDRESS: https://go-re.tk/redress/)可以为我们提供帮助。
下面是使用参数“-src”分析此样本的输出:
通过图1,我们可以看出该恶意软件由三个Go文件组成。
此外,我们还可以看到它所有的函数以及它们的代码行号。根据一些函数的名称,我们大致就能判定,它应该是一种勒索软件。
源代码仅有300多行,说明这款勒索软件并不复杂,可能还处于初始开发阶段。
接下来,就让我们在调试器中开始动态调试吧。
在这里,我使用的是Radare2(Radare2: https://rada.re/r/)。这是因为对于分析被剥离了的Go二进制文件而言,它比GDB更合适。
Go二进制文件的动态分析
我在Radare2中发出命令“aaa”以执行自动分析,在图2中,我们可以看到Radare2很好地还原并识别了函数名和符号名。
如你所见,函数init()在主函数之前执行,函数check()在函数init()中调用。
在函数check()中,勒索软件首先会通过向hxxps://ipapi.co/json/发送一个http请求来获取受感染主机的位置信息,目的是避免感染一些特定国家的用户,如白俄罗斯(BY)、俄罗斯(RU)和乌克兰(UA)。
在main()函数中,它将首先删除Go二进制文件,然后调用函数randSeq()生成一个随机AES密钥,其大小为0x20字节,如下图所示:
接下来,它将调用函数makesecret(),目的是使用以二进制形式硬编码的RSA公钥来加密AES密钥。在这个函数中,它通过调用函数EncryptPKCS1v15以使用RSA加密和PKCS#1 v1.5中的填充方案对给定的AES密钥进行加密。
使用RSA加密后的数据如下:
接下来,它将在Golang包编码/base64中调用函数EncodeToString,以使用base64算法对先前加密的数据进行编码。
然后,它将为解密的README文件(赎金票据)形成一个缓冲区,如图8所示:
我们可以看到,加密的AES密钥以Base64编码的形式被写入了解密的README文件中。
在加密文件之前,它还会通过发出命令“service stop [pname]”或“systemctl stop [pname]”来杀死以下进程。
当它尝试停止apache2.service时,会弹出一个标题为“Authentication Required(需要身份验证)”的对话框,提示用户输入系统密码以完成此操作。
最后,它将通过在Golang包“path/filepath”中调用函数Walk(根字符串,walkFn WalkFunc)来遍历根目录“/”,然后开始加密文件。
值得一提的是,该勒索软件还包含一份加密目录黑名单,目的是避免加密这些目录下面的文件。
加密算法使用的是AES-256-CFB,被加密文件将被附加扩展名“.encrypted”,README文件如图13所示:
用于执行加密的函数是EncFile(),它首先会获取目标文件的大小。如果文件小于0x986880(1,000,000)字节,它将使用AES-256-CFB算法加密所有文件数据。否则,它将读取数据的前0x986880(1,000,000)字节并将其加密,然后将原始文件的剩余数据复制到加密后文件的末尾。
结论
通过上述分析,我们可以看到这种勒索软件并不复杂,可能还处于初始开发阶段。
但是,我们应该意识到,Go语言正在被用来开发越来越多的恶意软件,各大杀毒软件厂商更是有必要注意这一点。
- 上一篇: ROP基础(1) rop rot
- 下一篇: 恶意软件制作者住手吧 你的编程风格可被跟踪
猜你喜欢
- 2024-12-15 全球年度首次行星探测任务,将由猎鹰九号开启全力模式发射入轨!
- 2024-12-15 737NG 气象雷达系统(一) 737ng气象雷达测试
- 2024-12-15 激光雷达中的激光发射与接收光学原理
- 2024-12-15 新手入门:前拨类别、安装与兼容性详解
- 2024-12-15 恶意软件制作者住手吧 你的编程风格可被跟踪
- 2024-12-15 ROP基础(1) rop rot
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)