Mihin kompromettoitunut web-yhdyskäytävä voi vielä päästä?
Web-yhdyskäytävä rajaa, mitä vierailija avaa, ei sitä, mihin kompromettoitunut isäntä voi yhdistää. Kaksi katselmusta, valtuustaulukko ja komennot ulottuvuuden todentamiseen.
Oletetaan, että yhdyskäytävän isäntä on kompromettoitu, kun sen varmenne on vielä voimassa. Jokainen sääntö, joka määräsi, mitä sivuja vierailija voi pyytää, pysyy voimassa, eikä mikään näistä säännöistä rajoita yhteyttä, jonka hyökkääjä nyt avaa tältä isännältä kohti tietokannan aliverkkoa. Juuri tämä aukko on syy siihen, että pelkkä verkkopohjainen sisääntulopiste ei ole sama väite kuin segmentoitu verkko. Molemmat väitteet vaativat erilliset katselmukset, eri lähtökohdista, ennen kuin kumpaakaan voi esittää rehellisesti.
Kaksi väitettä, ja vain toinen niistä alkaa vierailijasta
Ensimmäinen väite koskee henkilöä: vierailija, jolla on selain ja voimassa oleva istunto, voi avata yhden sovelluksen eikä mitään muuta. Pelkkä verkkopohjainen sisääntulopiste vastaa tähän väitteeseen hyvin, koska vierailija saa sivun eikä reittiä. Se vastaus kannattaa, ja se on myös ainoa väite, jonka useimmat kaaviot tallentavat.
Toinen väite koskee komponenttia: oletetaan, että yhdyskäytävä tai sen takana oleva sovellusprosessi on jonkun muun hallinnassa. Tästä oletuksesta kysymys muuttuu siitä, mitkä URL-osoitteet ovat sallittuja, siihen, mihin kohteisiin ja identiteetteihin prosessi voi vielä päästä.
Kahdella väitteellä on eri omistajat, ne tuottavat eri todisteita ja epäonnistuvat toisistaan riippumatta. Identiteettitiimi voi osoittaa ensimmäisen istuntotestillä; toinen tarvitsee verkkokäytännön, palvelutilin katselmuksen ja isännän hallinnat. Suunnittelu, joka tallentaa vain vierailijan puolikkaan, näyttää täydelliseltä katselmusdialla ja ohuelta tapahtuman aikana, koska kompromettoinnin jälkeen tärkeät hallinnat eivät koskaan olleet laajuudessa. Nimeä, mitä väitettä kukin hallinta tukee, tai yksi yhdyskäytäväsääntö hyvitetään molemmille.
Läpikäyty kulupalvelu ja kaksi tapaa, joilla se häviää
Otetaan kulupalvelu: julkinen yhdyskäytävä osoitteessa 10.60.4.10 todentaa henkilöstön ja välittää hyväksytyt pyynnöt sovelluksen kuuntelijalle portissa 8443, ja kyseinen sovellus tavoittaa yhden PostgreSQL-kuuntelijan osoitteessa 10.60.4.20:5432 roolina expenses_app. Työntekijöiden ei ole tarkoitus saada yleistä sisäistä pääsyä. Normaalissa toiminnassa suunnittelu todella tarjoaa sovelluskohtaisen sisäänkäynnin julkaisematta tietokannan kuuntelijaa missään. Osoitteet ovat merkityksellisiä, koska jokainen myöhempi tarkistus tässä artikkelissa nimeää ne.
Poista nyt yhdyskäytävä luotetusta joukosta. Mihin kohteisiin 10.60.4.10 voi päästä, kun sen prosessi kuuluu hyökkääjälle? URL-suodatin, joka rajoitti vierailijoita, ei kerro mitään yhteydestä, jonka yhdyskäytävän isäntä avaa kohti tietokannan aliverkkoa.
Poista sen sijaan sovellusprosessi, ja valtuudet muuttavat muotoaan: rooli expenses_app, palvelut, joihin kyseinen palvelin voi päästä, ja tiedostot, joita kyseinen tili voi lukea. Molemmissa tapauksissa etuovi voi pysyä pelkkänä verkkona, kun taustan raja puuttuu. Siksi etuoven merkintä ei ole vastaus kumpaankaan kysymykseen.
Kartoita valtuudet, jotka kullakin osapuolella todella on
Aiotuiksi käyttöoikeuksiksi kirjoitettu sopimus tapaa toistaa suunnittelun sinulle takaisin. Kirjoita se hallussapidettynä valtuutena, ylimäärän kumoavana tarkistuksena ja sen tarkistuksen omistajana, niin jokaisesta rivistä tulee testattava. Tämä taulukko on ehdotus yllä olevaan esimerkkiin, ei tuoteväite:
| Component | Authority it actually holds | Check that proves the denial | Owner of the check |
|---|---|---|---|
| Identity provider | Issues assertions and session cookies, and holds no network path of its own | A request to the application URL without a session is redirected to the login page | Identity team |
| Public gateway host | TCP reachability to whatever its routing table and egress rules permit | An egress rule drops 10.60.4.20:5432 and the probe reports the port filtered | Network platform team |
| Application role | SQL privileges granted to expenses_app inside the expenses database | A privilege query shows no ownership or create right on any other schema | Application team |
| Database listener | Accepts connections only from the source ranges named in its host-based rules | A connection from an unlisted address is refused before authentication | Database administrator |
| Management path | Administrative access reserved for patching, monitoring and recovery | A staff workstation cannot reach the administrative port or jump through it | Platform owner |
Omistus seuraa valtuuksia. Identiteettitiimi omistaa väitteet, verkkoulusta-tiimi omistaa reitit, sovellustiimi omistaa tietokantaroolin, tietokannan ylläpitäjä omistaa kuuntelijan ja sen isäntäpohjaiset säännöt, ja alustan omistaja omistaa hallintatason. Kielto ilman omistajaa on lause asiakirjassa, ei hallinta.
Jakaminen estää myös kaksoislaskennan. Porttirajoitus ei voi ilmaista taulukko-oikeutta, eikä tietokantarooli voi estää isäntää avaamasta pistoketta asiaankuulumattomaan aliverkkoon.
Luettele, mihin yhdyskäytävä voi päästä, sen sijaan että väittäisit sitä
Rajaväite on vain niin hyvä kuin sen takana oleva luettelo. Yhdyskäytävän isännällä kolme komentoa kattavat reitin valinnan, live-koetuksen ja lähtevän liikenteen käytännön:
ip route get 10.60.4.20
nc -zv 10.60.4.20 5432
sudo nft list chain inet filter outputLue tuloste siinä järjestyksessä. Reitti kertoo, valitaanko 10.60.4.20 ylipäätään kyseiseltä isännältä; koetus kertoo, vastaako kuuntelija; sääntöluettelo näyttää, pysäyttääkö käytäntö paketin vai eikö sen reitillä ollut koskaan mitään.
Toista luettelo sovelluksen isännältä. Sieltä tietokannan puoli on yksi kysely, joka suoritetaan sovellusroolina:
psql -h 10.60.4.20 -U expenses_app -d expenses -c 'select rolname, rolsuper, rolcreatedb from pg_roles'Onnistunut yhteys roolissa, joka ei voi lukea toista skeemaa, on eri tulos kuin onnistunut yhteys omistajaroolissa. Vain jälkimmäinen on löydös.
Kirjaa kiellot ja päivää sitten katselmus
Hyväksyntä kirjoitetaan tuloksina eikä aikomuksina: työntekijän istunto ei pääse kuuntelijaan, yhdyskäytävän isäntä ei pääse asiaankuulumattomaan aliverkkoon, eikä sovellusrooli voi luoda tietokantaa. Jokainen on erillinen tarkistus, jolla on nimetty omistaja ja päivämäärä.
Pidä valvonta, paikkaus ja palautus saavutettavina niille suunnitellun hallintareitin kautta. Rajasta, joka estää myös omistajansa, tulee käyttökatko, ja tavallinen ensimmäinen vastaus siihen katkoon on säännön laajentaminen uudelleen. CISAn perimetriohje vaatii rajoittamaan saapuvan ja lähtevän pääsyn perusteltuihin portteihin ja protokolliin, mukaan lukien sisäisten verkkojen välinen liikenne, joka on taustajärjestelmän aloittama suunta, jonka useimmat kaaviot jättävät pois.
Päivää katselmus ja nimeä sen omistaja. Suorita luettelo ja oikeuskysely uudelleen jokaisen yhdyskäytävän kuvan, reititystaulukon tai sovellusroolin muutoksen jälkeen.