Kad datubāze tiek uzlauzta, incidenta analīzē reti aprakstīta sarežģīta nulles dienas ievainojamība. Daudz biežāk tajā aprakstīts PostgreSQL ports, kas atvērts internetam, lietotne, kas pieslēdzas kā superlietotājs, parole, kas kopīga piecām sistēmām, vai rezerves kopija, kas nešifrēta glabājas krātuvē. Šīs nepilnības ir garlaicīgas — un tieši tāpēc tās pastāv gadiem. Šis ir kontrolsaraksts, ko izmantojam drošības pārskatā, sakārtots no biežākajām problēmām līdz sarežģītākajām.
1. Ierobežojiet, kas vispār var sasniegt datubāzi
Lētākā drošības kontrole ir nebūt sasniedzamam. PostgreSQL jāklausās tikai tajās saskarnēs, kuras tai vajag (listen_addresses), bet ugunsmūrim vai mākoņa drošības grupai jāatļauj savienojumi tikai no lietotņu serveriem, savienojumu pūliem un administrēšanas datoriem.
- Nekādas tiešas piekļuves no interneta — administratori pieslēdzas caur VPN vai bastiona serveri.
- Atsevišķi tīkla noteikumi ražošanas un testa vidēm, lai kompromitēts testa serveris nevarētu sasniegt ražošanas datus.
- Regulāri pārskatiet noteikumus: pagaidu atvērumiem "tikai šai migrācijai" ir tendence kļūt pastāvīgiem.
2. Padariet pg_hba.conf stingru un nepārprotamu
pg_hba.conf fails nosaka, kuri lietotāji drīkst pieslēgties kurām datubāzēm, no kurienes un kā viņiem jāautentificējas. Izlasiet to rindu pa rindai — noteikumi tiek pārbaudīti no augšas uz leju, un uzvar pirmais atbilstošais.
- Nekad neizmantojiet
trusttīkla savienojumiem. Tas ļauj pieslēgties bez jebkādas paroles. - Izmantojiet
scram-sha-256, nevismd5. SCRAM ir noklusējuma paroļu šifrēšana kopš PostgreSQL 14; vecie MD5 jaucējkodi paliek MD5, līdz katra parole tiek nomainīta. - Izmantojiet
hostssl, nevishostattālinātiem savienojumiem, lai nešifrēti pieslēgumi tiktu noraidīti. - Esiet konkrēti. Rinda, kas ļauj
alllietotājiem piekļūtalldatubāzēm no0.0.0.0/0, pati par sevi ir neatbilstība.
3. Piemērojiet lomām minimālo tiesību principu
Lietotnēm nevajadzētu pieslēgties kā postgres vai jebkuram citam superlietotājam. Praktisks lomu modelis:
- Īpašnieka loma, kurai pieder shēma un kuru izmanto tikai migrācijām.
- Lietotnes loma tikai ar nepieciešamajām
SELECT,INSERT,UPDATEunDELETEtiesībām. - Tikai lasīšanas loma atskaitēm un analītikai. Iepriekšdefinētās lomas
pg_read_all_dataunpg_monitorsedz biežākās vajadzības, nepiešķirot superlietotāja tiesības. - Personīgi konti administratoriem kopīga konta vietā, lai darbības varētu izsekot līdz konkrētam cilvēkam.
Pārbaudiet arī shēmu public. Kopš PostgreSQL 15 parastie lietotāji tajā pēc noklusējuma vairs nevar veidot objektus, taču datubāzes, kas jauninātas no vecākām versijām, saglabā vecās, plašākās tiesības, ja vien tās neatsaucat: REVOKE CREATE ON SCHEMA public FROM PUBLIC;
Ātrs tests: izpildiet SELECT rolname FROM pg_roles WHERE rolsuper;. Vairumā ražošanas sistēmu atbildei jābūt vienai vai divām lomām. Mēs regulāri šajā sarakstā atrodam lietotņu kontus, bijušos darbiniekus un monitoringa lietotājus.
4. Šifrējiet datus pārsūtīšanā un glabāšanā
- Ieslēdziet TLS serverī (
ssl = on) un izmantojiet sertifikātu no iekšējās vai publiskās sertifikācijas iestādes. Klientos iestatietsslmode=verify-full, lai tie pārbaudītu arī servera identitāti. - Šifrējiet diskus vai sējumus. Mākonī tā parasti ir viena atzīme — pārliecinieties, ka tā ieslēgta katrai instancei, momentuzņēmumam un replikai.
- Šifrējiet rezerves kopijas un WAL arhīvus, un glabājiet atslēgas atsevišķi no pašām kopijām.
5. Reģistrējiet un auditējiet svarīgo
Bez žurnāliem nevar atbildēt uz pirmo jautājumu pēc incidenta: kas notika un kad? Kā minimums ieslēdziet log_connections un log_disconnections, un reģistrējiet DDL ar log_statement = 'ddl'. Regulētām vidēm pgAudit paplašinājums nodrošina detalizētu, strukturētu audita žurnālu par lasīšanu un rakstīšanu jutīgās tabulās. Sūtiet žurnālus prom no datubāzes servera, lai uzbrucējs ar piekļuvi serverim nevarētu tos klusi izdzēst.
6. Aizsargājiet rezerves kopijas tikpat rūpīgi kā datubāzi
Rezerves kopija ir pilna jūsu datu kopija, bieži ar vājāku aizsardzību nekā oriģināls. Ierobežojiet, kas var lasīt rezerves kopiju krātuvi, šifrējiet to, glabājiet vismaz vienu kopiju, ko nevar izdzēst vai pārrakstīt no ražošanas vides, un — kā aprakstām ceļvedī par atjaunošanas testēšanu — regulāri pierādiet, ka to patiešām var atjaunot.
7. Uzturiet PostgreSQL atjauninātu un atbalstītu
Labojumu laidienos ir drošības labojumi, un tie paredzēti uzstādīšanai ar vienkāršu restartu. Uzstādiet tos nedēļu, nevis gadu laikā. Un pārliecinieties, ka katra datubāze darbojas ar atbalstītu galveno versiju: piemēram, PostgreSQL 14 pēdējo atjauninājumu saņems 2026. gada novembrī — skatiet, ko darīt saistībā ar PostgreSQL 14 atbalsta beigām.
Kāpēc tas ir svarīgi atbilstībai
Daudzām organizācijām Latvijā un visā ES NIS2 direktīva un to ieviešošie nacionālie likumi pārvērš šīs prakses no "labas idejas" par pienākumu: piekļuves kontrole, šifrēšana, žurnalēšana, rezerves kopēšana un ievainojamību pārvaldība ir skaidri sagaidāma. Dokumentēts, ieviests un pārskatīts drošības kontrolsaraksts ir arī tieši tas pierādījums, ko pieprasīs auditors.
Galvenās atziņas
- Turiet datubāzi prom no interneta un atļaujiet savienojumus tikai no zināmiem datoriem.
- Izmantojiet stingrus
pg_hba.confnoteikumus arscram-sha-256unhostssl; nekadtrust. - Lietotnēm nekad nevajadzētu pieslēgties kā superlietotājam — nodaliet īpašnieka, lietotnes un tikai lasīšanas lomas.
- Šifrējiet trafiku, diskus un rezerves kopijas; reģistrējiet savienojumus un DDL; izmantojiet atbalstītu, atjauninātu versiju.