# Rozhodnutí vlastníka — rozsah pentest/OSINT jednotky

> **Datum:** 2026-10-03
> **Stav:** rozhodnuto, implementace rozpracovaná
> **Vazba:** [`PENTEST_AGENT_DESIGN.md`](PENTEST_AGENT_DESIGN.md)

Tento záznam zachycuje rozhodnutí vlastníka ze dne 2026-10-03 a jejich přesnou
interpretaci. Zapsáno, protože dvě body mají bezpečnostní důsledky, které je nutné
mít zapsané vedle kódu, ne v hlavě.

---

## R1 — Darkweb search: výzkum hrozeb, ne darkweb

**Rozhodnutí vlastníka:** „výzkum, chci se připravit na hrozby."

**Interpretace:** threat intelligence z veřejných a autorizovaných zdrojů —
IOC, CVE, TTP, vzory malwaru, reporty incidentů.

**Co se NESTaví:** přístup na darkweb marketplace, credential dumpy, leak fóra.
Toto není threat intelligence, je to nákup nebo sběr ukradených dat. Bez
dokumentované autorizace od konkrétního provozovatele takové služby to není
zahrnuto do návrhu. Pokud autorizace existuje, jde o jiný rozhodnutí.

**Dopad:** pod-agent `threat_intel` sbírá ze zdrojů, k nimž má provozovatel
přístup a k nimž má povolení. Seznam zdrojů je deklarativní součást
`EngagementAuthorization`, ne volný fetch v promptu.

## R2 — Cíle: pouze securitylab

**Rozhodnutí vlastníka:** „pouze pro securitylab."

**Důsledek:** `TargetScope` je **povinně omezen na lab prostředí**. Toto je
nejdůležitější rozhodnutí z řady, protože v dnešním kódu neexistuje
per-target autorizace vůbec — `PolicyContext.resource` je volný řetězec, který
`_rule_matches` zahazuje, takže cílová adresa dnes není v autorizaci nikde
(`policy/__init__.py:53-61`). Nová `TargetScope` tuto mezeru vyplňuje.

**Výchozí, ne volitelné:** pokud engagement artifact neurčí lab scope, běh se
odmítne. Neexistuje cesta, jak lab obejít.

## R3 — Kali nástroje: implementované, zamčené, max level

**Rozhodnutí vlastnínika:** „ano max level."

**Důsledek:** Kali sada (nmap, metasploit/msfpython, hydra, sqlmap, …) je
v katalogu **plně implementovaná**, ale odemyká ji výhradně engagement artifact
s `max_level: 3`. Výchozí úroveň běhu je **1** (rekon).

`EngagementAuthorization.engages_level()` musí kontrolovat **číslo i tool class**
(`TOOL_CLASS_BY_LEVEL`), jinak by `max_level: 3` tiše dědilo exploitační třídu
a `max_level: 2` by nebylo možné nastavit vůbec.

## R4 — „Tajný": oddělení rolí, ne skrytí před provozovatelem

**Rozhodnutí vlastnínika:** „oni ho neuvidí, ale on bude moct."

**Interpretace:** pod-agenti navzájem nevidí; vlastník má plnou viditelnost
včetně úplné auditní stopy.

**Co se staví:** oddělení rolí s least privilege. Pod-agent `recon` nevidí
pod-agenta `exploit` a jeho scope ani výsledky.

**Co se NESTaví:** jakékoli skrytí před provozovatelem, potlačení auditních
událostí, nebo schopnost obejít záznam. Účel „tajné jednotky" v kódu, který leží
v gitu, se nedosáhne — ticho v repu není utajení, je to chybějící záznam.

**Výměna:** nedotknutelná stopa se staví hash řetězem, ne skrytím. To je
samostatný úkol (viz `PENTEST_AGENT_DESIGN.md` §5) a není součástí tohoto běhu.

---

## Otázky, které zůstaly otevřené

| # | Otázka | Proč blokuje |
|---|---|---|
| O1 | Konkrétní zdroje threat intel a jejich licence | R1 |
| O2 | Kdo spravuje securitylab a kdo je v `rules_of_engagement` | R2 |
| O3 | Zda se zavádí hash řetěz auditu, nebo se zapíše jako omezení | R4 |
