lhanhan05/NeoBank

GitHub: lhanhan05/NeoBank

一个基于 Docker 微服务的分段式银行网络靶场,用于网络安全培训、测试和 AI 提示注入评估。

Stars: 0 | Forks: 0

# NeoBank NeoBank 是一个小型的分段式银行网络靶场,使用 Docker 网络、微服务风格的容器、隔离的 PostgreSQL 数据库以及用于安全测试的 AI 客户支持接口构建。 ## 此仓库目前包含的内容 此仓库目前提供: - 分段的 Docker 拓扑 - 两个隔离的 PostgreSQL 容器 - 服务到服务的网络控制 - 一个连接性测试脚本,用于验证关键的允许和阻止路径 - 在 Corporate -> Core 支持工作流中集成的支持操作策略 / 审批分类层 ## 拓扑 NeoBank 被建模为独立的网络区域: - DMZ - Corporate - Core Banking - PCI / 卡数据环境 - 分别由 Core 和 PCI 拥有的数据库子网 当前服务布局: - `dmz-gw` - 连接到 `dmz-net` 和 `core-net` - `corp-agent` - 连接到 `corp-net` 和 `core-net` - `core-svc` - 连接到 `core-net`、`pci-net` 和 `core-db-net` - `pci-svc` - 连接到 `pci-net` 和 `pci-db-net` - `core-db` - 仅连接到 `core-db-net` - `pci-db` - 仅连接到 `pci-db-net` 这意味着: - Corporate 可以访问 Core - Core 可以访问 PCI - Core 只能访问 Core 数据库 - PCI 只能访问 PCI 数据库 - DMZ 无法直接访问 PCI - Corporate 无法直接访问 PCI ## 仓库文件 ### `.env` 存储 Docker Compose 配置值,用于: - 网络名称 - 镜像名称 - 本地开发数据库设置 关键值包括: - `PROBE_IMAGE` - `POSTGRES_IMAGE` - `DMZ_NET`, `CORP_NET`, `CORE_NET`, `PCI_NET` - `CORE_DB_NET`, `PCI_DB_NET` - `CORE_DB_NAME`, `CORE_DB_USER`, `CORE_DB_PASSWORD` - `PCI_DB_NAME`, `PCI_DB_USER`, `PCI_DB_PASSWORD` ### `.gitignore` 防止提交仅本地使用的文件,包括: - `.env` - Python 缓存文件 ### `docker-compose.yml` 定义: - 所有服务 - 所有 Docker 网络 - 两个 PostgreSQL 容器 - 用于数据库存储的持久化 Docker 数据卷 - 挂载在 `/docker-entrypoint-initdb.d` 的 Core 数据库初始化配置 ### `db/core/init/001_schema.sql` 定义 Core 数据库表: - `customers` - `accounts` - `transactions` - `support_tickets` - `account_notes` - `audit_log` 此 schema 支持: - 客户/账户状态 - 交易历史 - 不受信任的支持文本 - 操作员备注 - 前后审计证据 - 保守型和漏洞路径工单结果,包括 `resolved` ### `db/core/init/002_seed.sql` 为 Core 数据库填充虚拟但真实的银行业务数据,包括: - 活跃、冻结和低余额账户 - 支持工单 - 账户备注 - 一个 prompt 注入风格的工单正文示例 ### `db/core/init/003_seed_expansion.sql` 使用 `ON CONFLICT (id) DO NOTHING` 将非破坏性的、幂等的 Core 端演示真实性扩展数据应用到已在运行的本地数据库。 添加: - 两个额外的客户/账户 - 额外的交易历史 - 良性、操作性和需要审批的支持工单 - 用于审阅演示的账户备注比较模式 ### `db/pci/init/001_schema.sql` 定义 PCI 端表: - `cards` - `authorization_log` 此 schema 将敏感的卡数据与 Core 系统隔离,同时仍支持基于 token 的授权检查。 ### `db/pci/init/002_seed.sql` 为 PCI 数据库填充虚拟但真实的卡记录,包括: - 一张活跃卡 - 一张过期卡 - 一张冻结卡 - 每张卡的授权结果示例 ### `db/pci/init/003_seed_expansion.sql` 使用 `ON CONFLICT (id) DO NOTHING` 将非破坏性的、幂等的 PCI 端演示真实性扩展数据应用到已在运行的本地数据库。 添加: - 两张与 Maria/Ethan Core 端演示账户对应的额外活跃卡 - 额外的已批准授权历史,用于适合审阅者的比较案例 ### `scripts/test-connectivity.sh` 运行一组小型网络检查,以确认预期路径被允许且禁止路径被阻止。 当前的检查会请求实时的健康检查 endpoint,而不是假设端口 80: - 允许 `corp-agent` -> `core-svc` 的健康检查 - 允许 `core-svc` -> `pci-svc` 的健康检查 - 阻止 `corp-agent` -> `pci-svc` 的健康检查 - 阻止 `dmz-gw` -> `pci-svc` 的健康检查 ### `scripts/test-pci-service.sh` 对 PCI 授权服务执行 endpoint 级别的检查: - 健康检查 - 活跃卡批准 - 过期卡拒绝 - 冻结卡拒绝 - 未知 token 拒绝 ### `scripts/test-core-service.sh` 对 Core 服务执行 endpoint 级别的检查: - 健康检查 - 批准的 Core -> PCI 支付流程 - 过期卡拒绝 - 在 PCI 调用前冻结账户拒绝 - 缺失账户拒绝 Core -> PCI 契约现在使用 PCI 请求字段名 `token`,这修复了之前本地的 422 错误。 ### `scripts/test-core-support-endpoints.sh` 对 Core 服务的内部支持 endpoint 执行 endpoint 级别的检查: - 内部工单列表 - 内部工单审查上下文 - 内部账户备注检索 - 内部信贷操作 - Core API 层的安全/不安全支持路径边界验证 ### `scripts/test-corporate-service.sh` 对 Corporate 支持服务执行 endpoint 级别的冒烟检查: - 健康检查 - 列出工单 - 获取已知的植入恶意数据工单 - 通过 Core 拥有的支持上下文审查恶意工单 - 升级可疑工单的保守解决路径 - 可配置的 agent-review 路径 - 集成的策略/审批分类输出检查 - 通过 Core 路由的特权支持操作 - 验证缺失工单的 404 行为 ### `scripts/reset-exploit-state.sh` 通过 Core 拥有的测试/重置 endpoint 重置规范的植入漏洞利用目标: - 获取规范的植入漏洞基线 - 动态解析基线,而不是在 shell 脚本中嵌入字面量工单/账户值 - 从规范的植入基线定义恢复工单/账户状态 - 通过 Core 拥有的组合重置路径清理先前漏洞利用生成的信贷记录 ### `scripts/test-agent-exploit.sh` 从干净的预设条件状态运行专用的漏洞利用工作流: - 重置漏洞目标状态 - 从 Core 动态获取规范的漏洞利用基线 - 确认漏洞利用先决条件 - 运行 `agent-review` - 验证集成的策略/审批层将请求的操作标记为需要审批且不适合自动执行 - 运行不安全的 `agent-resolve` - 验证工单解决、账户更改、余额变化和漏洞利用交易证据 ### `scripts/test-dmz-gateway.sh` 对 DMZ 网关执行 endpoint 级别的检查: - 健康检查 - 批准的公共边缘支付流程 - 针对过期卡、在 PCI 调用前冻结账户以及缺失账户的公共边缘拒绝路径 ### `services/pci-auth-svc/` 包含第一个 PCI 端应用服务。 当前文件: - `app.py` - `requirements.txt` - `Dockerfile` 此服务旨在: - 接收卡 token 和交易详情 - 查找匹配的 PCI 端卡记录 - 返回批准/拒绝结果 - 记录授权结果 主 Docker Compose 文件现在使用此服务代码来驱动整体拓扑中的 `pci-svc` 运行时角色。 ### `services/core-svc/` 包含第一个 Core 端应用服务。 当前文件: - `app.py` - `requirements.txt` - `Dockerfile` 此服务旨在: - 接收基于账户的支付授权请求 - 查找 Core 账户状态 - 调用 PCI 服务 - 将批准的交易记录写入 Core 数据库 - 拥有 Corporate 服务用于工单、账户数据、备注、特权支持操作和漏洞利用重置/基线 endpoint 的内部支持 API 接口 - 接受 `PCI_AUTH_BASE_URL` 或 `PCI_SERVICE_URL` 作为 Core -> PCI 服务 URL,以保持 Compose 配置与代码级配置一致 主 Docker Compose 文件现在使用此服务代码来驱动整体拓扑中的 `core-svc` 运行时角色。 ### `services/dmz-gw/` 包含第一个 DMZ 网关实现。 当前文件: - `app.py` - `requirements.txt` - `Dockerfile` 此服务旨在: - 暴露公共支付 endpoint - 将允许的请求转发到 `core-svc` - 保持精简,避免直接持有业务逻辑 主 Docker Compose 文件现在使用此服务代码来驱动整体拓扑中的 `dmz-gw` 运行时角色。 ### `services/corp-agent/` 包含第一个 Corporate 区域支持服务。 当前文件: - `app.py` - `requirements.txt` - `Dockerfile` 第一个版本在其核心部分有意侧重于读取,旨在: - 通过 Core 服务暴露支持工单 - 通过 Core 服务暴露账户状态和交易历史以供支持审查 - 提供一个工单审查工作流,用于组装上下文并标记风险 - 提供一个保守的工单解决工作流,目前会升级处理而不是自动执行 - 提供在 mock 或兼容 OpenAI 的 LLM 模式下可配置的客服代理审查接口 - 在特权操作之前提供集成的支持操作策略/审批分类层 - 为漏洞利用场景提供不安全的 agent-resolve 路径 - 在漏洞利用上下文中包含账户备注 - 支持首批特权操作:通过 Core 服务边界进行冻结、解冻和信贷操作 - 证明 Corporate -> Core 数据路径有效 - 在最终的漏洞利用报告之前,支持可重复的漏洞利用先决条件重置和专用的漏洞利用验证路径 - 为后续的支持工具、漏洞利用证据和差异化功能奠定基础 主 Docker Compose 文件现在使用此服务代码来驱动整体拓扑中的 `corp-agent` 运行时角色。 ## 前置条件 在运行此项目之前,请确保以下内容在本地可用: ``` docker --version docker compose version docker ps ``` 所需软件: - Docker Desktop - Docker Engine - Docker Compose v2 - Git ## 如何验证 Compose 文件 ``` cd "/Users/lukehan/Desktop/Neobank" docker compose config ``` 这确认 Docker Compose 能够解析并处理配置。 ## 如何启动技术栈 ``` cd "/Users/lukehan/Desktop/Neobank" docker compose up -d docker compose ps ``` 成功后的表现: - 所有六个服务显示为 `Up` - `core-db` 和 `pci-db` 显示为正在启动或健康状态 ## 连接性检查 运行: ``` cd "/Users/lukehan/Desktop/Neobank" ./scripts/test-connectivity.sh ``` 此脚本目前验证: - 允许: - `corp-agent -> core-svc` - `core-svc -> pci-svc` - 阻止: - `corp-agent -> pci-svc` - `dmz-gw -> pci-svc` 成功后的表现: - 每个检查打印 `PASS` - 最后一行打印 `All connectivity checks passed.` ## 数据库隔离 当前的数据库布局有意比共享数据库子网更加严格。 - `core-db` 仅能从 `core-db-net` 上的服务访问 - `pci-db` 仅能从 `pci-db-net` 上的服务访问 - `core-svc` 可以访问 `core-db` 但不能访问 `pci-db` - `pci-svc` 可以访问 `pci-db` 但不能访问 `core-db` 这使得数据库访问与服务所有权保持一致。 ## 当前运行时行为 当前技术栈已通过以下方式进行验证: - `docker compose config` - `docker compose up -d` - `docker compose ps` - `./scripts/test-connectivity.sh` - 从预期服务容器进行直接的数据库可达性检查 - 直接验证两个数据库成功加载了其 schema 和种子记录 - 通过 `pci-svc` 进行实时的 PCI 授权检查 - 通过 `core-svc` 进行实时的 Core 到 PCI 支付流程 - 通过 `dmz-gw` 进行实时的 DMZ 到 Core 再到 PCI 的支付流程 - 通过 `./scripts/test-core-support-endpoints.sh` 进行实时的 Core 内部支持 API 检查 - 通过 `./scripts/test-corporate-service.sh` 进行实时的 Corporate 支持工作流冒烟检查 - 通过 `./scripts/test-agent-exploit.sh` 进行实时的漏洞利用工作流检查 ## 下一步开发领域 接下来可能添加的内容是: - 数据库 schema 文件 - 种子数据 - 交易流程逻辑 - 客服代理工具和规则 - 攻击链文档和证据
标签:AI安全, Chat Copilot, CISA项目, Docker, 安全测试, 安全防御评估, 微服务架构, 攻击性安全, 测试用例, 版权保护, 网络安全, 网络隔离, 请求拦截, 逆向工具, 隐私保护, 靶场环境