Hacking Team后门分析

前言

  Hacking Team数据泄露事件前段时间引起了一场轩然大波,虽然事件已经过去很久了,但是卫士在最近捕获到了一个与Hacking Team相关的一个后门,但是样本捕获不全,只捕获到了一个dll文件。在分析的时候发现,就一个dll而已,就做了大量的操作,想想如果是一个完整的样本的话。。。。毕竟HT

 

样本分析

 

看看这些导出函数

 

样本分析

干扰分析手段

0x01敏感信息加密处理

  1.对敏感字符串进行加密处理

  列出被解密的部分敏感信息:

1002139B  |.  68 04E50610   push ww.1006E504      ;  ASCII "_ xgvUR8vUPC 0UiUPC 1J1vlo......"="-Activating hiding system…………"

100214A6  |.  68 80E40610   push ww.1006E480      ;  ASCII "L99Q rYp35 [K0l 1J1vlo U1 8Wtl8iJ oEPUvEtli]" = "ERROR  2931 [The system is already monitored]"

100214FF  |.  68 5CE40610   push ww.1006E45C      ;  ASCII "_ 4v8tvUPC gEtl oEidWl.........." = "- Starting core module"

10021558  |.  68 3CE40610   push ww.1006E43C      ;  ASCII " xClPv zdWWJ E7lt8vUEP8W" = "Agent fully operational"

2.对敏感函数进行加密处理(被加密的函数是大量的,这里只列出了较小一部分)

 

100036BC  |.  68 60B40610   push ww.1006B460      ;  ASCII "PqfoGjmfNbqqjohB" = OpenFileMappingA

100036DE  |.  68 50B40610   push ww.1006B450      ;  ASCII "NbqWjfxPgGjmf" = MapViewofFile

10003712  |.  68 74B40610   push ww.1006B474      ;  ASCII "DsfbufGjmfNbqqjohB"=CreateFileMappingA

1000378A  |.  68 88B40610   push ww.1006B488      ;  ASCII "VonbqWjfxPgGjmf" = UnMapViewOfFile

 

对解密后的函数进行调用

对无意义的字符串进行解密,解密后利用LoadLbraryA函数和GetProcAddress函数获取到解密后的函数地址,如果调用失败,程序睡眠一会儿会再次尝试是否能够获取到该函数的地址,如果调用失败大于或等于4次,就会进入消息循环中,等待消息

while ( 1 ){
   v7 = LoadLibraryA((LPCSTR)v5);
   if ( !v7 )
     Sleep(0x64u);
   ++v6;
   if ( v7 )
     break;
   if ( v6 >= 4 )
     WhileMessage(); }
v8 = 0;
while ( 1 ){
   v9 = GetProcAddress(v7, lpProcName);
   if ( !v9 )
     Sleep(0x64u);
   ++v8;
   if ( v9 )
     break;
   if ( v8 >= 4 )
     WhileMessage();}

 

 

0x02检测敏感驱动

反病毒软件的驱动信息时被加密了的,只有通过动态解密才能获取

检测方式

1000A572   .  51            push ecx
1000A573   .  68 C0BE0610   push ww.1006BEC0                         ;  ASCII "FovnEfwjdfEsjwfst"
1000A578   .  C74424 14 000>mov dword ptr ss:[esp+14],0
1000A580   .  E8 3B0F0400   call <ww.Decode_GetApi>
1000A585   .  83C4 04       add esp,4
1000A588   .  FFD0          call eax                                 ;  PSAPI.EnumDeviceDrivers

 

利用GetEnvirnmentvariableA函数获取到到系统个根目录,然后通过将获取到的根目录与事先写好在程序中的system32/drivers32在内存中相接,以获取到驱动目录

1000AF57  |.  68 05010000   push 105
1000AF5C  |.  8D8C24 100100>lea ecx,dword ptr ss:[esp+110]
1000AF63  |.  51            push ecx
1000AF64  |.  68 CCBC0610   push ww.1006BCCC                         ;  ASCII "SYSTEMROOT"
1000AF69  |.  68 B4BC0610   push ww.1006BCB4                         ;  ASCII "HfuFowjsponfouWbsjbcmfB"
1000AF6E  |.  E8 4D050400   call <ww.Decode_GetApi>
1000AF73  |.  83C4 04       add esp,4
1000AF76  |.  FFD0          call eax                                 ;  kernel32.GetEnvironmentVariableA

然后通过调用FindFirtFileA函数来判断是否存在该驱动文件

1000B009  |.  68 D4BE0610   push ww.1006BED4                         ;  ASCII "GjoeGjstuGjmfB"
1000B00E  |.  F3:A4         rep movs byte ptr es:[edi],byte ptr ds:[>
1000B010  |.  E8 AB040400   call <ww.Decode_GetApi>
1000B015  |.  83C4 04       add esp,4
1000B018  |.  FFD0          call eax                                 ;  kernel32.FindFirstFileA

 

被检测驱动信息列表

 

0x03检测敏感程序

╮(╯▽╰)╭,超级多的程序信息,超级多的被检测。

对某个文件是否能打开进行判断(该文件是写死在程序中的,在程序初始化的时候,通过获取到当前进程所在的路劲,再通过格式化字符串拼接起来获取到文件,因为样本不够完整,这里没有该文件)是否能够打开该文件,如果能打开该文件就先设置该文件的属性为可读可写然后删除该文件,如果该文件不存在就向将dll中的需要检查是否存在的程序名以及文件的信息cpoy到内存中去(后面在检测文件是否存在的时候,文件名和文件信息两者都用到了的)

创建快照,遍历进程

10017792  |.  FFD0          call eax                                 ;  kernel32.CreateToolhelp32Snapshot

100177AE  |.  FFD0          call eax                                 ;  kernel32.Process32FirstW

100177D0  |> /395C24 14     /cmp dword ptr ss:[esp+14],ebx
100177D4  |. |74 2C         |je short ww.10017802
100177D6  |. |8D4C24 0C     |lea ecx,dword ptr ss:[esp+C]
100177DA  |. |51            |push ecx
100177DB  |. |56            |push esi
100177DC  |. |68 BCC00610   |push ww.1006C0BC                        ;  ASCII "Qspdftt43OfyuX"
100177E1  |. |E8 DA3C0300   |call <ww.Decode_GetApi>
100177E6  |. |83C4 04       |add esp,4
100177E9  |. |FFD0          |call eax                                ;  kernel32.Process32NextW
100177EB  |. |85C0          |test eax,eax

依次打开获取到的进程,并调用OpenProcessToken获取权限

100178B9  |.  68 F8B60610   push ww.1006B6F8                         ;  ASCII "PqfoQspdftt"
100178BE  |.  896C24 1C     mov dword ptr ss:[esp+1C],ebp
100178C2  |.  896C24 18     mov dword ptr ss:[esp+18],ebp
100178C6  |.  E8 F53B0300   call <ww.Decode_GetApi>
100178CB  |.  83C4 04       add esp,4                               

100178CE  |.  FFD0          call eax                                    ;  kernel32.OpenProcess

100178E1  |.  53            push ebx
100178E2  |.  68 00B90610   push ww.1006B900                         ;  ASCII "PqfoQspdfttUplfo"
100178E7  |.  E8 D43B0300   call <ww.Decode_GetApi>
100178EC  |.  83C4 04       add esp,4
100178EF  |.  FFD0          call eax                                 ;  ADVAPI32.OpenProcessToken

 

如果打开成功,就先获取进程的特权信息,然后通过LookupAccounSidA函数来获取用户名,如果掉失败就通过调用GetUserName函数来获取到计算机的用户名

10017908  |.  68 F0BD0610   push ww.1006BDF0                         ;  ASCII "HfuUplfoJogpsnbujpo"
1001790D  |.  E8 AE3B0300   call <ww.Decode_GetApi>
10017912  |.  83C4 04       add esp,4
10017915  |.  FFD0          call eax                                 ;  ADVAPI32.GetTokenInformation

10017994  |.  83C4 04       add esp,4
10017997  |.  FFD0          call eax                                 ;  ADVAPI32.LookupAccountSidA

100179A6  |.  52            push edx
100179A7  |.  68 20D30610   push ww.1006D320                         ;  ASCII "HfuVtfsObnfB"
100179AC  |.  E8 0F3B0300   call <ww.Decode_GetApi>
100179B1  |.  83C4 04       add esp,4
100179B4  |.  FFD0          call eax                                 ;  ADVAPI32.GetUserNameA

找到有系统权限的程序后,打开该程序后获取到当前模块的完整路劲

10017844  |.  56            push esi
10017845  |.  50            push eax                                 ; /ProcessId
10017846  |.  6A 00         push 0                                   ; |Inheritable = FALSE
10017848  |.  68 10040000   push 410                                 ; |Access = VM_READ|QUERY_INFORMATION
1001784D  |.  FF15 CCB00610 call dword ptr ds:[<&KERNEL32.OpenProces>; \OpenProcess

10017861  |.  51            push ecx
10017862  |.  52            push edx
10017863  |.  6A 00         push 0
10017865  |.  56            push esi
10017866  |.  E8 FD3C0300   call <jmp.&PSAPI.GetModuleFileNameExW>

接下来获取上面程序的文件的文件描述

1001B4A0  |.  52            push edx                                 ; /pHandle
1001B4A1  |.  8D8424 800000>lea eax,dword ptr ss:[esp+80]            ; |
1001B4A8  |.  50            push eax                                 ; |FileName = "C:\WINDOWS\system32\wscntfy.exe"
1001B4A9  |.  E8 8A000300   call <jmp.&VERSION.GetFileVersionInfoSiz>; \GetFileVersionInfoSizeW

1001B4D0  |.  56            push esi                                 ; /Buffer
1001B4D1  |.  57            push edi                                 ; |BufSize
1001B4D2  |.  6A 00         push 0                                   ; |Reserved = 0
1001B4D4  |.  8D8C24 8C0000>lea ecx,dword ptr ss:[esp+8C]            ; |
1001B4DB  |.  51            push ecx                                 ; |FileName = "C:\WINDOWS\system32\wscntfy.exe"
1001B4DC  |.  E8 51000300   call <jmp.&VERSION.GetFileVersionInfoW>  ; \GetFileVersionInfoW

 

创建快照,然后依次将快照中的程序名与下面的文件名进行对比以及下面的文件信息做比较,看是否存在该样本觉得可疑的文件

ielowutil.exe TaskMan.exe hackmon.exe hiddenfinder.exe unhackme.exe

fsbl.exe

sargui.exe

avgarkt.exe

avscan.exe

RootkiRevevaler.exe

taskmgr.exe

avgscanx.exe

IceSword.exe

rku*.exe

pavark.exe

avp.exe

bscan.exe

avk.exe

k7*.exe

rootkitbuster*.exe

pcts*.exe

iexplore.exe

chrom.exe

fs32.exe

1001B4ED  |.  52            push edx                                 ; /pValueSize
1001B4EE  |.  8D4424 18     lea eax,dword ptr ss:[esp+18]            ; |
1001B4F2  |.  50            push eax                                 ; |ppValue
1001B4F3  |.  68 1CD10610   push ww.1006D11C                         ; |pSubBlock = "\VarFileInfo\Translation"
1001B4F8  |.  56            push esi                                 ; |pBlock = 00C20048
1001B4F9  |.  E8 2E000300   call <jmp.&VERSION.VerQueryValueW>       ; \VerQueryValueW

 

1001B548  |.  52            push edx                                 ; /pValueSize
1001B549  |.  8D4424 10     lea eax,dword ptr ss:[esp+10]            ; |
1001B54D  |.  50            push eax                                 ; |ppValue
1001B54E  |.  8D4C24 24     lea ecx,dword ptr ss:[esp+24]            ; |
1001B552  |.  51            push ecx                                 ; |pSubBlock = "\StringFileInfo\040904b0\FileDescription"
1001B553  |.  56            push esi                                 ; |pBlock
1001B554  |.  E8 D3FF0200   call <jmp.&VERSION.VerQueryValueW>       ; \VerQueryValueW

0x04写注册表

 

0x05遍历进程,注入进程

 

0x06未知危害行为

因为样本不完整,在分析该样本的过程中发现了该样本还会读取很多文件的操作,根据不同的文件做出不同的操作

1.其中程序会设置文件为只可读属性,以及试图将该文件的内容映射到当前应用程序的地址空间。以及在ring3层调用ZwQuerySystemInformation来获取进程信息

0006FA78   10019008  ?   ww.10019008
0006FA7C   1001900D  .?   /CALL to SetFileAttributesA from ww.1001900B
0006FA80   0006FA88  堹.   |FileName = "C:\DOCUME~1\ADMINI~1\桌面\HT_BAC~1\gS8rMv~n.Mtt"
0006FA84   00000021  !...  \FileAttributes = READONLY|ARCHIVE

 

100193A8  |.  68 74B40610   push ww.1006B474                         ;  ASCII "DsfbufGjmfNbqqjohB"
100193AD  |.  E8 0E210300   call <ww.Decode_GetApi>
100193B2  |.  83C4 04       add esp,4
100193B5  |.  FFD0          call eax                                 ;  kernel32.CreateFileMappingA

100193CA  |.  68 50B40610   push ww.1006B450                         ;  ASCII "NbqWjfxPgGjmf"
100193CF  |.  E8 EC200300   call <ww.Decode_GetApi>
100193D4  |.  83C4 04       add esp,4
100193D7  |.  FFD0          call eax                                 ;  kernel32.MapViewOfFile

 

10032F08  |.  6A 00         |push 0
10032F0A  |.  57            |push edi
10032F0B  |.  56            |push esi
10032F0C  |.  6A 10         |push 10
10032F0E  |.  FFD3          |call ebx                                ;  ntdll.ZwQuerySystemInformation

2.其中一个文件被打开后,就开始获取磁盘的剩余空间容量有关信息

100270B6  |.  68 5CEA0610   push ww.1006EA5C                         ;  ASCII "HfuEjtlGsffTqbdfFyB"
100270BB  |.  E8 00440200   call <ww.Decode_GetApi>
100270C0  |.  83C4 04       add esp,4
100270C3  |.  FFD0          call eax                                 ;  kernel32.GetDiskFreeSpaceExA

 

然后查找当前进程下的目录下的所有文件

0006F818   10023E8C  ?   /CALL to FindFirstFileA from ww.10023E8A
0006F81C   0006F96C  l?.   |FileName = "C:\DOCUME~1\ADMINI~1\桌面\HT_BAC~1\*"
0006F820   0006F82C  ,?.   \pFindFileData = 0006F82C

 

10023E95  |> /F64424 08 10  /test byte ptr ss:[esp+8],10
10023E9A  |. |75 0B         |jnz short ww.10023EA7
10023E9C  |. |8B4424 28     |mov eax,dword ptr ss:[esp+28]
10023EA0  |. |83F8 FF       |cmp eax,-1
10023EA3  |. |74 02         |je short ww.10023EA7
10023EA5  |. |03F8          |add edi,eax
10023EA7  |> |8D4424 08     |lea eax,dword ptr ss:[esp+8]
10023EAB  |. |50            |push eax
10023EAC  |. |56            |push esi
10023EAD  |. |68 60E80610   |push ww.1006E860                        ;  ASCII "GjoeOfyuGjmfB"
10023EB2  |. |E8 09760200   |call <ww.Decode_GetApi>
10023EB7  |. |83C4 04       |add esp,4
10023EBA  |. |FFD0          |call eax                                ;  kernel32.FindNextFileA
10023EBC  |. |85C0          |test eax,eax
10023EBE  |.^\75 D5         \jnz short ww.10023E95

3.打开其中一个文件后,先看是否能够打开该文件,如果能打开该文件就先设置该 文件的属性为可读可写然后删除该文件,如果该文件不存在就向将dll中的需要检查是否存在的程序名以及程序信息cpoy到内存中去

 

10018A6B   .  83C4 04       add esp,4
10018A6E   .  FFD0          call eax                                 ;  kernel32.DeleteFileA

时间: 2024-11-10 17:23:35

Hacking Team后门分析的相关文章

Hacking Team 泄密阴影犹存 香港与台湾网站遭攻击

据悉,自7月9日开始,有黑客团队对台湾和香港网站发起攻击,所用工具竟然是Hacking Team泄出的Flash漏洞利用程序PoisonIvy. Hacking Team 泄密阴影犹存 攻击者首先使用了一个来自Hacking Team泄密文件中的Flash Player exp(CVE-2015-5119),该利用是7月5日被曝出,而Adobe在7月7日进行了补丁.第二波攻击的武器则是另同样来自Hacking Team的另一个Flash的0day漏洞(cve-2015-5122).  中枪的都是

黑客讲述渗透Hacking Team全过程(详细解说)

近期,黑客Phineas Fisher在pastebin.com上讲述了入侵Hacking Team的过程,以下为其讲述的原文情况,文中附带有相关文档.工具及网站的链接,请在安全环境下进行打开,并合理合法使用.作者部分思想较为激进,也请以辩证的观点看待之. 1.序言 在这里,可能你会注意到相比于前面的一个版本,这个版本的内容及语言有了一些变化,因为这将是最后一个版本了[1].对于黑客技术,英语世界中已经有了许多书籍,讲座,指南以及关于黑客攻击的知识.在那个世界,有许多黑客比我优秀,但他们埋没了他

Download Hacking Team Database from torrent using magnet link

src:http://www.blackmoreops.com/2015/07/15/download-hacking-team-database/?utm_source=tuicool Recently controversial Italian security company Hacking Team, has been hacked and more than 400gb made it way to World Wide Web. Hacking Team is known for s

10.16Maccms后门分析、Sudo提权漏洞(CVE-2019-14287)复现

Maccms后门分析 maccms网站基于php+mysql的系统,易用性.功能良好等优点,用途范围广 打开源码,extend\Qcloud\Sms\Sms.php.extend\upyun\src\Upyun\Api\Format.php是两个后门(Sms.php和Format.php是后门木马 二者代码相同) <?php error_reporting(E_ERROR);//报错 @ini_set('display_errors','Off'); @ini_set('max_executio

maccms后门分析

Maccms 后门分析 Maccms网站基于php+mysql的系统,有易用性.功能良好等优点,用途广泛 打开源码 maccms10\extend\Qcloud\Sms\sms.php是一个后门 maccms10\extend\upyun\src\Upyun\Api\format.php也是一个后门 可以看到两者内容一样 <?php error_reporting(E_ERROR); @ini_set('display_errors','Off'); @ini_set('max_executio

PHP后门新玩法:一款猥琐的PHP后门分析

0x00 背景 近日,360网站卫士安全团队近期捕获一个基于PHP实现的webshell样本,其巧妙的代码动态生成方式,猥琐的自身页面伪装手法,让我们在分析这个样本的过程中感受到相当多的乐趣.接下来就让我们一同共赏这个奇葩的Webshell吧. 0x01 细节 Webshell代码如下: <?php error_reporting(0); session_start(); header("Content-type:text/html;charset=utf-8");if(empt

使用Ghidra分析phpStudy后门

一.工具和平台 主要工具: Kali Linux Ghidra 9.0.4 010Editor 9.0.2 样本环境: Windows7 phpStudy 20180211 二 .分析过程 先在 Windows 7 虚拟机中安装 PhpStudy 20180211,然后把安装完后的目录拷贝到 Kali Linux 中. 根据网上公开的信息:后门存在于 php_xmlrpc.dll 文件中,里面存在“eval”关键字,文件 MD5 为 c339482fd2b233fb0a555b629c0ea5d

移动安全初探:窃取微信聊天记录、Hacking Android with Metasploit

在这篇文章中我们将讨论如何获取安卓.苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制.文章比较基础.可动手性强,有设备的童鞋不妨边阅读文章边操作,希望能激发大家对移动终端的安全兴趣. (文章内容存在一定攻击性,目的在于普及终端安全知识.提高安全意识,如有非法使用,后果自负) “如何获取Android.iPhone手机上的微信聊天记录? ” 0×00 条件: 安卓设备已获取root权限,安装SSHDroid(通过ssh.ftp连接手机) Apple设备越狱,安

对某钓鱼网站的一次失败渗透分析

无聊正玩着手机QQ空间,发现来了一条消息,就打开看了下. 看见有人@了我一下 标题挺吸引人的,呵呵...有点常识经验的一看 就知道不是什么好事的,然后点开看了下 可以发现此号@了很多和这个号有联系的QQ好友,估计我这位朋友的号被盗用了,才会发这些带有钓鱼网站的说说. 如果是无经验的,没有任何安全常识的朋友,还以为是真的,后果想必大家都知道.. 根据提示扫描二维码...... 扫描二维码后,手机跳转到这个页面,提示要你登录QQ!注意啦,这里是重点!手机跟电脑不一样,不显示网站地址, 这个登录界面其