拓冰建站拓冰建站
首页 / 资讯中心 / 正文

NautilusTrader 安全策略与供应链安全实践:从漏洞报告到发布验证的完整指南

NautilusTrader 安全策略与供应链安全实践从漏洞报告到发布验证的完整指南【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader本指南以 NautilusTrader 官方安全策略SECURITY.md为骨架结合仓库内的安全架构文档docs/developer_guide/security.md与真实安全配置deny.toml、security-audit.toml、scripts/security-audit.py系统讲解该项目的漏洞报告流程、响应承诺、分层安全基础设施、依赖治理与供应链防线并给出 Python 构件与 Docker 镜像的可复现验证命令。读完本文你将掌握 NautilusTrader 的安全边界在哪里、漏洞如何上报与处置、发布物如何独立核验以及各道安全防线在仓库中的具体落点。安全策略适用范围与边界NautilusTrader 将安全视为优先事项并在开发与发布生命周期中应用分层控制带签名与证言的发布、持续的漏洞管理、透明的开发实践。官方安全策略覆盖NautilusTrader 开源软件及官方仓库Nautech Systems 官方网站nautilustrader.io。明确排除在范围之外的包括第三方服务、交易所和数据提供商——即交易引擎对外连接的券商/交易所适配层不在本项目安全承诺范围内使用者需要自行评估其密钥管理与网络边界。漏洞报告渠道与响应时间线如何上报漏洞官方推荐的首要途径是 GitHub Security Advisories私有披露在公开修复之前完成私密协调上报者会出现在安全公告与发布说明的致谢名单中。备选途径为邮件联系安全团队涉及敏感内容时可申请 PGP 密钥进行加密通信。上报时建议包含四要素漏洞描述复现步骤受影响版本可行的修复建议如有。响应时间线承诺阶段承诺时限初始响应收到报告后 48 小时内状态更新7 天内给出初步评估修复时间严重漏洞 30 天内修复其余问题 90 天内公开披露与上报者协商确定披露日期协调披露责任披露原则与版本支持项目鼓励负责任披露要求上报者在修复可用前不公开漏洞仅以证明漏洞所需的最小程度利用问题不访问未授权数据、不破坏系统遵守适用法律。除非上报者要求匿名否则项目会在安全公告与发布说明中致谢。版本支持策略仅支持最新版本。使用旧版本时相关漏洞可能已在后续版本修复——因此生产环境应始终升级到最新发布。目前项目没有正式漏洞赏金计划但对帮助提升安全性的贡献会在公告中致谢。安全基础设施贯穿生命周期的分层防线SECURITY.md 将安全基础设施按生命周期分层描述逐层都有仓库内的真实配置对应。公开姿态OpenSSF Scorecard仓库对外发布 Scorecard 结果badge 与 API并将 SARIF 上传到 GitHub code scanning作为仓库健康度的自动化信号与人工评审、安全审计互补。源码与评审控制CODEOWNERS关键基础设施文件、依赖清单与锁文件在合并前必须经 Core 团队评审分支与标签规则集受保护分支要求签名提交且通过 CI 检查v*发布标签创建后不可变源码来源限制Rust 包仅允许来自 crates.io。此项在 deny.toml 的[sources]段落实unknown-registry deny、unknown-git denyallow-registry仅放行 crates.io 官方索引。依赖引入控制这是供应链安全的重点对应仓库中多处配置版本固定与锁文件Rust 依赖在Cargo.lock中以带密码学校验和的形式固定Python 依赖在python/uv.lock中以完整性哈希固定禁止通配符版本要求。Cargo.toml中[workspace.metadata.cooldown] days 3即 Rust 侧冷却期配置。依赖冷却期Python 依赖解析通过 python/pyproject.toml 中[tool.uv] exclude-newer 7 days排除近 7 天发布的包Rust crate 更新受 3 天冷却期与 cargo-vet 评审约束。安全修复或关键缺陷修复经显式评审后可绕过冷却期。这些窗口给社区时间检测并隔离被攻陷的发布。仅 wheel 安装[tool.uv] no-build-package列表枚举了python/uv.lock中锁定的每一个第三方包禁止uv从源码构建它们。正常情况 uv 偏好 wheel该设置是空操作一旦某个上游停止为目标平台发布 wheeluv lock会直接失败而不是静默从 sdist 构建。本地工作区包有意缺席此列表因为它必须由工作区自己的构建后端maturin构建。check-no-build-packagespre-commit 钩子保证该列表与python/uv.lock每次提交时保持同步。工具链固定python/pyproject.toml限制本地 uv 使用受支持的 minor 系列required-version 0.12,0.13.nautilus-engineering/tools.toml固定 CI、Docker、pre-commit 与项目安装命令使用的精确 uv 版本以及共享发布与审计工具版本仓库内 tools.toml 保留 NautilusTrader 专属固定项如 nightly 工具链、miri、pypi-attestations 版本。许可证合规自动化检查将 Rust 依赖校验在兼容 NautilusTraderLGPL-3.0-only许可证的允许清单内。见 deny.toml 的[licenses]段allow列出 MIT、Apache-2.0、BSD、MPL-2.0 等约 20 种兼容许可证并对libfuzzer-sysNCSA、implied-vol、dydx-proto等给出显式例外与 clarify 说明。合并前与定期扫描Pre-commit 安全Gitleaks 凭据筛查、私钥检测、Zizmor GitHub Actions 审计、Unicode 控制字符检测在变更落地前执行依赖审计Rust 侧用 cargo-audit、cargo-deny、cargo-vet、OSV ScannerPython 侧用 pip-auditGitHub Actions 用 Zizmor。统一入口是 scripts/security-audit.py由 security-audit.toml 声明策略cargo.audit、cargo.deny、cargo.vet、python、osv各段。供应链溯源cargo-vet 通过导入 Bytecode Alliance、Google、Mozilla、Embark Studios 等组织的受信审计数据验证 Rust 依赖来源。Cargo.toml中[workspace.metadata.vet] store { path .supply-chain }指定审计数据仓库。模糊测试cargo-fuzz 目标覆盖选定的适配器与签名表面包括 Derive 线协议/签名内部与 Lighter 密码学/签名内部对应crates/adapters/derive/fuzz/、crates/adapters/lighter/fuzz/。代码扫描CodeQL 静态分析覆盖 PR 到master、推送到nightly及手动触发的 Python 与 Rust 代码定期安全审计还在令牌权限允许时上传 Zizmor SARIF 结果。构建与发布控制构建完整性Python 发布构件使用 SLSA 构建溯源证言GitHub 发布提供校验和清单GitHub Actions 固定到 commit SHA容器镜像固定 digest、经 Sigstore cosign 签名生成 SPDX SBOM 并附加 Sigstore 证言CI 运行器启用加固配置网络出口限制在显式允许清单内。发布时序稳定版本先创建 draft GitHub release 并附加 wheel 与 sdist 资产再发布到包索引packages.nautechsystems.io、PyPI、crates.io。CI 校验注册表、附加最终校验和与溯源资产随后发布 GitHub release 并核验其发布证言——GitHub release 与校验和清单成为下游注册表验证的锚点同时兼容 GitHub release 不可变性。部署环境隔离发布与包发布任务使用作用域化的 GitHub deployment environmentsrelease、r2-develop、r2-nightly发布凭据与 OIDC trusted-publisher 身份与测试、lint、纯构建任务隔离。发布认证PyPI 与 crates.io 上传使用绑定到releaseGitHub Environment 的 Trusted PublishingOIDC消除长期 API 令牌每次发布铸造仅作用于特定仓库、工作流与环境的短时令牌。GHCR 推送使用工作流运行作用域的GITHUB_TOKEN而非长期个人访问令牌。发布后验证CI 核验 PyPI wheel/sdist 与 GitHub release 清单及预期发布者身份一致核验 crates.io 条目由本仓库 trusted-publish记录每个 crate 是否匹配发布 commit 或早已发布核验最终 GitHub release 证言发布后核验容器镜像签名与 SBOM 证言绑定到预期的 GitHub Actions 工作流身份。运行时密码学选型TLS 与多数运行时密码学使用aws-lc-rsAWS-LC 的 Rust 绑定Ed25519 签名使用ed25519-dalek。Cargo.toml中对应声明为aws-lc-rs { version 1.18.1, default-features false, features [non-fips] }与ed25519-dalek 3.0.0注释明确AWS-LC 运行在非 FIPS 模式因为 FIPS 140-3 模块aws-lc-fips-sys需要 Go 工具链作为构建依赖。所用原语AES-GCM、SHA-2、ECDSA、ChaCha20-Poly1305在两种模式下完全相同FIPS 模块额外提供联邦认证所需的运行时自检与模块边界强制。已知漏洞管理流程当传递依赖存在已知公告且暂无可用修复时项目将风险评估、背景与缓解措施记录在审计配置中。被接受的风险按严重程度、作用域直接 vs. 传递、运行时 vs. 开发期分类并持续监控上游修复。以 deny.toml 的[advisories] ignore与 osv-scanner.toml 的[[IgnoredVulns]]为例paste经 alloy 传递、unic-*系列经 pyo3-stub-gen仅开发工具、capnp经 hypersync-client等待上游修复、quick-xml经 DataFusion 对齐的 object_store 0.13.2等均附带书面理由而非无解释地静默忽略。发现新漏洞时的处置路径nightly 安全审计自动标记公告Core 团队在 NautilusTrader 语境下评估严重性与暴露面直接依赖中的严重漏洞 30 天内修复或缓解通过发布说明与安全公告通知用户。值得注意安全扫描不受依赖冷却期延迟。公告要求更新包版本时经评审的修复可绕过适用冷却期。从源码构建或扩展依赖的用户需要自行审计其依赖树——本策略的控制仅适用于官方发布与规范仓库。已处理的第三方公告示例1.227.0urllib3解压炸弹防护绕过部分解压后经HTTPResponse.drain_conn()以及 Brotli 解压后的第二次read(amtN)/stream(amtN)调用升级至 v2.7.0urllib3经ProxyManager.connection_from_url创建的连接池在跨主机重定向时未剥离Retry.remove_headers_on_redirect列出的头升级至 v2.7.0。验证发布Python 构件与 Docker 镜像的独立核验Python 发布构件与 Docker 镜像经 Sigstore 工作流签名/证言Cargo crate 通过 crates.io Trusted Publishing 发布。发布验证器记录每个 crate 版本是由当前发布 commit 发布还是早已由本仓库更早的 trusted-publish commit 发布。紧急令牌恢复需要显式CRATES_IO_MANUAL_PUBLISH_EXCEPTIONS的crateversion条目恢复的版本在crates-manifest.json中记录release_status: manual_token_publish。使用者可在安装前独立验证构件。验证 Python wheels 与 sdistGitHub releases 附带生成的校验和表、聚合SHA256SUMS文件、每个资产的.sha256文件以及面向 Python wheel 与 sdist 的机器可读dist-manifest.json。安装前请对照其中之一核验下载的构件。每个 Python 构件还附带.sigstoreSigstore bundle 与.intoto.jsonlDSSE envelope 兄弟文件。GitHub CLI 默认从 GitHub API 获取证言使用--bundle artifact.sigstore可改为核验下载的 Sigstore bundle。从 PyPI 或 GitHub release 下载后用 GitHub CLI 核验每个构件。--cert-identity-regex与--cert-oidc-issuer标志将核验绑定到build.yml发布工作流而不只是仓库本身ISSUERhttps://token.actions.githubusercontent.com IDENTITY^https://github\.com/nautechsystems/nautilus_trader/\.github/workflows/build\.ymlrefs/heads/(master|nightly)$ # gh attestation verify 一次只接受一个 subject因此对 wheel 循环处理 for whl in nautilus_trader-*.whl; do gh attestation verify $whl \ --repo nautechsystems/nautilus_trader \ --cert-identity-regex $IDENTITY \ --cert-oidc-issuer $ISSUER done gh attestation verify nautilus_trader-*.tar.gz \ --repo nautechsystems/nautilus_trader \ --cert-identity-regex $IDENTITY \ --cert-oidc-issuer $ISSUER验证 Docker 镜像先把可变 tag 解析为不可变 digest确保每次检查、随后的docker pull与docker run都基于同一镜像# 用 crane或 docker buildx imagetools inspect ref --format {{.Manifest.Digest}} DIGEST$(crane digest ghcr.io/nautechsystems/nautilus_trader:latest) IMAGEghcr.io/nautechsystems/nautilus_trader${DIGEST} ISSUERhttps://token.actions.githubusercontent.com IDENTITY^https://github\.com/nautechsystems/nautilus_trader/\.github/workflows/docker\.ymlrefs/heads/(master|nightly)$核验 cosign 签名证明镜像由 NautilusTrader CI 工作流产生cosign verify $IMAGE \ --certificate-identity-regexp $IDENTITY \ --certificate-oidc-issuer $ISSUER核验 SPDX SBOM 证言绑定到同一镜像 digestcosign verify-attestation --type https://spdx.dev/Document/v2.3 $IMAGE \ --certificate-identity-regexp $IDENTITY \ --certificate-oidc-issuer $ISSUERGitHub CLI 也能核验 SBOM 证言但它不检查 cosign 镜像签名所以应在上述cosign verify之外附加使用gh attestation verify oci://${IMAGE} \ --repo nautechsystems/nautilus_trader \ --predicate-type https://spdx.dev/Document/v2.3 \ --cert-identity-regex $IDENTITY \ --cert-oidc-issuer $ISSUER源码级的防线实现审计脚本与配置如何落地统一的供应链审计入口scripts/security-audit.py 是仓库供应链检查的 typed 本地策略执行器提供validate、check-tools、run三个子命令并以 security-audit.toml 为策略源。从源码看它的关键设计严格模式化解析所有字段白名单校验、路径必须位于仓库内、advisory ID 与版本号格式正则校验ADVISORY_ID、STABLE_VERSION等防止策略配置本身成为注入面工具版本强校验_prepare_context根据启用审计段自动收集所需工具cargo-audit、cargo-deny、cargo-vet、pip-audit、uv、osv-scanner并从.nautilus-engineering/tools.toml或本地tools.toml读取精确版本逐一比对实际--version输出杜绝工具漂移审计执行cargo-audit 逐锁文件运行Cargo.lock与 fuzz 子项目锁文件cargo-deny 以--all-features --locked检查 advisories/licenses/sources/banscargo-vet 以--locked运行并指向.supply-chainstorePython 侧经uv export导出带哈希的 requirements 后由 pip-audit--require-hashes审计OSV 扫描三个锁文件。依赖健康度的三道闸门deny.toml 的[advisories]设unused-ignored-advisory deny——忽略列表若与实际不再相关会直接报错防止忽略项失控[bans]设multiple-versions deny与wildcards deny并显式 allowlist 已知的上游传递重复版本含原因与复核日期。osv-scanner.toml 与 deny.toml 的忽略项保持同步覆盖 lockfile 扫描器可能遗漏的条目如 derivative。版本固定链完整贯穿Rust 工具链由 rust-toolchain.tomlchannel 1.98.0锁定nightly/miri 由 tools.toml 固定Python 构建后端 maturin 在 python/pyproject.toml 中精确固定为maturin1.15.0。威胁模型与信任根安全架构文档的补充视角docs/developer_guide/security.md 进一步明确了发布管线的防御对象被攻陷的可变第三方 Actions以 commit SHA 固定、错误工作流/分支/环境的意外发布OIDC 发布者绑定到nautilus_trader、build.yml与release环境、长期注册表令牌失窃Trusted Publishing、注册表传播滞后幂等且可重试的发布脚本、注册表替换或上传漂移对照发布清单核验、静默手动 crate 恢复显式例外并记录。同时坦承不防御的范围能改发布工作流并批准发布的恶意维护者、GitHub/PyPI/crates.io/Sigstore 整体沦陷、被攻陷的终端用户机器、交易所/券商/数据提供方/用户策略的运行时失陷以及 wheel/sdist 的逐位可复现重建当前承诺是溯源与摘要核验而非可复现构建。信任根包括受保护分支与不可变v*tag、GitHub Actions OIDC issuer、release环境、PyPI/crates.io Trusted Publishing、SigstoreFulcio/Rekor/TUF与 GitHub release 不可变性。给使用者的安全建议始终使用最新版本因为项目仅支持最新版本旧版本可能带有已修复漏洞安装 Python 构件或拉取 Docker 镜像前按上文命令核验校验和、Sigstore 签名与 SBOM 证言若从源码构建或自行扩展依赖请自行审计依赖树——官方防线仅覆盖官方发布与规范仓库交易所、数据提供商等第三方服务不在官方安全承诺范围内相关 API 密钥与网络边界需自行防护发现漏洞时走私有披露通道附上描述、复现步骤、受影响版本与修复建议等待 48 小时初始响应即可获得安全团队的跟进。【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门