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, 安全测试, 安全防御评估, 微服务架构, 攻击性安全, 测试用例, 版权保护, 网络安全, 网络隔离, 请求拦截, 逆向工具, 隐私保护, 靶场环境