Skip to content

Commit fbcf651

Browse files
Harden agent enrollment intake
1 parent 62c1705 commit fbcf651

10 files changed

Lines changed: 1400 additions & 70 deletions

File tree

README.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# ISCY V23.6 / Rust 0.2.0
1+
# ISCY V23.6.1 / Rust 0.2.1
22

33
ISCY ist eine ISMS-/Cybersecurity-Plattform mit ISO 27001-, NIS2- und KRITIS-Unterstuetzung, Product Security, Zero-Trust-Agent-Posture, lokalem CVE-Enrichment und lokalem LLM-Betrieb.
44

@@ -96,7 +96,14 @@ Das Backend stellt serverseitige Weboberflaechen und APIs fuer die migrierten Pr
9696

9797
## Zero-Trust Agent
9898

99-
ISCY `0.2.0` enthaelt einen read-only Agent-MVP fuer Windows, macOS und Linux. Der Agent meldet Inventar, Heartbeats und Zero-Trust-Findings an die Rust-Plattform. Die Plattform stellt dazu `/zero-trust/` sowie API-Endpunkte unter `/api/v1/agents/...` bereit.
99+
ISCY `0.2.1` enthaelt einen read-only Agent-MVP fuer Windows, macOS und Linux. Der Agent meldet Inventar, Heartbeats und Zero-Trust-Findings an die Rust-Plattform. Die Plattform stellt dazu `/zero-trust/` sowie API-Endpunkte unter `/api/v1/agents/...` bereit.
100+
101+
Die produktive Agent-Aufnahme ist gehaertet:
102+
103+
- Admins erstellen Enrollment-Token ueber `POST /api/v1/agents/enrollment-tokens`.
104+
- Agenten enrollen mit `x-iscy-agent-enrollment-token` und erhalten einmalig ein Agent-Secret.
105+
- Heartbeats und Findings koennen danach mit `x-iscy-agent-secret` gemeldet werden.
106+
- Optional kann ein mTLS-Client-Zertifikat per Fingerprint an Token und Agent gebunden werden.
100107

101108
Lokaler Payload-Test:
102109

@@ -113,6 +120,22 @@ ISCY_USER_ID=1 \
113120
nix run .#iscy-agent
114121
```
115122

123+
Token-basierter Agent-Lauf:
124+
125+
```bash
126+
ISCY_BACKEND_URL=http://127.0.0.1:9000 \
127+
ISCY_TENANT_ID=1 \
128+
ISCY_AGENT_ENROLLMENT_TOKEN=<token> \
129+
nix run .#iscy-agent
130+
```
131+
132+
Windows-Build aus dem Rust-Code:
133+
134+
```powershell
135+
cargo build --release --manifest-path rust/iscy-backend/Cargo.toml --bin iscy-agent
136+
.\rust\iscy-backend\target\release\iscy-agent.exe --self-test
137+
```
138+
116139
## Vulnerability Feeds
117140

118141
Rust-CLI:

docs/ISCY_Handbuch.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ISCY Handbuch
22

3-
Version: Arbeitsstand Juni 2026 (ISCY V23.6 / Rust 0.2.0)
3+
Version: Arbeitsstand Juni 2026 (ISCY V23.6.1 / Rust 0.2.1)
44

55
Dieses Handbuch erklaert ISCY fachlich und in einfacher Sprache. Es ist fuer Menschen geschrieben, die nicht aus einem ISMS-, Compliance- oder Informationssicherheits-Umfeld kommen.
66

@@ -63,7 +63,7 @@ Eine `CVE` ist eine bekannte Schwachstelle mit standardisierter Kennung, zum Bei
6363

6464
### 2.8 Zero-Trust Agent
6565

66-
Der `Zero-Trust Agent` ist ein read-only Collector. Er meldet Inventar, Heartbeats und Posture-Findings an ISCY. Daraus entstehen keine automatischen Systemaenderungen, sondern nachvollziehbare Sichtbarkeit fuer Assets, Risiken, Evidenzen und Roadmap-Arbeit.
66+
Der `Zero-Trust Agent` ist ein read-only Collector. Er meldet Inventar, Heartbeats und Posture-Findings an ISCY. Produktive Agenten koennen mit Enrollment-Token aufgenommen werden und melden danach mit einem Agent-Secret, optional gebunden an einen mTLS-Client-Zertifikat-Fingerprint. Daraus entstehen keine automatischen Systemaenderungen, sondern nachvollziehbare Sichtbarkeit fuer Assets, Risiken, Evidenzen und Roadmap-Arbeit.
6767

6868
## 3. Wie man ISCY fachlich lesen sollte
6969

docs/ZERO_TRUST_AGENT.md

Lines changed: 78 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Zero-Trust Agent MVP
1+
# Zero-Trust Agent
22

3-
Version: ISCY Rust Backend `0.2.0`
3+
Version: ISCY Rust Backend `0.2.1`
44

55
## Zielbild
66

@@ -35,9 +35,10 @@ Konkrete Gaps wie fehlende Verschluesselung, fehlendes EDR oder offene Remote-Ad
3535

3636
## API
3737

38-
Alle MVP-Endpunkte nutzen den bestehenden ISCY Tenant/User-Kontext.
38+
Die Admin- und Lesepfade nutzen den bestehenden ISCY Tenant/User-Kontext. Produktive Agenten nutzen Enrollment-Token und danach Agent-Secrets.
3939

4040
```text
41+
POST /api/v1/agents/enrollment-tokens
4142
POST /api/v1/agents/enroll
4243
GET /api/v1/agents/posture
4344
GET /api/v1/agents/devices
@@ -46,14 +47,35 @@ GET /api/v1/agents/devices/{device_id}/findings
4647
POST /api/v1/agents/devices/{device_id}/findings
4748
```
4849

49-
Headers fuer den MVP:
50+
Admin-/Demo-Headers:
5051

5152
```text
5253
x-iscy-tenant-id: 1
5354
x-iscy-user-id: 1
55+
x-iscy-roles: ADMIN
5456
```
5557

56-
Spaetere Produktionshaertung sollte Enrollment-Tokens, mTLS oder signierte Agent-Zertifikate nutzen. Die Payloads bleiben kompatibel.
58+
Produktive Agent-Headers:
59+
60+
```text
61+
x-iscy-tenant-id: 1
62+
x-iscy-agent-enrollment-token: <token>
63+
x-iscy-agent-secret: <secret>
64+
x-iscy-agent-mtls-fingerprint: sha256:<fingerprint>
65+
```
66+
67+
`x-iscy-agent-mtls-fingerprint` ist optional, aber sobald ein Token oder Device daran gebunden wurde, muss der Fingerprint bei Heartbeat und Findings passen. Der Header darf nur von einem TLS terminierenden Proxy gesetzt werden, der Client-Zertifikate wirklich validiert und eingehende gleichnamige Client-Header verwirft.
68+
69+
Token erstellen:
70+
71+
```bash
72+
curl -fsS -X POST http://127.0.0.1:9000/api/v1/agents/enrollment-tokens \
73+
-H 'content-type: application/json' \
74+
-H 'x-iscy-tenant-id: 1' \
75+
-H 'x-iscy-user-id: 1' \
76+
-H 'x-iscy-roles: ADMIN' \
77+
-d '{"label":"lab rollout","allowed_os_families":["WINDOWS","MACOS","LINUX"],"uses_remaining":10}'
78+
```
5779

5880
## Lokaler Agent-Test
5981

@@ -70,6 +92,55 @@ ISCY_USER_ID=1 \
7092
nix run .#iscy-agent
7193
```
7294

95+
Meldung mit Enrollment-Token:
96+
97+
```bash
98+
ISCY_BACKEND_URL=http://127.0.0.1:9000 \
99+
ISCY_TENANT_ID=1 \
100+
ISCY_AGENT_ENROLLMENT_TOKEN=<token> \
101+
nix run .#iscy-agent
102+
```
103+
104+
Wenn beim Enrollment ein `agent_secret` zurueckkommt, nutzt der Agent es sofort fuer Heartbeat und Findings. Fuer spaetere Starts kann es als `ISCY_AGENT_SECRET` oder `--agent-secret` uebergeben werden.
105+
106+
## Windows-Agent
107+
108+
Der Windows-Agent ist kein eigener Python-Zweig, sondern dasselbe Rust-Binary `iscy-agent`. Der Quellcode ist bereits im Repository enthalten. Ein `.exe` wird auf Windows so gebaut:
109+
110+
```powershell
111+
cargo build --release --manifest-path rust/iscy-backend/Cargo.toml --bin iscy-agent
112+
.\rust\iscy-backend\target\release\iscy-agent.exe --self-test
113+
```
114+
115+
Fuer Intune oder andere MDM-Systeme kann dieses Binary als Win32-App verteilt und mit `ISCY_BACKEND_URL`, `ISCY_TENANT_ID` und `ISCY_AGENT_ENROLLMENT_TOKEN` gestartet werden.
116+
117+
## Was der Agent aktuell prueft
118+
119+
Der aktuelle Collector arbeitet read-only und meldet belastbare Baseline-Telemetrie:
120+
121+
- Hostname
122+
- OS-Familie und OS-Version
123+
- CPU-Architektur
124+
- Agent-Version
125+
- Deployment-Channel
126+
- Heartbeat-Status
127+
- ein `OBSERVED`-Finding fuer `device.os_patch_level`
128+
129+
Der Plattform-Katalog kennt zusaetzlich diese Zero-Trust-Pruefpunkte, die ueber dieselben Findings-Endpunkte aufgenommen werden koennen:
130+
131+
- Datentraeger-Verschluesselung: BitLocker, FileVault oder LUKS
132+
- Secure-Boot- beziehungsweise Plattformintegritaetsstatus
133+
- OS-Patch-Stand
134+
- Endpoint-Protection- oder EDR-Sichtbarkeit
135+
- lokale Administratoren
136+
- MDM-/Device-Management-Enrolment
137+
- Host-Firewall
138+
- exponierte Remote-Administration wie RDP, SSH oder Remote Login
139+
- Softwareinventar fuer CVE-Korrelation
140+
- Removable-Media-Policy
141+
142+
Wichtig: In `0.2.1` liest der Basisagent diese tiefen OS-/MDM-/EDR-Signale noch nicht selbst aus. Er liefert den sicheren Intake, die Plattformdatenstruktur und die Baseline. Konkrete Windows/macOS/Linux-Pruefmodule koennen danach gezielt erweitert werden.
143+
73144
## Deployment-Zielpfade
74145

75146
| Plattform | MVP-Start | Zielpaket |
@@ -92,11 +163,12 @@ Remediation sollte erst als eigener, policy-signierter und auditierbarer Schritt
92163

93164
## Plattform-Integration
94165

95-
Die Migration `0007_rust_zero_trust_agent_core` fuegt hinzu:
166+
Die Migrationen `0007_rust_zero_trust_agent_core` und `0008_rust_agent_enrollment_hardening` fuegen hinzu:
96167

97168
- `zero_trust_agent_device`
98169
- `zero_trust_agent_heartbeat`
99170
- `zero_trust_agent_finding`
100171
- `zero_trust_agent_check_catalog`
172+
- `zero_trust_agent_enrollment_token`
101173

102174
Die Webansicht ist unter `/zero-trust/` verfuegbar.

rust/iscy-backend/Cargo.lock

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/iscy-backend/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "iscy-backend"
3-
version = "0.2.0"
3+
version = "0.2.1"
44
edition = "2021"
55

66
[dependencies]
@@ -14,6 +14,7 @@ tokio = { version = "1", features = ["macros", "rt-multi-thread", "net"] }
1414
tower = "0.5"
1515
chrono = { version = "0.4", default-features = false, features = ["clock"] }
1616
hmac = "0.12"
17+
getrandom = "0.3"
1718
reqwest = { version = "0.12", default-features = false, features = ["blocking", "json", "rustls-tls"] }
1819
rust_decimal = "1"
1920
sha2 = "0.10"

0 commit comments

Comments
 (0)