Wat kan 'n gekompromitteerde webportaal nog bereik?
'n Webportaal beperk wat 'n besoeker oopmaak, nie wat 'n gekompromitteerde gasheer kan skakel nie. Twee hersienings, 'n gesagstabel en bereikbaarheidsopdragte.
Veronderstel die webportaal-gasheer word gekompromitteer terwyl sy sertifikaat nog geldig is. Elke reël wat bepaal het watter bladsye 'n besoeker mag aanvra, bly van krag, en nie een van daardie reëls beperk die verbinding wat die aanvaller nou vanaf daardie gasheer na die databasissubnet oopmaak nie. Daardie gaping is waarom 'n suiwer web-ingangspunt nie dieselfde aanspraak is as 'n gesegmenteerde netwerk nie. Die twee aansprake verg afsonderlike hersienings, vanuit verskillende vertrekpunte, voordat enigeen daarvan eerlik gemaak kan word.
Twee aansprake, en net een daarvan begin by die besoeker
Die eerste aanspraak gaan oor 'n persoon: 'n besoeker met 'n blaaier en 'n geldige sessie kan een toepassing oopmaak en niks anders nie. 'n Suiwer web-ingangspunt beantwoord daardie aanspraak goed, want die besoeker ontvang 'n bladsy eerder as 'n roete. Daardie antwoord is die moeite werd, en dit is ook die enigste aanspraak wat die meeste diagramme opteken.
Die tweede aanspraak gaan oor 'n komponent: die portaal, of die toepassingsproses daarager, word as onder iemand anders se beheer beskou. Vanuit daardie aanname verander die vraag van watter URL's toegelaat word na watter bestemmings en identiteite die proses nog kan bereik.
Die twee aansprake het verskillende eienaars, lewer verskillende bewyse en faal onafhanklik. 'n Identiteitspan kan die eerste met 'n sessietoets demonstreer; die tweede benodig netwerkbeleid, 'n diensrekening-hersiening en gasheerkontroles. 'n Ontwerp wat net die besoekershelfte opteken, lyk volledig op 'n hersieningskyfie en dun tydens 'n voorval, want die kontroles wat ná 'n kompromie saak maak, was nooit in die omvang nie. Noem watter aanspraak elke kontrole ondersteun, anders word een portaalreël aan albei toegeskryf.
'n Uitgewerkte onkostedienst, en die twee maniere waarop dit misluk
Neem 'n onkostedienst: 'n openbare portaal by 10.60.4.10 verifieer personeel en stuur goedgekeurde versoeke na 'n toepassingsluisteraar op poort 8443, en daardie toepassing bereik een PostgreSQL-luisteraar by 10.60.4.20:5432 as die rol expenses_app. Werknemers is nie bedoel om algemene interne toegang te kry nie. Onder normale werking lewer die ontwerp wel 'n toepassingspesifieke ingang sonder om die databasissluisteraar enige plek bekend te maak. Die adresse maak saak, want elke kontrole later in hierdie artikel noem hulle.
Verwyder nou die portaal uit die vertroude stel. Watter bestemmings kan 10.60.4.10 bereik sodra sy proses aan 'n aanvaller behoort? Die URL-filter wat besoekers beperk het, sê niks oor 'n verbinding wat die portaal-gasheer na die databasissubnet oopmaak nie.
Verwyder eerder die toepassingsproses, en die gesag verander van vorm: die rol expenses_app, die dienste wat daardie bediener kan bereik, en die lêers wat daardie rekening kan lees. In albei gevalle kan die voordeur suiwer web bly terwyl die backend-grens afwesig is. Die etiket op die voordeur is dus nie 'n antwoord op enige van die twee vrae nie.
Karteer die gesag wat elke party werklik hou
'n Kontrak geskryf as bedoelde toestemmings is geneig om die ontwerp vir jou terug te herhaal. Skryf dit as gehoue gesag, die kontrole wat die oorskot weerlê, en die eienaar van daardie kontrole, dan word elke ry toetsbaar. Hierdie tabel is 'n voorstel vir die voorbeeld hierbo, nie 'n produkbewering nie:
| 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 |
Eienaarskap volg die gesag. Die identiteitspan besit bewerings, die netwerkplatformspan besit roetes, die toepassingspan besit die databasisrol, die databasisadministrateur besit die luisteraar en sy gasheergebaseerde reëls, en die platformeienaar besit die bestuursvlak. 'n Weiering sonder 'n eienaar is 'n sin in 'n dokument eerder as 'n kontrole.
Die verdeling voorkom ook dubbele telling. 'n Poortbeperking kan nie 'n tabelvoorreg uitdruk nie, en 'n databasisrol kan nie keer dat 'n gasheer 'n soket na 'n onverwante subnet oopmaak nie.
Berei lys wat die portaal kan bereik in plaas daarvan om dit te beweer
'n Grensaanspraak is net so goed soos die lys daarager. Op die portaal-gasheer dek drie opdragte roeteseleksie, 'n lewende toets en die uitgangsbeleid:
ip route get 10.60.4.20
nc -zv 10.60.4.20 5432
sudo nft list chain inet filter outputLees die uitset in daardie volgorde. Die roete sê of 10.60.4.20 selfs uit daardie gasheer gekies word; die toets sê of die luisteraar antwoord; die reëllisting wys of beleid die pakkie stop of dat niks ooit in sy pad was nie.
Herhaal die lys vanaf die toepassingsgasheer. Van daar af is die databasiskant een navraag wat as die toepassingsrol uitgevoer word:
psql -h 10.60.4.20 -U expenses_app -d expenses -c 'select rolname, rolsuper, rolcreatedb from pg_roles''n Suksesvolle verbinding onder 'n rol wat nie 'n ander skema kan lees nie, is 'n ander resultaat as 'n suksesvolle verbinding onder 'n eienaarsrol. Net die tweede een is 'n bevinding.
Teken die weierings aan en dateer dan die hersiening
Aanvaarding word as uitkomste geskryf eerder as bedoelings: 'n werknemersessie kan nie die luisteraar bereik nie, die portaal-gasheer kan nie 'n onverwante subnet bereik nie, en die toepassingsrol kan nie 'n databasis skep nie. Elkeen is 'n aparte kontrole met 'n genoemde eienaar en 'n datum.
Hou monitering, pleisterwerk en herstel bereikbaar deur die bestuurspad wat daarvoor ontwerp is. 'n Grens wat ook sy eienaar blokkeer, word 'n onderbreking, en die gewone eerste reaksie op daardie onderbreking is om die reël weer te verbreed. Die CISA-omtrekriglyn vra dat inkomende en uitgaande toegang beperk word tot geregverdigde poorte en protokolle, insluitend verkeer tussen interne netwerke, wat die backend-geïnisieerde rigting is wat die meeste diagramme uitlaat.
Dateer die hersiening en noem sy eienaar. Herhaal die lys en die voorregnavraag ná enige verandering aan die portaalbeeld, die roetetabel of die toepassingsrol.