想第一时间看到我们的大图推送吗?赶紧把我们设为星标吧!这样您就不会错过任何精彩内容啦!感谢您的支持!🌟
目录
0x01 基础知识
0x02 Syscall Bypass 杀软原理
0x03 利用Syscall上线实验
0x04 杀软效果检测
0x01 基础知识
Intel的CPU将特权级别分为4个级别--从R0到R3,R0是系统核心态,在核心态运行,拥有最高权限;R1和R2运行的是设备驱动程序;R3是用户代码态,在用户态下运行,拥有最低权限,每一层支持访问本层以及权限更低层的数据。
如果用户态运行的系统要控制系统或者运行系统代码,就要提权至R0,也就是从用户态进入核心态中,中间的切换就是syscall的作用,以notepad.exe为例,如下图:
简单来讲,syscall就是一种绕过杀软用户态hook的方式,通过syscall生成的exe文件会构造syscall stub的汇编指令直接进入内核态调用里面的函数,相对于常规的exe文件,就不会调用大量系统自带的dll文件,更容易绕过杀软的检测。
基本的syscall stub:
mov r10,rcx
mov eax,[系统调用号]
syscall
ret
0x02 Syscall Bypass 杀软原理
如下图所示,当用户在运行Malware.exe时,系统会调用一些windows API,有些杀软就会hook系统所调用的API,但是最终我们调用的还是Ntxxx这个种函数,此时有些Ntxxx函数并没有被杀软 hook,因此可以Bypass 杀软。
0x03 利用Syscall上线实验
然后,结合syscall的原理,编写上线代码:
GetMainModule——关键函数 获取指定进程的主模块句柄
上面是初始化,是调用函数前必须要进行的预处理。
初始化后,首先需要利用LocalAlloc函数为线程的模块内存申请。
之后调用EnumProcessModules来获取存储模块句柄所需的空间大小(以字节为单位)。
改代码是一个egg代码,主要目的是通过改代码与自定义函数FindAndReplace配合,准确定位syscall代码的位置。
准备充分后通过syscall调用NtAllocateVirtualMemory函数与NtWriteVirtualMemory函数实现内存的申请与写入。
最终通过NtCreateThreadEx函数创建线程,成功实现shellcode上线。
0x04 杀软效果检测
360,成功上线不报毒
360核晶,成功上线不报毒
火绒,成功上线不报毒
Win Defender,成功上线不报毒
本文所涉及源码
原文始发于微信公众号(赤鸢安全):【免杀】突破 360 核晶防护的 Syscall 免杀策略
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论