安全
这里值得偷的不是钱,是地址簿。
这一页描述架构层面的安全属性、漏洞披露政策,以及我们在认证上的位置——目前一项都没有,并且就这么写着。
威胁模型
我们不持有资金,也不持有任何能移动资金的密钥,所以那条最直白的攻击路径不存在。我们真正持有的,是「哪些机构在盯哪些地址」这件事。知道某个金库在监控哪一组结算地址,就等于知道这个金库的结构与敞口所在。对攻击者如此,对竞争对手同样如此——这是系统里价值最高的数据。
由此推出的结论与通常的运维直觉相反:地址簿的保密性优先级高于可用性。当我们无法保证客户之间的隔离时,正确的做法是拒绝服务,而不是降级服务、维持在线。
控制项
都在架构层,这样这些属性能在一次运维失误之后依然成立,而不是依赖于没有人失误。
| 控制项 | 怎么实现的 |
|---|---|
| 地址簿加密 | 信封加密。每客户一个数据密钥,由 KMS 中该客户专属的密钥包裹。服务端持有的是密文,从不持有明文地址簿。 |
| 匹配无需解密 | 在客户密钥下计算 HMAC 索引,匹配对索引进行,因此回答一次查询不需要解开任何东西。 |
| 跨客户隔离 | 客户标识是每一张客户数据表的分区键与主键首列,由查询层强制注入。目标是一条跨客户的查询「写不出来」,而不是「被拒绝」。 |
| 证据不可篡改 | 每一次外部取数都按取回原样快照。快照内容寻址,存储启用版本化与对象锁。决策记录禁止更新与删除。派生结论可以重算,原始数据从不被改写。 |
| 审计日志 | 所有内部访问——含运维与支持查询——都追加写入一份独立日志。与你相关的部分你可以随时自行导出,不需要来问我们看了什么。 |
| 密钥管理 | 客户密钥托管在 KMS 中并定期轮换。在私有部署下,这个 KMS 是你的——也就是说,软件的运行方与密钥的持有方是同一方:你。 |
| 采集器凭证 | 只读,按端点分别授权。系统内不存在任何能签出交易的凭证,因此也不存在为此目的而值得被偷的凭证。 |
| 公共管线分离 | 产出公共记录的管线与持有客户数据的管线在物理上分离。不存在任何一条代码路径能让地址簿到达我们发布的东西。 |
部署形态
- 私有部署(默认)
- 软件跑在你的环境里。你的地址簿、决策记录与证据库从不离开它。只有在你选择发送时我们才会收到运行遥测,而遥测里不含任何地址。
- 托管部署
- 在私有部署不现实时提供。区域在接入时确定并写入合同。上述全部控制项同样适用,另加审计日志导出——它存在的意义就是让你不必依赖我们的口头断言。
漏洞披露
我们宁愿从你这里听到,也不想过后从别处读到。报告发往 security@4shock.xyz。
范围
在范围内
- 4shock.xyz 及其子域
- 已发布的客户端 SDK 与验证器代码仓库
- 私有部署发行版及其默认配置
- 任何可能让一个客户的数据暴露给另一个客户的问题——无论触发它有多难,我们都按最高等级处理
不在范围内
- 不由我们运营的第三方服务
- 针对员工、供应商或客户的社会工程,以及物理访问
- 流量型拒绝服务与任何形式的压力测试
- 没有实际影响演示的扫描器输出,包括没有利用路径的缺失响应头
- 需要「终端已被攻陷」或「浏览器已装有恶意扩展」作为前提的结论
响应时限目标
- 确认收到
- 三个工作日内
- 定级与初步评估
- 十个工作日内
- 处理期间的进展同步
- 至少每十四天一次
- 协同披露
- 默认九十天,可协商提前,并在此页发布安全公告
目前没有现金奖励,我们也不会换个名字来暗示有。报告者如果愿意,会以姓名或代号致谢;不愿意就匿名致谢。如果将来设立奖励,会在动态里公布,而不是悄悄改这一页。
security.txt
按 RFC 9116 发布的机器可读联系方式,其中的策略链接指回本页。
认证现状
我们目前不持有任何安全认证。把这句话直说出来,比被追问一份我们拿不出的报告要便宜。
- SOC 2 Type II 计划中
- 计划中——因为机构采购会要。观察期尚未开始。开始之后,起始日期与预计出具报告的日期会发布在这一页。
- ISO 27001
- 未持有、未在推进,也不在我们任何材料里被声称。
- 第三方渗透测试 计划中
- 计划在首个生产部署之前完成。摘要会公开发布,完整报告在 NDA 下提供。
在这几行发生变化之前,请把这一页当作全部的证据;也请把私有部署当作那个不依赖于这些证据的控制手段。