第十二节 安全分析工具

[!ref] 详解见用户手册「安全分析工具」节。

12.1 适用约束

  • 全部工具仅在当前工作区下名为 samples/ 的子目录中可用。
  • 该子目录下 exec 类工具被强制禁用,且不可解除。
  • 分析工具不修改样本本体;samples/ 目录本身可写入(样本投放、sec.pcap_stream_extract 的提取产物都会落盘)。

12.1.1 样本投放入口

入口 行为
输入框左下角「+」按钮 系统多文件对话框 → 落到 <workspace>/samples/
用户取消选择 静默忽略,不报错
重名 自动附加时间戳后缀,不覆盖
无活动工作区 按钮置灰;点击提示「没有活动工作区」

后端透明支持本地与远程工作区。

12.2 工具一览(共 16 个)

工具 用途
sec.hash 多算法哈希(md5 / sha1 / sha256 / sha512 等)
sec.entropy Shannon 熵(总 + 分块)
sec.hexdump xxd 风格十六进制 + ASCII 视图
sec.strings 提取 ASCII + UTF-16LE 字符串
sec.ioc_extract 提取 IOC(IP / URL / 域名 / 邮箱 / 哈希含 SHA-512 / BTC·ETH·XMR / CVE / MAC / 注册表 / 路径);先还原 defang,分页返回(见 §12.6)
sec.pe_parse PE / PE+ 结构(节、导入、导出、入口、子系统)
sec.elf_parse ELF 结构(节、动态依赖、符号、build-id)
sec.macho_parse Mach-O 结构(含 FAT / universal)
sec.imphash Mandiant-style PE 导入哈希
sec.disasm 线性反汇编(架构自动嗅探)
sec.decompile LLM 辅助反编译为 C / Java 伪代码
sec.pcap_info pcap 元信息 + Top-N 流聚合
sec.pcap_stream_list 列出 pcap 中所有 TCP/UDP/ICMP 流并赋稳定 id
sec.pcap_stream_extract 把指定流的 L7 载荷 dump 到工作区路径
sec.pcap_extract DNS / HTTP / TLS ClientHello SNI 字段抽取
sec.yara_scan YARA 规则扫描(默认 build 为 stub)

12.3 sec.hash

参数 类型 默认 说明
path string 必填
algorithms array [md5, sha1, sha256] 可选:md5, sha1, sha256, sha384, sha512, sm3

12.4 sec.entropy

参数 类型 默认 说明
path string 必填
block_size int 4096 0 表示不分块

12.5 sec.strings

参数 类型 默认 说明
path string 必填
min_len int 6 最小长度
encodings array [ascii, utf16le]
limit int 软 4096 / 硬 256 KiB

12.6 sec.ioc_extract

先自动还原 defanghxxp://1.2.3[.]4evil[.]comfoo(dot)bar)再在可打印字符串上匹配(减二进制噪声)。IP 走 net.ParseIP 校验并打标(private/loopback/link_local/multicast/cgnat/unspecified),MAC 不再误判为 IPv6,域名按公共后缀校验(丢弃 kernel32.dll 之类)。按值去重、附 counttags(含 defanged)。分页同 sec.stringslimitbyte_limit 取更紧者;truncated=true 时读 next_offset / per_kind_capped / hint 续取)。

参数 类型 默认 说明
path string 必填
kinds array 全部 见下表;空 = 全部
max_per_kind int 200(上限 5000) 每类唯一命中上限;打满的类列入 per_kind_capped
max_bytes int 128 MiB 扫描字节上限
offset int 0 全集 0-based 续读起点(填上次 next_offset
limit int 500(上限 5000) 单次返回条数上限
byte_limit int 4096(硬上限 262144) 单次返回字节上限,整条粒度
defang_output bool false 以 defang 形式渲染值(evil[.]com / hxxp://…)便于安全展示
exclude_private bool false 丢弃非公网 IP(默认保留并打标)
context bool false 每条附一小段命中上下文

可选 kinds

类别 含义
ipv4 / ipv6 IP 地址(带分类标签)
url / domain / email 链接 / 域名(公共后缀校验)/ 邮箱
md5 / sha1 / sha256 / sha512 哈希
btc / eth / xmr 比特币 / 以太坊 / 门罗币等加密货币地址
cve CVE 编号
mac MAC 地址
registry Windows 注册表路径
path_win / path_unix 路径式字符串

提取是候选指标、非判黑结论,用前请二次核实。

12.7 sec.pe_parse / sec.elf_parse / sec.macho_parse

参数 类型 默认 说明
path string 必填
sections bool true 节列表
imports bool true 导入表(PE)/ 动态依赖(ELF)
exports bool true 导出表
signatures bool false 签名 / 证书链

12.8 sec.disasm

参数 类型 默认 说明
path string 必填
arch enum auto auto / x86 / x86_64 / arm / arm64 / ppc64
start int / hex 文件入口 起始虚拟地址 / 偏移
length int 4096 反汇编字节长度

12.9 sec.decompile

参数 类型 默认 说明
path string 必填
target enum c c / java
function string 入口 函数名或起始地址

隐私提示:sec.decompile 会把反汇编片段送往反编译模型;只在样本可外送的前提下使用。

12.10 sec.pcap_info / sec.pcap_stream_list / sec.pcap_stream_extract / sec.pcap_extract

工具 参数 说明
sec.pcap_info path 总包数 / 起止时间 / 协议占比 / TopN 流
sec.pcap_stream_list path, limit(默认 200,最多 2000), offset, sort_byfirst_ts(默认) / packets / bytes 分页列出全部 TCP/UDP/ICMP 流;id 始终是全局时间序编号,跨页跨排序都不变,可直接传给 sec.pcap_stream_extract
sec.pcap_stream_extract path, stream_id, out_path(相对工作区根,可写到 samples/ 之外) dump 该流 L7 载荷为文件
sec.pcap_extract path, protocol(dns/http/tls_sni), limit 协议感知字段抽取,返回 IOC(IP 等)

v1 仅做单包检视,不做 TCP 重组。

12.11 sec.yara_scan

参数 类型 默认 说明
path string 必填
rules string 内置规则集 规则文件相对路径或内置集合名
timeout_ms int 60_000 超时即终止

12.12 sec.ontology.* — 安全领域事实层(v1 本地工作区)

工具 参数 说明
sec.ontology.record facts: [{s, p, o, source?}] 写入 SPO 三元组;单值谓词(version / license / severity / auth)取代写入,多值谓词(depends_on / has_cve / exposes / listens / affects)累加写入
sec.ontology.query s?, p?, o?(空字段 = 通配) 按模式查询;如 {p:"has_cve"} 列所有 CVE,{s:"pkg:lodash"} 列关于 lodash 的全部
sec.ontology.reachable start, predicate 沿可传递谓词从 start 多跳遍历,得可达实体集;用于传递依赖 / 攻击面爆炸半径

实体命名约定:建议带类型前缀(pkg:lodash / svc:api / cve:CVE-2021-23337),便于跨类查询。SSOT 持久化:事实落到工作区,对话折叠不影响。

12.13 软件物料清单(SBOM)工具 — 供应链漏洞排查

sbom.*工作区工具(作用于项目的依赖清单,不限于 samples/),共 5 个。结果文件默认落到工作区 .avlcode/ 目录。配套设置见 §6.16。

工具 用途
sbom.generate 扫描依赖清单生成 SBOM(默认 CycloneDX 1.5 JSON)
sbom.convert 在 CycloneDX / SPDX / DSDX / SWID 之间任意互转
sbom.audit 对照 OSV 排查已知漏洞,标注 CVE / KEV / CVSS 严重度
sbom.vex 符号级可达性收敛漏洞,输出 OpenVEX
sbom.dbsync 维护本地离线 OSV 漏洞库(air-gap)

12.13.1 sbom.generate

参数 类型 默认 说明
path string 工作区根 扫描根(相对工作区)
format string cyclonedx cyclonedx / spdx / dsdx / swid;加 -xml 出 XML(如 cyclonedx-xml),dsdx-tag 出 DSDX 原生 tag-value
output string .avlcode/sbom.<format>.<ext> 输出路径(相对扫描根)
  • 识别生态(Ecosystem 常量):go · npm(含 yarn Berry / pnpm v5)· cargo · pypi · maven · gem · composer · nuget · swift · pub · conan · conda · hex · cocoapods · cran · hackage · julia;另支持 Deno 清单。
  • 清单扫描递归子目录,缺锁回退清单文件解析;npm/pypi/conan 多锁首个命中为准,maven 三种全读;剔除首方误报、正确处理 Go replace/exclude、版本比对保真。
  • 缺清单跳过该生态,全缺得 0 组件空清单(非错误);输出确定性可复现(无时间戳 / 随机序列号、组件定序)。
  • 审计逐生态回退,Maven/Gradle/pip/Conda/Conan/npm 附精度提示未审生态明示,附可利用性描述。
  • 返回字段:format / encoding / component_count / ecosystems / bom_path / components(预览,最多 50)/ truncated

12.13.2 sbom.convert

参数 类型 默认 说明
input string 必填,待转 SBOM 文件(相对工作区)
to string 必填,目标格式(同 format 取值语法)
from string 自动嗅探 源格式覆盖
output string <input>.<to>.json 输出路径

经规范化中间模型转换(N 读 + N 写);保留组件 / purl / 许可 / 哈希 / 依赖关系,目标不支持的字段按规则丢弃(DSDX 无哈希、SWID 哈希不映射)。格式与编码矩阵:CycloneDX(1.5) JSON+XML、SPDX(2.3) JSON+RDF/XML、DSDX JSON+XML+native、SWID JSON+XML,均可读可写。

12.13.3 sbom.audit

参数 类型 默认 说明
path string 工作区根 扫描根
mode enum auto auto(本地有库则离线、否则在线)/ online(api.osv.dev) / offline(本地快照)
output string .avlcode/sbom.audit.json 报告路径

对照 OSV 匹配;CVE 取首个 CVE-… 别名;KEV 取自 <config>/kev.json。严重度按 CVSS 向量计算:v2(AV:/AC:/Au:) / v3(CVSS:3) / v4(CVSS:4.0,官方 MacroVector 查表);定级 critical ≥9 / high ≥7 / medium ≥4 / low >0;记录自带 GHSA 定性等级时以其为准。结果最严重优先、KEV 置顶。返回字段:source / components_scanned / vulnerable / total_vulns / by_severity / kev_count / report_path / findings(预览,最多 30)/ truncated

12.13.4 sbom.vex

参数 类型 默认 说明
path string 工作区根 扫描根
mode enum auto 同 audit 来源
output string .avlcode/sbom.vex.json OpenVEX 输出
lsp_confirm bool false 用语言服务器确认每包至少一处真实引用(需装对应 server,会拉起进程);默认纯离线导入扫描,air-gap 友好
detail bool false findings_detail(供 App 端 LLM 收敛用)

先跑 audit,再做确定性符号级可达性分析。状态:affected / not_affected / under_investigation / fixednot_affected 带机读理由(vulnerable_code_not_present / vulnerable_code_not_in_execute_path / component_not_present / inline_mitigations_already_exist)。可达性扫描上限:≤4000 文件、≤256 KiB/文件,跳过 .git/node_modules/vendor/target/dist/build 等目录。Go 凭 OSV 受影响符号可直接收敛 not_affected;其它生态默认「用到即 affected、没用到即 under_investigation」(不擅自判 not_affected),可经 lsp_confirm 或 App 端符号比对进一步收敛。结论按 affected > under_investigation > fixed > not_affected 排序。

12.13.5 sbom.dbsync

参数 类型 默认 说明
action enum status status(纯本地,看记录数 / 新鲜度)/ sync(联网拉 OSV dump)/ import(离线导入)/ kev(刷新 KEV)
ecosystems string[] 自动检测 sync 指定生态;空则按工作区清单自动检测
path string 工作区根 sync 自动检测的扫描根
zip_path string import 必填:本地 OSV 生态 zip(相对工作区)
osv_eco string import 必填:该 zip 对应的 OSV 生态名(如 npm / PyPI / Go)

13 个生态有 OSV 离线 dump 覆盖(SyncableEcosystems);conan / conda / CocoaPods 暂无离线库(可在线审计)。importzip_pathosv_eco 报错。

12.14 云端威胁情报工具(VirusTotal / GTI)

两组工具、独立门控,均在 设置 → 安全 配置(见 §6.17)。

哨兵哈希扫描 sec.vtai_*(绑定「自动扫描拦截·哨兵」配置,用 vtGuard):

工具 参数 说明
sec.vtai_check_hash hash(必填,MD5/SHA1/SHA256) 哈希查情报、不上传;返回 verdict/malicious/total/label/source/link;未配后端报错
sec.vtai_scan path(必填), force(bool) 上传高危文件全量扫描;RegisterUploadRequired——仅开「上传扫描」或本地 YARA 时对 LLM 可见,否则退化为哈希查询
sec.vtai_register display_name? / human_alias? / bio? / contact_email? 触发 VirusTotal AI 注册;实际在设置面板同意流程完成(RegisterVTAI
sec.vtai_status 返回 enabled/monitor/auto_scan/mode/source/public_handle/cache_size

全量情报 vt.*full_tools 策略门控,与哨兵并存):

工具 关键参数 门控
vt.lookup indicators[] / indicator, type?(file/url/domain/ip), relationship? 免费只读(仅主开关)
vt.api resource? / id? / relationship? / action? / path? / method(默认 GET) / query{} / body{} / raw? 读默认可用;写受 query_only、Premium/GTI 端点受 enable_paid_features
vt.submit url? / file? / rescan? / wait? / confirm? 写;query_only 拦;file 上传 ≤ 32 MB、confirm_sample_upload 开时需 confirm=truewait 轮询上限 180s
vt.download hash(必填), save_to(必填) Premiumenable_paid_features
vt.feeds type, timeYYYYMMDDhhmm/hh,UTC), save_to(均必填) Premium;T-60 分钟延迟
vt.hunt op(retrohunt_*/notifications/rulesets), id? / rules? / corpus? / limit? / cursor? Premium;异步

full_tools 策略

  • 字段:enabled / query_only(默认开)/ enable_paid_features(默认关)/ confirm_sample_upload(默认开)/ api_base
  • Check() 顺序:未启用 → ErrDisabled;写 + 仅查询 → ErrQueryOnly;非 public 档 + 未开收费 → ErrPaidDisabled;档位(public/premium/gti由 VT 远端 403 兜底
  • 启用需 KeyUsable(密文可解密且非空),否则启用环节即报错。
  • 响应默认经 Summarize() 紧凑摘要(names cap 8、tags cap 12),raw=true 取原始;超时:api/lookup/hunt/submit 30s,download/feeds 5 分钟。