APT蔓灵花分析

?病毒样本下载来源于i春秋逆向版主Crazyman_Army主题帖《记一次蔓灵花APT组织针对巴基斯坦定向的样本分析》,是一个Downloader,Crazyman_Army已经对关键得恶意代码进行了分析与整理,链接:https://bbs.ichunqiu.com/thread-50002-1-1.html

?对于个人而言,看过APT分析报告,但是很少逆向相关得恶意代码,毕竟样本少,既然发现了一枚,走过路过不能错过

??APT(Advanced Persistent Threat)是指高级持续性威胁,特别有针对性得方式

?个人对于APT的理解?:APT是综合了社会工程学,人性弱点,系统漏洞等等,多方因素协调恶意代码发起Attack,长期潜伏,时效长达半年或者更久,收集大量的数据为attack做准备。有组织,有纪律,是一名合格的"间谍",隐蔽性很强(代码的隐蔽性),运行方式独特,难以查杀。
?
线上恶意代码分析如下:

????????????????????图片一:线上分析
?通过在线分析,与原贴中杀毒识别的个数略有差异,这是一个被明确且已能被防范的样本。
?
手动分析如下:
?1、Exinfo PE查看文件信息,如下所示:

????????????????????图片二:样本信息
?通过Exinfo PE观察,样本没有加壳,而且是c++编写的,是图形用户界面程序(GUI)。
?
?2、IDA静态分析:

????????????????????图片三:GUI流程

????????????????????图片四:过程化流程
?下面在IDA中具体的分析一下代码,先看图片三中的GUI流程,如下所示:

????????????????????图片五:GUI代码分析
?通过ShowWindow第二个参数填入SW_HIDE数值(也就是0),意味着创建了一个隐藏窗口,调用sub_401330去执行恶意代码。
?进入函数sub_401330之后,发现了大量的数据的初始化及循环解密字符串的环节,如下所示:

????????????????????图片六:数据初始化

????????????????????图片七:字符串解密
?根据个人习惯,遇到着这情况就要动态调试,单纯的靠静态去分析有些麻烦,下面通过动态分析去还原这些数据的操作。
?
?3、IDA动态调试:
?主要分析sub_401330函数都干了那些事情,首先初始化了一堆数据,如图片六所示,然后又结束进程?句柄参数还是NULL,如下所示:

????????????????????图片八:TerminateProcess
?句柄为空,返回值会是INVALID_HANDLE无效的句柄值,接下来通过字符串运算获取了注册表(自启动路径),如下所示:

????????????????????图片九:获取自启动路径
?接下来拷贝了获取的字符串,如下所示:

????????????????????图片十:拷贝
?运算字符串获取msdtcv,如下所示:

????????????????????图片十一:msdtcv
?拼接成msdtcv.exe,如下所示:

????????????????????图片十二:msdtcv.exe
?这时候已经拼接成一个后缀为.exe的程序了,按照一般的套路基本都是查找资源,锁定资源释放到某一个文件夹下,运行释放的可执行代码,终止当前进程,其实这个套路也是,只不过是拷贝了自己,如下所示:

????????????????????图片十三:_mkdir
?先在C盘下创建了一个文件夹,应该是准备来文件夹下拷贝或者写入资源,如下所示:

????????????????????图片十四:字符串拼接
?如上图用了rep movs 汇编指令进行了文件夹路径与msdtcv.exe拼接,高级语言的就是strcat函数,既然路径野拼接出来了,接下来理论是要该路径的程序落实,获取了当前程序运行路径,接着获取了Open字符串,如下所示:

????????????????????图片十五:Open
?感觉前奏应该快完了,可是发现了一个新函数,不用说应该前奏还没结束,继续跟如新函数一探究竟,如下所示:

????????????????????图片十六:SHGetFolderPathA
?官方给出的函数解释Deprecated. Gets the path of a folder identified by a CSIDL value.,获取CSIDL路径,这个函数已废弃。继续接着看,如下所示:

????????????????????图片十七:cmd命令
?看到了上面字符串格式:copy "" "" 拷贝当前数据到c:\intel\msdtcv.exe,与猜测的步骤吻合,确实要拷贝了,既然cmd无非那几个函数可以作为参数执行cmd指令,WinExec、ShellExecute、CreateProcess等API来实现,样本中用到了ShellExecute与CreateProcess,继续分析,如下图所示:

????????????????????图片十八:reg cmd命令
?利用cmd进行自启动,这个函数运算拼接获取了这些即将会被用到的字符串,向下继续分析,碰见了函数如下:

????????????????????图片十九:sub_401F00函数
?对于数据则很简单,有编程基础的人没有一点难度,贴上一张IDA转成C之后的图:

????????????????????图片二十:Reg API
?打开及检索AppId键值,如果存在则写入路径c:\intel\msdtcv.exe,如下所示:


????????????????????图片二十一:设置成功

?为什么要在Environment下的AppID中设置呢?HKEY_CURRENT_USER根键中的信息的修改都会导致对HKEY_USERS.Default中子键信息的修改,修改当前用户环境,AppId设置为运行路径,后面会使用cmd的命令,调用%AppId%环境变量启动且退出,如下所示:

?这种方式相对于直接调用敏感的API来说很聪明,接着又开了注册表,如下所示:

????????????????????图片二十二:RegOpenKeyEx
?通过观察参数,我们就可以确定这是对自启动键值进行相关操作,下面调用了CreateThread函数,如下图所示:

????????????????????图片二十三:CreateThread
?重点分析一下上图中标红处的回调函数,如下所示:

????????????????????图片二十四:回调函数分析
?意图很明显了,样本字符串的规律来看,这个样本只要是对字符串赋值,意味着后面一定会有运算解密,果真如下所示:

????????????????????图片二十五:解密代码
?上面一段代码动态解密出来的字符串是ComSpec,其实也就是%ComSpec%环境变量,来看一下,如下所示:

????????????????????图片二十六:echo %ComSpec%
?前面获取了大量的cmd指令,又获取了cmd.exe可执行路径,下面必须是创建cmd进程,否则那么多的sub不就白费了.....如下所示:

????????????????????图片二十七:CreateThread
?接下来向cmd.exe写入执行的数据,完成了cmd命令拷贝,如下图所示:

????????????????????图片二十八:WriteFile
?回调函数结束了它的使命,创建了cmd线程且利用匿名管道写入执行的cmd指令,实现自身拷贝,这段代码还是比较有意思。接下来到了分水岭,也就是当前进程的终点了,如下图所示:

????????????????????图片二十九:分水岭
?如图二十二,我们明白这是要检测是否已存在启动项,如果响应成功则执行如下:

????????????????????图片三十: 执行1
?那么上述代码就结束了exit退出了,然后运行msdtcv.exe,其实还是自己,我继续来下看,下面就是网络相关的操作,接着调用了一个sub_4037b0,这是一个有意思的函数,如下图所示:

????????????????????图片三十一:RegOpenKeyEx

????????????????????图片三十二:MachineGuid
?有意思的代码如上,MachineGuid?这个就是所谓的超级硬件唯一标识,但是什么都没有操作....只是做了判断获取了标识符数据,应该另有用处,如下所示:

????????????????????图片三十三:sub_4037b0返回值
?进行了WSA初始化及socket操作,如下所示:

????????????????????图片三十四:gethostname


????????????????????图片三十五:sub_402520返回值
?接着调用了函数sub_4025B0,函数内容如下所示:


????????????????????图片三十六:收集系统信息
?函数sub_4025B0里面大量的采集了操作系统的信息,应该是为了发送给服务端,为后续下载的恶意代码兼容性提供数据支撑,线性分析发现sub_402070函数,收集的数据形成GET请求,包含了系统唯一标识及版本数据等信息,如下所示:

????????????????????图片三十七:GET报文形成
?数据也收集,下面就发送吧,sub_402890函数包含了完整socket操作,并且发送给了服务器,如下图所示:

????????????????????图片三十八:send与recv
?还有最后一个函数sub_402BA0,我们继续看一下,如下所示:

????????????????????图片三十九:socket

????????????????????图片四十:send Data
?通过上面数据我们发现,仍在是在与服务进行通讯,格式化拼接数据发送到服务器端,下面则是下载并写入本地恶意代码,如下所示:



????????????????????图片四十一:获取绝对路径
?以上C++代码环境在windows10 64bit下测试,那么意味了当前系统的该路径并且写入文件数据,比较有意思的,服务端下载的恶意代码进行了数据解密,通过对文件光标选择性读写数据,抽取真正执行的恶意代码,然后创建线程,如下所示:



????????????????????图片四十二:选择性恶意代码读写
?为什么这样做呢?为了混淆免杀,下载下来的恶意代码为了避免被杀毒软件查杀,可以在代码中进行混淆,不论是从PE偏移点的改变或者是对一些敏感字符的匹配都有可能失效,躲避一些所谓的启发式查杀,最后在本地生成真正的恶意代码且执行,如下所示:


????????????????????图片四十三:运行恶意代码文件
?最后在收集数据,调用sub_402890函数,也就是上面分析完整的socket操作,如上图三十八所示,调用图如下所示:

?最后是获取了时间与伪随机数,且这是一个大循环,又会回到当初分水岭WSACleanup的地方,如下所示:

????????????????????图片四十四:数据提供
?以上就是整个样本的分析,其实发现有意思的是字符串获取的方式以及恶意代码下载后躲避启发式查杀的手段。本身程序并不携带任何具有恶意性的操作,而是收集了当前系统大量的数据发送服务端(特洛伊),服务器端根据当前系统下载兼容的混淆恶意代码,在本地进行文件解密且运行,可惜是下载不下来恶意代码了....
?最后,有兴趣的朋友可以到文章开头中Crazyman_Army帖子中下载APT的样本,学习研究一下。

原文地址:http://blog.51cto.com/13352079/2349855

时间: 2024-10-09 01:03:23

APT蔓灵花分析的相关文章

apt仓库以及apt-get分析

1 debian repository 参考:https://wiki.debian.org/DebianRepository 1.1 版本代号 sid,still in development,该版本和unstable版本是一样的. 版本可以从多个侧面来进行命名. 第一,从release的角度进行命名.比如,buster.jessie.stretch 第二,使用数字编码,比如7.8.9,然后还有小版本,7.11.8.9 第三,对于当前最新的开发版本,又可以命名为stable.unstable和

[百家号]APT组织简介2019

5家新APT组织被披露,2019是“后起之秀”的天下? https://baijiahao.baidu.com/s?id=1621699899936470038&wfr=spider&for=pc APT(Advanced Persistent Threat)是指高级持续性威胁. APT是黑客以窃取核心资料为目的,针对客户所发动的网络攻击和侵袭行为,是一种蓄谋已久的“恶意商业间谍威胁”.这种行为往往经过长期的经营与策划,并具备高度的隐蔽性.APT的攻击手法,在于隐匿自己,针对特定对象,长期

近年来爆发的CVE漏洞编号

1.Office漏洞 Office漏洞是大部分APT组织最喜爱的漏洞,Office在个人办公电脑使用量大,对针对性目标是最佳的外网入口,效果也是最直接的. CVE编号  漏洞类型 使用组织 CVE-2009-2496 堆损耗远程代码执行漏洞,又称作 “Office Web 组件堆损耗漏洞 “ 丰收行动 CVE-2010-3333 RTF分析器堆栈溢出漏洞,又称”RTF栈缓冲区溢出漏洞” CVE-2012-0158 Microsoft Windows Common Controls ActiveX

面向对象分析,设计,开发(OOA、OOD、OOP)

一.OOA 1.1 首先我们来讲述一下什么是OOA Object-Oriented Analysis:面向对象分析法 指的是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类花分析和整理,而不是对管理业务现状和方法的分析. OOA(面向对象的分析)模型由5个层次(主题层.对象类层.结构层.属性层和服务层)和5个活动(标识对象类.标识结构.定义主题.定义属性和定义服务

海莲花-APT32-OceanLotus相关报告链接

找了一堆报告,方便下次查阅...... 报告链接 2015年5月天眼实验室<OceanLotus(APT-C-00)数字海洋的游猎者> http://blogs.360.cn/post/oceanlotus-apt.html 2015年5月27日<一例针对中国政府机构的准APT***中所使用的样本分析> https://www.antiy.com/response/APT-TOCS.html 2016年07月18日奇安信<海莲花重出水面> https://ti.360.

网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient

前言 最近在项目中遇到一个奇怪的问题,同样的SDK调用,访问海康摄像机的RTSP流,发保活OPTIONS命令保活,一个正常,而另一个一发就会被IPC断开,先看现场截图: 图1:发OPTIONS,摄像机立马断流 图2:但在另一个程序中发OPTIONS保活包又不断流 在大部分的摄像机上,都没什么问题,单单在海康的这一款摄像机中出现了这种问题,不仔细对比命令行中的输出,根本无法确定问题点,图2中的OPTIONS报文中携带了Authorization的头字段,将认证信息都带入了进来,而图1中只是简单将用

大数据文本分析:灵玖自然语言中文语义分词系统

自然语言通常是指一种自然地随文化演化的语言.英语.汉语.日语为自然语言的例子,而世界语则为人造语言,即是一种为某些特定目的而创造的语言. 自然语言具备两个属性:语言属性与自然属性."语言"属性表现为公认的某些约定俗成的内在规律性;"自然"属性是说并不存在某个人为制造的.严格的语法规则体系来约定人们的语言表达方式,这是和程序设计语言大相径庭的.自然语言需要遵循一定的内在规律,但更大程度上是"存在即合理". 一个自然语言处理系统必须考虑许多语言自身与

这份研究花了我一年:数据挖掘与运维分析

这份研究报告,作者从去年开始到现在花了整整一年时间,今天和大家分享下,关于<数据采矿和运维分析>,共同探讨~ 数据挖掘(Data Mining)是从大量数据中提取或"挖掘"知识. 广义数据挖掘:数据挖掘是从存放在数据库.数据仓库或其它信息库中的大量数据挖掘有趣知识的过程. 数据挖掘技术侧重:1)概率与数理统计 2)数据库技术 3)人工智能技术 4)机器学习. 1. 数据清理:消除噪音或不一致数据 2. 数据集成:多种数据源可以组合在一起 3. 数据选择:从数据库中提取与分析

《Android系统源代码情景分析》连载回忆录:灵感之源

上个月,在花了一年半时间之后,写了55篇文章,分析完成了Chromium在Android上的实现,以及Android基于Chromium实现的WebView.学到了很多东西,不过也挺累的,平均不到两个星期一篇文章.本来想休息一段时间后,再继续分析Chromium使用的JS引擎V8.不过某天晚上,躺在床上睡不着,鬼使神差想着去创建一个个人站点,用来连载<Android系统源代码情景分析>一书的内容. 事情是这样的,躺在床上睡不着,就去申请了一个域名,0xcc0xcd.com.域名申请到了,总不能