安全杂谈之免杀
本文最后更新于:2024年9月18日 上午
安全杂谈之免杀
前言
今天突然有了一些想法,所以想要记录一下,仅本人观点,大佬轻喷。
正文部分
我们知道做免杀的时候会做静态免杀和动态免杀,静态免杀一般是指木马在未运行状态下的二进制文件的恶意特征的隐藏;动态免杀一般是指木马运行中的免杀能力。但是,我认为免杀似乎直接分为字节码免杀和行为免杀两部分更好,接下来详细说明一下我的想法。
字节免杀
我们知道静态免杀实际就是针对字节流的加密,这属于字节免杀方面,但是还有另一个方面,就是真正在内存中执行的字节码也应当是属于字节免杀方面。字节免杀是指木马执行的字节码是免杀的,其最终目标就是在不经过任何加壳或者其他加密手法的情况下,原始恶意字节码是不会被报毒的。也就说真正的免杀就是我直接将恶意代码扔到杀毒软件面前,杀毒软件也不认为其为恶意的。这跟加壳免杀是有本质特征的,字节免杀并不会加密原始恶意真正的字节码,因为加密最终需要解密的,那么在最坏情况下(杀毒软件能够真正实现实时扫描内存),原始恶意字节码一旦解密,杀毒软件就会报毒。因此,有没有办法不是使用加密方式,而是使用其他方式冲淡恶意的字节特征呢?
确实有的,举个简单的例子,我们在恶意的字节码之间填充大量其他正常但不影响恶意指令的汇编指令,那么可以磨出一些字节码而已特征,而并非用的加密算法,这样杀毒软件脱壳分析技术就完全失效了,因为我们根本就没有壳,这种方式或许可以称之为分布式恶意代码,因为单独看某段字节码并不是恶意的,只有整个代码段整体看,并去除填充指令后才能判断是恶意的。这是一个想法,我并没有进行过实际的测试,但我们认为这可能是一个方向。
行为免杀
行为免杀是指木马样本在运行过程中的行为特征是免杀的。就目前的技术而言,我认为可以分为两类,一类是致盲杀毒软件,即通过某种手段使得杀毒软件的监控手法失效,曾经有文章通过驱动程序漏洞将杀毒软件的内核回调和文件驱动程序去除,直接致盲杀毒软件达到免杀效果。第二类将恶意行为隐藏到众多正常行为当中,这也是当前常见的手法之一,但是想过并不是特别好,原因可以从卡巴斯基的杀毒逻辑中看出些东西,卡巴斯基杀毒采用的是一种单增函数逻辑,即一个程序的恶意值是一个单增的,即使通过执行各类正常行为迷惑杀毒软件,并不会降低木马的恶意值,最终还是会触发报毒。那么有没有办法将恶意值转移呢?确实存在这种操作,一是使用父进程伪造技术,将每段恶意行为分布式的运行在各个子进程中,比如说通过一个进程获取handle,传递给另一个进程执行其他操作,这样针对某个进程而言,并非为恶意但是整体却是恶意操作,这也是一种分布式思想;此外进程注入也是一种将恶意代码传递到各个进程的方法之一,传递过程会不会被杀毒软件所监控呢?这确实是一个问题。
未来的开发思路
如果有时间的话,我想写一个属于自己的木马,其主要思想就是分布式恶意代码思想,其包括以下组件:
- 恶意代码混淆器:类似于花指令混淆器,主要目标是不破坏原始恶意字节码的执行逻辑,但是能够实现减轻恶意代码的目的。
- 恶意代码分发器:主程序只是一个恶意代码的分发器,并不是执行其他恶意功能,主程序通过父进程隐藏或者进程注入利用其他程序分布式执行恶意操作,通过句柄传递、内存共享将各个恶意程序联系在一起。
- 针对以上两个组件是否能在多种组合情况?随机化处理