X绒面试题
本文最后更新于:2021-10-21 上午
前言
正好拿到了一个X绒的面试题,来分析一下看看。
样本的信息
- 名称:c7d46a908d692a89f2e8e1303137f8d7a8d7e7ac
- MD5:2f02e4a81dd4ff32270ed31429fd88d1
- SHA256:b7e98515a01b4c77a5ae97742338a51b325e7362e3f2976f252afb126ad6d3fa
- 样本大小:122880字节
详细分析
火绒剑行为分析
使用火绒剑监控行为,过滤行为,只看文件创建和写入,可以看到首先创建了在C:\Program Files下创建了一个Windows Cyguof文件夹,然后在其中创建一个svchost.exe。
再过滤注册表的set value,可以看到创建了几个键值,这几个是与windows服务有关的,那么应该是创建了一个服务来实现持久化驻留。
注册表相关信息
创建的服务
伪装成svchost的样本
IDA+OD
样本全程使用LoadLibrary+GetProcAddress的方式,动态加载。
获取一些API地址
首先,会解密一些内容
其中部分密文
解密算法
解密出来的结果
第一个是C2的域名,第二个是注册表的表项名。
拼接完成一个路径C:\ProgramFiles\Windows Cyguof\svchost.exe
然后会尝试打开注册表并且查询其中键值的值
获取当前程序的运行路径,比较其是否为C:\ProgramFiles\Windows Cyguof\svchost.exe
如果是非C:\ProgramFiles\Windows Cyguof\svchost.exe这个路径,那么就会执行下面这些操作。
会根据一个算法来生成三个值在注册表中要用到的值
通过GetTickCount和一些运算生成值
进行注册表的设置,创建HKLM\SYSTEM\CurrentControlSet\Services\Wsviss uasouavk\ReleiceName,设置值为刚才生成的那个数。
注册表相关操作
然后是设置具体的服务
判断C:\Program Files\Windows Cyguof是否存在,不存在创建且使用CopyFileA复制自身到此文件夹下面,命名为svchost。
使用_access判断文件夹是否存在,如果不存在会调用CreateDirectoryA创建。
使用CreateServiceA创建服务
参数服务的参数
StartServiceA会启动服务
遍历进程,查找是否存在svchost进程
之后就ExitProcess
然后来看看如果是svchost.exe的时候
主要执行这部分操作,可以看到关键的函数主要是sub_40C920
,主要就是执行了它
首先,是提权,查看是否当前进程是否具有SeDebugPrivilege权限,如果没有,就会调用AdjustTokenPrivileges提权。
创建一个事件,通过getlasterror返回值来判断是否已经在运行,防止重复运行。
创建的事件,名为Imdgss czsyi
之后会进行网络连接,连接到C2
socket连接,域名为hask.f3322.org
上面40E990
是一个创建线程的函数,也就是CreateThread,远控部分在创建的新线程4021B0
中,关于远控部分最后再说。
在sub_408ED0
中会获取一些信息并发送,CPU的信息
经过查询,注册表HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0,里面包含的主要是CPU相关信息
getsockname获取socket信息
GetVersionExA获取操作系统版本信息
GetSystemInfo获得操作系统信息
GetDiskFreeSpaceExA获得磁盘容量信息
capGetDriverDescriptionA函数,查询了此函数后,好像是与摄像头有关的API,猜测可能是操控被控端的摄像头的。
GetTickCount获得开机到现在时间
还有一些注册表中的信息
获得的所有信息在内存中
然后会经过两次加密,再在头部加上一些东西后就会发送到服务端。
通过send函数发送内容。
通过fakenet模拟网络生成的PCAP包,可以看到具体发送的内容
远控部分
远控部分是在这个创建的线程之中
在这里可以看到当recv
函数收到数据的时候,会调用sub_4022B0
,而这个函数中是一些解密函数以及具体的远控部分,所以接收到的信息是加密的,经过解密后进入远控函数。
sub_405060
函数是接收指令,且执行操作的地方,执行的操作大概有28种
通过switch语句进行判断,并且执行相应的操作
这里的命令应该是数字。按照顺序来看,从数字1开始看
1
它会尝试访问C:\Windows\system\Consys02.dll这个文件,然后执行操作,但是这个文件现在不存在,所以这个DLL做了什么不知道,只能根据名字来进行猜测DLLFILE应该是文件相关操作。所有读取了DLL的功能,全部都是需要比较指定位置的字符串是否等于SSSSSS
和VID:2013-SV1
,并且内存加载执行的,所以没有DLL的情况下,这些功能只能通过名字来进行猜测。
2
DLLScreen应该是屏幕截图
3
DllVideo与视频相关,可能是摄像头操作,或是桌面录制
4
DllKeybo应该是键盘的记录
5
DllAudio与音频有关,可能是录音
6
DllSyste应该与系统有关
7
DllShell可能会执行一些shell命令
8
提升SeShutdownPrivilege权限,调用ExitWindowsEx注销系统
9
首先删除C:\Windows\system32\ourlog.dat
创建VBS文件且执行,名字是根据GetTickCount生成的。
VBS脚本的内容,可以看到应该是删除了原文件
10
会尝试下载一个文件
然后会尝试执行
11
会访问HKEY_CLASSES_ROOT\Applications\iexplore.exe\shell\open\command中的值
然后会执行程序
12
与上面相同
13
设置注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\生成的那个服务名字
设置其中的HOST值
14
设置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\生成的那个服务名字中的ConnectGroup值
15
创建一个EXE,接受的数据写入其中,然后执行它,exe名字也是根据GetTickCount生成
16
与上面一样
17
与上面一样,但是只会创建,不会执行,这里第三个参数是2
这里不等于2才执行
18
会实现一个弹窗,窗口内容和标题都是接收到的数据
19
会下载DLL
20
DLLSerSt,根据名字不好猜测具体作用
21
DLLSerMa
22
DllReg应该是注册表相关
23
DllDdosOpen应该是打开DDOS功能
24
关闭DDOS功能
25
开启代理,应该会拦截获取所有的上网数据
26
关闭代理
27
查找指定的进程,找到后会加密发送一些信息给服务器。
进程遍历查找
28
查找指定窗口标题的程序,找到后会加密发送一些信息给服务器。
IOCS
MD5:
- 2f02e4a81dd4ff32270ed31429fd88d1(exe)
- 31802b90fe67a46bed5f3eb0ad6bb8c7(C2地址)
URL:
- hask.f3322.org
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!