Lugar ng admin ng SaaS sa likod ng VPN: aling address ang dapat pagkatiwalaan?
Nakikita ng pinagmulan ang exit address ng iyong VPN gateway, hindi ang tunnel address ng laptop. Magtiwala lamang sa naka-configure na proxy header, pagkatapos ay i-gate ang bawat operasyon ng admin.
Ang mga pampublikong pahina ng SaaS ay maaaring manatiling bukas sa lahat habang ang mga operasyon ng admin sa likod nila ay tumatanggi sa sinumang nasa labas ng VPN. Ang mekanismong nagpapangyari nito ay hindi isang nakatagong menu o hiwalay na pahina ng pag-login; ito ay isang pagsusuri sa network path na naghatid ng kahilingan. Kung mali ang ebidensya ng address, ang pagsusuri ay alinman sa nagla-lock out ng tunay na admin o tumatanggap sa sinumang marunong mag-type ng header. Magsimula sa aktwal na natatanggap ng pinagmulan.
Ano ang aktwal na natatanggap ng pinagmulan pagkatapos ng tunnel
Kapag naabot ng browser ang pampublikong site sa pamamagitan ng VPN na nagdadala rin ng trapiko ng internet, isinasalin ng gateway ang koneksyon bago ito lumabas. Nakikita ng SaaS ang pampublikong exit address ng gateway, karaniwang isang address o maliit na saklaw, at hindi kailanman nakikita ang tunnel address ng laptop. Kaya nabigo ang pagdaragdag ng 10.90.0.42 sa allowlist, at kaya nabigo nang mas malakas ang pagdaragdag ng buong RFC 1918: tinatanggap ng pangalawa ang bawat pribadong network na makakaabot sa iyo. Ang tanging address na karapat-dapat sa kondisyon ay ang aktwal na pag-aari ng iyong organisasyon sa labasan.
curl -s https://ifconfig.me
dig +short admin.example.com
Tahimik na binabali ng split tunneling ang palagay na iyon. Kung ang VPN ay nagdadala lamang ng mga pribadong ruta ng opisina, lumalabas ang kahilingan sa pampublikong admin hostname sa lokal na ISP at nakikita ng pinagmulan ang isang residential address. Walang pinatutunayan ang konektadong icon ng VPN tungkol sa partikular na destinasyong ito, kaya subukan ang destinasyon at hindi ang tunnel.
Huminto at ayusin ang routing bago magsulat ng anumang patakaran kung nag-iiba ang exit address bawat user. Ang kondisyong umaangkop lamang sa ilang admin ay mas malala kaysa walang kondisyon, dahil itinatago nito ang problema hanggang sa isang insidente.
Magtiwala lamang sa proxy na muling nagsusulat ng address
Karamihan sa mga pampublikong site ay nasa likod ng CDN o reverse proxy, kaya ang socket address ng pinagmulan ay pag-aari ng frontend na iyon at hindi ng bisita. Karaniwang ipinapasa ng frontend ang orihinal na address sa isang header, at ang header na iyon ay kontrolado ng attacker maliban kung tinatanggap lamang ito ng pinagmulan mula sa mga kilalang proxy. I-configure nang tahasan ang listahan ng mga pinagkakatiwalaang source at gawing hindi maabot ang pinagmulan mula saanman. Kung wala ang ikalawang kalahati, lalampasan ng attacker ang proxy at direktang ipapadala ang header.
set_real_ip_from 192.0.2.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
curl -H 'X-Forwarded-For: 198.51.100.27' https://origin.example.com/admin
Ang parehong pangangatwiran ay nalalapat sa PROXY protocol: mapagkakatiwalaan lamang ito kapag ang listener ay nakatali sa isang interface na maaabot ng proxy at wala nang iba. Ang nawawalang konteksto ng address ay dapat magpabagsak sa protektadong pagsusuri sa halip na mahulog sa default na pahintulot. Ang header na wala ay hindi ebidensya ng pinagkakatiwalaang landas.
Ikabit ang kondisyon sa bawat protektadong operasyon
Ilagay ang pagsusuri sa hangganan ng awtorisasyon na dinadaanan ng bawat protektadong operasyon, hindi sa pahinang nagre-render ng menu. Gumagana ang lahat ng route group, middleware o patakaran layer; ang kopya sa bawat handler ay hindi, dahil ang handler na idadagdag ng isang tao sa susunod na quarter ay wala nito.
user = requireAuthenticatedSession()
requirePermission(user, "admin")
requireVpnEgress(verifiedClientAddress(request))
performProtectedOperation(user, request)
Dapat saklawin ng parehong hangganan ang JSON API, mga export, mga pinirmahang download URL at ang WebSocket handshake, dahil wala sa mga ito ang nangangailangan na unang hilingin ang HTML page. Ang download link na ginawa habang naka-on ang VPN ay nananatiling wasto pagkatapos maliban kung muling susuriin ng download endpoint. Ang mga pangmatagalang session ay nangangailangan din ng panuntunan sa muling pagsusuri, kung hindi ay nagiging permanenteng exemption ang isang authenticated na kahilingan. Ang default na pagtanggi lamang ang setting na nakakaligtas sa pagpapalit ng kawani.
Ang mga shared cache ay ang kabilang paraan sa paligid ng pagsusuri. Ang cache na mayroon nang protektadong tugon ay maaaring maghatid nito nang hindi nakikipag-ugnayan sa pinagmulan, kaya markahan ang mga tugon ng admin bilang pribado at ilayo sa shared storage. Kung kailangang maghatid ng cache, dapat tumakbo ang access check bago ang paghahatid, na karaniwang nangangahulugang hindi ito maaaring maging shared cache.
Subukan ang mga bypass na kakasara mo lang
Sanayin ang matrix hindi ang masayang landas: isang admin sa pamamagitan ng VPN, ang parehong admin na wala ito, isang hindi admin sa pamamagitan nito, at isang pekeng address header. Magdagdag ng direktang kahilingan sa pinagmulan at kahilingang may naka-cache na tugon, dahil ang dalawang iyon ang lubos na lumalampas sa frontend.
curl -sI https://admin.example.com/export.csv
curl -s -H 'X-Forwarded-For: 198.51.100.27' https://origin.example.com/admin
curl -s https://admin.example.com/api/me -o /dev/null -w '%{http_code}\n'
Dapat ibalik ng bawat kahilingan ang status na ipinapangako ng patakaran, at dapat itala ng log kung aling ebidensya ng address ang ginamit. Saklawin nang hiwalay ang IPv6, dahil ang dual-stack na pinagmulan ay maaaring makakita ng ibang pamilya ng source kaysa sa sinubukan mo. Panatilihing gumagana ang mga ordinaryong operasyon ng customer sa labas ng VPN, kung hindi ay ibabalik ang pagbabago sa unang reklamo ng customer. Isulat ang inaasahang resulta para sa bawat hilera bago ito patakbuhin, upang makita ang isang nakakagulat na pagpasa.
Pinapatunayan ng exit address ang isang pinahihintulutang network path, hindi isang tao at hindi isang pinamamahalaang device. Panatilihin ito bilang isang kondisyon sa tabi ng authentication at pahintulot, at nananatiling makitid ang admin area nang hindi ginagawang serbisyong VPN-only ang buong produkto. Ang paghihiwalay na iyon ang disenyo, hindi isang limitasyon nito.