快喵品牌标识快喵SECURITY WHITEPAPER
CHAPTER 06 · AUDIT

审计报告:范围、方法、发现与整改

2026 年 6 月至 10 月,快喵VPN 完成 3 轮核验,覆盖 4 个模块与 11 项字段,累计记录 5 项偏差并全部整改。本文说明核验范围、取证方法与局限,供读者判断结论的适用范围。

核验轮次
3 轮(2026-06 至 2026-10)
覆盖模块
4 个,另有 2 个未覆盖
偏差项
5 项,状态:已整改
快喵智能加密链路的分层示意:左侧加密竖条与右侧堆叠护盾层,背景为墨绿渐变
图 1 核验范围示意:薄荷色区域为已覆盖模块,暗色为明确未覆盖的第三方环节(本站渲染脚本生成,1200×675)

本页目录 · Contents

  1. 这份报告该怎么读
  2. 核验范围与未覆盖部分
  3. 取证方法与样本
  4. 发现清单与整改状态
  5. 偏差项的处理流程
  6. 报告自身的局限
  7. 三轮核验的对比
  8. 附录:检查项与自查
01

这份报告该怎么读

一份没有范围的审计报告没有意义。请先看范围,再看方法,最后才看结论。

审计报告最容易造成的误解是把它当成一次性结论:既然通过了,就永远安全。事实上任何结论都绑定三件事——覆盖哪些模块、用什么方法、对应哪个版本。本文按这个顺序组织,读者可以在读结论之前先确认这三项是否与自己关心的场景匹配。

还有一处需要提醒:审计结论的强度与参与方数量正相关。本报告由内部团队执行,因此即便结论全绿,也只能说明这套方法没有发现问题,不能说明问题不存在。这个区别在涉及资金与合规的场景里尤为重要。

三段式阅读法

  • 第一段:范围 第 02 节列出 4 个已覆盖模块与 2 个未覆盖模块,未覆盖部分不计入结论。
  • 第二段:方法 第 03 节说明取证方式与样本量,黑盒复核只能证明行为,不能证明未来版本不变。
  • 第三段:结论 第 04 节按模块列出发现与整改状态,偏差项与其处理时限逐条对应。
  • 附加段:局限 第 06 节说明方法本身的边界,读完再决定结论能不能用于自己的判断。

如果只想知道一句话结论:在 2026 年 6 月至 10 月的 3 轮核验中,已覆盖的 4 个模块未发现未整改的高危偏差,5 项偏差项全部在 30 日内完成整改并复验;未覆盖的 2 个模块不在这句结论之内。

阅读提醒

本报告不构成任何第三方认证或评级。核验由内容团队与工程侧联合执行,属于自查性质,读者应据此判断其证据强度,而不是把它当成外部背书。

同心环仪表图形:由内向外表示证书链、密钥轮换、隧道封装三层校验刻度
图 2 三层校验刻度:证书链、密钥与字段表三类检查在同一轮核验中的覆盖比例(本站渲染脚本生成)
02

核验范围与未覆盖部分

把未覆盖的部分写清楚,比把已覆盖的部分写漂亮更有价值。

本轮核验覆盖 4 个模块:客户端、接入层、出口层与业务库。每个模块给出具体的检查项数量与样本量。未覆盖的 2 个模块是支付链路与供应链,原因分别是涉及第三方机构流程与超出团队取证能力,两者在报告中单独标注为“不计入结论”。

表 1 核验范围(口径:第 3 轮核验,2026-10)
模块覆盖状态检查项样本量说明
客户端已覆盖14 项6 个平台组合含证书校验、密钥生命周期与 kill switch
接入层已覆盖11 项3 个可用区含双向证书、令牌有效期与转发行为
出口层已覆盖9 项12 至 40 个地址池含共享出口、地址轮换与异常隔离
业务库已覆盖11 项字段全表结构核对逐字段核对留存边界与删除时限
支付链路未覆盖————依赖第三方机构流程,不在团队取证范围
供应链未覆盖————构建产物来源核验超出本轮能力

范围声明还有一个常被忽略的作用:它让后续轮次的对比有意义。第 1 轮只覆盖客户端与业务库,第 2 轮加入接入层,第 3 轮补齐出口层;三轮的偏差项数量看似下降,但样本范围在扩大,因此不能在数量上做简单对比,只能比较同一模块内的变化。

为什么供应链没有覆盖

供应链核验要求对构建环境、依赖来源与产物签名做端到端追溯,通常需要独立机构参与。快喵目前只做到两件事:依赖清单公开与安装包摘要公示。这两件事能证明“你拿到的包与公示的包一致”,但不能证明“构建过程没有被污染”,因此不把它写进覆盖范围。

  • 依赖清单 客户端依赖的开源库与其版本随版本公示,便于核对已知问题。
  • 产物摘要 安装包 SHA256 随版本发布,用户可自行校验下载完整性。
  • 未做 构建环境的可复现性与依赖来源的逐层追溯,属于未覆盖项。
  • 后续 若引入独立机构参与,会把结论并入下一轮报告而不改写历史报告。
正交网格与半透明色块:用于标注审计范围覆盖与未覆盖的区域边界
图 3 覆盖边界网格:已覆盖模块与未覆盖模块的空间分布(本站渲染脚本生成)
03

取证方法与样本

方法决定证据强度。黑盒复核能证明“现在是这样”,不能证明“以后也不变”。

本轮使用三种方法:白盒代码与配置审阅、黑盒受控连接复核、库表结构核对。三者互补:白盒能发现设计层面的问题,黑盒能验证实际行为,库表核对能确认承诺在数据结构上是否成立。样本量方面,受控连接共执行 600 次(3 轮各 200 次),覆盖 6 个平台组合。

表 2 取证方法与证据强度(口径:3 轮核验统一方法)
方法对象样本量能证明什么不能证明什么
白盒审阅代码与配置全量设计是否符合文档实际运行是否被配置覆盖
黑盒受控连接运行中的客户端与节点3 轮 × 200 次当前行为符合字段表未来版本是否保持一致
库表核对业务库结构全表不存在可写入的禁止字段代码是否绕过库直写
抓包对照两侧网卡每轮 12 组正文两侧均为站点密文节点内部处理的中间状态
故障注入运行环境每轮 6 类故障时无明文出站生产环境的全部故障组合

样本的代表性同样重要:若 200 次连接全部来自同一运营商与同一时段,结论就只能覆盖那个组合。本轮在设计上要求每个平台组合至少 30 次、三种网络环境各占三分之一,并且刻意包含了 12 次弱网连接,用于观察超时路径下的写入行为。

一次受控连接复核做什么

  1. 隔离环境在无其他设备的隔离网络内安装同版本客户端,关闭所有后台更新与同步。
  2. 建立连接发起 200 次连接,覆盖 5 个目标站点与 3 种网络环境,逐次记录会话标识。
  3. 抓取写入在业务库侧开启写入捕获,记录每次连接产生的全部写入操作与字段值。
  4. 逐项核对把写入结果与字段表逐项比对,任何超出字段表的写入都记为偏差项。
  5. 复验整改后重复同样流程,确认偏差项消失且未引入新的写入。

这一步的关键在第四步:核对的对象是“写入了什么”,而不是“代码想写入什么”。两者的差异正是多数隐私承诺失效的地方——代码里写着不留存,但某个统计上报顺手把目标地址带进了错误日志。

柱状分布图:十四根柱体用于说明审计周期内请求类型的相对占比
图 4 写入构成分布:审计周期内业务库各类写入操作的相对占比(本站渲染脚本生成)
04

发现清单与整改状态

没有发现的报告通常意味着范围太窄。以下是本轮全部 5 项偏差与其处理结果。

5 项偏差全部属于“实现与文档不一致”,没有出现“架构性缺陷”。其中 3 项与日志字段有关,1 项与证书校验的异常分支有关,1 项与删除任务的时间窗有关。每项都记录了发现时间、影响范围、整改方式与复验结果。

表 3 偏差项清单(口径:第 2 轮与第 3 轮核验,2026-08 至 2026-10)
编号发现的问题影响范围整改方式复验结果
D-01错误日志中带入了目标域名片段仅写入本地日志,未上传移除字段并清理历史文件第 3 轮复验通过
D-02证书校验异常分支存在继续访问入口仅在特定错误码下触发删除分支,改为直接中断故障注入复验通过
D-03设备解绑后的哈希清除晚于 30 日涉及 2 个批次的定时任务修正任务时间窗并补偿清除核对任务日志通过
D-04聚合统计包含会话级时间戳统计接口可导出改为按天汇总导出结果核对通过
D-05节点侧保留了 5 秒的转发队列内容仅内存,断电即失改为元数据队列,不留内容内存检索通过

五项偏差里最值得复盘的是 D-02:证书校验的异常分支里存在一个“继续访问”入口,触发条件是一个极少出现在正常网络中的错误码。它没有在实际场景中被触发过,但它证明了“不留后门”不能只靠约定——只要代码里存在一条绕过路径,就会在某次排障中被重新启用。

为什么把偏差项公开

公开偏差项会让报告看起来“不好看”,但它同时是最有力的证据:一份永远没有问题的报告,读者无法判断它究竟检查得多细。快喵VPN 选择公布编号、问题、影响范围与复验结果,而非只给一句“未发现重大问题”。

  • 可复核 读者可以据此判断核验的细致程度,而不必信任一个形容词。
  • 可追踪 同一类问题再次出现时,可以直接对比整改方式是否一致。
  • 可追责 偏差项与其整改时限绑定,超时会成为下一轮报告的开篇内容。
时限规则

偏差项按严重度分级:高危 7 日内整改,中危 30 日内,低危 90 日内。超期未整改的偏差项会在下一轮报告的摘要中置顶列出,并说明原因。

05

偏差项的处理流程

发现问题的价值取决于处理流程是否稳定,而不是取决于某个人是否认真。

流程共 5 步,从登记到关闭平均耗时 11 天。关键设计是“双人复核”与“复验必须换人”:提出整改的成员不能执行复验,避免自证。第 3 轮的 5 项偏差全部走完流程,平均耗时 9.6 天,最长 18 天。

  1. 登记发现即登记编号与影响范围,进入公共清单,不允许私下修复后不记录。
  2. 定级按影响范围与可利用性定级,高危 7 日、中危 30 日、低危 90 日。
  3. 整改由模块负责人提交改动,说明根因与修复方式,不接受只改表象。
  4. 复验由未参与整改的成员按原方法复测,并额外做一次相关回归。
  5. 关闭复验通过后关闭并写入报告,复验未通过则回退到整改并重新计时。
表 4 三轮核验的时间与产出(口径:内部流程记录)
轮次时间受控连接样本偏差项平均整改耗时
第 1 轮2026-06-15200 次2 项(D-01、D-02)8.5 天
第 2 轮2026-08-20200 次2 项(D-03、D-04)12.0 天
第 3 轮2026-10-16200 次1 项(D-05)7.0 天
合计—600 次5 项,均已整改9.6 天
规则方块矩阵:深色块为不留存字段,薄荷块为必须留存的最小运行字段
图 5 检查项矩阵:三类检查在各模块的覆盖密度(本站渲染脚本生成)
06

报告自身的局限

一份诚实的报告必须说明它证明不了什么。否则读者会高估结论的适用范围。

本报告的局限有 4 条,且每一条都可能被误读。第一条最重要:核验属于自查,没有独立第三方参与,因此结论的证据强度低于外部审计;第二条是时间点性质,结论只对应执行时的版本;第三条与第四条分别是范围与方法的边界。

还有一个结构性局限需要点名:本报告的核验对象是快喵自己的模块,因此无法回答“节点托管方的物理安全如何”这类问题。托管方可能具备读取内存的能力,而这一点既不能被抓包证明,也不能被库表核对否定,只能作为已知风险写入范围声明。

四条局限

  • 自查性质 无独立第三方参与,缺少外部背书,证据强度低于机构审计。
  • 时间点 结论对应具体版本与日期,跨版本引用需要重新核验。
  • 范围缺口 支付链路与供应链未覆盖,不能据此推断其安全性。
  • 方法边界 黑盒复核与抓包无法观察到节点内部的中间状态,只能证明出入两端的行为。

第四条值得展开:抓包能证明“用户侧看到的密文”与“出口侧发出的密文”,但无法证明节点在内存中如何处理这些字节。要覆盖这一段,需要节点侧的运行时可观测性或更严格的 enclave 方案,目前两者都未采用,因此报告不对节点内部状态作任何结论。

表 5 结论适用性对照(口径:本报告第 3 轮)
结论适用范围不适用场景
字段表与实现一致客户端 V3.2 与业务库当前结构历史版本或定制分支
故障时无明文出站已注入的 6 类故障未覆盖的故障组合
正文两侧均为密文HTTPS 站点,12 组抓包非 HTTPS 或自建协议
删除时限符合政策账号、设备与计数三类字段支付机构侧的数据

把局限写进正文还有一个副作用:它让整改变得可以商量。当一条结论被明确标注“仅适用于 HTTPS 站点”时,读者就不会在没有 HTTPS 的场景里误用结论,团队也不会因为个别反馈而被迫扩大结论范围。

引用方式

引用本报告时请同时给出轮次与日期,例如“第 3 轮,2026-10-16”。省略轮次的引用会与本报告的范围声明脱钩。

07

三轮核验的对比

把三轮放在一起看,才能判断偏差项是在收敛还是只是被换了个位置。

三轮的偏差项数量依次为 2、2、1,平均整改耗时从 8.5 天升到 12 天再降到 7 天。数量下降本身不足以下结论,更有意义的是类型分布:第 1 轮集中在日志字段,第 2 轮转向定时任务与统计接口,第 3 轮只剩节点侧的内存队列。这条迁移路径说明检查的深度在推进。

  • 第 1 轮:日志字段清理覆盖客户端与业务库,发现错误日志带目标域名与证书校验异常分支两个问题,8.5 天内整改完成。
  • 第 2 轮:时间窗与统计接口引入库表结构核对,发现设备哈希清除延后与聚合统计含会话时间戳,平均 12 天完成整改。
  • 第 3 轮:节点侧内存新增内存检索项,发现转发队列保留 5 秒内容,改为元数据队列后 7 天复验通过。

为什么样本量不是越大越好

受控连接的样本量受限于人工核对成本:每一次连接产生的写入都要逐条比对,200 次已需要约 6 小时。把样本加到 2000 次并不会显著提高发现率,因为偏差项多集中在特定代码路径上,覆盖路径比增加次数更有效。这也是第 3 轮把一部分样本转为内存检索与导出比对的原因。

下一轮要补的三件事

  • 依赖来源追溯 把依赖清单扩展到构建环境,逐步接近可复现构建。
  • 节点内部可观测 为节点侧增加可核对的运行时不变量,减少黑盒方法的盲区。
  • 跨版本回归 把三轮的检查项固化为一套回归脚本,版本发布时自动执行。
六层错位叠板:对应应用层、会话层、传输层、网络层、链路层与物理层封装顺序
图 6 检查深度演进:三轮核验在客户端、节点与库表三个层面的覆盖顺序(本站渲染脚本生成)
08

附录:检查项与自查

本节列出检查项清单与读者可自行执行的核验顺序。

术语表

白盒审阅
直接阅读代码与配置,判断设计是否符合文档的方法。
黑盒复核
在不看实现的前提下,通过运行行为验证承诺的方法。
偏差项
实现与文档不一致的具体条目,须登记编号并整改复验。
双人复核
关键操作需两名成员分别确认,用于避免自证。
故障注入
人为构造异常以验证降级路径的方法。
可复现构建
相同源码在相同环境下产出字节一致的包,本报告未覆盖。
证据强度
一种方法能支撑的结论范围,黑盒复核弱于白盒审阅。
归零复验
整改后按原方法重测并要求偏差项完全消失。

检查项清单

表 6 检查项与判定标准(口径:第 3 轮检查表节选)
检查项判定标准方法样本
证书校验不可跳过无继续访问入口故障注入6 类错误码
密钥不落盘内存检索无密钥字节内存快照每轮 20 次
字段与文档一致写入不超出字段表写入抓取每轮 200 次
删除时限达标到期后数据不存在任务日志核对3 类字段
故障无明文出站注入后无明文包抓包每轮 6 类故障
导出字段受限导出仅含表内字段导出比对每轮 5 次

读者可执行的三步

  1. 查版本对照把自己的客户端版本与报告轮次对照,确认结论是否覆盖当前版本。
  2. 查导出内容导出账号数据,核对是否只包含字段表中的字段。
  3. 查删除行为注销测试账号,在承诺的时限后尝试登录,确认数据已被删除。

三步自查里最容易被跳过的是第三步:注销测试账号需要等待删除时限到期,多数人不会真的等。但它是唯一能验证删除承诺的方法,其余两项只能验证“记录了什么”,无法验证“删掉了什么”。

本章口径

本章数据来自 2026-06 至 2026-10 的三轮内部核验记录;核验为自查性质,不构成第三方审计结论,引用时请保留轮次与日期。