nevinshine/telos-runtime

GitHub: nevinshine/telos-runtime

Telos 是一个基于内核的AI代理安全运行时,通过意图声明和实时信息流控制来防止数据外泄和提示注入。

Stars: 14 | Forks: 19

# Telos ### 基于意图的自主AI代理运行时安全

Telos 是一个 Linux 内核级别的安全运行时,它通过**自然语言意图声明**、**eBPF/LSM 系统调用门**和**实时信息流控制**来强制执行AI代理的行为。安全策略不是编写静态YAML规则,而是根据程序*声称*要做的事情动态生成。 ## 什么是Telos?(简易版) 想象你的电脑是一栋高安全性建筑。通常,如果一个员工(程序)有工牌,他们可以去任何地方——保险库、前门外或文件柜。 **Telos 改变了规则。** 当一个程序想要做某事时,它必须首先用通俗的英语声明其*意图*: Telos 使用智能引擎即时将该意图转换为精确的边界: - **你只能使用 `curl`**(不能是 `nc`、`bash` 或 `wget`) - **你只能连接到 `weather.com`**(其他都不行) - **如果你接触了密码,你的所有网络访问将被立即撤销** 如果程序突然试图潜入保险库(访问像 `/etc/shadow` 这样的敏感文件),Telos 会发出警报并永久锁上所有门——这意味着程序无法窃取数据然后逃跑。它通过确保程序**只做它们承诺要做的事情**来保护你的系统。 ## 工作原理(技术深度解析) Telos 由 **eBPF**(扩展伯克利数据包过滤器)、**Linux 安全模块 (LSM)** 和 **AI 推理引擎 (Cortex)** 驱动。它动态地隔离和限制自主AI代理的执行和网络访问。 ### 架构 ``` graph TD classDef userSpace fill:#1e1e1e,stroke:#3776AB,stroke-width:2px,color:#fff classDef kernelSpace fill:#1e1e1e,stroke:#D22128,stroke-width:2px,color:#fff classDef edgeSpace fill:#1e1e1e,stroke:#00ADD8,stroke-width:2px,color:#fff subgraph User_Space ["Intelligence Plane"] A["Autonomous AI Agent"] -->|Declares Intent| C["Cortex AI Control Plane"] C -->|Domain Intel L0-L4| C C -->|Exec Intel LOLBin Det| C end subgraph IPC ["Inter-Process Communication"] C <-->|Unix Socket / Heartbeat| G["Go eBPF Daemon"] end subgraph Kernel_Space ["Enforcement Plane"] G -->|Update Maps| M[("eBPF Hash/LRU Maps")] M --- H1("lsm/bprm_check_security") M --- H2("lsm/socket_connect") M --- H3("lsm/file_open") H3 -.->|Dynamic Taint IFC| M H1 -.->|Execution Gate| B1(("Deny/Allow")) H2 -.->|Network Gate| B2(("Deny/Allow")) end subgraph Network_Edge ["Hyperion Bridge"] C -.->|RPC Push| XDP["Hyperion XDP"] XDP -->|Wire-Speed Drop| NIC(("Physical NIC")) end class A,C userSpace class G,M,H1,H2,H3 kernelSpace class XDP,NIC edgeSpace ``` ### 双重门架构 Telos 在内核中实现了两个独立的强制执行门: **1. 执行门** (`lsm/bprm_check_security`) - 在二进制文件运行前拦截每个 `execve()` 系统调用 - 根据存储在 `exec_policy_map` 中的、按意图划分的允许列表检查二进制文件名 - 阻止“离地攻击”二进制文件 (LOLBins),如 `nc`、`bash`、`wget`,除非被明确授权 - 继承父进程的策略以防止 fork/exec 绕过 **2. 网络门** (`lsm/socket_connect`) - 拦截每个出站 `connect()` 系统调用 - 根据由意图声明填充的动态允许列表验证目标 IP - 为托管代理完全阻止 IPv6(防止防火墙绕过) - 在意图 TTL 到期后自动过期网络窗口 ### 信息流控制(巅峰之作) Telos 最先进的特性是其**跨向量污点追踪**: 1. 代理声明意图并获得对 `curl` + `cat` + `weather.com` 的授权 2. 代理读取 `/etc/shadow`(一个在 inode 映射中被标记为 `CRITICAL` 的文件) 3. `file_open` eBPF 钩子**动态提升**代理的污点级别到 `TAINT_CRITICAL` 4. `socket_connect` 钩子检测到污点提升并触发**网络阻断** 5. 所有出站连接返回 `-EPERM` —— 数据**永远不会离开机器** ### 域名智能引擎 运行在端口 `5353` 上的 DNS 代理执行一个 5 层分类管道: | 层级 | 功能 | 方法 | |:------|:---------|:-------| | L0 | 根域名提取 | 子域名/组合仿冒防御 | | L1 | 精确匹配 | SQLite 哈希索引查找 | | L2 | 仿冒域名检测 | 莱文斯坦距离 + 同形异义字标准化 | | L3 | 类别不匹配 | 意图到类别验证 | | L4 | 声誉评分 | 信任级别 + 风险标志聚合 | 一个综合分数决定了决策:**允许**(< 30),**升级**(30-59),或**拒绝**(>= 60)。 ### Hyperion XDP 桥接 当域名智能引擎拒绝一个域名时,Telos 会解析其底层 IP 地址,并通过一个到 `:9095/block` 的 HTTP RPC 调用将其推送到 **Hyperion XDP**。Hyperion 将这些 IP 插入一个 eBPF `blacklist_map`,而 XDP 钩子在 **NIC 驱动级别**丢弃匹配的数据包——甚至在 Linux 网络栈分配 socket 缓冲区之前。 ## 功能特性 | 功能 | 描述 | |:--------|:-----------| | 基于意图的策略 | 代理用自然语言声明目标——策略自动生成 | | 双重门强制执行 | 独立的执行门 (`execve`) 和网络门 (`socket_connect`) | | 动态信息流控制 (IFC) | 接触敏感文件会提升污点并触发网络阻断 | | 域名智能 | 基于 O(1) SQLite 评分,带仿冒和同形异义字检测 | | LOLBin 防御 | 按意图阻止“离地攻击”二进制文件 | | 动态吊桥 | 网络窗口在意图 TTL 到期后自动过期 | | DNS 拦截 | 带有实时域名分类的透明代理 | | Mirage 欺骗 | 诱饵文件,用于诱捕和指纹识别攻击者行为 | | 故障开放/关闭看门狗 | eBPF 和 Cortex 平面之间的双向心跳 | | Prometheus 指标 | 企业级可观测性,在 `:9094/metrics` 提供 | | Hyperion XDP 桥接 | 恶意 IP 推送到 XDP 以实现线速数据包丢弃 | | Sentinel Heki | 超级管理程序强制的内核完整性,用于硬件级 BPF map 保护 | ## 快速开始 ### 前提条件 ### 安装 ``` git clone https://github.com/nevinshine/telos-runtime.git cd telos-runtime # 安装 Python 依赖项 pip install -r cortex/requirements.txt # (可选)下载用于控制平面升级的 LLM 模型 ./scripts/download_model.sh ``` ### 运行 Telos ``` export TELOS_CORTEX_AUTH_TOKEN="$(python3 - <<'PY' import secrets print(secrets.token_urlsafe(32)) PY )" sudo -E telos start # Build and launch the full runtime sudo telos status # Check system health sudo telos dash # Launch the real-time Telemetry Dashboard sudo telos stop # Gracefully stop all components telos help # Display help ``` ### Web 遥测仪表板 ``` python3 web_dashboard.py # 打开 http://127.0.0.1:8088 # 可选:需要本地 bearer token TELOS_DASH_TOKEN=change-me python3 web_dashboard.py # 打开 http://127.0.0.1:8088/?token=change-me # 绑定 localhost 之外的地址需要 TELOS_DASH_TOKEN TELOS_DASH_TOKEN=change-me python3 web_dashboard.py --host 0.0.0.0 ``` Cortex gRPC 控制平面默认绑定到 `127.0.0.1`,并要求客户端在 gRPC 元数据中将 `TELOS_CORTEX_AUTH_TOKEN` 作为承载令牌包含。只有在添加了受信任的网络边界后,才能为远程部署覆盖绑定主机。 ## 演示 ### 演示 1:执行门(LOLBin 防御) ``` sudo -E telos start export TELOS_CORTEX_AUTH_TOKEN="same-token-used-by-cortex" python3 demo_payload.py ``` **发生了什么:** 1. 代理声明意图:_"我需要从服务器下载一个文件"_ 2. `curl` 成功执行(它被授权了) 3. `nc` 被**阻止** —— 执行门拒绝了它,因为它从未出现在声明的意图中 4. 代理声明恶意意图:_"我需要分享凭据"_ 5. `cat /etc/passwd` 被**阻止** —— 敏感文件访问被拒绝 6. `nc githuh.com 4444` 被**阻止** —— 二进制文件和仿冒域名都被拒绝 ### 演示 2:信息流控制(网络阻断) ``` sudo -E telos start export TELOS_CORTEX_AUTH_TOKEN="same-token-used-by-cortex" sudo -E python3 demo_ifc.py ``` **发生了什么:** 1. 代理声明:_"我需要检查安全合规性"_ 2. 代理读取 `/etc/shadow` —— eBPF 将污点提升到 `CRITICAL` 3. 代理尝试 `curl evil.com` —— **网络阻断**启动,连接被 `-EPERM` 终止 4. 数据从未离开机器 ### 演示 3:Hyperion XDP 桥接 ``` # 终端 1:启动 Hyperion XDP cd ~/code/hyperion-xdp && sudo ./bin/hyperion_ctrl -iface lo -telemetry # 终端 2:启动 Telos cd ~/code/telos-runtime && sudo -E telos start # 终端 3:查询一个 typosquatted 域名 python3 -c " from dnslib import DNSRecord q = DNSRecord.question('githuh.com') r = q.send('127.0.0.1', 5353, tcp=False, timeout=5) print(DNSRecord.parse(r)) " ``` **观察终端 1:** Hyperion 打印 `[TELOS-RPC] Added 97.107.140.81 to XDP Blacklist` ## 性能 | 系统调用钩子 | 原生基线 | Telos 守护 | 开销 | |:-------------|:---------------:|:-------------:|:--------:| | `file_open` (IO) | 26.51 us | 28.79 us | +2.27 us (+8.5%) | | `bprm_check_security` (Exec) | 6431 us | 6625 us | +193 us (+3.0%) | | `socket_connect` (Network) | 195.57 us | 199.46 us | +3.89 us (+1.9%) | ## 项目结构 ``` telos-runtime/ ├── telos # CLI Orchestrator ├── cortex/ # AI Intelligence Engine (Python) │ ├── main.py # Cortex gRPC Server │ ├── verifier.py # Dual-Gate Intent Verifier │ ├── domain_intel.py # Domain Intelligence (L0-L4) │ ├── exec_intel.py # Execution Intelligence (LOLBin) │ ├── dns_proxy.py # DNS Interception Proxy │ ├── guardian.py # Agent Registry and Taint Manager │ ├── llm_verifier.py # LLM Escalation (Control Plane) │ ├── mirage_manager.py # Deception Engine │ └── policy.yaml # Security Policy Configuration ├── telos_core/ # eBPF Kernel Security Module (C + Go) │ ├── src/bpf_lsm.c # LSM Hooks (exec, file, connect) │ ├── loader/main.go # Go eBPF Loader + IPC + Prometheus │ └── maps/ # Shared map definitions ├── shared/ # gRPC Protocol Definitions │ ├── protocol.proto # Protobuf schema │ └── common_maps.h # Shared C struct definitions ├── browser_eye/ # Chrome Extension (Browser Taint) ├── deploy/ # Docker + Systemd Configs │ ├── telos-loader.service # Go Daemon systemd unit │ ├── telos-cortex.service # Python Cortex systemd unit │ └── vulnerable_agent/ # Red team simulation scripts ├── benchmarks/ # Performance and Stress Tests ├── tests/ # Verification Scripts ├── demo_payload.py # Phase 5 Demo (Exec Gate) ├── demo_ifc.py # Phase 7 Demo (IFC Network Slam) └── Makefile # Build system ``` ## 工程阶段
阶段 1-3:基础 — 意图网络与浏览器扩展 - 建立了 Cortex AI gRPC 服务器和 eBPF socket map - 构建了 Browser Eye Chrome 扩展,用于操作系统启动前的 URL 污点检测 - 将自然语言意图连接到动态内核吊桥
阶段 4:DNS 拦截与域名智能 - 基于 SQLite 的域名评分引擎,包含 5 个分类层(L0-L4) - 通过莱文斯坦距离和同形异义字标准化进行仿冒域名检测 - 在端口 5353 上的透明 DNS 代理,向上游 8.8.8.8 转发 - 通过根域名提取和嵌入式品牌检测进行组合仿冒防御
阶段 5:执行边界 — 系统调用级 LOLBin 防御 - `bprm_check_security` LSM 钩子拦截每个 `execve()` 调用 - 按意图存储在 `exec_policy_map` 中的执行允许列表 - 父进程继承追踪防止 fork/exec 绕过 - 执行智能引擎按风险类别对二进制文件进行分类
阶段 6:遥测仪表板 - 分屏终端 UI,显示 Cortex AI 事件和内核 eBPF 事件 - 实时跟踪意图声明、阻止和污点变化
阶段 7:动态数据流追踪(IFC) — 巅峰之作 - 跨向量污点传播:文件访问触发网络撤销 - `file_open` 钩子监控 inode 敏感度映射 - 读取 CRITICAL 文件会将污点提升到 `TAINT_CRITICAL` - `socket_connect` 钩子强制执行网络阻断——丢弃所有连接 - 防止数据外泄,即使代理具有合法的网络访问权限
阶段 8:CLI 与文档完善 - 带有 `start`、`stop`、`status`、`dash`、`help` 的 `telos` CLI 编排器 - 记录架构的完整白皮书
阶段 9:极端竞争基准测试
阶段 10:LRU 状态管理 - 将 `process_map` 和 `network_map` 迁移到 `BPF_MAP_TYPE_LRU_HASH` - 内核级压力阀:在内存压力下优雅驱逐
阶段 11:故障开放/关闭心跳 - Go eBPF 守护进程和 Python Cortex 之间的双向看门狗 - 故障开放:仅审计模式(保持正常运行时间) - 故障关闭:完全网络刷新(零信任锁定)
阶段 12:企业级可观测性 - 在 `:9094/metrics` 的 Prometheus 指标端点 - 计数器:`telos_exec_blocks_total`、`telos_network_blocks_total`、`telos_ifc_elevations_total` - 仪表:`telos_active_drawbridges` - 用于生产部署的 Systemd 服务文件
阶段 13:Hyperion XDP 桥接 - Telos 域名智能通过 HTTP RPC 将恶意 IP 推送到 Hyperion XDP - Hyperion `blacklist_map` 在 NIC 级别使用 `XDP_DROP` 丢弃数据包 - 线速执行——在数据包到达网络栈之前就被拦截
阶段 14:Sentinel Heki 集成(Ring -1) - 通过跨层 IPC 桥接 (`/tmp/heki.sock`) 建立超级管理程序强制的内核完整性 (Heki)。 - `telos_core` 使用 `bpf_map_update_value` kprobes 动态地将关键 BPF maps 的客户机虚拟地址 (GVA) 泄露给 `sentinel-vmi`。 - VMI 超级管理程序使用客户机的 `CR3` 执行页表遍历以解析物理地址,并使用硬件扩展页表 (EPT/NPT) 写保护来锁定这些 maps。 - **吊桥协议**:动态 map 更新通过来自 `telos_daemon` 的加密 `CPUID` 信号 (`KVM_EXIT_CPUID`) 安全允许,使用超级管理程序颁发的 32 位 `Nonce` 和线程 `CR3` 进行验证。 - **模拟 IPC 测试模式**:完全模拟 Ring -1 管道(GPA 转换绕过和模拟 nonces),适用于缺少裸机嵌套虚拟化 (`/dev/kvm`) 的云虚拟机。 - **性能**:零绕过精度。硬件 VM-Exit 拦截和 MTF 单步执行每次策略变更仅带来约 4.5μs 到 5μs 的开销,对于 100,000+ ops/sec 的吞吐量来说完全不可见。
## 配置 编辑 `cortex/policy.yaml` 来自定义安全边界: ``` execution: default_mode: enforce # enforce | audit safe_binaries: # Always allowed (system essentials) - cat - ls - curl network: always_allowed: # Pre-authorized destinations - api.weather.com - github.com filesystem: sensitive_paths: # Files that trigger taint elevation - /etc/shadow - /etc/passwd - ~/.ssh/id_* ``` ## 开发 ``` make bpf # Build eBPF objects only make loader # Build Go loader only make all # Full build (BPF + Loader) cd tests && bash verify.sh # Run verification suite cd benchmarks && python3 lsm_bench.py # Run performance benchmarks ``` ## 许可证 MIT 许可证 — 参见 [LICENSE](LICENSE)。

Telos因为意图应该是边界。

标签:0day挖掘, AI安全, Chat Copilot, Docker镜像, eBPF技术, Linux内核安全, LSM安全模块, Python工具, 信息流控制, 内核安全, 动态安全策略, 安全运行时, 实时防护, 意图声明, 提示注入防护, 数据泄露防护, 日志审计, 网络安全, 网络探测, 自主AI代理, 行为监控, 请求拦截, 逆向工具, 闭环安全系统, 隐私保护