第十一节 安全分析工具
AVL Code 内置一组只读分析工具,适合在隔离样本目录上做基础研判。所有分析工具都按工具权限策略管控。
重要安全约束:在工作区下名为
samples/的子目录中,任何形式的执行类工具都被强制禁用且不可解除。这是为了防止误把样本当成可执行脚本跑起来。
11.0 把样本送进工作区
输入框左下角的「+」按钮提供最快捷的样本投放入口:
- 点击 + → 系统弹出多文件选择对话框。
- 选中一个或多个文件 → 自动落到当前工作区的
samples/子目录。 - 输入区上方实时显示文件名 + 进度条 + 块计数;完成 1.5 秒后自动收起,失败保留 6 秒。
- 完成后浮现 toast:「已添加 N 个样本到 samples/」。
注意事项:
- 可配置上限:默认 300 MiB,可在 设置 → 数据 → 附件 / 样本 中调整(1–4096 MiB),有「恢复默认」一键复位。
- 大文件分块上传:超过 4 MiB 的文件自动按 4 MiB 切片走追加写入,首块写入即占名解决同名冲突,规避单次 RPC 30 秒超时。
- 后端透明支持本地与远程工作区,无需关心目标盘符。
- 同名文件会按时间戳追加后缀,不会静默覆盖。
- 用户在系统对话框中点取消会被静默忽略,不报错。
- 没有活动工作区时按钮置灰,会以 toast 提示「没有活动工作区」。
随后即可在对话里直接让助手对刚添加的样本发起分析,例如「对刚才那个 PE 跑 hash + entropy + ioc_extract,给我一份初判」。
11.1 哈希、熵、十六进制
- 哈希:MD5 / SHA-1 / SHA-256 / 国密 SM3 等多算法。
- 熵:Shannon 熵(总体 + 分块),用于初判加壳 / 加密。
- 十六进制视图:以 hexdump 形式输出指定字节范围。
大文件完整覆盖:哈希 / 熵这类「单遍流式」算子完整覆盖整个文件(分块逐块计算、不限长度、内存占用恒定),返回的大小是真实大小。早期版本会把 >128 MiB 的样本静默截断到前 128 MiB 计算,导致哈希错误、VirusTotal 也查不到 — 本版根治。只读取部分内容的算子(
sec.strings/sec.ioc_extract/sec.yara_scan等)仍按原有上限工作。
11.2 字符串与 IOC 抽取
- 字符串:ASCII + UTF-16LE,可设最小长度。
- IOC 抽取:自动识别 IPv4 / IPv6 / 域名 / URL / 邮箱、哈希(MD5 / SHA-1 / SHA-256 / SHA-512)、路径(Windows / Unix),以及本版新增的 CVE 编号、Windows 注册表路径、MAC 地址、以太坊 / 门罗币 / 比特币等加密货币地址。
- 先还原 defang 再提取:识别并还原
hxxp://、1[.]2[.]3[.]4、user[at]example[.]com、foo(dot)bar等「去毒化」写法,分析师笔记 / 报告里的 IOC 不再漏抓。 - 更精准、少误报:IP 走有效性校验并打标(private / loopback / link_local / multicast / cgnat 等),可选排除私网地址;域名按公共后缀校验(
kernel32.dll这类文件名不再误当域名);MAC 不再被误判成 IPv6。 - 结果更实用:按值去重并统计出现频次、附类型标签(含
defanged);结果分页返回(与sec.strings一致);可选输出 defang 形式(便于安全展示)与命中上下文片段。 - 提取只是「候选指标」,不等于判黑 —— 用前请二次核实。
- 先还原 defang 再提取:识别并还原
11.3 可执行格式解析
- PE 解析:节、导入表、导出表、资源、签名等。
- ELF 解析:节、段、符号、动态依赖等。
- Mach-O 解析:Load Command、节、签名等。
- Mandiant-style PE 导入哈希:用于聚类识别。
11.4 反汇编
线性反汇编,支持 x86 / x86_64 / arm / arm64 / ppc64;架构通常可由文件头自动嗅探。
11.5 反编译
通过自有的反编译能力把反汇编片段转成 C / Java 伪代码,结合 AI 解读后可直接给出更直观的逻辑摘要。
隐私提示:反编译会调用 AVL Code 的反编译模型;只在样本可外送的前提下使用。
11.6 流量元数据
- PCAP 元信息:总包数、起止时间、协议占比、Top-N 流。
- 流枚举(
sec.pcap_stream_list):列出 PCAP 中所有 TCP / UDP / ICMP 流并赋稳定 id。默认每页 200 条、最多 2000 条,可按packets/bytes/first_ts(默认时间序)排序、按offset翻页 — id 始终是全局时间序编号,跨页跨排序都不变,可直接传给sec.pcap_stream_extract。修了之前列十几万条流时一次性吐出几十 MB 把整轮卡住 / 假死的问题。 - 流载荷导出:把指定流的 L7 载荷 dump 到工作区路径,便于二次分析。
- 协议字段抽取:DNS 查询 / 应答、HTTP 请求 / 响应、TLS ClientHello SNI,以及协议级 IOC(IP 等)。
当前版本仅做单包检视,不做 TCP 重组。
11.7 规则匹配
- 支持业界主流 YARA 规则语法(含完整模块系统)。
- 默认安装为 stub 实现;如需完整规则集与模块支持,请联系内部分发渠道获取增强版本。
11.8 安全领域知识库 sec.ontology — 事实层 SSOT
给 AI 配的一个结构化事实库,把「谁依赖谁、什么暴露在外、谁有哪个 CVE」这类供应链 / 攻击面事实记录下来、长期持有;即使原始报告之后被对话折叠遗忘,这些结构化事实依然留存可查,并能做可达性推理(A 依赖 B、B 依赖 C → A 可达 C)。当前为 v1 本地工作区版本。
| 工具 | 用途 |
|---|---|
sec.ontology.record |
记录一批 SPO 三元组(Subject / Predicate / Object,可带 source 溯源标签)。单值谓词(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 实体做可达性推理。可传递谓词(如 depends_on)会多跳遍历 — 适用于传递依赖 / 攻击面爆炸半径分析(如带 CVE 的传递依赖能影响到哪些包) |
实体命名建议:pkg:lodash / svc:api / cve:CVE-2021-23337 等带类型前缀,便于跨类查询不冲突。
11.9 软件物料清单(SBOM)与供应链漏洞排查
sec.ontology 解决「把已知事实记下来」,而 sbom.* 这组工具解决「先把事实查出来」:它会扫描工作区里的依赖清单,理清「这个项目到底用了哪些第三方组件」,再对照漏洞库排查这些组件有没有已知漏洞、其中哪些真正会被你的代码触达。一共五个工具,都在对话里直接让助手调用即可,结果文件默认落到工作区的 .avlcode/ 目录。
sbom.generate — 生成物料清单
为项目生成 SBOM。自动识别主流生态与依赖清单:npm(package-lock.json / yarn.lock(含 yarn Berry)/ pnpm-lock.yaml(含 v5))、Go(go.mod)、Python(uv.lock / pdm.lock / poetry.lock / Pipfile.lock / requirements.txt)、Maven(pom.xml / gradle.lockfile / Bazel 的 maven_install.json)、Rust、Ruby、PHP、.NET(NuGet)、Swift、Dart、C/C++(conan)、conda、Elixir、CocoaPods、R、Haskell,以及本版新增的 Deno、Julia。默认输出 CycloneDX 1.5 JSON;可用 format 切换 spdx / dsdx / swid,加 -xml 后缀出 XML(如 cyclonedx-xml)、dsdx-tag 出 DSDX 原生 tag-value。输出可复现(不写时间戳 / 随机序列号、组件按固定顺序排)。缺某种清单就跳过该生态,全缺则得到 0 组件的空清单、不报错。
覆盖与精度增强(本版):清单扫描递归子目录,缺锁文件时回退到清单文件解析;剔除把本项目自身误当第三方依赖的情况,正确处理 Go 的
replace/exclude,并加强版本比对保真(减少误报 / 漏报)。审计支持按生态逐一回退、补齐 Maven / Gradle / pip / Conda / Conan / npm 等精度提示、对未能审计的生态给出明确说明并附可利用性描述,便于判断风险优先级。
sbom.convert — 多格式枢纽,任意互转
支持 CycloneDX(JSON+XML)、SPDX(2.3)、DSDX、SWID 四大主流格式的读写,并能在它们之间任意转换(经一个规范化中间模型,N 读 + N 写而非两两组合)。input(待转文件)与 to(目标格式)必填,from 可自动嗅探。转换保留组件、purl、许可、哈希与依赖关系;目标格式不支持的字段会按规则丢弃(如 DSDX 无哈希)。对接不同上下游工具时不愁格式不一致。
sbom.audit — 排查已知漏洞
先生成清单,再逐个组件对照 OSV 漏洞库匹配,给出每条漏洞的严重度、CVE 编号、修复版本,并标注是否在 CISA KEV(已知被利用漏洞) 名单里。严重度按 CVSS v2 / v3 / v4 向量准确计算(critical ≥9 / high ≥7 / medium ≥4 / low)。mode 控制数据来源:auto(默认,本地有离线库就用离线、否则在线)/ online(api.osv.dev)/ offline(本地快照)。结果按最严重优先排序,KEV 漏洞永远置顶。
sbom.vex — 可利用性收敛,砍掉噪声
在 audit 基础上,用确定性的符号级可达性分析判断每个漏洞在你的代码里到底走不走得到,把「装了但根本没调用」的噪声收敛掉,输出标准 OpenVEX 文档。每条结论是 affected(确实受影响、要修)/ not_affected(用了但漏洞代码够不到)/ under_investigation(待查)/ fixed 之一,并附 not_affected 的机读理由。纯离线导入扫描即可用(air-gap 友好);Go 凭 OSV 提供的受影响符号可直接收敛为 not_affected,其它生态可选 lsp_confirm(用语言服务器确认至少一处真实引用,默认关)或由 App 端的符号比对进一步收敛。结论按「还需处置的排前面」排序。
sbom.dbsync — 维护本地离线漏洞库(air-gap)
为 audit / vex 的离线模式同步本地 OSV 漏洞库。action:status(默认,纯本地、查看各生态记录数与新鲜度)/ sync(联网按生态拉取 OSV dump)/ import(用 zip_path + osv_eco 导入离线传入的 OSV zip,供完全隔离的环境使用)/ kev(刷新 CISA KEV 名录)。其中 13 种生态有 OSV 离线 dump 覆盖(conan / conda / CocoaPods 暂无离线库,可在线审计)。
隔离网(air-gap)用法:把数据源指向内部镜像(必要时配代理),再用
sync或import填好本地库,此后audit/vex即可全程离线运行。相关源地址、代理、默认模式可在 设置 → 安全 → 供应链 / SBOM 配置;留空即用内置默认(直连公网)。该面板还展示每个生态的离线库记录数 / 新鲜度、KEV 条目数,并提供按生态多选同步与「同步 KEV」按钮。保存按钮为「测试并保存」:先校验地址 / 路径合法性、再按「默认审计数据源」探测可用性,不可用则拒绝保存;本地漏洞库路径等离线字段归入「离线漏洞库」区,保存时会把路径规范为绝对路径。另有「重置为默认」按钮一键把各字段清回内置默认(仅改表单,需再点「测试并保存」才生效,避免一键误清掉自定义镜像配置)。
11.10 云端威胁情报与哨兵扫描(VirusTotal / Google Threat Intelligence)
AVL Code 接入 VirusTotal / Google Threat Intelligence(GTI) 做云端威胁情报。整体分两条正交的轴,在 设置 → 安全 里配置:
- 威胁检测(能力):配好一种检测方式后,Agent 就能调用扫描 / 情报工具做分析。
- 云端检测服务(三选一):VirusTotal AI · 免费托管(零配置即用,文件哈希与可疑文件会上传做公开分析、别名上公开排行榜)/ Google Threat Intelligence · 自带 API Key(用你自己的 key、结果不公开)/ 不使用云端。
- 本地 YARA 规则(独立开关):纯离线规则检测,可与云端同开,也可单独作离线用。
- 自动扫描拦截 · 哨兵(Sentinel):开启后,Agent 读 / 写 / 执行文件时自动扫描并阻断恶意命中。
关键改进:检测能力与哨兵拦截解耦。只要配好云端后端或本地 YARA,相关扫描 / 情报工具就能直接被 Agent 调用——无需开启哨兵拦截。两轴互不牵连。
哨兵侧的哈希扫描工具(sec.vtai_*):
| 工具 | 用途 |
|---|---|
sec.vtai_check_hash |
用文件哈希查威胁情报,不上传内容(返回 verdict / 命中数 / 标签 / 链接) |
sec.vtai_scan |
上传高危文件做完整扫描;仅在开启「上传到云端扫描」或本地 YARA 时可用,否则退化为哈希查询 |
sec.vtai_register |
触发 VirusTotal AI 注册 / 重注册(实际在设置面板的同意流程里完成) |
sec.vtai_status |
查看哨兵状态(是否启用 / 监控 / 自动扫描 / 后端 / 缓存等) |
全量情报工具(vt.*,独立门控,见 §11.10.1):直查 VirusTotal / GTI 的 v3 API 做情报富化,与哨兵并存、独立开关。
11.10.1 vt.* 全量情报工具
在 设置 → 安全 → 「Google Threat Intelligence 全量情报工具」 开启后(需先配好可用的 API Key),Agent 可调用:
| 工具 | 用途 | 说明 |
|---|---|---|
vt.lookup |
只读富化:自动识别 IOC 类型(哈希 / IP / 域名 / URL),批量查询、紧凑摘要 | 免费、只读;只发 IOC 字符串、不上传样本 |
vt.api |
全量直通:访问 VT / GTI 各类 v3 端点 | 读默认可用;写 / 提交受「仅查询」拦、Premium/GTI 端点受「收费功能」拦 |
vt.submit |
提交 URL、上传文件、重扫(异步轮询) | 写操作;上传样本字节属外发,默认需行内确认,单文件 ≤ 32 MB |
vt.download |
下载样本到工作区 | Premium;二进制不进上下文 |
vt.feeds |
拉取订阅源批次到工作区 | Premium;有 T-60 分钟延迟 |
vt.hunt |
Retrohunt / Livehunt 狩猎 | Premium;异步,创建后轮询状态 / 命中 |
门控分级(设置 → 安全):主开关启用(凭可用 key)→ 仅查询模式(默认开,只读、拦写 / 提交 / 上传)→ 启用收费功能(默认关,放开 Premium/GTI 端点,实际仍受 key 档位限制)→ 上传样本前确认(默认开,仅在关掉「仅查询」时出现)。响应经紧凑摘要(verdict / 检出比 / 名称 / 标签 / 链接等)避免占满上下文,raw=true 可取原始 JSON。密钥不可用会在启用环节即提示(不再等到调用才报错)。「恢复默认」按钮非破坏性——取消选用云端并关上传,但保留 API Key / VirusTotal AI 注册与全量情报工具配置。
11.11 数据可见性
所有分析结果都直接落到对话流,可独立查看 / 复制 / 导出。AVL Code 不会把样本本体上传到任何第三方;只有反编译会按需调用反编译模型(仅发相关反汇编片段),以及 vt.submit / sec.vtai_scan 上传(需你显式确认 / 开启)会把文件送往 VirusTotal 云端。
