十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 AST 与分层编码的 PowerShell 混淆恶意软件反混淆实践指南(Anthropic-Cybersecurity-Skills 实战手册)

基于 AST 与分层编码的 PowerShell 混淆恶意软件反混淆实践指南(Anthropic-Cybersecurity-Skills 实战手册) 基于 AST 与分层编码的 PowerShell 混淆恶意软件反混淆实践指南Anthropic-Cybersecurity-Skills 实战手册【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-SkillsPowerShell 凭借与 Windows 操作系统的深度集成和强大的脚本能力长期被恶意软件作者滥用其混淆手法涵盖字符串拼接、Base64 编码、字符码数组、反引号tick-mark插入、环境变量截取、SecureString、压缩加 Base64、XOR 编码、Replace 链与格式化字符串等十余类。本文以 skills/deobfuscating-powershell-obfuscated-malware 技能的 standards 文档为骨架结合仓库内 process.py 与 agent.py 的源码实现系统讲解 PowerShell 混淆分类体系L1-L10、AST 节点分析、迭代式解混淆工作流与 IOC 提取帮助安全分析人员在应急响应与恶意软件分析场景下还原多层混淆后的真实载荷与 C2 端点。PowerShell 混淆分类体系Obfuscation TaxonomyPowerShell 混淆可以按层Layer划分每层对应一类独立的混淆手段。分析样本的第一步是识别脚本混合了哪些层再逐层剥离。以下分类表来自 references/standards.md是后续所有解混淆操作的分层依据层技术示例L1Base64 EncodedCommandpowershell -enc SQBFAFgA...L2字符串拼接$aInvoke-ExpressionL3字符码数组[char[]](73,69,88)-joinL4反引号插入Invoke-ExpressionL5环境变量$env:COMSPEC[4,15,25]-joinL6SecureStringConvertTo-SecureString ... -KeyL7压缩 Base64IO.Compression.DeflateStreamL8XOR 编码$bytes \| %{ $_ -bxor 0x42 }L9Replace 链.Replace(abc,I).Replace(...)L10格式化字符串({2}{0}{1} -f ke-,Ex,Invo)从仓库的 SKILL.md 可知真实恶意软件往往混合使用多层混淆例如先用 L7 压缩载荷再套 L1 Base64最后用 L4 反引号打散关键字因此解混淆必须采用迭代式iterative剥离策略而非一次性的单一解码。各层混淆技术的识别特征与源码检测逻辑仓库 process.py 中的analyze()方法内置了与分类表一一对应的正则检测规则可作为自动化识别各混淆层的签名库。以下逐层说明其识别特征与检测依据L1 Base64 编码恶意脚本常通过powershell -EncodedCommand b64或[Convert]::FromBase64String()内嵌整段编码脚本。由于 PowerShell 的-EncodedCommand参数采用UTF-16LE编码解码时必须使用base64.b64decode(...).decode(utf-16-le)这与普通 UTF-8 字符串的 Base64 解码完全不同是新手最容易踩的坑。源码中的检测规则-[Ee]nc(?:odedcommand)?\s[A-Za-z0-9/]{20,}Base64 EncodedCommand\[Convert\]::FromBase64String.NET 静态方法调用L2 字符串拼接将命令关键字拆散为多个片段再拼接规避基于关键字的静态规则。源码通过统计\s*\\s*与\s*\\s*的出现次数来判断拼接强度。resolve_string_concat()见 SKILL.md 的 Step 1使用while循环反复折叠AB模式直至无法再合并。L3 字符码数组用 ASCII/Unicode 码点构造字符串[char[]](73,69,88)-join等价于IEX。检测规则为\[char\]\s*\d与\[char\[\]\]\s*\([\d,\s]\)还原逻辑在_resolve_char_arrays()中通过chr(int(...))将码点转为字符。L4 反引号tick-mark插入PowerShell 中反引号是转义字符插在标识符中间会被解释器忽略Invoke即Invoke。检测规则\x60[a-zA-Z]反引号后跟字母。源码_remove_ticks()在去除反引号时会保留合法的转义序列n r t a b f v 0及 避免误伤字符串内的换行、制表符等真实转义。L5 环境变量滥用从环境变量中按索引截取字符拼成命令如$env:COMSPEC[4,15,25]-join。检测规则为\$env:当引用次数超过 2 次即判定为可疑见 SKILL.md Step 1。L6 SecureString 加密ConvertTo-SecureString -String ... -Key ...用内嵌密钥加密字符串。这类需要密钥参与的对称解密单靠正则难以还原通常要借助动态执行或密钥提取。L7 压缩 Base64先压缩再 Base64典型载荷IO.Compression.DeflateStream或GZipStream。源码_decompress_streams()的实现思路是对长度超过 100 的 Base64 串先解码再用zlib.decompress(raw, -zlib.MAX_WBITS)尝试 Deflateraw deflate失败则改用zlib.MAX_WBITS | 16尝试 GZip并将成功解出的明文回填到原串位置。L8 XOR 编码用单字节异或打乱数据-bxor 0x42。检测规则-bxor\s\d。XOR 通常作用于字节流还原时需先拿到字节数组再对每个字节异或同一密钥。L9 Replace 链连续调用.Replace(abc,I)逐步替换出真实关键字。检测规则\.Replace\(当出现次数大于 2 次即标记见 SKILL.md Step 1。L10 格式化字符串利用-f操作符重排关键字({2}{0}{1} -f ke-,Ex,Invo)组合为Invoke-Expression。检测规则-f\s[\]还原逻辑在_resolve_format_strings()中按{i}占位符逐一替换参数。从混淆代码到 ASTPowerShell 抽象语法树分析字符串层级的混淆无法通过正则穷尽尤其是自定义混淆器。PowerShell 的**抽象语法树AST**暴露了脚本的解析结构无论表层如何混淆AST 都能还原出真实的调用关系。以下是 references/standards.md 列出的核心表达式节点类型CommandExpression直接命令调用InvokeMemberExpression对象上的方法调用如.DownloadString()BinaryExpression字符串拼接等二元运算ArrayExpression字符数组构造SubExpression嵌套表达式求值常见于$(...)与(...)包裹的 IEX 调用ExpandableStringExpression字符串插值$varAST 分析的思路是遍历表达式节点 → 在隔离环境中对表达式节点求值 → 将求值结果回填到脚本中 → 重建明文命令。这正是 references/workflows.md 中 Workflow 2 的流程Script Input → Parse AST → Walk Expression Nodes → Evaluate Expressions → Reconstruct Commands → Extract IOCs。SKILL.md 也指出PowerPeeler 采用指令级动态分析通过监控执行过程将 AST 节点与其求值结果关联据称可达到 95% 的反混淆正确率该结论来自技能文档对学术工具的转述实际效果需在样本上验证。迭代式反混淆工作流与 IEX 替换流程总览references/workflows.md 给出了三条可落地的分析路径[Obfuscated Script] -- [Identify Techniques] -- [Remove Tick Marks] | v [Resolve Concatenation] | v [Decode Base64 Layers] | v [IEX - Write-Output] | v [Extract Final Payload]核心技巧IEX → Write-Output 替换恶意脚本的最终目的通常是调用Invoke-Expression别名IEX执行解出的字符串。分析人员可以将脚本中的 IEX 替换为Write-Output让脚本在输出明文而非执行恶意代码的模式下运行从而安全地捕获每一层解出的内容见 SKILL.md 的 Dynamic Execution Tracing。替换覆盖三种形态\bInvoke-Expression\b→Write-Output\bIEX\b→Write-Output\|\s*IEX\b→| Write-OutputSKILL.md 中的iex_replacement_deobfuscate()按层迭代执行将替换后的脚本写入临时.ps1用powershell -NoProfile -ExecutionPolicy Bypass -File在受限进程中运行超时 30 秒把 stdout 捕获为新一层的脚本最多迭代 10 层直至无新输出为止。务必在隔离虚拟机或沙箱中执行并设置超时防止恶意脚本进入死循环。沙箱动态方案Event ID 4104references/workflows.md 的 Workflow 3 提供了另一条动态路径启用 PowerShell ScriptBlock 日志Event ID 4104后在沙箱中运行混淆脚本Windows 会在执行前记录去混淆后的脚本块原文分析人员只需收集并拼接日志条目即可还原执行链无需手工逐层解码。解混淆后的 IOC 提取还原出明文脚本后下一步是提取失陷指标IOC。SKILL.md 的extract_iocs_from_script()与 agent.py 提供了完整方案覆盖以下类别IOC 类别正则特征典型命中URLhttps?://[^\s)\]]载荷下载地址 / C2 端点IP\b(?:\d{1,3}\.){3}\d{1,3}\bC2 服务器 IP文件路径[A-Za-z]:\\...、%APPDATA%...落地文件 / 持久化脚本注册表键(?:HKLM\|HKCU\|HKCR\|HKU\|HKCC)\\...自启动项可疑命令New-Object Net.WebClient、DownloadString、Start-Process、Reflection.Assembly、Add-MpPreference -ExclusionPath、New-ScheduledTask等下载器 / 免杀 / 持久化行为其中Add-MpPreference -ExclusionPath、Set-MpPreference -DisableRealtimeMonitoring等命令直接指向防御规避意图应作为高危行为上报。提取结果可输出为 JSON 报告agent.py的--output参数支持json.dump(report, f, indent2)便于后续与检测规则如 pySigma 生成的 Sigma 规则见 references/api-reference.md联动。MITRE ATTCK 技术映射references/standards.md 将本技能关联到以下 ATTCK 技术仓库 mappings/mitre-attack/README.md 也确认了T1059.001、T1059、T1027与恶意软件分析/反混淆类技能的关系技术ID说明Command and Scripting Interpreter: PowerShellT1059.001恶意 PowerShell 执行Obfuscated Files or InformationT1027脚本的编码/加密Deobfuscate/Decode FilesT1140运行时反混淆Ingress Tool TransferT1105通过 PowerShell 下载载荷System Binary Proxy ExecutionT1218滥用受信任二进制此外SKILL.md 的 frontmatter 还标注了T1027.010命令混淆与T1620混淆技术并在d3fend_techniques中列出 Executable Denylisting、Execution Isolation、File Content Analysis 等对应防御手段。分析时建议同时参照 ATTACK_COVERAGE.md 与 mappings/mitre-attack/coverage-summary.md将 IOC 与战术阶段Execution / Defense Evasion / Command and Control关联形成完整的攻击画像。实战落地可复用的仓库资源本技能目录下已提供可直接运行的辅助资源分析人员可按需使用scripts/process.py多合一反混淆引擎包含 17 类混淆检测、tick 移除、拼接还原、Base64 解码、字符数组还原、格式化字符串还原、压缩流解压与 IOC 提取。用法python process.py --file obfuscated.ps1 --output deobfuscated.ps1 python process.py --file obfuscated.ps1 --extract-iocs --report report.jsonscripts/agent.py面向 Agent 的轻量分析器按严重级别LOW/MEDIUM/HIGH/CRITICAL标注混淆技术与下载器特征支持 JSON 报告输出python agent.py --script obfuscated.ps1 --output report.jsonassets/template.md标准反混淆分析报告模板包含分层剥离记录每层输入/输出大小、应用技术、IOC 表URL/IP/文件路径/注册表键、行为分析下载行为、持久化机制、规避手段与 MITRE ATTCK 映射可直接作为交付文档骨架。references/api-reference.md库依赖速查表与检测事件 ID 对照——PowerShell ScriptBlock 日志Event ID 4104记录去混淆内容、Sysmon 进程创建Event ID 1含命令行、Windows Defender 恶意软件检测Event ID 1116。操作注意事项与合法性边界反混淆分析必须在授权范围内进行。本技能适用场景包括授权的安全测试、受控环境中的恶意样本/攻击制品分析、红队演习与渗透测试项目以及基于攻防理解建设检测能力见 SKILL.md 的 When to Use。实际操作中注意隔离执行任何需要动态运行样本的步骤都要在独立虚拟机或沙箱中完成避免在真实生产环境触发恶意行为工具链齐备本地需具备 Python 3.9base64、re、subprocess标准库与 PowerShell 5.1/7提供 AST 访问能力PSDecode、PowerDecode、PowerPeeler 等社区工具可辅助自动化CyberChef 可用于手工编码变换验证分层验证每剥离一层都要用脚本块日志、沙箱行为或二次静态分析交叉验证确保还原结果与样本真实行为一致对照 SKILL.md 的 Validation Criteria报告留存完整记录每一层的输入大小、输出大小与应用技术形成可追溯的分析链便于后续威胁情报共享与检测规则落地。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表