免杀原理
0x01 前言
何为免杀,免杀就是一种逃脱杀毒软件查杀的方法,免杀的目的就是绕过“墙”,去执行危险的操作。那么如何绕过这堵“墙”,就是免杀的本质。有句俗话说得好“知己知彼,百战不殆”,想要用好免杀,就必须先了解对手,有何能耐,它的工作方式以及它是如何知道文件中含有恶意代码。
技术也存在双面性的,通过研究免杀技术,我们也可以去分析,黑客会用什么办法来绕过防护,进行恶意操作,从而对这堵无形的“墙”进行加固。
0x02 杀毒原理
杀毒软件分类:
杀毒软件的种类非常多,例如,流量查杀、代码查杀、脚本查杀、二进制查杀,但是万变不离其宗,要么就是安装在本地、要么就是在网络中的云端,所以我认为杀毒软件应该分为两大类,本地杀软和云端杀软。
-
本地杀软:
-
这类杀毒软件主要安装在用户的本地设备上,例如个人电脑、笔记本电脑或移动设备。它们的功能是检测、识别和清除本地设备上的恶意软件和病毒。
-
本地杀毒软件通常提供实时保护功能,监控设备的文件、下载和执行过程,以防止恶意软件的感染和传播。用户可以通过更新病毒库等方式保持杀毒软件的检测能力。
-
例如:
- 360
- QQ电脑管家
- 火绒
-
-
远程杀软:
-
这类杀毒软件工作在网络或云端,通过远程方式来检测和清除恶意软件。它们可能是云端杀毒引擎、网络防护设备或者云端服务。
-
远程杀毒软件通常能够扫描网络流量、电子邮件附件、下载文件等,以及在云端检测和隔离潜在的恶意软件,从而保护多个设备免受病毒和恶意软件的侵害。这种类型的杀毒软件可以为企业和组织提供全面的网络安全保护。
-
例如:
- 阿里云盾
- 360杀软云
-
杀毒软件基本原理
杀毒软件的工作原理是通过一系列技术手段识别、拦截和清除计算机系统中的恶意软件(病毒、木马、间谍软件等)。其工作原理主要包括以下几个方面:
- 病毒特征识别:
- 杀毒软件会使用病毒数据库中的病毒特征码来识别已知的病毒。
- 这些特征码是病毒样本的特定标识,杀毒软件通过扫描系统文件和程序,将它们的特征与数据库中的特征码进行比对,来检测潜在的威胁。
- 行为监控:
- 杀毒软件会监控系统中程序的行为,例如监视其访问、修改文件的行为等。
- 当程序的行为符合病毒或恶意软件的特征时,杀毒软件会进行警告或阻止。
- 启发式分析:
- 对于未知的病毒,杀毒软件使用启发式分析技术。
- 它会检查程序的行为、代码结构等特征,来判断其是否可能是病毒。这种方法并非依赖于已知的特征码,而是根据行为和代码模式进行判断。
- 沙箱技术:
- 杀毒软件可能使用沙箱技术,将可疑程序隔离在一个虚拟的安全环境中运行,观察其行为,以防止其对真实系统的影响。
- 实时保护:
- 杀毒软件提供实时保护功能,监控系统的实时文件访问,对正在执行的程序进行扫描,确保系统在运行时不受恶意软件的侵害。
- 定期扫描和更新:
- 杀毒软件定期对系统进行全盘扫描,并且通过更新病毒数据库来识别新的病毒。定期更新是保持杀毒软件有效性的关键。
总的来说,杀毒软件通过识别已知病毒的特征码、监控系统行为、启发式分析未知程序、使用沙箱技术等多种手段,来保护计算机系统免受恶意软件的侵害。
0x03 免杀思路
在上述章节中,我们了解到杀软的基本工作原理,一般来说杀毒软件都会通过自己的特征库,来判断一个程序中是否含有恶意代码,又或者通过程序运行的行为来判断,那么我们绕过这堵“墙”的思路,就是让我编写的代码不能被,特征库匹配上,或运行的过程不能让杀软检测到恶意操作,所以在编写灭杀代码时,我们就需要思考三个问题。
- 我的代码中哪些段落或行为被特征库识别到?既定位关键点
- 分析为什么这串代码被识别为恶意代码? 既分析关键点
- 如何绕过杀软的特征库? 既混淆关键点
接下来我会使用PHP的一句话木马和D盾来验证我的思路。
第一步 定位关键点
写一个一句话webshell,进行测试。
<?php @eval($_GET['cmd']); ?>
使用D盾进行扫描,发现存在eval后门,为什么D盾能发现后门呢?难道是eval()
?但是这么一棒子打死所有人真的对吗?既然eval()
这么容易被利用,为什么php官方还不将他删除呢?
eval()
用于执行字符串中的 PHP 代码。这个函数将传入的字符串当作 PHP 代码来解析和执行。它的存在就一定有价值,这个函数一般都用于动态的去生成php代码,有了这个函数就可以,去实现模板网页的动态操作。
现在我们怀疑eval()
就是特征库查杀的关键点,那么我们尝试去掉里面的参数,看看D盾是否还会报错。
去掉参数后,发现D盾没有在将eval()
函数,当作一个后门。那么现在就可以确定,问题出现内部的参数,现在我们也完成了第一步,定位关键点
第二步 分析关键点
现在我们要来分析,是不是在eval()
函数内,只要存在参数就会报错!!
和之前所说的一样,任何函数的存在,都有一定的价值,在此处我添加了一句php的输出代码,但是D盾并未查杀到后门,可以确定的是在eval()
函数中存在参数,也不会认定未后门shell,继续分析是否在eval()
中输入$GET[]
超全局变量,就会引起D盾的查杀。
当在eval()
输入$_GET[]
超全局变量时,D盾判断该代码为后门了,此时也就完成了第二步分析关键点。
第三步 混淆关键点
在得到关键点后,就要开始考虑如何绕过D盾的查杀,执行我们想要的命令,
首先 eval()
和$_GET[]
只要结合就会判断为后门,我们是否可以使用变量
、函数
、类
、序列化
来进行绕过呢?我们一步一步测试。
使用变量去绕过失败:
使用函数包裹住$_GET[]
后发现,没有在直接报后门shell,此时为可疑eval,此时说明我们的操作是有效果的,只是还无法完全绕过D盾。
使用类来绕过任然和函数一样,无法完全绕过D盾。
最后通过序列化函数serialize()
、解序列化函数unserialize()
、字符串截取函数substr()
成功绕过了D盾限制。
0x04 总结
总结一下思路,首先要定位哪一行代码,会被杀软拦截,接着分析为什么会被拦截,最后根据现有线索去猜测拦截规则,从而绕过杀软拦截。