ARTICLE DETAIL

资讯详情

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

使用 Ghidra 分析 Go 恶意软件并生成结构化取证报告

使用 Ghidra 分析 Go 恶意软件并生成结构化取证报告 使用 Ghidra 分析 Go 恶意软件并生成结构化取证报告【免费下载链接】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本指南以仓库中 analyzing-golang-malware-with-ghidra 技能所定义的Go 恶意软件分析报告为骨架系统讲解如何基于 Ghidra 逆向 Go 编译恶意样本、恢复剥离/混淆后的函数名、提取模块依赖与 C2 基础设施指标并最终产出一份可归档、可共享的结构化分析报告。读完本文你将掌握 Go 二进制pclntab、moduledata、buildinfo的关键结构、GoResolver 等专用工具的用法以及如何利用仓库附带的 agent.py 与 process.py 脚本自动化大部分报告字段的取证采集。为什么 Go 恶意软件需要专门的 Ghidra 分析流程GoGolang因跨平台交叉编译、静态链接产生自包含二进制以及对逆向工程引入的天然复杂性已成为恶意软件作者的热门选择。与 C/C 恶意程序相比Go 二进制存在三个显著特征依据 SKILL.md静态链接导致的庞大体量Go 二进制内置完整运行时、标准库及全部依赖体积通常在 5–15MB包含数千个函数。非空终止的字符串格式Go 字符串以指针 长度pointer length结构存储Ghidra 默认的 C 字符串识别对其无效。符号信息被剥离或混淆恶意样本常使用strip或 garble 等工具去除/改写符号导致函数名丢失或被随机字符串替代。正是这些特殊性使得通用逆向流程在 Go 样本上失效。仓库中该技能通过buildinfo / pclntab 结构解析与GoResolverVolexity, 2025基于控制流图相似度自动反混淆恢复函数名形成一条元数据解析 → 函数恢复 → 依赖提取 → 能力评估 → 报告输出的完整分析流水线其最终落点就是 assets/template.md 定义的分析报告模板。报告模板总览一次分析的标准交付物本技能的分析产物是一份 Markdown 报告模板见 assets/template.md其结构如下章节核心字段分析目的Sample InformationSHA-256、文件大小、Go 版本、架构、是否剥离、是否混淆样本唯一标识与基础画像Recovered Functions按类别统计函数数量与关键函数还原样本能力地图Dependencies模块名与用途判断第三方能力HTTP、加密、C2 框架C2 InfrastructureURL / IP / 域名指标提取 IoC 用于封堵与检测Recommendations封堵、YARA、编译产物监控落地处置与检测建议下面逐一展开每个章节的填充方法与依据。一、Sample Information建立样本唯一标识与编译器画像模板要求先记录样本的基础元数据这是任何取证分析的起点字段说明SHA-256样本哈希作为全局唯一标识File Size文件大小字节Go Version编译器版本如 go1.21.5Architectureamd64 / arm64 / 386StrippedYes / NoObfuscatedYes (garble) / NoGo 版本与构建信息提取Go 二进制在.go.buildinfo段内嵌构建信息其魔数为\xff Go buildinf:。该技能的 SKILL.md 给出了直接用 Python 定位它的方法magic b\xff Go buildinf: offset data.find(magic) if offset -1: return None print(f[] Go build info at offset 0x{offset:x}) go_version re.search(rbgo\d\.\d(?:\.\d)?, data[offset:offset256])仓库附带的 agent.py 中detect_go_binary()在此基础上增加了多信号交叉验证不仅查找 buildinfo 魔数还同时正则匹配go(\d\.\d(?:\.\d)?)版本串、探测 gopclntab 魔数并统计runtime.main、runtime.goexit、runtime.newproc、GOROOT、GOPATH等运行时字符串的数量命中 ≥2 即可判定为 Go 二进制。其取版本号时取排序后的最大版本串避免旧版本字符串干扰。架构判定模板中的 Architecture 字段可通过分析目标文件的 PE/ELF 头确定。agent.py 的analyze_sections()展示了如何区分 PEMZ魔数与 ELF\x7fELF魔数并逐段计算 Shannon 熵高熵区段如.text、加密的.data往往暗示压缩或加密内容可辅助判断是否存在加壳/混淆行为。二、Recovered Functions恢复并分类函数以还原能力地图模板要求按类别统计恢复出的函数并列出关键函数CategoryCountKey Functionsmainnetworkingcryptoos/execthird-party底层结构pclntab 是函数名恢复的关键依据 SKILL.md 与 standards.mdGo 二进制的 pclntabPC Line Table将程序计数器映射到函数名、源文件与行号即使二进制被 strip该元数据仍保留。moduledata 结构则包含类型信息、itab接口表与 pclntab 自身的指针。因此即便符号表被剥离Go 函数名依然在场只是等待被解析出来。pclntab 的魔数随 Go 版本演变见 standards.mdMagic小端Go 版本0xFBFFFFFF1.2 – 1.150xFAFFFFFF1.16 – 1.170xF1FFFFFF1.18 – 1.190xF0FFFFFF1.20注意SKILL.md 示例代码与 references 文档在 1.18 / 1.20 两档魔数标注上存在版本差异实际解析时应以目标样本对应的 Go 工具链为准process.py 的PCLNTAB_MAGICS字典按从新到旧的顺序匹配是更稳健的实现参考。函数名提取与分类的源码级实现SKILL.md 的extract_function_names()用正则匹配包前缀main、runtime、fmt、net、os、crypto、encoding、io、sync、syscall、reflect、strings、bytes、path、time、math、sort、github.com、golang.org等后接/或.的函数路径模式再按类别归并net/或http→ networkcrypto→ cryptoos/exec或syscall→ os_execos.或io/→ file_iomain.开头 → maingithub.com或golang.org→ third_partyprocess.py 的categorize_functions()对分类进行了更细粒度的拆分main_logic / networking / cryptography / os_execution / file_operations / third_party / runtime并采用子串匹配tcp、udp、dns、ioutil等关键词提升召回率。推荐在填充模板的 Key Functions 列时优先列出每个类别中与恶意行为强相关的函数如net/http、crypto/aes、os/exec相关调用。面对 garble 混淆GoResolver 的引入obfuscation 工具如 garble会把函数名改写为随机/哈希串此时正则模式无法直接恢复。依据 SKILL.mdGoResolverVolexity通过计算混淆函数的控制流图签名与已知 Go 标准库与第三方包函数数据库比对实现自动反混淆。api-reference.md 给出其安装与无头调用方式git clone https://github.com/volexity/GoResolver analyzeHeadless /ghidra_projects MyProject -process go_malware.exe \ -postScript GoResolver.java同时仓库脚本也提供了启发式混淆检测agent.py 的detect_obfuscation()若字符串中出现大量 ≥16 位十六进制哈希形名称超过 20 个判定疑似 garble若 gopclntab 缺失提示可能被剥离或篡改若 Go 运行时字符串命中数 2判定疑似混淆。三、Dependencies从模块路径推断能力而不必完整逆向模板要求列出第三方依赖及其用途ModulePurposeGo 的依赖管理会把模块路径与版本字符串嵌入二进制。依据 SKILL.md提取这些信息即可揭示样本使用的 HTTP 库、加密包、C2 框架等从而无需完整逆向即可评估能力。SKILL.md 的extract_dependencies()使用正则匹配github.com、gitlab.com、golang.org、gopkg.in、go.etcd.io、google.golang.org等域名前缀的模块路径process.py 的extract_dependencies()进一步做了rstrip(/.)清洗去除路径末尾的伪影字符。更有价值的是 agent.py 内置的SUSPICIOUS_GO_PACKAGES映射表可直接把依赖映射为恶意能力包路径能力指示github.com/kbinani/screenshot屏幕截取github.com/atotto/clipboard剪贴板访问github.com/go-vgo/robotgo桌面自动化 / 键盘记录github.com/miekg/dns自定义 DNSC2 / 隧道golang.org/x/crypto/sshSSH 客户端横向移动github.com/shirou/gopsutil系统枚举github.com/mitchellh/go-ps进程列举github.com/gobuffalo/packr资源内嵌github.com/Ne0nd0g/merlinMerlin C2 agentgithub.com/BishopFox/sliverSliver C2 框架github.com/traefik/yaegiGo 解释器动态执行将这些命中结果填入模板的 Module/Purpose 两列即可生成一张样本能力表。常见 Go 恶意软件家族及其代表性依赖依据 api-reference.md也可用于交叉印证家族类型代表性包SliverC2 implantprotobuf、grpc、mtlsMerlinC2 agenthttp2、jose、websocketSunlogin/CobaltRATscreenshot、clipboard、keylogBianLian勒索软件crypto/aes、filepath.WalkRoyal勒索软件基于 goroutine 的并行加密四、C2 Infrastructure提取网络指标IoC模板要求记录 C2 基础设施指标IndicatorTypeValueURL / IP / Domainprocess.py 的extract_suspicious_strings()提供了可直接复用的正则模式https?://[\w./:?-]—— 抓取 URL\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?::\d)?—— 抓取 IP含可选端口(?:cmd|powershell|bash|sh)(?:\.exe)?—— 定位命令执行字符串(?:HKLM|HKCU)\\[^\x00]—— 定位注册表持久化痕迹/etc/(?:passwd|shadow|crontab)—— 定位 Linux 敏感文件访问。SKILL.md 的extract_go_strings()则按 ASCII 可打印序列长度 ≥10提取字符串并以http/https/tcp/udp/dns/cmd/shell/exec/upload/download/encrypt/key/token/password/c2/beacon/implant/bot/mutex/persist/registry/scheduled等关键词过滤出可疑项。将这些结果去重后填入模板区分 URL / IP / Domain 三种类型。五、Recommendations把分析结论转化为可执行动作模板内置了三条标准处置建议Block identified C2 infrastructure—— 将上一章节提取的 URL/IP/域名写入防火墙、DNS 过滤与威胁情报平台Create YARA rule for unique Go function signatures—— 基于恢复出的唯一函数签名含第三方依赖路径编写 YARA 规则用于批量狩猎同族样本Monitor for similar Go binary compilation artifacts—— 监控同 Go 版本 buildinfo、pclntab 魔数、包路径等编译产物的出现识别同工具链或同源改造样本。此外可结合样本实际情况补充将 SHA-256 与提取的依赖 IoC 分享至情报共享平台如 MISP、对网络侧已捕获的 C2 流量做回溯分析等。六、完整分析工作流从样本到报告将上述各章节串成可执行流水线仓库的 workflows.md 定义了三条主线工作流 1剥离样本的函数恢复[Stripped Go Binary] -- [Find pclntab] -- [Recover Function Names] | v [Apply GoResolver] -- [Deobfuscate Names] | v [Categorize Functions]工作流 2完整 Ghidra 分析依据 api-reference.mdGhidra 10.3 已内置 Go 分析器GolangAnalyzer导入后自动分析即可配合以下关键步骤1. Search For Strings go1. 识别版本 2. Search For Bytes FB FF FF FF 定位 gopclntab 3. Symbol Table Filter main. 定位入口 4. Navigation Go To runtime.main 程序起点 5. Decompiler 检查 goroutine 派发runtime.newproc 6. Data Types 对字符串引用应用 GoString 结构工作流 3基于依赖的能力评估[Go Binary] -- [Extract Module Info] -- [List Dependencies] | v [Map to Capabilities] | v [Prioritize Analysis]一键自动化仓库附带的两个分析脚本在进入 Ghidra 之前可用仓库脚本先做快速画像# process.py输出结构化 JSON 报告Go 版本、pclntab、函数分类、依赖、可疑字符串 python skills/analyzing-golang-malware-with-ghidra/scripts/process.py \ --file malware.exe --output report.json # agent.py综合检测SHA-256、Go 判定、版本、包提取、可疑包、混淆检测 python skills/analyzing-golang-malware-with-ghidra/scripts/agent.py malware.exe两者分工明确process.py 侧重字段化的 JSON 输出pclntab.offset、function_categories、dependencies、suspicious_strings与模板的 Sample Information / Recovered Functions / Dependencies / C2 Infrastructure 四节一一对应agent.py 则补充 SHA-256 计算、PE/ELF 区段熵分析、可疑包映射与 garble 混淆检测直接支撑模板的 Obfuscated 字段与 Recommendations 中的 YARA 建议。脚本输出可直接作为模板各表格的数据来源最后由分析师在 Ghidra结合 GoResolver 反混淆中确认关键函数行为后归档。七、验证标准报告何时算合格依据 SKILL.md一份合格的分析应满足以下验证标准✅ 从二进制中提取出 Go 版本与构建信息✅ 定位并解析 pclntab实现函数名恢复✅ 识别第三方依赖揭示样本能力✅ 枚举 main 包函数锁定定向分析目标✅ 对网络、加密、OS 执行函数完成分类✅ Ghidra 正确标记 Go 运行时结构如go_pclntab标签。完成上述验证后将分析结果填入 template.md一份可归档、可共享、可直接支撑检测规则编写与处置决策的 Go 恶意软件分析报告即告完成。关键要点速查判定 Go 二进制搜索\xff Go buildinf:魔数、go1.x版本串、gopclntab 魔数与运行时字符串多信号交叉确认。pclntab 魔数0xFB1.2–1.15、0xFA1.16–1.17、0xF11.18–1.19、0xF01.20注意 1.18 与 1.20 档位的版本边界因工具链而异。函数恢复strip 不影响 pclntab 内函数名garble 混淆则需 GoResolver 基于控制流图相似度反混淆。能力评估依赖模块路径 可疑包映射表screenshot/clipboard/robotgo/miekg-dns/ssh/gopsutil 等可快速判定截图、键盘记录、DNS 隧道、横向移动等能力。报告自动化process.py 输出 JSON 字段化结果agent.py 输出综合画像均可直接填充模板各表格。【免费下载链接】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),仅供参考
返回列表