Apa lagi yang boleh dicapai oleh gateway web yang dikompromi?
Gateway web mengehadkan apa yang dibuka oleh pelawat, bukan apa yang boleh dihubungi oleh hos yang dikompromi. Dua semakan, jadual kuasa dan arahan untuk mengukur jangkauan.
Katakan hos gateway dikompromi semasa sijilnya masih sah. Setiap peraturan yang mengawal halaman mana yang boleh diminta oleh pelawat kekal berkuat kuasa, dan tiada satu pun peraturan itu mengehadkan sambungan yang dibuka oleh penyerang sekarang dari hos itu ke arah subnet pangkalan data. Jurang inilah sebab titik masuk web sahaja bukan dakwaan yang sama dengan rangkaian bersegmen. Kedua-dua dakwaan memerlukan semakan berasingan, dari titik permulaan yang berbeza, sebelum mana-mana satu daripadanya boleh dibuat dengan jujur.
Dua dakwaan, dan hanya satu daripadanya bermula pada pelawat
Dakwaan pertama tentang seseorang: pelawat dengan pelayar dan sesi yang sah boleh membuka satu aplikasi dan tiada yang lain. Titik masuk web sahaja menjawab dakwaan itu dengan baik, kerana pelawat menerima halaman dan bukan laluan. Jawapan itu berbaloi dipertahankan, dan ia juga satu-satunya dakwaan yang direkodkan oleh kebanyakan gambar rajah.
Dakwaan kedua tentang komponen: gateway, atau proses aplikasi di belakangnya, diandaikan berada di bawah kawalan orang lain. Daripada andaian itu soalan berubah daripada URL mana yang dibenarkan kepada destinasi dan identiti mana yang masih boleh dicapai oleh proses itu.
Kedua-dua dakwaan mempunyai pemilik berbeza, menghasilkan bukti berbeza dan gagal secara bebas. Pasukan identiti boleh menunjukkan yang pertama dengan ujian sesi; yang kedua memerlukan dasar rangkaian, semakan akaun perkhidmatan dan kawalan hos. Reka bentuk yang merekodkan separuh pelawat sahaja kelihatan lengkap pada slaid semakan dan nipis semasa insiden, kerana kawalan yang penting selepas kompromi tidak pernah berada dalam skop. Namakan dakwaan mana yang disokong oleh setiap kawalan, atau satu peraturan gateway akan dikreditkan kepada kedua-duanya.
Perkhidmatan perbelanjaan yang diusahakan, dan dua cara ia kalah
Ambil perkhidmatan perbelanjaan: gateway awam di 10.60.4.10 mengesahkan kakitangan dan memajukan permintaan yang diluluskan kepada pendengar aplikasi pada port 8443, dan aplikasi itu mencapai satu pendengar PostgreSQL di 10.60.4.20:5432 sebagai peranan expenses_app. Pekerja tidak sepatutnya menerima akses dalaman umum. Dalam operasi biasa reka bentuk memang menyediakan pintu masuk khusus aplikasi tanpa menerbitkan pendengar pangkalan data di mana-mana. Alamat itu penting, kerana setiap pemeriksaan kemudian dalam artikel ini menamakannya.
Sekarang keluarkan gateway daripada set dipercayai. Destinasi mana yang boleh dicapai oleh 10.60.4.10 apabila prosesnya dimiliki oleh penyerang? Penapis URL yang mengehadkan pelawat tidak berkata apa-apa tentang sambungan yang dibuka oleh hos gateway ke arah subnet pangkalan data.
Keluarkan proses aplikasi pula, dan kuasa berubah bentuk: peranan expenses_app, perkhidmatan yang boleh dicapai oleh pelayan itu, dan fail yang boleh dibaca oleh akaun itu. Dalam kedua-dua kes pintu depan boleh kekal web sahaja sementara sempadan backend tiada. Oleh itu label pada pintu depan bukan jawapan kepada mana-mana satu daripada dua soalan itu.
Petakan kuasa yang sebenarnya dipegang oleh setiap pihak
Kontrak yang ditulis sebagai kebenaran yang dimaksudkan cenderung mengulangi reka bentuk kepada anda. Tuliskannya sebagai kuasa yang dipegang, pemeriksaan yang menyangkal lebihan, dan pemilik pemeriksaan itu, maka setiap baris menjadi boleh diuji. Jadual ini ialah cadangan untuk contoh di atas, bukan dakwaan produk:
| 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 |
Pemilikan mengikut kuasa. Pasukan identiti memiliki penegasan, pasukan platform rangkaian memiliki laluan, pasukan aplikasi memiliki peranan pangkalan data, pentadbir pangkalan data memiliki pendengar dan peraturannya berasaskan hos, dan pemilik platform memiliki satah pengurusan. Penafian tanpa pemilik ialah ayat dalam dokumen, bukan kawalan.
Pemisahan itu juga menghalang pengiraan berganda. Sekatan port tidak boleh menyatakan keistimewaan jadual, dan peranan pangkalan data tidak boleh menghalang hos daripada membuka soket ke subnet yang tidak berkaitan.
Senaraikan apa yang boleh dicapai oleh gateway dan bukan mendakwanya
Dakwaan sempadan hanya sebaik penghitungan di belakangnya. Pada hos gateway, tiga arahan meliputi pemilihan laluan, ujian langsung dan dasar keluar:
ip route get 10.60.4.20
nc -zv 10.60.4.20 5432
sudo nft list chain inet filter outputBaca output dalam susunan itu. Laluan menyatakan sama ada 10.60.4.20 dipilih daripada hos itu; ujian menyatakan sama ada pendengar menjawab; senarai peraturan menunjukkan sama ada dasar menghentikan paket atau tiada apa-apa yang pernah berada di laluannya.
Ulang penghitungan daripada hos aplikasi. Dari situ bahagian pangkalan data ialah satu pertanyaan yang dijalankan sebagai peranan aplikasi:
psql -h 10.60.4.20 -U expenses_app -d expenses -c 'select rolname, rolsuper, rolcreatedb from pg_roles'Sambungan berjaya di bawah peranan yang tidak boleh membaca skema lain ialah hasil yang berbeza daripada sambungan berjaya di bawah peranan pemilik. Hanya yang kedua ialah penemuan.
Rekodkan penafian, kemudian tarikhkan semakan
Penerimaan ditulis sebagai hasil dan bukan niat: sesi pekerja tidak boleh mencapai pendengar, hos gateway tidak boleh mencapai subnet yang tidak berkaitan, dan peranan aplikasi tidak boleh mencipta pangkalan data. Setiap satu ialah pemeriksaan berasingan dengan pemilik bernama dan tarikh.
Kekalkan pemantauan, penampalan dan pemulihan boleh dicapai melalui laluan pengurusan yang direka untuknya. Sempadan yang turut menyekat pemiliknya menjadi gangguan, dan tindak balas pertama yang biasa kepada gangguan itu ialah meluaskan peraturan semula. Panduan perimeter CISA meminta akses masuk dan keluar dihadkan kepada port dan protokol yang wajar, termasuk trafik antara rangkaian dalaman, iaitu arah yang dimulakan backend yang ditinggalkan oleh kebanyakan gambar rajah.
Tarikhkan semakan dan namakan pemiliknya. Jalankan semula penghitungan dan pertanyaan keistimewaan selepas sebarang perubahan pada imej gateway, jadual penghalaan atau peranan aplikasi.