liliyke/miccmac-zt-readiness
GitHub: liliyke/miccmac-zt-readiness
基于 MICCMAC 七属性的零信任设备就绪度评估工具包,提供结构化评分框架与合规控制映射。
Stars: 0 | Forks: 0
# MICCMAC 零信任设备就绪工具包



## 为什么会有这个项目
零信任架构(Zero Trust Architecture)假设没有隐式信任,并对每个请求进行验证。
但是,除非设备本身是可防御的,否则设备无法安全地参与零信任环境。一台无人监控、未打补丁且无人负责的笔记本电脑,绝不会仅仅因为在它前面部署了一个策略引擎就变得值得信任。
这个工具包使“设备就绪(device readiness)”变得可衡量。它根据可防御系统的七个 MICCMAC 属性对设备进行评估,并生成一份零信任就绪记分卡,包含针对每项发现的控制映射和修复指南。
## 背景
**MICCMAC** 是 Richard Bejtlich 在其著作《*Defensible Network Architecture 2.0*》中描述的可防御系统的七个属性集合:一个可防御的系统必须是受监控的(**M**onitored)、已清点的(**I**nventoried)、受控的(**C**ontrolled)、已认领的(**C**laimed)、最小化的(**M**inimized)、已评估的(**A**ssessed)和最新的(**C**urrent)。
正如以下文献所述,本工具包将这些属性转化为零信任架构的实用、可衡量的设备就绪框架:
MICCMAC 属性是 Richard Bejtlich 的原创工作。本工具包是一个独立的实现和零信任扩展;它**未**与 Bejtlich 先生有任何附属关系,也未获得其认可。
## 七大属性
| 字母 | 属性 | 它回答的问题 |
|---|---|---|
| M | Monitored(受监控) | 设备的安全相关活动是否已被记录和监视? |
| I | Inventoried(已清点) | 设备是否已知并在权威清单中被跟踪? |
| C | Controlled(受控) | 配置和访问是否由强制执行策略进行集中治理? |
| C | Claimed(已认领) | 设备是否有明确的责任所有者、管理员和用途? |
| M | Minimized(最小化) | 攻击面是否已减少到设备实际所需的范围? |
| A | Assessed(已评估) | 是否定期对设备进行漏洞和弱点评估? |
| C | Current(最新) | 设备是否已打补丁、已更新,并且没有过期的加密材料? |
每个属性都在 [`data/control-mappings.yaml`](data/control-mappings.yaml) 中映射到了 NIST SP 800-207(零信任架构)、NIST SP 800-53 Rev 5 和 CIS Controls v8。
## 安装
要求 Python 3.9 或更高版本。核心工具包仅使用标准库。
```
git clone https://github.com/liliyke/miccmac-zt-readiness.git
cd miccmac-zt-readiness
python -m pip install -e .
```
## 用法
```
# 评估设备并打印文本报告
miccmac assess my-laptop-01
# 或者无需安装即可运行
python -m miccmac assess my-laptop-01
# Markdown 或 JSON 输出
miccmac assess my-laptop-01 --format markdown
miccmac assess my-laptop-01 --format json
# 将报告写入文件
miccmac assess my-laptop-01 --format markdown --output reports/my-laptop-01.md
```
## 示例输出
```
================================================================
MICCMAC ZERO TRUST DEVICE READINESS ASSESSMENT
================================================================
Target : my-laptop-01
Overall score : 71.4/100
Readiness tier : Defensible
================================================================
M Monitored (87.5/100)
------------------------------------------------------------
[PASS] MON-01 Endpoint security logging enabled
[PASS] MON-02 Logs forwarded to a centralized SIEM / log platform
[PART] MON-03 EDR / endpoint telemetry agent installed and healthy
[PASS] MON-04 Audit policy covers authentication, privilege, and process events
...
```
完整的示例报告位于 [`examples/sample-report.md`](examples/sample-report.md)。
## 评分机制
每次检查都会返回 `PASS`、`PARTIAL`、`FAIL`、`NOT_APPLICABLE`,或者(在当前的初始框架中)`NOT_IMPLEMENTED`。属性得分是其可评分检查项的平均值(`PASS` = 100,`PARTIAL` = 50,`FAIL` = 0)。整体得分是各属性得分的平均值,对应到相应的就绪等级:
| 整体得分 | 就绪等级 |
|---|---|
| 90 - 100 | Zero Trust Ready(零信任就绪) |
| 70 - 89 | Defensible(可防御) |
| 40 - 69 | Developing(发展中) |
| 0 - 39 | Not Ready(未就绪) |
评分和等级阈值已在 [`docs/methodology.md`](docs/methodology.md) 中记录,并且可以进行自定义调整。
## 项目状态
本代码库是一个 **alpha 脚手架** —— v0.1.0。框架、评分引擎、控制映射、报告和 CLI 已完成并可正常工作。`miccmac/checks/` 中的各个设备检查目前为占位符(`NOT_IMPLEMENTED`),已准备好接入真实的检测逻辑。
### 目前可用的功能
| 组件 | 状态 |
|---|---|
| CLI (`miccmac assess `) | 正常工作 — Python 3.9+,仅依赖标准库 |
| 引擎、评分、就绪等级 | 正常工作 |
| 文本 / Markdown / JSON 渲染器 | 正常工作 |
| 7 个属性模块及 26 个命名检查项 | 已定义,包含控制参考 |
| 每个检查项的 NIST 800-207 / 800-53 / CIS v8 映射 | 已完成(见 [`data/control-mappings.yaml`](data/control-mappings.yaml)) |
### 尚未发布的功能
- **没有目标连接器。** 目前没有任何功能连接到真实主机。`target` 参数目前仅仅是一个打印在报告头部的标签。
- **没有 OS 检测或分支判断。** 每个检查都是一个单一的函数,不知道目标系统是 Windows、Linux、macOS 还是云平台。
- **没有检查主体逻辑。** 所有 26 个检查均返回 `Status.NOT_IMPLEMENTED`。
- **没有资产清点或 EDR / MDM / 云 API 客户端。**
因此,运行冒烟测试(`python -m miccmac assess test-device`)会打印出真实评估的*结构*,但实际上并没有检查任何东西。这个结构 —— 属性、检查、控制参考、评分、等级 —— 就是我们的核心贡献。检测机制是与具体环境相关的。
### 架构(设计上与 OS 无关)
`engine.run_assessment(target, context)` 会向每个检查模块传递一个自由格式的 `context` 字典。其文档字符串如下:
那个 `context` 就是系统的扩展接缝。真实的实现会在引擎的*上游*收集有关目标的事实信息并将其传入:
```
from miccmac.engine import run_assessment
facts = {
"os": "windows",
"hostname": "wks-12",
"sysmon": {"installed": True, "version": "15.14"},
"edr": {"vendor": "defender", "healthy": True},
"patches": {"latest_install_date": "2026-05-20"},
# ... whatever your fact-collector produces
}
assessment = run_assessment("wks-12", context={"facts": facts})
```
然后,每个检查会根据 `facts["os"]`(或者您选择的任何事实模式)进行分支处理,并调用特定于平台的检测逻辑。如果某个检查确实不适用于给定平台,请返回 `Status.NOT_APPLICABLE`,这样它将被排除在评分之外,而不是直接判定为失败。
### 走向真实实现的路线图
| 层级 | 需要添加的内容 | 添加位置 |
|---|---|---|
| **目标连接器** | SSH / WinRM / EDR API / MDM API / “本地运行”客户端 | 新的 `miccmac/connectors/` 包 |
| **OS 检测器** | 检测平台,填充 `context["facts"]["os"]` | 在连接器内部,在调用 `run_assessment` 之前 |
| **特定 OS 的检查主体** | 用真实的评估逻辑替换 `NOT_IMPLEMENTED` 占位符 | 在各个 `miccmac/checks/*.py` 内部 |
| **清点 / 资产查询** | 查询您的 CMDB(ServiceNow, Snipe-IT, Intune 等) | 由连接器层提供事实数据 |
| **云端变体** | AWS SSM Inventory, Azure Arc, GCP OS Config,而不是直接访问主机 | 独立的云感知连接器 |
### 投入产出比最高的首个具体目标
选择您已经在实验室中拥有的环境。合理的首选目标包括:
- **Linux + osquery** —— 通过 `osquery` 针对 `system_info`、`os_version` 和 `programs` 执行查询以实现 `INV-01..04`;通过检查 `/etc/rsyslog.d/`、`auditctl -l` 以及 EDR 代理的 PID 来实现 `MON-01..04`。
- **Windows + Sysmon + Defender** —— 通过检查 Sysmon 驱动程序和解析的配置来实现 `MON-03`;通过 WinRM 执行 `Get-Package` 实现 `INV-03`;通过 Windows Update 历史记录(`Get-HotFix`)实现 `CUR-01`。
- **macOS + Jamf / Kandji** —— 通过 MDM API 实现 `INV-*`;通过检查配置文件实现 `CTL-*`。
实现一个平台上的某个属性相关的所有检查(例如 Linux 上所有四个 `monitored` 检查),发布 v0.2.0,然后以此为基础逐步扩展。
我们非常欢迎针对任何平台的贡献 —— 请参阅 [`CONTRIBUTING.md`](CONTRIBUTING.md)。
## 代码库布局
```
miccmac-zt-readiness/
miccmac/ Python package
cli.py command-line interface
engine.py runs checks, scores, builds the assessment
report.py text / markdown / JSON rendering
model.py data model (CheckResult, PropertyResult, ...)
checks/ one module per MICCMAC property
data/control-mappings.yaml property -> 800-207 / 800-53 / CIS v8
docs/methodology.md framework and scoring methodology
examples/sample-report.md
tests/ unit tests
```
## 引用本作品
如果您使用了此工具包或该框架,请**同时**引用软件和论文。机器可读的引用信息位于 [`CITATION.cff`](CITATION.cff) 中。
**论文:** Ojeh, I. (2025). *Getting Devices Ready for Zero Trust Architecture by Complying with Richard Bejtlich's MICCMAC Framework.* ECCWS 2025.
DOI: [10.34190/eccws.24.1.3531](https://doi.org/10.34190/eccws.24.1.3531)
**软件:** 请引用 GitHub 代码库,或者一旦发布版本归档后,请引用 Zenodo DOI。
## 许可证
Apache License 2.0。请参阅 [`LICENSE`](LICENSE)。
## 作者
Isaac Ojeh —— 网络安全从业者兼研究员。本项目是作为 MICCMAC 零信任设备就绪框架的参考实现而开发的。
标签:Python, 关系图谱, 反取证, 基线检查, 安全评估, 文档结构分析, 无后门, 终端安全, 逆向工具, 零信任架构