一、简介
RedXOR是一个针对Linux终端和服务器的新的复杂后门程序,在2021年2月24号首次在VT上被上传以及发现。这些样本在 VirusTotal 中的检测率较低,且大多是从印度尼西亚和台湾上传的。RedXOR使用名为Adore-ng的开源LKM rootkit来隐藏其进程。
二、行为分析
首先调用fork函数,创建子进程并让父进程直接退出,使父进程被init接管成为僵尸进程去执行以后的操作。通过判断用户是否为root用户还是普通用户,选择用户根目录下创建一个“.po1kitd.thumb”隐藏目录。
接着分析AddAuto函数,使用readlink读取当前进程的源路径可以获取当前程序的绝对路径。如果当前进程的二进制文件不叫”po1kitd-update-k“,则重命名为它。
在创建一个名为”po1kitd-update.sh“的shell脚本,内容为用sh来执行”.po1kitd-update-k“文件,设置为开机执行,并在之后执行它。
尝试rootkit,通过insmod命令将“po1kitd.ko”文件中的内容加载到内核中。
通过在/proc目录下创建po1kitd文件再删除,判断KLM rootkit是否已经生效。根据Google知道该RAT使用的rootkit是开源的adore-ng(“CheckLKM”逻辑几乎与“adore-ng”rootkit中的adore_init函数相同)。而在adore-ng中,已经hook掉了具体proc文件系统的lookup回调函数为adore_lookup,将隐藏进程的操作放到该lookup中。创建文件的目的不是创建一个新文件,而是希望使执行流到达lookup调用。如果文件的uid和sid被设置成实现约定好的id,那么就说明该文件要隐藏。然后,该RAT将进程的suid与uid进行比较,如果不匹配或者uid为“10”,则rootkit生效了。
离开AddAuto函数,回到main函数,跟进hide_proc函数。
根据之前的分析,我们可以知道这里调用open函数是为了触发adore_lookup调用,而adore-ng发现文件的前缀为”hide-“就调用hide_proc函数,根据pid隐藏进程,从而实现进程隐藏。
该RAT将C2地址、端口、验证的用户名和密码配置存储在可执行二进制文件中。配置值由“doXor”函数解密,解密逻辑是针对字节的简单异或。其中ServerIP和Password处于被加密状态,经过doXor为解密状态,而ProxyServer、ProxyUser和ProxyPwd因为不需要用到则是相反。它们解密后的明文内容如下图所示。
main_process函数是该RAT的主要逻辑。若ServerIP与LastIP不同,则调用write_hidden_ip函数将ServerIP加密后的内容存储到“/var/tmp/.po1kitd-k3i86dfv”文件中,并复制到LastIP中。接下来便是连接C2服务器了。
该RAT使用tcp进行通信,但是通过自己定义使用类似http的形式交互。对于数据部分,该RAT使用待传数据的长度对数据进行异或后再发送。
先获取Content-Length等数字信息,之后根据这些值来接收对应长度的内容。这部分接受的数据以128个字节为处理单元,通过analysisData函数负责处理来获取整型数字或长整型。之后接收到的数据需要通过doXor函数进行解密。
后接收到的数据内容中,前两个字节为命令代码。因为一共有19个命令,这里只选其中几个介绍,其他的命令参考下文的列表。
调用Portmap函数,把RPC程序号转化为Internet的端口号。
pty 模块定义了处理伪终端概念的操作:启动另一个进程,并能够以编程方式对其控制终端进行写入和读取。创建管道,使用pty打开一个shell,通过管道来实现与shell交互。
向管道写入要执行的命令,shell的读端会收到命令并执行。
通过调用getFSYYSData函数获取目录信息,getFSYSData函数主要是通过directory函数进行信息获取和整理的,directory函数细节如下图所示。
该RAT通过调用uninstall函数擦除痕迹。
命令代码功能如下:
1. 0 调用get_sys_info函数,获取系统信息
2. 8 向文件写入一个字节的内容,并当写入长度达到要求时给文件“chmod 0777 ”
3. 9 结束进程,擦除痕迹
4. 1010 调用install_LKM函数,安装LKM rootkit
5. 2049 调用getFSYSData函数,列出目录及目录内文件的信息
6. 2054 调用send_download函数,上传文件
7. 2055 fopen,以“ab”或“wb”的形式打开文件
8. 2056 system,直接调用system执行传过来的命令
9. 2058 remove,删除文件
10. 2059 rename,重命名文件或目录
11. 2060 rmdir,删除目录
12. 2061 功能与2059相同
13. 2062 mkdir,创建目录
14. 2066 fwrite,将数据写到某个文件
15. 3000 pty.spawn('/bin/sh'),打开一个shell
16. 3058 write,借由管道将要执行的命令写入到shell中执行
17. 3999 szShellClosed = 1,关闭shell
18. 4001 调用Portmap函数,把RPC程序号转化为Internet的端口号
19. 4002 kill portmap创建的进程,关闭portmap
三、IOC
样本名称:.po1kitd-update-k
来源:https://www.tutorialjinni.com/download-redxor-backdoor-sample-1/0a76c55fa88d4c134012a5136c09fb938b4be88a382f88bf2804043253b0559f.py
MD5:2bd6e2f8c1a97347b1e499e29a1d9b7c
SHA-1:33b25277b4bc49e565bdabf2232b7c1412ce2796
SHA-256:0a76c55fa88d4c134012a5136c09fb938b4be88a382f88bf2804043253b0559f
C2地址:158.247.208.230
四、总结
如果发现在用户根目录下存在”.po1kitd.thumb”的目录,则该主机可能已经被控制了。受害者可以通过杀死来自“.po1kitd-update-k”二进制文件的进程,删除”.po1kitd.thumb”和”/var/tmp/.po1kitd-k3i86dfv”目录,以及检查“/etc/init.d/”和”/usr/syno/etc/rc.d/“目录中是否存在名为“po1kitd-update.sh”的文件,若有则删除。还要将已经加载的Adore-ng rootkit从内核中卸载下来。最后还要查看系统日志,查看“.po1kitd-update-k”程序是否有在其他地方创建文件或目录,及时清除,确保擦除所有痕迹。
end
招新小广告
ChaMd5 Venom 招收大佬入圈
新成立组IOT+工控+样本分析+AI 长期招新
原文始发于微信公众号(ChaMd5安全团队):Linux后门RedXOR