CN117828595A - 一种攻击程序通过杀毒软件检测的方法和装置 - Google Patents

一种攻击程序通过杀毒软件检测的方法和装置 Download PDF

Info

Publication number
CN117828595A
CN117828595A CN202311710704.3A CN202311710704A CN117828595A CN 117828595 A CN117828595 A CN 117828595A CN 202311710704 A CN202311710704 A CN 202311710704A CN 117828595 A CN117828595 A CN 117828595A
Authority
CN
China
Prior art keywords
shellcode
attack program
attack
memory
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311710704.3A
Other languages
English (en)
Inventor
王宇
苟孟洛
王炎
宋涧山
王浩辰
李�浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianyi Cloud Technology Co Ltd
Original Assignee
Tianyi Cloud Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tianyi Cloud Technology Co Ltd filed Critical Tianyi Cloud Technology Co Ltd
Priority to CN202311710704.3A priority Critical patent/CN117828595A/zh
Publication of CN117828595A publication Critical patent/CN117828595A/zh
Pending legal-status Critical Current

Links

Abstract

本发明涉及一种攻击程序通过杀毒软件检测的方法、装置、电子设备和存储介质,属于信息安全技术领域,该方法包括:加密shellcode;在攻击程序运行前,判断攻击程序是否在沙箱环境中,若判断结果为不在沙箱环境中,将攻击程序需要的系统调用函数利用汇编语言添加到攻击程序中;解密shellcode;创建一个挂起状态的白名单进程;开辟一块内存,将解密的shellcode写入内存;获取写入内存的shellcode地址作为APC的回调函数;将shellcode加入目标线程的APC队列;使用系统调用函数恢复目标线程的主线程,从而执行shellcode。本发明使生成的攻击程序在执行前中后都能通过杀毒软件的检测。

Description

一种攻击程序通过杀毒软件检测的方法和装置
技术领域
本发明属于信息安全技术领域,尤其涉及一种攻击程序通过杀毒软件检测的方法、装置、电子设备和存储介质。
背景技术
随着攻击技术的不断进化,安全研究人员和工业界开发了各种检测和防护机制,来对抗攻击行为。目前主流杀毒软件会使用静态检测、动态检测、导入表检测、沙箱检测、内存扫描等手段。现有攻击技术方案中主要有特征隐藏免杀、分离免杀、防沙箱检测等手段进行免杀,但是随着检测技术的更新迭代,现有技术方案已经无法通过主流杀毒软件的多层防护检测。
现有技术方案中主要存在以下几点技术问题:
1、对shellcode的加密或编码方式过于简单,例如异或加密、base64编码等方式来混淆shellcode。目前的主流杀毒软件可以通过模式识别、启发式分析等手段对简单的加密和混淆技术进行检测并解密,从而shellcode就很容易暴露出来,从而使程序在执行前就失去免杀能力。
2、直接调用windows api中的敏感函数,这些会被杀毒软件的导入表检测策略识别出来。目前的主流杀毒软件都有一个已知的“敏感函数”列表。这些函数经常被恶意代码用于执行某些恶意活动,如申请内存、创建远程线程、文件操作等。如果一个可执行文件直接导入这些函数,杀毒软件就会标记程序为可疑,从而使程序在执行中就会失去免杀能力。
3、部分攻击技术方案将windows api的调用隐藏于一个自定义静态库中,并链接此静态库到主程序中,但此种手段仍然会使api的调用出现在导入表中。因为静态库在链接时实际上是合并到最终的可执行文件中的,而所有的外部函数调用仍需要解析。
4、程序中申请的内存的数据和代码会被基于行为的恶意软件检测所监控(内存扫描)。杀毒软件通过检测内存中的特定模式或迹象,可以识别出恶意行为,即使这些行为在静态分析中可能不明显,从而使程序执行后失去免杀能力。
发明内容
鉴于以上现有技术的不足,发明的目的在于提供一种攻击程序通过杀毒软件检测的方法、装置、电子设备和存储介质,使生成的攻击程序在执行前中后都能通过杀毒软件的检测。
本发明的第一方面,提出了一种攻击程序通过杀毒软件检测的方法,包括:
使用自定义的Encrypt加密算法加密C语言格式的shellcode;
在攻击程序运行前,判断攻击程序是否在沙箱环境中,若判断结果为所述攻击程序不在沙箱环境中;
将攻击程序需要的系统调用函数利用汇编语言添加到所述攻击程序中;
使用自定义的Decrypt解密算法对shellcode进行解密;
创建一个挂起状态的白名单进程;
使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存;
获取写入内存的shellcode地址作为APC的回调函数;
使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列;
使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,使用自定义的Encrypt加密算法加密C语言格式的shellcode,包括:
将shellcode转换为十六进制字符串;
生成一个随机密码;
加密十六进制字符串;
将随机密码和加密后的十六进制字符串拼接起来输出加密后的字符串。
进一步地,上述一种攻击程序通过杀毒软件检测的方法,还包括:
判断攻击程序是否在沙箱环境中,若判断结果为所述攻击程序在沙箱环境中;
检测沙箱环境中是否运行了预先设置的进程;
若运行了所述预先设置的进程,终止所述攻击程序。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,使用自定义的Decrypt解密算法对shellcode进行解密,包括:
从加密后的字符串中提取前十个字符作为密码,剩余部分为EncodeText;
初始化两个索引i和k,其中,i用于遍历EncodeText,k用于在shellcode中放置解密字符;
对EncodeText中每个字符进行解密处理。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,系统调用函数中的NTQueueApcThread包括三个参数:APC函数,目标线程的句柄以及APC函数的参数。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,在攻击程序运行前,还包括:
检测CPU核心是否大于2、内存是否大于4G;
若检测结果为CPU核心小于2或内存小于4G,则终止攻击程序。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,所述预先设置的进程至少包括:
VMware:vmtoolsd.exe、vmwaretray.exe;
VirtualBox:VBoxService.exe、VBoxTray.exe;
Parallels:prl_cc.exe、prl_tools.exe;
Sandboxie:SbieSvc.exe。
本发明的第二方面,提出了一种攻击程序通过杀毒软件检测的装置,包括:
加密模块:用于使用自定义的Encrypt加密算法加密C语言格式的shellcode;
判断模块:用于在攻击程序运行前,判断所述攻击程序是否在沙箱环境中,若判断结果为所述攻击程序不在沙箱环境中;
添加模块:用于将攻击程序需要的系统调用函数利用汇编语言添加到所述攻击程序中;
解密模块:用于使用自定义的Decrypt解密算法对shellcode进行解密;
创建模块:用于创建一个挂起状态的白名单进程;
写入模块:用于使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存;
获取模块:用于获取写入内存的shellcode地址作为APC的回调函数;
加入模块:用于使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列;
恢复模块:用于使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
本发明的第三方面,还提出了一种电子设备,包括:处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如上所述任一项所述一种攻击程序通过杀毒软件检测的方法。
本发明的第四方面,还提出了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如上所述任一项所述一种攻击程序通过杀毒软件检测的方法。
本发明的有益效果如下:本发明对shellcode的加解密算法是自定义的,可以防止杀毒软件模式识别、启发式分析等手段对密文自动解密,且对相同shellcode每次加密生成的密钥和密文都是不同的,可以防止杀毒软件的特征识别;全程使用自行添加到程序的系统调用函数来实现和Windows api中的敏感函数一样的功能,从而使杀毒软件的视角看本发明的所生成的程序在导入表中没有任何申请内存、写入代码等敏感操作函数;使用APC注入的方式执行shellcode,从而使shellcode与主机进程的正常操作高度集成并且只有在特定的时间窗口内,相关代码和数据结构才存在于目标进程内存中,这使得内存扫描工具更难以区分正常行为与恶意行为。
附图说明
附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图一;
图2为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图二;
图3为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图三;
图4为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图四;
图5为本发明实施例提供的一种攻击程序通过杀毒软件检测的装置图;
图6为本发明实施例提供的一种电子设备的示意性框图。
具体实施方式
为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。应该理解,这些描述只是示例性的,并非用于限定本发明的范围。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明公开的概念。
在本发明的描述中,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的方法和系统的例子。
本发明提出了一种攻击程序通过杀毒软件检测的方法、装置、电子设备和存储介质,使生成的攻击程序在执行前中后都能通过杀毒软件的检测。。
方法实施例
图1为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图一。
本发明的第一方面,提出一种攻击程序通过杀毒软件检测的方法,结合图1,包括S1至S9九个步骤:
S1:使用自定义的Encrypt加密算法加密C语言格式的shellcode。
具体的,使用自定义的Encrypt加密算法加密C语言格式的shellcode,避免杀毒软件使用模式匹配等来识别已知的加密或编码模式,例如简单的异或,并且随着安全策略的变化或被检测,本发明可以轻松地对自定义算法进行微调或改进;对相同的shellcode每次加密后的密钥和密文都是随机的,理论上一个shellcode可以有3,628,800种密文,防止被定位特征。
S2:在攻击程序运行前,判断攻击程序是否在沙箱环境中,若判断结果为攻击程序不在沙箱环境中。
S3:将攻击程序需要的系统调用函数利用汇编语言添加到攻击程序中。
具体的,本发明实施例中,攻击程序需要的系统调用函数包括:NtAllocateVirtualMemory、NtWriteVirtualMemory、NTQueueApcThread和NTResumeThread,利用汇编语言将攻击程序需要的系统调用函数添加到攻击程序中。
S4:使用自定义的Decrypt解密算法对shellcode进行解密。
具体的,本发明实施例中,使用自定义的Decrypt解密算法对shellcode进行解密的方法下文详细介绍。
S5:创建一个挂起状态的白名单进程。
具体的,本发明实施例中,创建一个挂起状态的白名单进程,由于进程的主线程是挂起状态,因此不会立即执行,后续在主线程开始执行之前,对进程进行修改,并且这个进程是白名单进程,例如:explore.exe、notepad++.exe。
S6:使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存;
具体的,本发明实施例中,不使用Windows api定义的敏感函数,而是使用NtAllocateVirtualMemory和NtWriteVirtualMemory,这样就可以避免在导入表中看到这些敏感函数,从而防止反恶意软件产品hook这些Windows api定义的敏感函数。
S7:获取写入内存的shellcode地址作为APC的回调函数。
具体的,本发明实施例中,获取写入内存的shellcode地址作为APC的回调函数确保当APC被执行时,会执行这段shellcode。
S8:使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列;
具体的,现有攻击方案中,shellcode大多都是通过类似分配一块内存,将shellcode放入内存中,然后执行内存来执行的,这种方式会被杀毒软件或入侵检测/预防系统通过敏感内存扫描的方式轻而易举的检测到,本发明通过将shellcode注入到目标线程的APC队列当中来躲避内存扫描。
S9:使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
具体的,本发明实施例中,由于新线程在初始化时会调用NtTestAlert函数,该函数会检查并执行线程的APC队列,所以先前加入队列的shellcode将被执行。
本发明使用APC注入来执行shellcode和现有攻击方案相比具有如下优势:APC注入一般是动态和瞬态的,只有在特定的时间窗口内,相关代码和数据结构才存在于目标进程内存中;APC是Windows操作系统中用于异步执行代码的合法机制;通过APC注入,恶意代码可能与主机进程的正常操作高度集成,这使得内存扫描工具更难以区分正常行为与恶意行为。
将攻击程序需要的NtAllocateVirtualMemory利用汇编语言添加到攻击程序中是通过下面的汇编语言实现的:
NtAllocateVirtualMemory PROC
mov[rsp+8],rcx;Save registers.
mov[rsp+16],rdx
mov[rsp+24],r8
mov[rsp+321,r9
sub rsp,28h
mov ecx,01D921513h;Load function hash into Ecx.
call SW3 GetsyscallNumber;Resolve function hash intosyscall number.
add rsp,28h
mov rcx,[rsp+8];Restore registers.
mov rdx,[rsp+16]
mov r8,[rsp+24]
mov r9,[rsp+32]
mov r10,rcx
syscall;Invoke system call.
ret
NtAllocateVirtualMemory ENDP
将攻击程序需要的NtWriteVirtualMemory利用汇编语言添加到攻击程序中是通过下面的汇编语言实现的:
NtWriteVirtualMemory PROC
mov[rsp+8],rcx;Save registers.
mov[rsp+16],rdx
mov[rsp+24],r8
mov[rsp+32],r9
sub rsp,28h
mov ecx,03FAD253Fh;Load function hash into Ecx.
call sw3 GetsyscallNumber;Resolve function hash into syscallnumber.
add rsp,28h
mov rcx,[rsp+8];Restore reqisters.
mov rdx,[rsp+16]
mov r8,[rsp+24]
mov r9,[rsp+32]
mov r10,rcx
syscall;Invoke system call.
ret
NtWriteVirtualMemory ENDP
将攻击程序需要的NTQueueApcThread利用汇编语言添加到攻击程序中是通过下面的汇编语言实现的:
NtQueueApcThread PROC
mov[rsp+8],rcx;save reqisters.
mov[rsp+16],rdx
mov[rsp+24],r8
mov[rsp+32],r9
sub rsp,28h
mov ecx,002AE181Fh;Load function hash into Ecx.
call SW3 GetSyscal1Number;Resolve function hash intosyscall number.
add rsp,28h
mov rcx,[rsp+8];Restore registers.
mov rdx,[rsp+16]
mov r8,[rsp+24]
mov r9,[rsp+32]
mov r10,rcx
syscall;Invoke system call.
ret
NtQueueApcThread ENDP
将攻击程序需要的NTResumeThread利用汇编语言添加到攻击程序中是通过下面的汇编语言实现的:
NtResumeThread PRoc
mov[rsp+8],rcx;save reqisters.
mov[rsp+16],rdx
mov[rsp+24],r8
mov[rsp+32],r9
sub rsp,28h
mov ecx,08993D52Bh;Load function hash into Ecx.
call SW3 GetsyscallNumber;Resolve function hash into syscall number.
add rsp,28h
mov rcx,[rsp+8];Restore registers.
mov rdx,[rsp+16]
mov r8,[rsp+24]
mov r9,[rsp+32]
mov r10,rcx
Syscall;Invoke system call.
retNtResumeThread ENDP
图2为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图二。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,使用自定义的Encrypt加密算法加密C语言格式的shellcode,结合图2,包括S21至S24四个步骤:
S21:将shellcode转换为十六进制字符串。
具体的,本发明实施例中,将shellcode转换为十六进制字符串是通过如下(a)到(d)实现的:(a)输入原始的shellcode字符串;(b)对shellcode字符串中的每个字符,取其ASCII值并转换为十六进制;(c)将得到的每个十六进制值前添加",0x"前缀;(d)得到十六进制字符串srcStr。
S22:生成一个随机密码。
具体的,本发明实施例中,生成一个随机密码是通过如下(a)到(c)实现的:(a)定义一个原始密码0123456789,在此定义为s;(b)随机排列字符串s;(c)得到随机排列后的字符串password。
S23:加密十六进制字符串。
具体的,本发明实施例中,加密十六进制字符串是通过如下(a)到(c)实现的:(a)将srcStr使用",0x"分割,得到一个十六进制值的列表;(b)遍历该列表中的每一个十六进制值:(i)将十六进制值转换为整数;(ii)再将该整数转换为字符串;(ii)用密码中的字符替换该字符串中的每个数字。例如,如果数字是2,它会被替换为密码中的第二个字符;(iii)在该新字符串前加上其字符长度;(c)将转换后的所有字符串连接起来。
S24:将随机密码和加密后的十六进制字符串拼接起来输出加密后的字符串。
图3为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图三。
进一步地,上述一种攻击程序通过杀毒软件检测的方法,结合图3,还包括S31至S33三个步骤:
S31:判断攻击程序是否在沙箱环境中,若判断结果为攻击程序在沙箱环境中;
S32:检测沙箱环境中是否运行了预先设置的进程;
S33:若运行了预先设置的进程,终止攻击程序。
具体的,本发明实施例中,沙箱环境中运行特定的服务和工具,以便更好地集成宿主机和虚拟机,或者以便分析沙箱中运行的程序的行为,所以首先要检测沙箱环境环境中是否运行了以下预先设置的进程:
VMware:vmtoolsd.exe、vmwaretray.exe;
VirtualBox:VBoxService.exe、VBoxTray.exe;
Parallels:prl_cc.exe、prl_tools.exe;
Sandboxie:SbieSvc.exe。
若运行了预先设置的进程,便直接终止程序。
图4为本发明实施例提供的一种攻击程序通过杀毒软件检测的方法图四。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,使用自定义的Decrypt解密算法对shellcode进行解密,结合图4,包括S41至S43三个步骤:
S41:从加密后的字符串中提取前十个字符作为密码,剩余部分为EncodeText。
具体的,本发明实施例中,从加密后的字符串中提取前十个字符作为密码,这是加密时用于映射的密码;提取字符串中的剩余部分为EncodeText,这是实际的加密内容。
S42:初始化两个索引i和k,其中,i用于遍历EncodeText,k用于在shellcode中放置解密字符。
S43:对EncodeText中每个字符进行解密处理。
具体的,本发明实施例中,对EncodeText中的每个字符进行解密处理,是通过循环执行如下(a)到(c)步骤的操作,直到EncodeText中的所有字符都被处理实现的。
(a)读取数字长度:(i)从当前i位置的EncodeText中读取数字,这告诉我们接下来要读取多少个数字来解码一个字符;(b)读取和解密数字:对于这个长度内的每个数字(从i+1开始):(i)提取数字;(ii)查找此数字在真正的密码中的位置;(iii)使用找到的位置构建一个新的数字字符串RealText;(c)更新索引并存储解密的字符:(i)将构建的数字字符串RealText转换为一个整数;(ii)这个整数的低8位是原始的字符,将其存储在shellcode的当前k位置;(iii)将k增加1以准备存放下一个字符;(iv)将i增加已读取的数字的数量以跳过它们。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,系统调用函数中的NTQueueApcThread包括三个参数:APC函数,目标线程的句柄以及APC函数的参数。
具体的,本发明实施例中,APC函数是shellcode的地址,APC函数的参数通常设置为NULL。本发明通过使用系统调用函数NTQueueApcThread中的三个参数将shellcode加入目标线程的APC队列。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,在攻击程序运行前,还包括:
检测CPU核心是否大于2、内存是否大于4G;
若检测结果为CPU核心小于2或内存小于4G,则终止攻击程序。
具体的,本发明实施例中,在攻击程序运行前还对攻击程序运行的资源CPU核心和内存进行检测,若CPU核心小于2或内存小于4G,则立即终止攻击程序。
进一步地,上述一种攻击程序通过杀毒软件检测的方法中,所述预先设置的进程至少包括:
VMware:vmtoolsd.exe、vmwaretray.exe;
VirtualBox:VBoxService.exe、VBoxTray.exe;
Parallels:prl_cc.exe、prl_tools.exe;
Sandboxie:SbieSvc.exe。
在一些实施例中,还可以包括其它进程,并不以此限定本发明的保护范围。
装置实施例
图5为本发明实施例提供的一种攻击程序通过杀毒软件检测的装置图。
本发明的第二方面,提出了一种攻击程序通过杀毒软件检测的装置,结合图5,包括:
加密模块51:用于使用自定义的Encrypt加密算法加密C语言格式的shellcode。
具体的,使用加密模块51加密C语言格式的shellcode,避免杀毒软件使用模式匹配等来识别已知的加密或编码模式,例如简单的异或,并且随着安全策略的变化或被检测,本发明可以轻松地对自定义算法进行微调或改进;对相同的shellcode每次加密后的密钥和密文都是随机的,理论上一个shellcode可以有3,628,800种密文,防止被定位特征。
判断模块52:用于在攻击程序运行前,判断攻击程序是否在沙箱环境中,若判断结果为攻击程序不在沙箱环境中;
具体的,判断模块52在攻击程序运行前,判断攻击程序是否在沙箱环境中,若判断结果为攻击程序不在沙箱环境中。
添加模块53:用于将攻击程序需要的系统调用函数利用汇编语言添加到所述攻击程序中。
具体的,本发明实施例中,攻击程序需要的系统调用函数包括:NtAllocateVirtualMemory、NtWriteVirtualMemory、NTQueueApcThread和NTResumeThread,添加模块53利用汇编语言将攻击程序需要的系统调用函数添加到攻击程序中。
解密模块54:用于使用自定义的Decrypt解密算法对shellcode进行解密。
具体的,本发明实施例中,使用解密模块54对shellcode进行解密的方法下文详细介绍。
创建模块55:用于创建一个挂起状态的白名单进程。
具体的,本发明实施例中,创建模块55创建一个挂起状态的白名单进程,由于进程的主线程是挂起状态,因此不会立即执行,后续在主线程开始执行之前,对进程进行修改,并且这个进程是白名单进程,例如:explore.exe、notepad++.exe。
写入模块56:用于使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存。
具体的,本发明实施例中,不使用Windows api定义的敏感函数,而是使用NtAllocateVirtualMemory和NtWriteVirtualMemory,这样就可以避免在导入表中看到这些敏感函数,从而防止反恶意软件产品hook这些Windows api定义的敏感函数。
获取模块57:用于获取写入内存的shellcode地址作为APC的回调函数。
具体的,本发明实施例中,获取模块57获取写入内存的shellcode地址作为APC的回调函数确保当APC被执行时,会执行这段shellcode。
加入模块58:用于使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列。
具体的,现有攻击方案中,shellcode大多都是通过类似分配一块内存,将shellcode放入内存中,然后执行内存来执行的,这种方式会被杀毒软件或入侵检测/预防系统通过敏感内存扫描的方式轻而易举的检测到,本发明通过将shellcode注入到目标线程的APC队列当中来躲避内存扫描。
恢复模块59:用于使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
具体的,本发明实施例中,由于新线程在初始化时会调用NtTestAlert函数,该函数会检查并执行线程的APC队列,所以先前加入队列的shellcode将被执行。
本发明使用APC注入来执行shellcode和现有攻击方案相比具有如下优势:APC注入一般是动态和瞬态的,只有在特定的时间窗口内,相关代码和数据结构才存在于目标进程内存中;APC是Windows操作系统中用于异步执行代码的合法机制;通过APC注入,恶意代码可能与主机进程的正常操作高度集成,这使得内存扫描工具更难以区分正常行为与恶意行为。
本发明的第三方面,还提出了一种电子设备,包括:处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如上所述任一项所述一种攻击程序通过杀毒软件检测的方法。
本发明的第四方面,还提出了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如上所述任一项所述一种攻击程序通过杀毒软件检测的方法。
图6是本发明实施例提供的一种电子设备的示意性框图。
如图6所示,电子设备包括:至少一个处理器601、至少一个存储器602和至少一个通信接口603。电子设备中的各个组件通过总线系统604耦合在一起。通信接口603,用于与外部设备之间的信息传输。可理解,总线系统604用于实现这些组件之间的连接通信。总线系统604除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但为了清楚说明起见,在图6中将各种总线都标为总线系统604。
可以理解,本实施例中的存储器602可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。
在一些实施方式中,存储器602存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统和应用程序。
其中,操作系统,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序,包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本发明实施例提供的一种攻击程序通过杀毒软件检测的方法中任一方法的程序可以包含在应用程序中。
在本发明实施例中,处理器601通过调用存储器602存储的程序或指令,具体的,可以是应用程序中存储的程序或指令,处理器601用于执行本发明实施例提供的一种攻击程序通过杀毒软件检测的方法各实施例的步骤。
使用自定义的Encrypt加密算法加密C语言格式的shellcode;
在攻击程序运行前,判断攻击程序是否在沙箱环境中,若判断结果为所述攻击程序不在沙箱环境中,
将攻击程序需要的系统调用函数利用汇编语言添加到所述攻击程序中;
使用自定义的Decrypt解密算法对shellcode进行解密;
创建一个挂起状态的白名单进程;
使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存;
获取写入内存的shellcode地址作为APC的回调函数;
使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列;
使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
本发明实施例提供的一种攻击程序通过杀毒软件检测的方法中任一方法可以应用于处理器601中,或者由处理器601实现。处理器601可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器601中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器601可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本发明实施例提供的一种攻击程序通过杀毒软件检测的方法中任一方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器602,处理器601读取存储器602中的信息,结合其硬件完成方法的步骤。
本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
本领域的技术人员能够理解,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种攻击程序通过杀毒软件检测的方法,其特征在于,包括:
使用自定义的Encrypt加密算法加密C语言格式的shellcode;
在攻击程序运行前,判断所述攻击程序是否在沙箱环境中,若判断结果为所述攻击程序不在沙箱环境中;
将所述攻击程序需要的系统调用函数利用汇编语言添加到所述攻击程序中;
使用自定义的Decrypt解密算法对shellcode进行解密;
创建一个挂起状态的白名单进程;
使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存;
获取写入内存的shellcode地址作为APC的回调函数;
使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列;
使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
2.根据权利要求1所述的一种攻击程序通过杀毒软件检测的方法,其特征在于,所述使用自定义的Encrypt加密算法加密C语言格式的shellcode,包括:
将shellcode转换为十六进制字符串;
生成一个随机密码;
加密十六进制字符串;
将随机密码和加密后的十六进制字符串拼接起来输出加密后的字符串。
3.根据权利要求1所述的一种攻击程序通过杀毒软件检测的方法,其特征在于,所述方法还包括:
判断所述攻击程序是否在沙箱环境中,若判断结果为所述攻击程序在沙箱环境中;
检测沙箱环境中是否运行了预先设置的进程;
若运行了所述预先设置的进程,终止所述攻击程序。
4.根据权利要求1所述的一种攻击程序通过杀毒软件检测的方法,其特征在于,所述使用自定义的Decrypt解密算法对shellcode进行解密,包括:
从加密后的字符串中提取前十个字符作为密码,剩余部分为EncodeText;
初始化两个索引i和k,其中,i用于遍历EncodeText,k用于在shellcode中放置解密字符;
对EncodeText中每个字符进行解密处理。
5.根据权利要求1所述的一种攻击程序通过杀毒软件检测的方法,其特征在于,所述系统调用函数中的NTQueueApcThread包括三个参数:APC函数,目标线程的句柄以及APC函数的参数。
6.根据权利要求1所述的一种攻击程序通过杀毒软件检测的方法,其特征在于,在攻击程序运行前,所述方法还包括:
检测CPU核心是否大于2、内存是否大于4G;
若检测结果为CPU核心小于2或内存小于4G,则终止攻击程序。
7.根据权利要求3所述的一种攻击程序通过杀毒软件检测的方法,其特征在于,所述预先设置的进程至少包括:
VMware:vmtoolsd.exe、vmwaretray.exe;
VirtualBox:VBoxService.exe、VBoxTray.exe;
Parallels:prl_cc.exe、prl_tools.exe;
Sandboxie:SbieSvc.exe。
8.一种攻击程序通过杀毒软件检测的装置,其特征在于,包括:
加密模块:用于使用自定义的Encrypt加密算法加密C语言格式的shellcode;
判断模块:用于在攻击程序运行前,判断所述攻击程序是否在沙箱环境中,若判断结果为所述攻击程序不在沙箱环境中;
添加模块:用于将所述攻击程序需要的系统调用函数利用汇编语言添加到所述攻击程序中;
解密模块:用于使用自定义的Decrypt解密算法对shellcode进行解密;
创建模块:用于创建一个挂起状态的白名单进程;
写入模块:用于使用系统调用函数中的NtAllocateVirtualMemory开辟一块内存,使用系统调用函数中的NtWriteVirtualMemory将解密后的shellcode写入内存;
获取模块:用于获取写入内存的shellcode地址作为APC的回调函数;
加入模块:用于使用系统调用函数中的NTQueueApcThread将shellcode加入目标线程的APC队列;
恢复模块:用于使用系统调用函数中的NTResumeThread恢复目标线程的主线程,从而shellcode被执行。
9.一种电子设备,其特征在于,包括:处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至7任一项所述一种攻击程序通过杀毒软件检测的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如权利要求1至7任一项所述一种攻击程序通过杀毒软件检测的方法。
CN202311710704.3A 2023-12-13 2023-12-13 一种攻击程序通过杀毒软件检测的方法和装置 Pending CN117828595A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311710704.3A CN117828595A (zh) 2023-12-13 2023-12-13 一种攻击程序通过杀毒软件检测的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311710704.3A CN117828595A (zh) 2023-12-13 2023-12-13 一种攻击程序通过杀毒软件检测的方法和装置

Publications (1)

Publication Number Publication Date
CN117828595A true CN117828595A (zh) 2024-04-05

Family

ID=90523529

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311710704.3A Pending CN117828595A (zh) 2023-12-13 2023-12-13 一种攻击程序通过杀毒软件检测的方法和装置

Country Status (1)

Country Link
CN (1) CN117828595A (zh)

Similar Documents

Publication Publication Date Title
CN111052115B (zh) 取决于调用路径的认证的数据处理装置和方法
KR101067399B1 (ko) 대칭 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
KR101256149B1 (ko) 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치
KR100996784B1 (ko) 공개 키 암호화에 기초한 데이터의 저장 및 검색을 위한, 컴퓨팅 장치에서 구현되는 방법, 시스템 및 복수의 명령어를 저장하는 하나 이상의 컴퓨터 판독가능 매체
Li et al. Mechanisms of polymorphic and metamorphic viruses
US8959350B2 (en) Token for securing communication
US8683208B2 (en) Information processing device, program developing device, program verifying method, and program product
US9602289B2 (en) Steganographic embedding of executable code
US10354064B2 (en) Computer implemented method and a system for controlling dynamically the execution of a code
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
KR101798672B1 (ko) 코드 불변식을 이용한 스테가노그래픽 메시징 시스템
KR101687439B1 (ko) 소프트웨어 무결성을 보장하기위한 프로세서 실행 방법
US9892661B2 (en) Steganographic embedding of hidden payload
US20070074038A1 (en) Method, apparatus and program storage device for providing a secure password manager
US7607122B2 (en) Post build process to record stack and call tree information
US20110271350A1 (en) method for protecting software
Lee et al. Classification and analysis of security techniques for the user terminal area in the internet banking service
CN117828595A (zh) 一种攻击程序通过杀毒软件检测的方法和装置
CN108667594B (zh) 一种基于pki公钥算法的软件程序模块完整性检测方法
KR102618922B1 (ko) 무기체계 임베디드 시스템의 sw 역공학 방지장치 및 그 방법
Gan et al. Using virtual machine protections to enhance whitebox cryptography
Gelbart et al. SPEE: A Secure Program Execution Environment tool using code integrity checking
JP2004280678A (ja) データ処理装置、およびデータ処理方法
CN117592108A (zh) 接口数据脱敏处理方法和装置
CN117610004A (zh) 固件校验方法、系统启动方法、装置、系统、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination