domcolelak/outside

GitHub: domcolelak/outside

一款以证据为核心的外部攻击面管理应用,通过被动公开来源持续发现、评分和监控已验证组织的公开暴露面与已知漏洞。

Stars: 0 | Forks: 0

# 外部 **在线演示:[outsideguardian.eu](https://outsideguardian.eu)** — 运行匿名外部扫描快照,无需注册(`/scan?target=northstar&mode=demo`)。 OUTSIDE 是一款防御性的外部攻击面发现与监控应用程序。它为域名映射公开证据,将扫描流式传输为交互式图表,得出确定性的调查结果和暴露评分,并跟踪已验证组织的变更。 OUTSIDE Guardian 是高级的持续智能子系统。它保留规范化的观察结果,关联跨时间段的有意义变更,计算 Exposure Drift,维护动态安全检查清单,生成有证据支持的建议和修复指南,分组工作流通知,并生成每周执行摘要。Guardian 从不创建确定性发现流水线未观察到的资产、弱点或证据。Evidence Intelligence 使用 SHA-256 对每次扫描的原始和规范化观察结果进行密封,归属提供商可靠性及发现来源,检测相关性和矛盾,并为每个持久化的发现公开证据图谱以及 DNS、证书、HTTP 和技术历史记录。 该应用程序是使用 TypeScript、React 19、Prisma 7、PostgreSQL 16、Tailwind CSS 4、Vitest、Playwright 和 `@react-pdf/renderer` 的单个 Next.js 16 App Router 部署,并附带一个 Go Terraform provider。 ## 截图 | | | | --- | --- | | ![Landing](https://static.pigsec.cn/wp-content/uploads/repos/cas/d5/d59bd721a3e65761dd89da7d4c33d14cc6e3a87aae1777b78f6261823a6530d5.png) | ![Live discovery graph](https://static.pigsec.cn/wp-content/uploads/repos/cas/18/185e8ed52f8b55289cb5fad51adc1c9c54b1c9dccf62a17503489066815df00f.png) | | **首页** — 仅限被动的公开来源;外部快照无需登录。 | **实时发现图谱** — 确定性分类、暴露评分以及 Aegis 事件关联。 | | ![Attacker View](https://static.pigsec.cn/wp-content/uploads/repos/cas/b7/b732fac5cbedff40f8baf92caa0c6814c74b120a4a7255325daed8fe88a17976.png) | ![Guardian dashboard](https://static.pigsec.cn/wp-content/uploads/repos/cas/f2/f2047c5f123d3d65012cbcc75bfae75834e4de40d1542d6b2f936c829d55e6c8.png) | | **Attacker View** — 基于证据回放每个主机名是如何变得可公开观察的。仅用于发现,绝不进行利用。 | **Guardian** — 在每次计划扫描后提供持续变更智能、Exposure Drift 以及可追溯的建议。 | | ![Findings and posture](https://static.pigsec.cn/wp-content/uploads/repos/cas/68/68cf0fbcd7e2ee9745b9eeb7612d38ba7e5cca99d6b2a799e99798e527ccf009.png) | | | **发现与安全态势** — 暴露评分及透明细分,随后是涵盖每个生成器的基于证据的发现:已知漏洞(CVE + 实时 CISA KEV + EPSS)、Censys 观察到的暴露服务、IP/域名信誉、数据泄露暴露以及配置错误。 | | ## 能力边界 - 匿名扫描使用被动的公开来源,且不会被持久化。 - 经过身份验证的组织可以通过 DNS TXT 或众所周知的 HTTPS 文件来验证域名。 - 主动的 HTTPS/TLS 观察、持久化历史记录、建议、监控、AI 解释和 PDF 报告需要对已验证目标进行身份验证访问;在已配置的情况下适用付费权限。 - 调查结果将公开的技术版本与已知漏洞和生命周期结束分支相关联,并使用实时的 CISA Known Exploited Vulnerabilities 目录(在野利用状态、勒索软件关联、修复截止日期)和 FIRST.org EPSS 利用概率分数进行丰富。版本横幅被视为需要确认的项目,绝不是已确认的漏洞利用。 - 配置错误发现源自扫描已捕获的被动 HTTP/TLS 观察 —— 缺失的安全标头、HTTPS→HTTP 降级重定向以及证书/域名注册过期 —— 无需额外请求。 - 可选的被动 DNS 发现扩展(SecurityTrails、Shodan)展示了从未出现在公开证书上的子域;每个返回的主机名都经过验证,确认是目标的真实子域。仅限已验证目标。 - 可选的 Censys 服务发现报告在已解析的公开地址上观察到的非 Web 服务(SSH、数据库、RDP、消息代理)—— 这是仅限 HTTPS 的路径永远看不到的暴露。 - 可选的第三方威胁情报丰富 —— IP 信誉、数据泄露暴露、IP 分类 和域名信誉 —— 仅在已验证目标上运行,并且仅当操作员配置了提供商密钥时运行;在未配置时降级为无操作。 - 每个情报丰富提供商都受环境变量控制、有界且隔离:捕获提供商故障且绝不让扫描失败,并且扫描会报告其自身的完整性,因此部分发现永远不会被呈现为完整的。 - Aegis 变更建议是经过验证的预览。连接器注册表会检测已配置的凭据,但不会执行、验证或回滚提供商的变更。 - AI 是可选的,并且对确定性扫描结果是只读的。它无法添加资产、发现或评分,并在未配置时降级为确定性模板。 - 演示数据是合成的,并已被明确标识。 ## 本地开发 ``` npm install copy .env.example .env.local npm run dev ``` 开发和测试可以使用 `OUTSIDE_STORAGE_MODE=memory`。除非正确配置了 `DATABASE_URL`、`OUTSIDE_STORAGE_MODE=database`、`AUTH_SECRET` 和 `OUTSIDE_VERIFY_SECRET`,否则生产环境将拒绝执行(fail closed)。参见 [`.env.example`](.env.example)。 对于本地 PostgreSQL 数据库: ``` npm run db:generate npm run db:migrate npm run test:e2e ``` ## 验证 ``` npm test npm run test:browser npm run lint npm run typecheck npm run build ``` CI 会运行相同的校验关卡,外加 PostgreSQL 16 全新/升级迁移、集成工作流、隔离的转储/恢复演练、带有可访问性检查的 Chromium 桌面/移动端旅程,以及生产容器冒烟测试。依赖项更新的 Pull Request 通过 Dependabot 进行配置。 ## 架构 核心流水线为: ``` request -> authorization/rate limits -> discovery providers -> normalization -> graph/evidence -> signals/findings/score -> persistence -> SSE/UI ``` 关键区域: - `app/api`:经过身份验证的 API 边界、SSE 扫描、cron、计费和 webhook。 - `lib/discovery`:有界 CT、DNS/CNAME 基础设施信号以及已验证目标的 HTTPS/TLS/标头观察。 - `lib/security`:目标验证、IP 固定、请求限制和分布式速率控制。 - `lib/analysis`:确定性分类、发现生成、评分以及与实时 CISA KEV 订阅源同步的已知漏洞关联。 - `lib/intel`:可选的、由操作员密钥控制的威胁情报丰富(IP 信誉、域数据泄露暴露),有界且隔离。 - `lib/persistence`:租户范围的时序身份、快照、差异和历史记录。 - `lib/monitoring`:原子监控声明、重试/退避和计划扫描。 - `lib/aegis`:建议、建议验证、状态和审计追踪。 - `lib/guardian`:持续快照、事件关联、Exposure Drift、检查清单控制、建议/修复生成、加密集成、可重试交付、执行摘要和租户保留。 - `lib/observability`:用于发现提供商、Guardian 队列年龄/深度、交付结果和保留的低基数 OpenTelemetry 指标。 - `lib/auth`:签名会话、RBAC、邀请、OAuth 和电子邮件验证。 - `lib/email`:持久化发件箱、模板、提供商截止日期和警报。 - `components/graph`:带有 Barnes-Hut 缩放、调和、剔除和空闲挂起的画布图谱。 - `prisma/schema.prisma`:持久化的多租户数据模型。 完整的设计和运营权衡在 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) 中。当前的限制和未来工作在 [`docs/ROADMAP.md`](docs/ROADMAP.md) 中。 生产环境操作员还应阅读[当前就绪证据](docs/PRODUCTION_READINESS.md)、[发布证据契约](docs/LAUNCH_VALIDATION.md)、[类生产环境预发布指南](ops/staging/README.md)、[部署指南](docs/DEPLOYMENT.md)、[发布检查清单](docs/RELEASE_CHECKLIST.md)、[初始 SLO](docs/SLOS.md)、[Runbook](docs/RUNBOOKS.md)、[事件响应计划](docs/INCIDENT_RESPONSE.md)、[灾难恢复指南](docs/DISASTER_RECOVERY.md)、[客户启动指南](docs/CUSTOMER_LAUNCH.md)、[试点运营](docs/PILOT_OPERATIONS.md)、[渗透测试包](docs/PENTEST_PACKAGE.md)、[法律审查输入](docs/LEGAL_REVIEW_INPUT.md)、[隐私和数据处理指南](docs/PRIVACY_DATA.md)、[计费 Runbook](docs/BILLING.md)、[容量指南](docs/PERFORMANCE.md)以及[交接指南](docs/HANDOVER.md)。事实性的收购评估和剩余的重大风险包含在[技术尽职调查](docs/DUE_DILIGENCE.md)中;持久的产品优势在[护城河简报](docs/MOAT.md)中与推测性工作区分开来。 ## 安全模型 - 组织 ID 派生自已验证的成员资格,而不受客户端信任。 - 目标、验证记录、扫描、历史记录、建议和监控都是组织作用域的。 - 出站 HTTPS 会解析并验证每个地址,拒绝特殊用途的 IPv4/IPv6 空间,并通过主机名验证连接到已验证的 IP,以防止 DNS 重绑定。 - 会话和验证签名密钥在生产环境中是强制且独立的,并具有受控的会话密钥轮换。 - 邀请令牌是随机的,以哈希形式存储,绑定到受邀电子邮件,会过期,并以原子方式被使用。 - 共享的基于数据库的速率限制、并发租约、cron 声明、webhook 幂等性和电子邮件交付状态支持多实例部署。 - 提供商响应体受字节数限制,会检查内容类型,会强制执行截止期限,并且返回给客户端的错误会经过净化处理。 这是防御性发现软件。它有意不包含任何漏洞利用、凭证攻击、暴力破解或 payload 功能。 ## Agency Suite Agency Suite 是专为 MSP、MSSP、顾问和经销商提供的 Agency 计划控制平面。它在现有组织之上分层建立了明确授权的投资组合关系;它不会削弱组织租约,也不会将 Guardian 证据复制到第二个事实来源中。 - `/agency` 提供投资组合健康状况、客户分组、风险热力图、Portfolio Guardian、跨客户资产/发现搜索、分析师优先级、变更订阅源以及批量扫描/报告工作流。 - Agency RBAC 将所有者、管理员、经理、分析师、计费和查看者的职责分开。API 密钥使用哈希秘密和狭窄的作用域。 - 客户端关联需要客户端组织的所有者会话。客户端门户邀请经过哈希处理、会过期且为一次性授权;该门户仅公开共享的发现、共享的笔记、确定性安全态势和已发布的报告。 - 白标品牌包括经过验证的自定义域路由、品牌化电子邮件、徽标/颜色、支持标识、PDF 报告和不可变的报告时品牌快照。通过电子邮件发送的报告链接使用随机的、经过哈希处理的、租户作用域的 7 天访问授权。 - 每个客户端的服务层级、持久的 SLA 生命周期、已验证的通知路由、门户模式、计费模式、价格、货币、分组和外部参考支持代理运营和经销商计费层级。管理中心包括使用趋势、MRR 汇总和计费 CSV 导出。 - 批量作业是幂等的。批量扫描仅使已配置、已验证的监控变为到期状态;它们从不创建或扫描未验证的目标。 将 `OUTSIDE_AGENCY_SEAT_LIMIT` 设置为已授权的活动席位数加上待处理邀请的上限(默认为 `100`)。在数据库模式下启用 Agency Suite 之前,请先应用迁移。 ## Enterprise 控制平面 OUTSIDE Enterprise 是分层在组织之上的隔离控制平面。在配置已授权的 `EnterpriseWorkspace` 之前,SMB 和 Professional 组织将保留现有的产品体验。 - `/enterprise` 包含经 STR 代理的 SAML 和原生 OIDC 联合身份验证、SCIM 2.0 生命周期配置、具备组感知能力的范围受限 RBAC、组织/部门层级结构、资产和风险所有权、策略/评分规则、独立审批以及有时限的风险例外。 - Enterprise API token 经过 SHA-256 哈希处理,仅显示一次,受权限限制,可选择性地限制资源范围,并且会过期和可撤销。REST 在 `/api/enterprise/v1` 下进行版本控制;`/api/enterprise/graphql` 接受有记录的持久化操作,以保持成本和授权的确定性。 - 审计事件在数据库中是仅追加的,并基于序列、时间戳、参与者、操作、资源、请求元数据和详细信息形成规范的 SHA-256 链。JSON、CSV 和 NDJSON 导出在返回数据之前会验证完整的链条。 - Splunk、Microsoft Sentinel、Elastic、QRadar、Chronicle、Cortex XSOAR、ServiceNow、Freshservice、Jira Service Management、PagerDuty、Opsgenie 和签名的自定义 webhook 使用加密凭据、具备 SSRF 防护的 IP 固定 HTTPS、幂等的租用交付、指数退避以及特定于提供商的 payload。工单回调需要带时间戳的 HMAC 签名。 - 执行和合规性证据报告以 JSON、CSV 和 PDF 格式提供。控制映射是证据摘要,绝不是认证声明。计划报告使用幂等交付作业。 - `OUTSIDE_DATA_REGION` 将部署固定到一个数据区域。跨区域的元数据重标记将被拒绝;移动需要显式的导出/导入迁移。运维保留是有界的且基于集合的;不可变审计被刻意设计为不会被静默删除。 - `terraform-provider-outside` 管理企业工作空间许可和版本化的策略文档。销毁工作空间资源会暂停其许可,而不是删除客户证据。 企业机密材料需要独立的 `ENTERPRISE_ENCRYPTION_KEY`。平台自动化使用 `ENTERPRISE_PROVISIONING_TOKEN`;请勿重复使用终端用户的 API token。SAML 仅通过经过审计的 SAML 到 OIDC 代理边界被接受 —— OUTSIDE 不实现不安全的定制 XML 签名解析器。参见 [`docs/ENTERPRISE.md`](docs/ENTERPRISE.md)。 ## 部署 部署到带有 PostgreSQL 的 Node.js 主机上。在启动应用程序之前运行迁移: ``` npm ci npm run db:migrate npm run build npm run start ``` 该代码仓库还附带了独立的生产应用程序和迁移容器目标: ``` docker build --target migrator -t outside-migrator . docker run --rm --env DATABASE_URL outside-migrator migrate deploy docker build -t outside . docker run --read-only --tmpfs /tmp --env-file .env.production -p 3000:3000 outside ``` 仅在运行时提供密钥;构建过程使用非生产环境的哨兵值,不需要生产凭据。 配置 cron 调用程序将 `Authorization: Bearer ` 发送到 `/api/cron/scan`、`/api/cron/agency`、`/api/cron/enterprise`、`/api/cron/retention` 和 `/api/cron/kev-sync`(每日执行;刷新 CISA Known Exploited Vulnerabilities 目录)。在监控之后运行 Agency 作业,以同步 SLA 状态并将去重后的特定于客户端的通知加入队列。Enterprise 作业声明集成交付、安排导出并应用运维保留。对于超出其有界批处理大小的投资组合,使用返回的 `nextCursor` 作为 `after` 查询参数继续执行,直到其为 `null`。每天至少运行一次保留任务;其咨询锁、有界批处理和幂等分区维护使得重叠调用是安全的。仅在使用这些可选功能时才配置 Stripe 和 Resend。`/api/health` 在持久模式下执行真实的数据库就绪查询。 启用 Guardian 工作流集成的付费部署必须配置独立的 32 字节 `GUARDIAN_ENCRYPTION_KEY`。集成目标被验证为 HTTPS,在交付前立即解析,被要求解析为公共 IP 地址,并通过带有主机名验证的 IP 固定连接进行联系。 Guardian 历史记录、不可变的证据快照、事件和活动使用原生的 PostgreSQL 月度范围分区。付费组织接收感知计划的保留默认值;组织管理员可以通过 `/api/guardian/retention` 管理有界的策略值。证据快照遵循快照保留窗口并拒绝数据库更新。设置 OTLP/HTTP 指标端点以导出 `outside.provider.duration`、`outside.guardian.queue.oldest_age`、队列深度、交付结果和保留吞吐量,且不包含租户或域标签。 ## 许可证 专有。
标签:EASM, ECS, GitHub, GPT, PostgreSQL, Terraform, 外部攻击面管理, 实时处理, 日志审计, 漏洞管理, 特征检测, 自动化攻击