Hacking Team后门分析(一)

前言

前段时间HackingTeam数据泄露事件引起了一场轩然大波,足足400G的干货。虽然这件事已经过去很久了,但是意图不轨的人试图利用HackingTeam里面的干货,来干一些坏事。 对目标进行监听。这篇博文是对其中的一个dll的部分分析。仅仅这个dll也就让人够头疼的了。

 

样本分析

0x01敏感信息加密处理

 

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

1_1

 

列出被加密的部分敏感信息(在该样本中,很少会出现明文,都是被加密过的字符串)

1002139B  |.  68 04E50610   push ww.1006E504      ;  ASCII "_ xgvUR8vUPC 0UiUPC 1J1vlo......"
100214A6  |.  68 80E40610   push ww.1006E480      ;  ASCII "L99Q rYp35 [K0l 1J1vlo U1 8Wtl8iJ oEPUvEtli]" 
100214FF  |.  68 5CE40610   push ww.1006E45C      ;  ASCII "_ 4v8tvUPC gEtl oEidWl.........." 
10021558  |.  68 3CE40610   push ww.1006E43C      ;  ASCII " xClPv zdWWJ E7lt8vUEP8W"
2.对敏感函数进行加密处理(大量,这里贴出部分)

 

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.1解密函数内藏的玄机
对无无意义的字符串进行解密,解密后利用LoadLibraryA函数和GetProceAddress函数来获取到解密后的函数地址,如果调用失败,样本就会进入睡眠状态,如果调用失败大于等于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检测敏感驱动

反病毒软件的驱动名是被加密了的只有通过动态解密才能获取

271745059536462

 

检测方法:

利用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

 

被检测的驱动信息列表

271745067811349

 

 

ox03检测敏感进程及文件信息

 

被检测的进程

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

 

通过创建快照,对进程进行遍历一个一个和一下进程名进行比较

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

 

被检测的文件信息

*Outlook*、Security Task Manager、Detects*rootkits*、Hidden*Process*Finder*、Detects*rootkits*、*Secure*BlackLight*、Sophos Anti*Rootkit*、AVG Anti*Rootkit*、Rootkit detection utility*、pavark*、Trend Micro RootkitBuster*、Internet Explorer*、F-Secure Settings*

 

获取进程的文件信息,然后再挨个与上面的文件信息作比较,判断是否存在以上文件信息

1001B4A0  |.  52            push edx                                 ; /pHandle 
1001B4A1  |.  8D8424 800000>lea eax,dword ptr ss:[esp+80]            ; | 
1001B4A8  |.  50            push eax                                 ; |FileName 
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:WINDOWSsystem32wscntfy.exe" 
1001B4DC  |.  E8 51000300   call <jmp.&VERSION.GetFileVersionInfoW>  ; GetFileVersionInfoW

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 = "VarFileInfoTranslation" 
1001B4F8  |.  56            push esi                                 ; |pBlock 
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 = "StringFileInfo40904b0FileDescription" 
1001B553  |.  56            push esi                                 ; |pBlock 
1001B554  |.  E8 D3FF0200   call <jmp.&VERSION.VerQueryValueW>       ; VerQueryValueW

0x04 注入所有拥有admin权限的进程

如果在上面的进程监测和文件信息检测中检测到了上面列表中的数据,就不会对该进程进行注入。如果该进程不被包含在两者任何一个中就会开始注入

 

判断进程是否具有admin权限

 

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

 

接下来就是注入数据,样本同一个进程会进行三次注入,每次注入部分数据

第一次写

0006CBDC   1003D815  ?   /CALL to WriteProcessMemory from ww.1003D813 
0006CBE0   0000008C  ?..   |hProcess = 0000008C (window) 
0006CBE4   02020000  ..  |Address = 2020000 
0006CBE8   10016A90  恓   |Buffer = ww.10016A90 
0006CBEC   000001F4  ?..   |BytesToWrite = 1F4 (500.) 
0006CBF0   0006CCA4  ぬ.   pBytesWritten = 0006CCA4

 

第二次写

0006CBDC   1003D815  ?   /CALL to WriteProcessMemory from ww.1003D813 
0006CBE0   0000008C  ?..   |hProcess = 0000008C (window) 
0006CBE4   02030000  ..  |Address = 2030000 
0006CBE8   0006CCC0  捞.   |Buffer = 0006CCC0 
0006CBEC   00000368  h..  |BytesToWrite = 368 (872.) 
0006CBF0   0006CCA4  ぬ.   pBytesWritten = 0006CCA4

 

第三次写

0006CBDC   1003D815  ?   /CALL to WriteProcessMemory from ww.1003D813 
0006CBE0   0000008C  ?..   |hProcess = 0000008C (window) 
0006CBE4   0202000F  .  |Address = 202000F 
0006CBE8   0006CCE0  嗵.   |Buffer = 0006CCE0 
0006CBEC   00000004  ...  |BytesToWrite = 4 
0006CBF0   0006CCA4  ぬ.   pBytesWritten = 0006CCA4

 

最后创建远程线程

 

1003D9EE   .  68 88250710   push ww.10072588                         ;  ASCII "DsfbufSfnpufUisfbe" 
1003D9F3   .  E8 C8DA0000   call <ww.Decode_GetApi> 
1003D9F8   .  83C4 04       add esp,4 
1003D9FB   .  FFD0          call eax                                 ;  kernel32.CreateRemoteThread

0x05写注册表自启动

打开注册表,看是否存在相应注册表,如果打开失败就查询是否存在该注册表值,如果不存在就试图打开一个文件

 

0006F538   100183B5  祪   /CALL to RegOpenKeyA from ww.100183B3 
0006F53C   80000001  ..€  |hKey = HKEY_CURRENT_USER 
0006F540   0006F564  d?.   |Subkey = "SoftwareClassesnuax_auto_fileshellopencommand" 
0006F544   0006F54C  L?.   pHandle = 0006F54C

100183E1  |.  FFD0          call eax                                 ;  ADVAPI32.RegQueryValueExA

0006F524   1001847A  z?   /CALL to CreateFileA from ww.10018478 
0006F528   0006F874  t?.   |FileName = "C:DOCUME~1ADMINI~1桌面HT_BAC~1..JklAKLjsd-asdjAIUHDUD82.nuax" 

 

打开文件失败就会创建注册表

 

0006F534   100185EE  顓   /CALL to RegCreateKeyA from ww.100185EC 
0006F538   80000001  ..€  |hKey = HKEY_CURRENT_USER 
0006F53C   0006F97C  |?.   |Subkey = "SoftwareClassesnuax_auto_fileshellopencommand" 
0006F540   0006F54C  L?.   pHandle = 0006F54C

0006F528   1001862A  *?   /CALL to RegSetValueExA from ww.10018628 
0006F52C   00000088  ?..   |hKey = 88 
0006F530   00000000  ....  |ValueName = NULL 
0006F534   00000000  ....  |Reserved = 0 
0006F538   00000002  ...  |ValueType = REG_EXPAND_SZ 
0006F53C   0006F564  d?.   |Buffer = 0006F564 
0006F540   00000069  i...  BufSize = 69 (105.)

0006F534   10018695  晢   /CALL to RegCreateKeyA from ww.10018693 
0006F538   80000001  ..€  |hKey = HKEY_CURRENT_USER 
0006F53C   0006F97C  |?.   |Subkey = "SoftwareClasses.nuax" 
0006F540   0006F54C  L?.   pHandle = 0006F54C

0006F528   100186CE  螁   /CALL to RegSetValueExA from ww.100186CC 
0006F52C   00000088  ?..   |hKey = 88 
0006F530   00000000  ....  |ValueName = NULL 
0006F534   00000000  ....  |Reserved = 0 
0006F538   00000002  ...  |ValueType = REG_EXPAND_SZ 
0006F53C   0006F564  d?.   |Buffer = 0006F564 
0006F540   0000000F  ...  BufSize = F (15.)

0006F528   100187B0  皣   /CALL to RegSetValueExA from ww.100187AE 
0006F52C   00000088  ?..   |hKey = 88 
0006F530   10066400  .d  |ValueName = "JklAKLjsd-asdjAIUHDUD82" 
0006F534   00000000  ....  |Reserved = 0 
0006F538   00000002  ...  |ValueType = REG_EXPAND_SZ 
0006F53C   0006F564  d?.   |Buffer = 0006F564 
0006F540   00000037  7...  BufSize = 37 (55.)

0x06配置完成后,修改桌面背景,删除自己

传入参数Infected.bmp,调用SystemParametersInfoA函数修改桌面背景

0006FA74   1000795A  Zy.  /CALL to SystemParametersInfoA from ww.10007958 
0006FA78   00000014  ...  |Action = SPI_SETDESKWALLPAPER 
0006FA7C   00000000  ....  |wParam = 0 
0006FA80   0006FA88  堹.   |pParam = 0006FA88 
0006FA84   00000000  ....  UpdateProfile

 

遍历进程查找是否有ccSvcHst.exe进程(赛门铁克相关的一个进程)如果有 该进程就逃出循环对浏览器进行检查检测是否存在iexplore、firefox、opera、chrome.exe如果该进程是以上几个浏览器之一就不在对其进行判断,会继续进行下一轮循环
cc

 

10018DC3  |.  56            push esi
10018DC4  |.  B8 60C50610   mov eax,ww.1006C560                      ;  ASCII "opera.exe"
10018DC9  |.  57            push edi
10018DCA  |.  8B7C24 34     mov edi,dword ptr ss:[esp+34]
10018DCE  |.  894424 08     mov [Arg_0],eax
10018DD2  |.  C74424 0C 44C>mov dword ptr ss:[esp+C],ww.1006C544     ;  ASCII "iexplore.exe"
10018DDA  |.  C74424 10 54C>mov [Arg_2],ww.1006C554                  ;  ASCII "firefox.exe"
10018DE2  |.  C74424 14 38C>mov dword ptr ss:[esp+14],ww.1006C538    ;  ASCII "chrome.exe"
10018DEA  |.  C74424 18 ADB>mov dword ptr ss:[esp+18],ww.1006BBAD
10018DF2  |.  33F6          xor esi,esi

 

 

如果没找到,会遍历进程去查找进程中是否存在taskmgr、outlook、explore.exe、mghtml.exe如果不存在就判断是否存在BDHV.sys。

sys
如果存在就利用前面的方法下判断该进程是否有管理员权限,然后决定要不要注入。注入也分三次,只是注入的数据不同,这次注入的数据会监测是否新开启具有管理员权限的进程,如果具有管理员权限的进程就对该进程进行修改。

g

 0x07未知危害

1.打开一个xTLfG~3.f66文件,打不开的话就直接返回,如果能打开的话,再打开文件,创建文件映射,将文件映射到当前应用程序的地址空间。然后设置文件的属性,设置了文件属性之后以写的权限去打开该文件,如果失败就调用sleep函数睡眠一会儿,然后重新以写的权限去打开文件,获取文件大小,然后向文件中写入数据。如果失败还是会继续写,直到写入向文件中写入内容成功,然后删除该文件

0006CD14   100189A5     /CALL to SetFileAttributesA from ww.100189A3 
0006CD18   0006CD50  P?.   |FileName = "C:DOCUME~1ADMINI~1桌面HT_BAC~1-xTLfG~3.f66" 
0006CD1C   00000080  €...  FileAttributes = NORMAL
0006CD00   100189EF  飰   /CALL to CreateFileA from ww.100189ED 
0006CD04   0006CD50  P?.   |FileName = "C:DOCUME~1ADMINI~1桌面HT_BAC~1-xTLfG~3.f66" 
0006CD08   40000000  ...@  |Access = GENERIC_WRITE 
0006CD0C   00000001  ...  |ShareMode = FILE_SHARE_READ 
0006CD10   00000000  ....  |pSecurity = NULL 
0006CD14   00000003  ...  |Mode = OPEN_EXISTING 
0006CD18   00000000  ....  |Attributes = 0 
0006CD1C   00000000  ....  hTemplateFile = NULL
10018C12  |.  FFD0          call eax                                 ;  kernel32.CreateFileMappingA

10018C33  |.  FFD0          call eax                                 ;  kernel32.MapViewOfFile

2.尝试以读的方式去访问cKbssss.6AI文件,如果打开不成功就返回,如果成功就读取文件中的内容

10024A11  |.  FFD0          call eax                                 ;  kernel32.ReadFile

3.对三个文件进行同样的操作

设置文件属性,文件属性设置成功就以写的权限打开文件

0006FA4C   100189A5     /CALL to from ww.100189A3 
0006FA50   0006FA84  匉.   |FileName = "C:DOCUME~1ADMINI~1桌面HT_BAC~1fWXcUC~8.Ugg" 
0006FA54   00000080  €...  FileAttributes = NORMAL



0006FA38   100189EF  飰   /CALL to CreateFileA from ww.100189ED 
0006FA3C   0006FA84  匉.   |FileName = "C:DOCUME~1ADMINI~1桌面HT_BAC~1fWXcUC~8.Ugg" 
0006FA40   40000000  ...@  |Access = GENERIC_WRITE 
0006FA44   00000001  ...  |ShareMode = FILE_SHARE_READ 
0006FA48   00000000  ....  |pSecurity = NULL 
0006FA4C   00000003  ...  |Mode = OPEN_EXISTING 
0006FA50   00000000  ....  |Attributes = 0 
0006FA54   00000000  ....  hTemplateFile = NULL

获取文件大小,然后在文件中写入8个字节数据(如果写入失败,程序会一直写入数据,知道数据写入成功),然后删除文件

10018A15   .  FFD0          call eax                                 ;  kernel32.GetFileSize

0006FA40   10018A4E  N?   /CALL to WriteFile from ww.10018A4C 
0006FA44   FFFFFFFF    |hFile = FFFFFFFF 
0006FA48   0006FA6C  l?.   |Buffer = 0006FA6C 
0006FA4C   00000008  ...  |nBytesToWrite = 8 
0006FA50   0006FA68  h?.   |pBytesWritten = 0006FA68 
0006FA54   00000000  ....  pOverlapped = NULL

 

防范措施

360安全卫士已经能安全查杀,建议各位网友扫描一下全盘,看看自己是否中招了、

s