Předpokládejme, že hostitel brány je kompromitován, zatímco jeho certifikát je stále platný. Každé pravidlo, které určovalo, které stránky může návštěvník požadovat, zůstává v platnosti a žádné z těchto pravidel neomezuje spojení, které útočník nyní otevírá z tohoto hostitele směrem k podsíti databáze. Právě tato mezera je důvod, proč webový vstupní bod není totéž tvrzení jako segmentovaná síť. Obě tvrzení vyžadují samostatné revize, z různých výchozích bodů, než lze kterékoliv z nich poctivě vyslovit.

Dvě tvrzení a jen jedno z nich začíná u návštěvníka

První tvrzení se týká člověka: návštěvník s prohlížečem a platnou relací může otevřít jednu aplikaci a nic jiného. Webový vstupní bod na toto tvrzení dobře odpovídá, protože návštěvník dostává stránku, nikoli trasu. Taková odpověď má cenu a je také jediným tvrzením, které většina diagramů zaznamenává.

Druhé tvrzení se týká komponenty: předpokládá se, že brána nebo proces aplikace za ní je pod cizí kontrolou. Z tohoto předpokladu se otázka mění z toho, které URL jsou povoleny, na to, kterých cílů a identit může proces ještě dosáhnout.

Obě tvrzení mají různé vlastníky, poskytují různé důkazy a selhávají nezávisle. Tým identity může první doložit testem relace; druhé potřebuje síťovou politiku, revizi servisního účtu a ovládací prvky hostitele. Návrh, který zaznamenává jen polovinu návštěvníka, vypadá úplně na prezentačním snímku a slabě během incidentu, protože ovládací prvky, na kterých po kompromitaci záleží, nebyly nikdy v rozsahu. Pojmenujte, které tvrzení každý prvek podporuje, jinak bude jedno pravidlo brány připsáno oběma.

Zpracovaný příklad výdajové služby a dva způsoby, jak ztrácí

Vezměte výdajovou službu: veřejná brána na 10.60.4.10 ověřuje zaměstnance a předává schválené požadavky naslouchajícímu procesu aplikace na portu 8443 a tato aplikace dosahuje jednoho naslouchače PostgreSQL na 10.60.4.20:5432 jako role expenses_app. Zaměstnanci nemají dostávat obecný interní přístup. Za normálního provozu návrh skutečně poskytuje vstup specifický pro aplikaci, aniž by naslouchač databáze někde zveřejňoval. Adresy jsou důležité, protože je pojmenovává každá další kontrola v tomto článku.

Nyní odeberte bránu z důvěryhodné množiny. Kterých cílů může 10.60.4.10 dosáhnout, jakmile jeho proces patří útočníkovi? Filtr URL, který omezoval návštěvníky, neříká nic o spojení, které hostitel brány otevírá směrem k podsíti databáze.

Odeberte místo toho proces aplikace a oprávnění mění podobu: role expenses_app, služby, kterých může tento server dosáhnout, a soubory, které tento účet může číst. V obou případech mohou přední dveře zůstat pouze webové, zatímco hranice backendu chybí. Označení na předních dveřích tedy není odpovědí na žádnou z obou otázek.

Zmapujte oprávnění, která každá strana skutečně má

Smlouva napsaná jako zamýšlená oprávnění má ve zvyku opakovat vám návrh. Napište ji jako držená oprávnění, kontrolu, která vyvrací přebytek, a vlastníka této kontroly, a každý řádek se stane testovatelným. Tato tabulka je návrhem pro výše uvedený příklad, nikoli tvrzením o produktu:

ComponentAuthority it actually holdsCheck that proves the denialOwner of the check
Identity providerIssues assertions and session cookies, and holds no network path of its ownA request to the application URL without a session is redirected to the login pageIdentity team
Public gateway hostTCP reachability to whatever its routing table and egress rules permitAn egress rule drops 10.60.4.20:5432 and the probe reports the port filteredNetwork platform team
Application roleSQL privileges granted to expenses_app inside the expenses databaseA privilege query shows no ownership or create right on any other schemaApplication team
Database listenerAccepts connections only from the source ranges named in its host-based rulesA connection from an unlisted address is refused before authenticationDatabase administrator
Management pathAdministrative access reserved for patching, monitoring and recoveryA staff workstation cannot reach the administrative port or jump through itPlatform owner

Vlastnictví následuje oprávnění. Tým identity vlastní tvrzení, tým síťové platformy vlastní cesty, aplikační tým vlastní roli databáze, správce databáze vlastní naslouchač a jeho pravidla založená na hostiteli a vlastník platformy vlastní rovinu správy. Zamítnutí bez vlastníka je věta v dokumentu, nikoli kontrola.

Rozdělení také brání dvojímu započtení. Omezení portu nemůže vyjádřit privilegium tabulky a role databáze nemůže zabránit hostiteli otevřít socket k nesouvisející podsíti.

Vyjmenujte, čeho může brána dosáhnout, místo abyste to tvrdili

Tvrzení o hranici je jen tak dobré jako výčet za ním. Na hostiteli brány tři příkazy pokrývají výběr trasy, živou sondu a výstupní politiku:

ip route get 10.60.4.20
nc -zv 10.60.4.20 5432
sudo nft list chain inet filter output

Čtěte výstup v tomto pořadí. Trasa říká, zda se 10.60.4.20 z tohoto hostitele vůbec vybírá; sonda říká, zda naslouchač odpovídá; výpis pravidel ukazuje, zda politika paket zastaví, nebo zda v jeho cestě nikdy nic nebylo.

Zopakujte výčet z hostitele aplikace. Odtud je strana databáze jediným dotazem spuštěným jako role aplikace:

psql -h 10.60.4.20 -U expenses_app -d expenses -c 'select rolname, rolsuper, rolcreatedb from pg_roles'

Úspěšné spojení pod rolí, která nemůže číst jiné schéma, je jiný výsledek než úspěšné spojení pod rolí vlastníka. Jen to druhé je zjištění.

Zaznamenejte zamítnutí a poté revizi datujte

Přijetí se píše jako výsledky, nikoli záměry: relace zaměstnance nemůže dosáhnout naslouchače, hostitel brány nemůže dosáhnout nesouvisející podsítě a role aplikace nemůže vytvořit databázi. Každá je samostatná kontrola s pojmenovaným vlastníkem a datem.

Udržujte monitorování, záplatování a obnovu dostupné cestou správy, která je pro ně určena. Hranice, která blokuje i svého vlastníka, se stává výpadkem a obvyklou první reakcí na takový výpad je pravidlo znovu rozšířit. Pokyny CISA k perimetru žádají omezit příchozí a odchozí přístup na odůvodněné porty a protokoly, včetně provozu mezi interními sítěmi, což je směr iniciovaný backendem, který většina diagramů vynechává.

Revizi datujte a pojmenujte jejího vlastníka. Po každé změně image brány, směrovací tabulky nebo role aplikace znovu spusťte výčet a dotaz na privilegia.

Související články