lexicone42/karkinos
GitHub: lexicone42/karkinos
一款专为 AI Agent 设计的云安全态势管理工具,通过资源图谱和叙事性发现帮助识别跨云配置风险。
Stars: 0 | Forks: 0
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, 上游代理, 云安全态势管理, 前端应用, 可观测性, 可视化界面, 大语言模型, 安全合规, 攻击路径分析, 模块化设计, 网络代理, 网络安全, 网络流量审计, 自动化修复, 资源图, 通知系统, 错误配置检测, 隐私保护