免杀原理(php)

免杀原理

0x01 前言

何为免杀,免杀就是一种逃脱杀毒软件查杀的方法,免杀的目的就是绕过“墙”,去执行危险的操作。那么如何绕过这堵“墙”,就是免杀的本质。有句俗话说得好“知己知彼,百战不殆”,想要用好免杀,就必须先了解对手,有何能耐,它的工作方式以及它是如何知道文件中含有恶意代码。

技术也存在双面性的,通过研究免杀技术,我们也可以去分析,黑客会用什么办法来绕过防护,进行恶意操作,从而对这堵无形的“墙”进行加固。

免杀原理(php)_第1张图片

0x02 杀毒原理

杀毒软件分类:

杀毒软件的种类非常多,例如,流量查杀、代码查杀、脚本查杀、二进制查杀,但是万变不离其宗,要么就是安装在本地、要么就是在网络中的云端,所以我认为杀毒软件应该分为两大类,本地杀软和云端杀软。

  • 本地杀软

    • 这类杀毒软件主要安装在用户的本地设备上,例如个人电脑、笔记本电脑或移动设备。它们的功能是检测、识别和清除本地设备上的恶意软件和病毒。

    • 本地杀毒软件通常提供实时保护功能,监控设备的文件、下载和执行过程,以防止恶意软件的感染和传播。用户可以通过更新病毒库等方式保持杀毒软件的检测能力。

    • 例如:

      • 360
      • QQ电脑管家
      • 火绒
  • 远程杀软

    • 这类杀毒软件工作在网络或云端,通过远程方式来检测和清除恶意软件。它们可能是云端杀毒引擎、网络防护设备或者云端服务。

    • 远程杀毒软件通常能够扫描网络流量、电子邮件附件、下载文件等,以及在云端检测和隔离潜在的恶意软件,从而保护多个设备免受病毒和恶意软件的侵害。这种类型的杀毒软件可以为企业和组织提供全面的网络安全保护。

    • 例如:

      • 阿里云盾
      • 360杀软云

杀毒软件基本原理

杀毒软件的工作原理是通过一系列技术手段识别、拦截和清除计算机系统中的恶意软件(病毒、木马、间谍软件等)。其工作原理主要包括以下几个方面:

  1. 病毒特征识别:
    • 杀毒软件会使用病毒数据库中的病毒特征码来识别已知的病毒。
    • 这些特征码是病毒样本的特定标识,杀毒软件通过扫描系统文件和程序,将它们的特征与数据库中的特征码进行比对,来检测潜在的威胁。
  2. 行为监控:
    • 杀毒软件会监控系统中程序的行为,例如监视其访问、修改文件的行为等。
    • 当程序的行为符合病毒或恶意软件的特征时,杀毒软件会进行警告或阻止。
  3. 启发式分析:
    • 对于未知的病毒,杀毒软件使用启发式分析技术。
    • 它会检查程序的行为、代码结构等特征,来判断其是否可能是病毒。这种方法并非依赖于已知的特征码,而是根据行为和代码模式进行判断。
  4. 沙箱技术:
    • 杀毒软件可能使用沙箱技术,将可疑程序隔离在一个虚拟的安全环境中运行,观察其行为,以防止其对真实系统的影响。
  5. 实时保护:
    • 杀毒软件提供实时保护功能,监控系统的实时文件访问,对正在执行的程序进行扫描,确保系统在运行时不受恶意软件的侵害。
  6. 定期扫描和更新:
    • 杀毒软件定期对系统进行全盘扫描,并且通过更新病毒数据库来识别新的病毒。定期更新是保持杀毒软件有效性的关键。

总的来说,杀毒软件通过识别已知病毒的特征码、监控系统行为、启发式分析未知程序、使用沙箱技术等多种手段,来保护计算机系统免受恶意软件的侵害。

0x03 免杀思路

在上述章节中,我们了解到杀软的基本工作原理,一般来说杀毒软件都会通过自己的特征库,来判断一个程序中是否含有恶意代码,又或者通过程序运行的行为来判断,那么我们绕过这堵“墙”的思路,就是让我编写的代码不能被,特征库匹配上,或运行的过程不能让杀软检测到恶意操作,所以在编写灭杀代码时,我们就需要思考三个问题。

  1. 我的代码中哪些段落或行为被特征库识别到?既定位关键点
  2. 分析为什么这串代码被识别为恶意代码? 既分析关键点
  3. 如何绕过杀软的特征库? 既混淆关键点

接下来我会使用PHP的一句话木马和D盾来验证我的思路。

第一步 定位关键点

写一个一句话webshell,进行测试。

 @eval($_GET['cmd']); ?>

使用D盾进行扫描,发现存在eval后门,为什么D盾能发现后门呢?难道是eval()?但是这么一棒子打死所有人真的对吗?既然eval()这么容易被利用,为什么php官方还不将他删除呢?

eval()用于执行字符串中的 PHP 代码。这个函数将传入的字符串当作 PHP 代码来解析和执行。它的存在就一定有价值,这个函数一般都用于动态的去生成php代码,有了这个函数就可以,去实现模板网页的动态操作。

现在我们怀疑eval()就是特征库查杀的关键点,那么我们尝试去掉里面的参数,看看D盾是否还会报错。

免杀原理(php)_第2张图片

去掉参数后,发现D盾没有在将eval()函数,当作一个后门。那么现在就可以确定,问题出现内部的参数,现在我们也完成了第一步,定位关键点

免杀原理(php)_第3张图片

第二步 分析关键点

现在我们要来分析,是不是在eval()函数内,只要存在参数就会报错!!

免杀原理(php)_第4张图片

和之前所说的一样,任何函数的存在,都有一定的价值,在此处我添加了一句php的输出代码,但是D盾并未查杀到后门,可以确定的是在eval()函数中存在参数,也不会认定未后门shell,继续分析是否在eval()中输入$GET[] 超全局变量,就会引起D盾的查杀。

免杀原理(php)_第5张图片

当在eval()输入$_GET[]超全局变量时,D盾判断该代码为后门了,此时也就完成了第二步分析关键点

第三步 混淆关键点

在得到关键点后,就要开始考虑如何绕过D盾的查杀,执行我们想要的命令,

首先 eval()$_GET[]只要结合就会判断为后门,我们是否可以使用变量函数序列化来进行绕过呢?我们一步一步测试。

使用变量去绕过失败:

免杀原理(php)_第6张图片

使用函数包裹住$_GET[]后发现,没有在直接报后门shell,此时为可疑eval,此时说明我们的操作是有效果的,只是还无法完全绕过D盾。

免杀原理(php)_第7张图片

使用类来绕过任然和函数一样,无法完全绕过D盾。

免杀原理(php)_第8张图片

最后通过序列化函数serialize()、解序列化函数unserialize()、字符串截取函数substr()成功绕过了D盾限制。

免杀原理(php)_第9张图片

0x04 总结

总结一下思路,首先要定位哪一行代码,会被杀软拦截,接着分析为什么会被拦截,最后根据现有线索去猜测拦截规则,从而绕过杀软拦截。

你可能感兴趣的:(网络安全专栏,php,网络,开发语言)