Ենթադրենք՝ դարպասի հոսթը վարակվել է, մինչ դրա վկայականը դեռ վավեր է: Յուրաքանչյուր կանոն, որը սահմանում էր, թե այցելուը որ էջերը կարող է պահանջել, ուժի մեջ է մնում, և այդ կանոններից ոչ մեկը չի սահմանափակում այն կապը, որը հարձակվողը հիմա բացում է այդ հոսթից դեպի տվյալների բազայի ենթացանցը: Հենց այդ բացն է պատճառը, որ միայն վեբ մուտքի կետը նույն պնդումը չէ, ինչ սեգմենտավորված ցանցը: Երկու պնդումներն էլ պահանջում են առանձին վերանայումներ՝ տարբեր մեկնարկային կետերից, նախքան դրանցից որևէ մեկը ազնվորեն անելը:

Երկու պնդում, և դրանցից միայն մեկն է սկսվում այցելուից

Առաջին պնդումը մարդու մասին է. բրաուզեր և վավեր սեսիա ունեցող այցելուը կարող է բացել մեկ հավելված և ուրիշ ոչինչ: Միայն վեբ մուտքի կետը լավ է պատասխանում այդ պնդմանը, քանի որ այցելուը ստանում է էջ, ոչ թե երթուղի: Այդ պատասխանն արժե ունենալ, և այն նաև միակ պնդումն է, որը գրանցում են դիագրամների մեծ մասը:

Երկրորդ պնդումը բաղադրիչի մասին է. ենթադրվում է, որ դարպասը կամ դրա հետևում գտնվող հավելվածի գործընթացը գտնվում է ուրիշի վերահսկողության տակ: Այդ ենթադրությունից հարցը փոխվում է՝ թե որ URL-ներն են թույլատրված, դեպի այն, թե գործընթացը դեռ ինչ նպատակակետերի և ինքնությունների կարող է հասնել:

Երկու պնդումներն ունեն տարբեր սեփականատերեր, տալիս են տարբեր ապացույցներ և ձախողվում են անկախ: Ինքնության թիմը կարող է ցույց տալ առաջինը սեսիայի թեստով. երկրորդը պահանջում է ցանցային քաղաքականություն, սպասարկման հաշվի ստուգում և հոսթի վերահսկիչներ: Նախագիծը, որը գրանցում է միայն այցելուի կեսը, ամբողջական է թվում վերանայման սլայդում և բարակ՝ միջադեպի ժամանակ, որովհետև վարակումից հետո կարևոր վերահսկիչները երբեք չեն եղել շրջանակում: Անվանեք, թե որ պնդմանն է աջակցում յուրաքանչյուր վերահսկիչ, այլապես մեկ դարպասի կանոն կհաշվարկվի երկուսին:

Մշակված ծախսերի ծառայություն և դրա պարտության երկու ուղիները

Վերցնենք ծախսերի ծառայություն. 10.60.4.10 հասցեում հանրային դարպասը նույնականացնում է աշխատակիցներին և հաստատված հարցումները փոխանցում 8443 պորտի հավելվածի լսողին, և այդ հավելվածը հասնում է մեկ PostgreSQL լսողի 10.60.4.20:5432 հասցեում expenses_app դերով: Աշխատակիցները չպետք է ստանան ընդհանուր ներքին հասանելիություն: Սովորական աշխատանքում նախագիծն իսկապես տալիս է հավելվածին հատուկ մուտք՝ առանց տվյալների բազայի լսողը որևէ տեղ հրապարակելու: Հասցեները կարևոր են, որովհետև այս հոդվածի յուրաքանչյուր հետագա ստուգում անվանում է դրանք:

Այժմ հանեք դարպասը վստահելի բազմությունից: Ինչ նպատակակետերի կարող է հասնել 10.60.4.10-ը, երբ դրա գործընթացը պատկանում է հարձակվողին: URL զտիչը, որը սահմանափակում էր այցելուներին, ոչինչ չի ասում այն կապի մասին, որը դարպասի հոսթը բացում է դեպի տվյալների բազայի ենթացանցը:

Փոխարենը հանեք հավելվածի գործընթացը, և լիազորությունը փոխում է ձևը՝ expenses_app դերը, այն ծառայությունները, որոնց այդ սերվերը կարող է հասնել, և այն ֆայլերը, որոնք այդ հաշիվը կարող է կարդալ: Երկու դեպքում էլ առջևի դուռը կարող է մնալ միայն վեբ, մինչ բեքենդի սահմանը բացակայում է: Ուստի առջևի դռան պիտակը երկու հարցերից ոչ մեկի պատասխանը չէ:

Քարտեզագրեք, թե յուրաքանչյուր կողմն իրականում ինչ լիազորություն ունի

Նախատեսված թույլտվություններով գրված պայմանագիրը հակված է ձեզ հետ կրկնելու նախագիծը: Գրեք այն որպես պահվող լիազորություն, ավելցուկը հերքող ստուգում և այդ ստուգման սեփականատեր, և ամեն տող դառնում է ստուգելի: Այս աղյուսակը վերևի օրինակի առաջարկն է, ոչ թե ապրանքի պնդում:

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

Սեփականությունը հետևում է լիազորությանը: Ինքնության թիմը տիրապետում է պնդումներին, ցանցային հարթակի թիմը՝ երթուղիներին, հավելվածի թիմը՝ տվյալների բազայի դերին, տվյալների բազայի ադմինիստրատորը՝ լսողին և նրա հոսթային կանոններին, իսկ հարթակի սեփականատերը՝ կառավարման հարթությանը: Առանց սեփականատիրոջ մերժումը փաստաթղթի նախադասություն է, ոչ թե վերահսկիչ:

Բաժանումը նաև կանխում է կրկնակի հաշվարկը: Պորտի սահմանափակումը չի կարող արտահայտել աղյուսակի արտոնություն, և տվյալների բազայի դերը չի կարող խանգարել հոսթին վարդակ բացել չկապված ենթացանցի ուղղությամբ:

Թվարկեք, թե ինչի կարող է հասնել դարպասը՝ փոխարենը պնդելու

Սահմանի պնդումը նույնքան լավն է, որքան դրա հետևում գտնվող թվարկումը: Դարպասի հոսթում երեք հրաման ծածկում են երթուղու ընտրությունը, կենդանի փորձարկումը և ելքի քաղաքականությունը:

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

Կարդացեք ելքը այդ հերթականությամբ: Երթուղին ասում է՝ արդյոք 10.60.4.20-ը ընդհանրապես ընտրվում է այդ հոսթից. փորձարկումը՝ արդյոք լսողը պատասխանում է. կանոնների ցանկը ցույց է տալիս՝ քաղաքականությունը կանգնեցնում է փաթեթը, թե դրա ուղու վրա երբեք ոչինչ չի եղել:

Կրկնեք թվարկումը հավելվածի հոսթից: Այնտեղից տվյալների բազայի կողմը մեկ հարցում է, որը կատարվում է հավելվածի դերով:

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

Հաջող կապը դերի ներքո, որը չի կարող կարդալ այլ սխեմա, տարբեր արդյունք է, քան հաջող կապը սեփականատիրոջ դերի ներքո: Միայն երկրորդն է հայտնաբերում:

Գրանցեք մերժումները, ապա թվագրեք վերանայումը

Ընդունումը գրվում է որպես արդյունքներ, ոչ թե մտադրություններ. աշխատակցի սեսիան չի կարող հասնել լսողին, դարպասի հոսթը չի կարող հասնել չկապված ենթացանցին, և հավելվածի դերը չի կարող ստեղծել տվյալների բազա: Յուրաքանչյուրը առանձին ստուգում է՝ անվանված սեփականատիրոջ և ամսաթվի հետ:

Պահեք մոնիտորինգը, կարկատումը և վերականգնումը հասանելի իրենց համար նախատեսված կառավարման ուղով: Սահմանը, որը արգելափակում է նաև իր սեփականատիրոջը, դառնում է ընդհատում, և այդ ընդհատման սովորական առաջին արձագանքը կանոնը կրկին լայնացնելն է: CISA-ի պարագծի ուղեցույցը պահանջում է սահմանափակել ներգնա և ելքային հասանելիությունը արդարացված պորտերով և արձանագրություններով, ներառյալ ներքին ցանցերի միջև երթևեկությունը, ինչը բեքենդից սկսվող ուղղությունն է, որը բաց թողնում են դիագրամների մեծ մասը:

Թվագրեք վերանայումը և անվանեք դրա սեփականատիրոջը: Կրկին գործարկեք թվարկումը և արտոնությունների հարցումը դարպասի պատկերի, երթուղային աղյուսակի կամ հավելվածի դերի ցանկացած փոփոխությունից հետո:

Առնչվող հոդվածներ