lexicone42/karkinos

GitHub: lexicone42/karkinos

一款专为 AI Agent 设计的云安全态势管理工具,通过资源图谱和叙事性发现帮助识别跨云配置风险。

Stars: 0 | Forks: 0

Karkinos

Karkinos

云安全态势管理 —— 由 Claude 构建,专为 Claude 设计

快速入门 · 设计理念 · 策略 · 提供商 · 输出格式

Karkinos 是一款专为 AI Agent 从零开始设计的 CSPM 工具。当现有工具还在生成仪表盘和平铺的告警列表时,Karkinos 已经能够生成包含内联原理和修复建议的**叙事性发现**,并围绕**资源图谱**将错误配置关联成攻击路径。 ## 快速入门 ``` # 构建 cargo build --release # 扫描 AWS (使用标准凭证链) karkinos scan # 机器可读输出 karkinos scan --format ndjson # 紧凑单行 karkinos scan --format summary # 列出可用策略 karkinos policies ``` 需要 Rust 1.85+ (edition 2024)。AWS 凭证必须通过环境变量、`~/.aws/credentials` 或 IAM 角色配置。GCP 凭证通过 `gcloud auth application-default login` 或服务账号密钥 (`GOOGLE_APPLICATION_CREDENTIALS`) 配置。 ## 设计理念 ### 发现是故事,而非告警 每项发现均包含: - **问题 (What)** —— 对错误配置的清晰描述 - **原因 (Why)** —— 解释现实世界影响的风险叙事(拒绝“参见 CIS 1.2.3”式的引用) - **修复 (How to fix)** —— 可直接复制粘贴的 CLI 命令及可选的 Terraform 代码 ### 资源图谱,而非平铺列表 资源是具有类型化边(`Contains`、`CanAccess`、`Exposes`、`GrantsPermissionTo` 等)的有向图中的节点。攻击路径综合通过遍历此图谱,展示单一的错误配置如何组合成真实的攻击场景。 ### 跨提供商策略 策略匹配的是抽象的 `ResourceCategory`(Storage、Identity、Network 等),而非特定于提供商的类型。一条 `NoPublicBuckets` 策略即可覆盖 S3、GCS、R2 和 Drive。 ### 上下文窗口感知输出 三种输出层级,分别针对不同的用例设计: - **Markdown** —— 针对 Claude 上下文窗口优化的丰富叙事格式(默认) - **NDJSON** —— 每行一个 JSON 对象,适用于管道流式处理和编程分析 - **Summary** —— 每项发现一行紧凑摘要,适用于快速检查 ## 策略 | ID | 严重程度 | 描述 | |----|----------|-------------| | `storage/no-public-buckets` | HIGH | 存储桶必须启用 Block Public Access | | `storage/encryption-at-rest` | HIGH | 存储桶必须启用静态加密 | | `storage/versioning-enabled` | MEDIUM | 存储桶应启用版本控制 | | `iam/mfa-enabled` | CRITICAL | 控制台用户必须启用 MFA | | `iam/no-admin-access-keys` | HIGH | 管理员用户不应拥有长期有效的访问密钥 | | `iam/no-wildcard-actions` | HIGH | IAM 策略不得使用通配符操作 | | `network/no-unrestricted-ssh` | HIGH | 禁止来自 0.0.0.0/0 的 SSH | | `network/no-unrestricted-rdp` | HIGH | 禁止来自 0.0.0.0/0 的 RDP | ## 提供商 | 提供商 | 状态 | 扫描内容 | |----------|--------|-------| | **AWS** | 已实现 | S3 buckets, IAM users/roles/policies, EC2 security groups | | **GCP** | 已实现 | Cloud Storage, Compute (instances + firewalls), VPC networks, IAM (bindings + service accounts), Cloud SQL | | **Cloudflare** | 桩 | DNS, R2, WAF, Access policies (计划中) | | **Google Workspace** | 桩 | Users, Drive sharing, OAuth apps (计划中) | ## 输出格式 ### Markdown (默认) Markdown 格式包含**发现簇**,将相似的发现压缩为紧凑模式;**快速见效项**,列出高影响力的单一修复;以及位于可折叠 `
` 部分的独立发现: ``` ## 发现 Clusters - **CRITICAL** `iam/mfa-enabled` — User `admin` has console access without MFA - **49x HIGH** `storage/no-public-buckets` - `aws-security-data-lake-*` (16) - `app-assets-*` (4) - ...and 29 more - **2x HIGH** `network/no-unrestricted-ssh` - `vpn-secgroup (sg-abc123)` - `launch-wizard-2 (sg-def456)` ## 快速收益 - **`storage/no-public-buckets`** (49 findings) — Enable S3 Block Public Access at the **account level** with `aws s3control put-public-access-block` ``` 独立发现包含完整的叙事: ``` ### [CRIT-A3B2C1D0] 用户 `admin` 拥有无 MFA 的控制台访问权限 **Policy:** `iam/mfa-enabled` **Resource:** `arn:aws:iam::123456789012:user/admin` (aws::iam::user, AWS) **What:** The storage bucket `prod-data` does not have all public access prevention settings enabled... **Risk:** Publicly accessible storage buckets are the #1 source of cloud data breaches... **Remediation:** Enable S3 Block Public Access for this bucket. aws s3api put-public-access-block \ --bucket prod-data \ --public-access-block-configuration \ 'BlockPublicAcls=true,...' ``` ### NDJSON ``` {"type":"summary","scan_id":"...","total_resources":47,"total_findings":5} {"type":"finding","finding":{"id":"A3B2C1D0","severity":"critical",...}} ``` ## 架构 ``` src/ ├── main.rs # CLI (clap) ├── model.rs # Resource, Finding, Severity, ScanResult ├── graph.rs # ResourceGraph (petgraph DiGraph + attack paths) ├── policy.rs # Policy trait + PolicyEngine ├── scan.rs # Concurrent provider discovery + evaluation ├── output.rs # Markdown / NDJSON / Summary formatters ├── providers/ │ ├── mod.rs # CloudProvider trait │ ├── aws.rs # STS, S3, IAM, EC2 │ ├── gcp.rs # Storage, Compute, IAM, SQL, VPC (gcp_auth + REST) │ ├── cloudflare.rs # Stub │ └── workspace.rs # Stub └── policies/ ├── mod.rs # builtin_policies() registry ├── storage.rs # Public access, encryption, versioning ├── iam.rs # MFA, admin access keys └── network.rs # Unrestricted SSH/RDP ``` ## 退出码 | 代码 | 含义 | |------|---------| | `0` | 扫描完成,未发现严重问题 | | `1` | 错误(认证失败、API 错误等) | | `2` | 扫描完成,发现严重问题 | ## 许可证 MIT
标签:API集成, AWS, Claude, CSPM, CVE检测, DevSecOps, DLL 劫持, DPI, ECS, GCP, Rust, SMB, Terraform, TinkerPop, 上游代理, 云安全态势管理, 前端应用, 可观测性, 可视化界面, 大语言模型, 安全合规, 攻击路径分析, 模块化设计, 网络代理, 网络安全, 网络流量审计, 自动化修复, 资源图, 通知系统, 错误配置检测, 隐私保护