Выкажам здагадку, што хост шлюза ўзламаны, пакуль яго сертыфікат яшчэ дзейны. Кожнае правіла, якое вызначала, якія старонкі наведвальнік можа запытаць, застаецца ў сіле, і ні адно з гэтых правілаў не абмяжоўвае злучэнне, якое зламыснік цяпер адкрывае з гэтага хоста да падсеткі базы даных. Менавіта праз гэтую прагаліну вэб-кропка ўваходу не тое ж самае, што сегментаваная сетка. Абедзве заявы патрабуюць асобных аглядаў, з розных адпраўных пунктаў, перш чым хоць адну з іх можна будзе зрабіць сумленна.

Дзве заявы, і толькі адна з іх пачынаецца ў наведвальніка

Першая заява датычыць чалавека: наведвальнік з браўзерам і дзейным сеансам можа адкрыць адну праграму і нічога больш. Вэб-кропка ўваходу добра адказвае на гэтую заяву, бо наведвальнік атрымлівае старонку, а не маршрут. Гэты адказ каштоўны, і ён жа адзіная заява, якую фіксуюць большасць схем.

Другая заява датычыць кампанента: шлюз або працэс праграмы за ім лічыцца пад чужым кантролем. З гэтага дапушчэння пытанне змяняецца: з таго, якія 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 па перыметры патрабуюць абмяжоўваць уваходны і выхадны доступ апраўданымі портамі і пратаколамі, уключаючы трафік паміж унутранымі сеткамі, гэта значыць кірунак, ініцыяваны бэкендам, які большасць схем апускае.

Прадатуйце агляд і назавіце яго ўладальніка. Паўтарыце пералік і запыт прывілеяў пасля любых змен у вобразе шлюза, табліцы маршрутызацыі або ролі праграмы.

Падобныя артыкулы