EN
lanyun
technologies
银河实验室 深谙安全之道,热衷技术创新
LABORATORIES 银河实验室

检测

兰眼告警截图

图片

 

概述

此样本为APT1家族中的一个恶意样本,属于Downloader一类。其通过解密样本中包含的加密字符串来获取恶意IP地址,并在验证连通性后,会进行命令执行,获取计算机相关信息,并发送给恶意IP,并从恶意IP中下载文件以及相关信息,根据获取到的信息进行后续操作。

 

分析

1、基本信息

图片

2、基本流程

图片

其中FUN_00402916函数对恶意IP地址进行了解密,FUN_00401406函数对网络连通性进行了验证,建立pipe管道,从恶意IP下载文件以及获取下一步操作信息,根据获取信息所做的具体操作在2.3.5中做了相应介绍。

3、关键行为

此恶意样本的主要行为都集中于下图红框中的函数内。

图片

3.1 恶意获取IP

此恶意样本通过对下图第一个红框中的字符串进行右移一位且和0x7f相与的操作,对其进行解密,通过解密得到如下恶意IP

图片

具体结果如图:

图片

兰眼检测出的网络行为:

图片

3.2 网络操作

下图红框中函数与恶意样本的网络行为相关。

图片第一红框中函数的功能为获取受害者主机名称。Internet_set_connect函数中主要使用了:InternetOpenAInternetSetOptionAInternetConnectAHttpOpenRequestAHttpAddRequestHeadersA来配置通信所需参数,最后返回值为HTTP请求句柄。

图片若未成功获取到HTTP句柄,则会进入Internet_close函数,使用InternetCloseHandle关闭所有网络通信句柄。并会进行五次尝试,每次尝试后会通过sleep函数进入一段时间的休眠期。若尝试次数超过五次且都失败,程序则会退出。

图片根据上图的判断条件uVar!=5可以得知,若在五次内成功获取句柄,则会通过CreatePipe创建一个匿名管道,并从其中获取读写管道的句柄,来为后续与子进程通讯做相应的准备。若创建匿名管道成功,则利用GetWindowsDirectoryA获取Windows文件夹路径,并在其后拼接字符串\tasks,拼接结果如下:

图片

随后使用SetCurrentDirectoryA,随后将此恶意样本进程的目录更改为C:\\Windows\\tasks,并输出连接成功:

图片

3.3 建立管道获取信息

下图红框中的函数主要为建立管道,读取其中信息并发送。

图片继续向下,我们将目光聚焦于函数FUN_00401b26。

图片其通过PeekNamedPipe来将匿名管道中的数据读取到缓冲区,再通过ReadFile将数据从缓冲区中读出。通过拼接将获取到的信息保存在sVar2中,再通过Internet_sent将数据发送出去。若是失败程序会休眠一段时间,失败的上限次数是6次,当失败次数超过6次后,其会跳转到LAB_00401872

图片可以看到其功能就是关闭各种句柄,返回到主函数,也就意味着程序退出了。

3.4 从恶意IP获取信息

如果成功建立管道获取信息,及连接到恶意IP,则会进入到FUN_0040138f中。

图片此函数会通过InternetReadFile从Httpopenrequest函数打开的句柄中(恶意IP)读取数据。若成功读取数据,我们将目光聚焦于函数FUN_00401a0b。

图片下图为FUN_00401a0b的内层函数,可以看到其内层函数对‘\0’、‘\r’、‘\n’这些字符进行寻找,通过这些字符对获取到的信息进行分割。

图片每分割出一条命令就回到外层函数进行对应操作,外层函数通过do-while循环将所有命令执行完成后,跳转到LAB_00401872完成收尾工作。下面会对LAB_004016e3和LAB_004017fc中做了哪些操作进行分析。

3.5 LAB_004016e3和LAB_004017fc所做操作

在case0中我们聚焦Get_cmd这个函数。

图片Get_cmd函数内容如下:

图片其中FUN_00401aeb的功能是检查当前控制台的显示模式,该样本通过不同的返回值BVar1,进行不同的处理。首先其会使用第二个红框中的ExpandEnvironmentStringsA函数对环境变量进行设置,其中第一参数%ComSpec%的功能为打开一个终端,若是环境变量设置成功,则返回值不为0,其会根据返回值DVar2对下一步操作进行选择。若返回值DVar2为0,则会获取system32文件夹路径,并将cmd.exe拼接在其后,组成命令行程序的所在路径。

图片若成功则会进行如下操作:

图片其先对路径进行拼接,得到如下路径:

图片其会根据cmd路径,利用CreatProcessA函数来启动cmd。

图片下面再将目光聚焦于函数Get_servicesinfo

图片其先通过CreateToolhelp32Snapshot来拍摄程序运行的指定过程,堆,模块和线程的快照。接下来使用Process32First来检索系统快照中遇到的第一进程信息,若检索成功,则使用Process32Next去检索下一个快照信息,并将这些信息拼接起来。

图片若检索快照失败,则会GetLogicalDrives来检索代表当前可用的磁盘驱动器bitmask,之后会使用GetDriveTypeA来确定磁盘驱动器的类型是可移动的、固定的、RAM磁盘还是网络驱动器,并将获得信息保存起来。

图片接下来会使用GetVolumeInformtionA函数来检索有关文件系统与指定根目录关联的卷的信息,并将相关信息保存下来。

图片随后其会通过OpenSCManagerA建立计算机与服务控制管理器的连接,并打开指定的服务控制管理数据库。然后再通过EnumServicesStatusExA在指定的服务控制管理器数据库中列举每种服务,获取每种服务的名称、状态以及一些其他信息,并将这些信息保存下来。

图片 下面将目光聚焦于Open_SCManager函数

 

 

其会通过OpenSCManagerA建立计算机与服务控制管理器的连接,并打开指定的服务控制管理数据库,然后使用OpenServiceA答案开一个存在服务,若打开存在服务成功,则通过ControlService函数将控制代码发送到服务中去。其后会将是否成功以字符串的形式保存下来。其还通过OpenProcess函数来打开指定进程。

图片

case4通过CreateThread函数来创建线程。

图片case6通过GetUserNameExA函数来检索用户的名称或与调用线程关联的其他安全主体的名称,并进行拼接将信息进行保存。

图片case7中,函数FUN_004013a7调用了上文中已经介绍过Internet_sent函数来向外发送信息;函数FUN_0040138f中调用InternetReadFile来从外部获取信息;函数FUN_00402575中调用了CreateFileA函数创建了文件,并利用WriteConsoleInputA函数向其中写入数据。

图片case10中,函数Download_file中通过URLDownloadToFileA函数来下载文件。以上便是该样本的主要行为。

图片

 

总结

通过分析可知该样本除具备Downloader的相关常见行为,如连接HTTP服务器,发送HTTP请求,以及通过URL下载文件等行为;其还包括一些信息收集行为,如获取username,hostname,环境变量,磁盘信息等;还存在创建管道,打开关闭服务等行为。Downloader类样本的出现,只是攻击的开始,建议提前部署具备高级威胁检测能力的安全产品进行及时监控、防范,阻止后续攻击的发生。

 

图片

 

- End -

 

京公网安备 11010802024705号  京ICP备20030588号 Copyright © 兰云科技 www.lanysec.com 版权所有