Files
microdao-daarion/docs/cursor/26_security_audit.md
2026-02-16 06:56:43 -08:00

451 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 26 — Security Audit Checklist (MicroDAO)
Безпека інфраструктури, сервісів, вебклієнта, агентів, Embassy, access keys, токенів та даних.
Це документ для регулярного безпекового аудитування платформи **DAARION.city / microDAO / Embassy / Agent Mesh / Wallet / RWA**.
Він структурований так, щоб аудитори, інженери, DevOps та SecOps могли пройтися checklist-пунктами і чітко виявити проблеми в:
- Auth / Identity;
- Access Keys & Capability System;
- RBAC/Entitlements;
- Е2Е шифруванні повідомлень;
- Низькорівневій безпеці API, web, deployment;
- Embassy / Webhooks / Oracle-потоках;
- Wallet / Chain / Payouts;
- RWA flows;
- DB Security;
- Secrets Management;
- Logging/Audit/Compliance.
Документ повністю відповідає архітектурі, яку ми вже побудували.
---
## 1. Identity & Authentication
### 1.1 Users
- [ ] Email-based auth, OTP / Magic Link використовують одноразові токени.
- [ ] Термін дії OTP ≤ 10 хв.
- [ ] Повторне використання OTP заблоковано.
- [ ] Blocklist для підозрілих IP/UA-фінгерпринтів.
- [ ] MFA можлива (на roadmap).
- [ ] Session cookies:
- [ ] `HttpOnly`
- [ ] `Secure`
- [ ] `SameSite=Strict` для prod
- [ ] Session TTL визначений (2472 год), auto-refresh без надмірного продовження.
### 1.2 Agents
- [ ] Приватні агенти НЕ використовують user-сесію.
- [ ] Кожен агент має свій **Agent Access Key** (`ak_*` з `subject_kind='agent'`).
- [ ] Немає можливості «перевтілюватися» в користувача.
- [ ] Rate limit для agent keys встановлений.
### 1.3 Integrations / Webhooks
- [ ] Інтеграції без JWT. Тільки API Key + HMAC.
- [ ] Embassy Webhooks:
- [ ] Secret зберігається в KMS.
- [ ] Підпис запиту перевіряється (`X-Signature`).
- [ ] Replay protection: timestamp + max time drift < 5 хв.
---
## 2. Authorization Layer (RBAC + Entitlements + Capabilities)
### 2.1 RBAC
- [ ] Ролі існують: `Owner`, `Guardian`, `Member`, `Visitor`.
- [ ] Роль користувача залежить від `team_members.role`.
- [ ] Немає прямого доступу до таблиць без RBAC-check.
### 2.2 Entitlements
- [ ] `plan.Freemium`, `plan.Casual`, `plan.Premium`, `plan.Platformium`.
- [ ] Плани визначають квоти на:
- agent runs;
- router.invoke;
- message sends;
- wallet.payout.claim;
- [ ] Стейк RINGK коректно впливає на квоти (множники).
### 2.3 Capability System
- [ ] Access Key має capabilities через:
- [ ] bundle.role.*
- [ ] bundle.plan.*
- [ ] bundle.agent.*
- [ ] власні capabilities (`access_key_caps`)
- [ ] Формула:
```text
allow = RBAC ∧ Entitlement ∧ Capability ∧ ACL ∧ Mode
```
- [ ] PDP працює централізовано.
- [ ] PEP на всіх API endpoints.
---
## 3. Access Keys (User, Agent, Integration, Embassy)
### 3.1 Зберігання
- [ ] Secrets у KMS (не в базі).
- [ ] У таблиці `access_keys` зберігаються тільки metadata.
- [ ] Секрет видається один раз → не зберігається у plaintext.
### 3.2 Політики
- [ ] TTL для ключів (default 3090 днів).
- [ ] Mandatory rotation.
- [ ] Revoke → негайна інвалідація.
- [ ] `status` ∈ (`active`, `revoked`, `expired`).
### 3.3 Rate limiting
- [ ] Okta-like limit per key.
- [ ] DDOS запобігання (global rate limit + per-key).
---
## 4. Confidential Mode (E2EE-Like Messaging)
### 4.1 На рівні каналів/команд
- [ ] Якщо `teams.mode='confidential'`:
- [ ] сервер не бачить plaintext у `messages.body` (тільки ciphertext).
- [ ] агенти не отримують plaintext — тільки:
- embeddings;
- summary;
- обмежені метадані.
### 4.2 Ключі шифрування
- [ ] Зберігаються виключно на клієнті.
- [ ] Rotate при:
- зміні складу команди;
- зміні owner/guardian;
- виході учасника.
### 4.3 E2EE Threat Model
- [ ] Сервер не може дешифрувати повідомлення.
- [ ] Агенти працюють на «вивітрених» даних (privacy-preserving).
---
## 5. API Security
### 5.1 Input validation
- [ ] Валідація payload (Zod/JSON schema).
- [ ] Неможливо запостити чужий team_id/channel_id/task_id.
### 5.2 Rate limiting
- [ ] per-IP
- [ ] per-user
- [ ] per-access-key
- [ ] per-endpoint (наприклад `/agent/run` має сильний ліміт)
### 5.3 Common
- [ ] CORS: origin whitelist
- [ ] TLS enforced
- [ ] Referrer policy: `strict-origin`
- [ ] Headers:
- [ ] `X-Frame-Options: DENY`
- [ ] `Content-Security-Policy` мінімум:
```text
default-src 'self';
script-src 'self' 'unsafe-inline';
connect-src 'self' https:;
img-src 'self' data: https:;
frame-ancestors 'none';
```
- [ ] Вимкнуто directory listing у CDN.
---
## 6. Web Client Security
### 6.1 Token handling
- [ ] Немає зберігання секретів у localStorage.
- [ ] Capability-token не містить чутливих даних.
- [ ] Cookies: secure, httponly, samesite.
### 6.2 UI-level attack surface
- [ ] XSS захищено (React escaping).
- [ ] Посилання user-generated content: `rel="noopener noreferrer"`.
### 6.3 Cache
- [ ] Disable caching of sensitive pages.
---
## 7. Database Security
### 7.1 Структура
- [ ] Всі таблиці пройдені аудитом (див. `27_database_schema_migrations.md`).
- [ ] Поля з критичними даними не мають plaintext секретів.
### 7.2 Обмеження
- [ ] CHECK / ENUM на:
- roles
- viewer_types
- message types
- task statuses
- wallet statuses
- access key statuses
- embassy platforms
- [ ] Foreign keys у всіх критичних зв'язках.
### 7.3 Політика доступу
- [ ] Web/API використовує RLS або server-side filters.
- [ ] Відсутня можливість запитів напряму «в сусідню команду».
### 7.4 Backup & Restore
- [ ] PITR 730 днів для prod.
- [ ] Snapshot перед кожним релізом.
- [ ] Процедура restore протестована.
---
## 8. Secrets Management
### 8.1 Джерело
- [ ] Prod/Staging secrets в KMS або Vault.
- [ ] Немає `.env` у repo.
- [ ] Локальні `.env` окремо від production.
### 8.2 Sensitive secrets
- Embassy secrets
- Wallet signer private key
- JWT secret
- Session secret
- RWA oracle secrets
### 8.3 Rotation
- [ ] Rotation policy існує.
- [ ] Auto-rotate для Embassy secrets мінімум раз на 3060 днів.
---
## 9. Embassy Module & Webhooks Security
### 9.1 Inbound Webhooks
- [ ] Підпис перевіряється (`X-Signature`).
- [ ] Timestamp у тілі підпису.
- [ ] Maximum allowed skew < 5 хв.
- [ ] Body hashing (HMAC_SHA256).
### 9.2 Outbound Webhooks
- [ ] Retry з експоненційною затримкою.
- [ ] Dead-letter queue для NATS споживачів.
### 9.3 Oracle Input
- [ ] Oracle events проходять PDP capability-check:
- `embassy.energy.update`
- `embassy.rwa.claim`
- `embassy.intent.read`
- [ ] Oracle payload має структуру з валідацією (не приймати довільний json).
---
## 10. Wallet & Chain Security
### 10.1 Signer
- [ ] Wallet private key у KMS.
- [ ] Операції підпису — через офіційну KMS-операцію (не на сервері).
- [ ] Multi-sig або 4-eyes approval для критичних транзакцій.
### 10.2 Payouts
- [ ] `payout.generated` приходить лише з wallet service.
- [ ] claim → tx → підтвердження → оновлення БД.
- [ ] Rate limit на claim.
### 10.3 Chain RPC
- [ ] Використовувати приватні RPC endpoint-и.
- [ ] Логи RPC запитів не містять приватних ключів.
---
## 11. RWA Security
### 11.1 Data-level
- [ ] RWA inventory має типи:
- `energy`, `food`, `water`, `essence`, `generic`.
- [ ] Кожен update — подія `rwa.inventory.updated`.
### 11.2 Embassy-guarded actions
- [ ] тільки Embassy Keys з capability:
- `rwa.inventory.update`
- `embassy.rwa.claim`
- `embassy.energy.update`
---
## 12. Logging & Audit Trail
### 12.1 Audit Log
- [ ] Всі критичні дії пишуть у `audit_log`:
- access key created/revoked,
- agent run invoked,
- payout claimed,
- governance actions,
- embassy updates.
### 12.2 Log integrity
- [ ] Логи доступні тільки admin/ops.
- [ ] Немає plaintext секретів.
### 12.3 SIEM інтеграція
- [ ] Підтримується forwarding у ELK / Loki / Cloud Logging.
---
## 13. Monitoring & Alerting
### 13.1 Метрики
- API latency, error rate
- DB connections, slow queries
- NATS lag
- Agent run failures
- Embassy webhook failures
- Wallet TX errors
### 13.2 Алерти
- [ ] high latency
- [ ] high error rate (>2%)
- [ ] failed db migration
- [ ] stuck outbox events
- [ ] agent-run failure rate > заданого порогу
- [ ] "Embassy webhook signature mismatch"
---
## 14. Incident Response
### 14.1 Playbooks
- [ ] DB corruption
- [ ] Chain stuck / RPC unreachable
- [ ] Embassy compromised key
- [ ] Access key leak
- [ ] Agent runaway (infinite loop / high cost)
- [ ] DDOS attack
- [ ] RWA incorrect oracle input
### 14.2 Communication
- [ ] Responsible security officer визначено.
- [ ] Питання ескалації прописані.
---
## 15. Compliance
### 15.1 Privacy
- [ ] PII зберігається encrypted-at-rest.
- [ ] Резидентські дані обмежені на команди.
- [ ] E2EE для confidential-каналів гарантує приватність.
### 15.2 Data retention
- [ ] Логи зберігаються до 3090 днів.
- [ ] Outbox events → 7 днів.
### 15.3 Legal
- [ ] Webhooks & Embassy: мінімізація PII.
- [ ] Wallet: відповідність нормам локальних регуляцій.
---
## 16. Summary: Security Audit Status Table
| Категорія | Статус | Проблеми | Пріоритет |
| ------------- | ------------------ | -------- | --------- |
| Identity/Auth | PASS / WARN / FAIL | … | High |
| Access Keys | PASS / WARN / FAIL | … | High |
| RBAC | PASS | … | Medium |
| Capabilities | PASS | … | High |
| E2EE | … | … | High |
| Embassy | … | … | High |
| Wallet | … | … | Critical |
| RWA | … | … | High |
| DB | … | … | High |
| Secrets | … | … | Critical |
| Logs | … | … | Medium |
---
## 17. Завдання для Cursor
```text
You are a senior security engineer. Implement security measures based on:
- 26_security_audit.md
- 24_access_keys_capabilities_system.md
- 25_deployment_infrastructure.md
- 12_agent_runtime_core.md
Tasks:
1) Implement rate limiting middleware for API endpoints.
2) Add input validation (Zod schemas) for all API endpoints.
3) Implement security headers middleware (CSP, X-Frame-Options, etc.).
4) Add audit logging for critical actions (access keys, payouts, governance).
5) Implement secrets rotation policy.
6) Add security monitoring alerts.
Output:
- list of modified files
- diff
- summary
```
---
## 18. Результат
Після проходження цього чеклисту:
- виявлені всі критичні вразливості безпеки;
- впроваджені best practices для всіх компонентів системи;
- готовність до production deployment з точки зору безпеки;
- чітка політика incident response та compliance.
---
**Версія:** 1.0 (для MVP → RC → PROD)
**Останнє оновлення:** 2024-11-14