MetaMaaz/Network-Segmentation-Advisor
GitHub: MetaMaaz/Network-Segmentation-Advisor
该工具基于网络资产清单自动生成附有合规依据的最小权限网络隔离方案,并通过攻击路径模拟量化展示隔离效果。
Stars: 0 | Forks: 0
# 网络隔离顾问



一个零信任隔离顾问:获取网络资产清单(实时 nmap 扫描或重放的 YAML),按角色和敏感度对每台主机进行分类,并生成最小权限隔离方案——包括区域、每条规则都引用了其遵循的 NIST SP 800-207 / PCI DSS 原则的区域间防火墙规则集,以及展示该方案能减少多少横向移动的前后攻击路径模拟。
扫描网络只是基本操作;nmap 早已存在。这个工具的重点在于其之上的咨询引擎:可解释的、基于框架的建议,以及可执行的配置(iptables / pfSense),而不是枯燥的文字建议。
```
ws-01 compromised (phished workstation)
before (flat): owns 11 of 13 other hosts - including both databases and the domain controller
after (segmented): owns 3 (its own VLAN) - 0 critical assets reachable on a pivot port
```
## 工作原理
```
discovery (nmap) ──┐
├──> Inventory (YAML) ──> classifier ──> recommender ──> attack_path ──> reporter
mock_inventory.yaml ┘ hosts/ports/svcs role + zones + rules before/after report.md, diagram,
sensitivity + violations simulation iptables, pfSense
```
Discovery 是唯一接触网络的模块。下游所有流程都基于一个 YAML 文件运行——这意味着整个咨询引擎可以离线对模拟清单进行工作,这也是它的测试方式。
```
flowchart TB
subgraph dmz["dmz (10.10.10.0/24)"]
web01["web-01
web-server"] web02["web-02
web-server"] end subgraph app_tier["app-tier (10.10.20.0/24)"] app01["app-01
app-server"] end subgraph data_tier["data-tier (10.10.30.0/24)"] db01["db-01
database"] db02["db-02
database"] end subgraph user_vlan["user-vlan (10.10.40.0/24)"] ws["ws-01 … ws-04
workstations"] end subgraph iot_vlan["iot-vlan (10.10.50.0/24)"] printer["printer-01"] cam["cam-01"] end subgraph management["management (10.10.60.0/24)"] dc["dc-01
domain-controller"] jump["jump-01
jump-host"] end user_vlan -->|80,443| dmz dmz -->|8080| app_tier user_vlan -->|8080| app_tier app_tier -->|3306,5432| data_tier user_vlan -->|53,88,389,636| management app_tier -->|53,88,389,636| management user_vlan -->|631,9100| iot_vlan management -->|22| dmz management -->|22| app_tier management -->|22| data_tier management -->|3389| user_vlan ``` *上图的每条边都是一个显式的允许规则;其他所有连接默认为拒绝 (default-deny)。请注意缺失的部分:没有 user-vlan → data-tier 的边,并且客户端的允许集合刻意排除了到域控制器的 SMB (445)——这是经典的横向移动通道。* ## 快速开始(无需网络) ``` git clone https://github.com/YOUR-USERNAME/segmentation-advisor cd segmentation-advisor pip install -r requirements.txt python cli.py analyze # console summary against the mock network python cli.py report # full bundle -> output/ ``` `report` 会生成 `report.md`(包含清单、违规项、区域、附带理由的规则集、攻击路径对比)、`zones.mmd`(Mermaid 图表)、`iptables.rules` 和 `pfsense_rules.txt`。已提交的示例存放在 [`docs/sample-output/`](docs/sample-output/report.md) 中。 ### 扫描真实(已授权)网络 ``` pip install python-nmap && brew install nmap # or apt install nmap python cli.py discover --target 192.168.1.0/24 --out inventory.yaml python cli.py report --inventory inventory.yaml ``` 扫描结果会保存为 YAML,因此您可以随时将同一个抓取结果通过咨询引擎重放多次,而无需重新扫描。**仅扫描您拥有或明确获得授权测试的网络。** ### 端到端测试实验环境(Docker) `docker-compose.yml` 会在一个桥接子网上搭建一个模拟的扁平网络(nginx ×2、MySQL、PostgreSQL、Redis 和一个 Python 应用)。由于 macOS 上的 Docker 不支持主机到容器的路由,因此使用了一个 `scanner` 容器从拓扑内部运行 Discovery——相关说明位于 compose 文件的顶部。 ## 引擎内部原理 **分类器**(`advisor/classifier.py`)根据 [`data/role_signatures.yaml`](data/role_signatures.yaml) 中的特征为每台主机分配角色和敏感度层级:端口/服务启发式规则包含优先级和反面证据。如果存在 SMB + RDP,则判定为工作站,而不是文件服务器。添加新设备类型只需编辑该 YAML 文件;单元测试会通过加载自定义的 SCADA 特征来验证这一点。 **推荐器**(`advisor/recommender.py`)将主机分组到不同的信任区域中——DMZ、app-tier、data-tier、user-vlan、iot-vlan、management,以及用于存放任何未分类主机的 quarantine——然后根据实际观察到的角色推导出最小的允许集合。端口永远不会被投机性地打开。它还会标记当前布局中的违规情况:扁平网络、数据库距离工作站仅一跳之遥、暴露的管理接口、明文 Telnet、IoT 设备与用户混合等。每一项违规都会对应到 NIST SP 800-207 或 PCI DSS 标准。 **攻击路径模拟器**(`advisor/attack_path.py`)将可达性建模为图,并从选定的立足点运行广度优先的横向移动,且执行两次:分别针对扁平网络和建议的策略进行。该模拟刻意保持保守——只要能连上端口就算作暴露;枢纽跳转(pivoting)需要存在远程管理服务(SSH/RDP/SMB/RPC/Telnet/WinRM)。报告保留了客观的警告说明:未对区域内部的移动进行建模,且设计上需要暴露的服务仍然是攻击面。 **导出器**(`advisor/exporters/`)将规则集输出为 iptables FORWARD 链命令和 pfSense 基于接口的 pass 规则,每一行都附注了其遵循的框架依据。 ## 设计理念 基于规则,而非机器学习 (ML)。无法解释的建议就是无法辩护的建议——无论是在面试中还是在变更 advisory board 上都是如此。每一项输出都可以追溯到具名的特征或引用的框架原则。 Discovery 与逻辑推理完全分离:咨询逻辑从不触碰网络。这使得它可以进行完全的单元测试(30 个测试,在 3.11/3.12 版本的 CI 上运行),这意味着它可以在隔离网络环境中对重放的扫描结果进行运行。 生成的策略只有在目标区域内确实有主机开放了某端口时,才会允许该端口通信——将最小权限原则应用于规则集本身,而不仅仅是设计理念。 攻击路径模拟会在开头声明其假设,并如实报告残余风险,而不是夸大隔离方案的解决能力。 ## 框架映射 | 输出内容 | 原则 | |---|---| | 区域间默认拒绝基线 | NIST SP 800-207 §3.1.2 (微隔离);PCI DSS v4.0 Req 1.2/1.3 | | 每条规则的依据 | NIST SP 800-207 §2.1 Tenet 3 (最小权限,按会话访问) | | 针对未知资产的隔离区 | NIST SP 800-207 §2.1 Tenet 4 (不基于位置的隐式信任) | | 数据层与用户 VLAN 的隔离 | PCI DSS v4.0 范围界定/隔离指南 | | 明文协议标记 | PCI DSS v4.0 Req 2.2.5 (不安全的服务) | ## 测试 ``` pip install -r requirements-dev.txt pytest ``` 分类器、推荐器、攻击路径和模型套件均针对模拟清单运行——无需网络,无需 Docker,亚秒级完成。 ## 路线图 - 区域内部的主机级微隔离 (NIST SP 800-207 §3.1.1) - UDP 服务处理和感知操作系统指纹的分类 - 生成 pfSense 的 `config.xml` 以便直接导入 - 第二个模拟拓扑(已隔离的网络),用于测试非扁平布局中的违规检测能力 ## 作品集说明 ## 许可证 MIT - 详见 [LICENSE](LICENSE)。
web-server"] web02["web-02
web-server"] end subgraph app_tier["app-tier (10.10.20.0/24)"] app01["app-01
app-server"] end subgraph data_tier["data-tier (10.10.30.0/24)"] db01["db-01
database"] db02["db-02
database"] end subgraph user_vlan["user-vlan (10.10.40.0/24)"] ws["ws-01 … ws-04
workstations"] end subgraph iot_vlan["iot-vlan (10.10.50.0/24)"] printer["printer-01"] cam["cam-01"] end subgraph management["management (10.10.60.0/24)"] dc["dc-01
domain-controller"] jump["jump-01
jump-host"] end user_vlan -->|80,443| dmz dmz -->|8080| app_tier user_vlan -->|8080| app_tier app_tier -->|3306,5432| data_tier user_vlan -->|53,88,389,636| management app_tier -->|53,88,389,636| management user_vlan -->|631,9100| iot_vlan management -->|22| dmz management -->|22| app_tier management -->|22| data_tier management -->|3389| user_vlan ``` *上图的每条边都是一个显式的允许规则;其他所有连接默认为拒绝 (default-deny)。请注意缺失的部分:没有 user-vlan → data-tier 的边,并且客户端的允许集合刻意排除了到域控制器的 SMB (445)——这是经典的横向移动通道。* ## 快速开始(无需网络) ``` git clone https://github.com/YOUR-USERNAME/segmentation-advisor cd segmentation-advisor pip install -r requirements.txt python cli.py analyze # console summary against the mock network python cli.py report # full bundle -> output/ ``` `report` 会生成 `report.md`(包含清单、违规项、区域、附带理由的规则集、攻击路径对比)、`zones.mmd`(Mermaid 图表)、`iptables.rules` 和 `pfsense_rules.txt`。已提交的示例存放在 [`docs/sample-output/`](docs/sample-output/report.md) 中。 ### 扫描真实(已授权)网络 ``` pip install python-nmap && brew install nmap # or apt install nmap python cli.py discover --target 192.168.1.0/24 --out inventory.yaml python cli.py report --inventory inventory.yaml ``` 扫描结果会保存为 YAML,因此您可以随时将同一个抓取结果通过咨询引擎重放多次,而无需重新扫描。**仅扫描您拥有或明确获得授权测试的网络。** ### 端到端测试实验环境(Docker) `docker-compose.yml` 会在一个桥接子网上搭建一个模拟的扁平网络(nginx ×2、MySQL、PostgreSQL、Redis 和一个 Python 应用)。由于 macOS 上的 Docker 不支持主机到容器的路由,因此使用了一个 `scanner` 容器从拓扑内部运行 Discovery——相关说明位于 compose 文件的顶部。 ## 引擎内部原理 **分类器**(`advisor/classifier.py`)根据 [`data/role_signatures.yaml`](data/role_signatures.yaml) 中的特征为每台主机分配角色和敏感度层级:端口/服务启发式规则包含优先级和反面证据。如果存在 SMB + RDP,则判定为工作站,而不是文件服务器。添加新设备类型只需编辑该 YAML 文件;单元测试会通过加载自定义的 SCADA 特征来验证这一点。 **推荐器**(`advisor/recommender.py`)将主机分组到不同的信任区域中——DMZ、app-tier、data-tier、user-vlan、iot-vlan、management,以及用于存放任何未分类主机的 quarantine——然后根据实际观察到的角色推导出最小的允许集合。端口永远不会被投机性地打开。它还会标记当前布局中的违规情况:扁平网络、数据库距离工作站仅一跳之遥、暴露的管理接口、明文 Telnet、IoT 设备与用户混合等。每一项违规都会对应到 NIST SP 800-207 或 PCI DSS 标准。 **攻击路径模拟器**(`advisor/attack_path.py`)将可达性建模为图,并从选定的立足点运行广度优先的横向移动,且执行两次:分别针对扁平网络和建议的策略进行。该模拟刻意保持保守——只要能连上端口就算作暴露;枢纽跳转(pivoting)需要存在远程管理服务(SSH/RDP/SMB/RPC/Telnet/WinRM)。报告保留了客观的警告说明:未对区域内部的移动进行建模,且设计上需要暴露的服务仍然是攻击面。 **导出器**(`advisor/exporters/`)将规则集输出为 iptables FORWARD 链命令和 pfSense 基于接口的 pass 规则,每一行都附注了其遵循的框架依据。 ## 设计理念 基于规则,而非机器学习 (ML)。无法解释的建议就是无法辩护的建议——无论是在面试中还是在变更 advisory board 上都是如此。每一项输出都可以追溯到具名的特征或引用的框架原则。 Discovery 与逻辑推理完全分离:咨询逻辑从不触碰网络。这使得它可以进行完全的单元测试(30 个测试,在 3.11/3.12 版本的 CI 上运行),这意味着它可以在隔离网络环境中对重放的扫描结果进行运行。 生成的策略只有在目标区域内确实有主机开放了某端口时,才会允许该端口通信——将最小权限原则应用于规则集本身,而不仅仅是设计理念。 攻击路径模拟会在开头声明其假设,并如实报告残余风险,而不是夸大隔离方案的解决能力。 ## 框架映射 | 输出内容 | 原则 | |---|---| | 区域间默认拒绝基线 | NIST SP 800-207 §3.1.2 (微隔离);PCI DSS v4.0 Req 1.2/1.3 | | 每条规则的依据 | NIST SP 800-207 §2.1 Tenet 3 (最小权限,按会话访问) | | 针对未知资产的隔离区 | NIST SP 800-207 §2.1 Tenet 4 (不基于位置的隐式信任) | | 数据层与用户 VLAN 的隔离 | PCI DSS v4.0 范围界定/隔离指南 | | 明文协议标记 | PCI DSS v4.0 Req 2.2.5 (不安全的服务) | ## 测试 ``` pip install -r requirements-dev.txt pytest ``` 分类器、推荐器、攻击路径和模型套件均针对模拟清单运行——无需网络,无需 Docker,亚秒级完成。 ## 路线图 - 区域内部的主机级微隔离 (NIST SP 800-207 §3.1.1) - UDP 服务处理和感知操作系统指纹的分类 - 生成 pfSense 的 `config.xml` 以便直接导入 - 第二个模拟拓扑(已隔离的网络),用于测试非扁平布局中的违规检测能力 ## 作品集说明 ## 许可证 MIT - 详见 [LICENSE](LICENSE)。
标签:CTI, Nmap, PE 加载器, Python, 攻击路径分析, 无后门, 网络分段, 网络安全, 虚拟驱动器, 请求拦截, 逆向工具, 隐私保护, 零信任架构