Sekirite ak DBMS: sa ou bezwen sonje lè w ap chwazi zouti sekirite

Sekirite ak DBMS: sa ou bezwen sonje lè w ap chwazi zouti sekirite

Non mwen se Denis Rozhkov, mwen se tèt devlopman lojisyèl nan konpayi Gazinformservice, nan ekip pwodwi a. Jatoba. Lejislasyon ak règleman antrepriz enpoze sèten kondisyon pou sekirite nan depo done. Pèsonn pa vle twazyèm pati jwenn aksè nan enfòmasyon konfidansyèl, kidonk pwoblèm sa yo enpòtan pou nenpòt pwojè: idantifikasyon ak otantifikasyon, jere aksè a done, asire entegrite nan enfòmasyon nan sistèm nan, antre sekirite evènman yo. Se poutèt sa, mwen vle pale sou kèk pwen enteresan konsènan sekirite DBMS.

Atik la te prepare baze sou yon diskou nan @DatabasesMeetup, òganize Mail.ru Cloud Solutions. Si ou pa vle li, ou ka gade:


Atik la pral gen twa pati:

  • Ki jan yo an sekirite koneksyon.
  • Ki sa ki se yon odit nan aksyon ak ki jan yo anrejistre sa k ap pase sou bò baz done a ak konekte ak li.
  • Ki jan yo pwoteje done nan baz done a li menm ak ki teknoloji ki disponib pou sa a.

Sekirite ak DBMS: sa ou bezwen sonje lè w ap chwazi zouti sekirite
Twa eleman nan sekirite DBMS: pwoteksyon koneksyon, odit aktivite ak pwoteksyon done

Sekirize koneksyon ou yo

Ou ka konekte nan baz done a swa dirèkteman oswa endirèkteman atravè aplikasyon entènèt. Kòm yon règ, itilizatè biznis la, se sa ki, moun ki travay ak DBMS la, kominike avèk li endirèkteman.

Anvan ou pale sou pwoteksyon koneksyon, ou bezwen reponn kesyon enpòtan ki detèmine kijan mezi sekirite yo pral estriktire:

  • Èske yon itilizatè biznis ekivalan ak yon itilizatè DBMS?
  • si yo bay aksè a done DBMS sèlman atravè yon API ke ou kontwole, oswa si yo gen aksè nan tab yo dirèkteman;
  • si wi ou non DBMS a resevwa lajan nan yon segman pwoteje apa, ki moun ki kominike avèk li ak ki jan;
  • si yo itilize pisin/proxy ak kouch entèmedyè, sa ki ka chanje enfòmasyon sou fason koneksyon an bati ak ki moun k ap itilize baz done a.

Koulye a, ann wè ki zouti yo ka itilize pou sekirize koneksyon:

  1. Sèvi ak baz done solisyon klas pare-feu. Yon kouch pwoteksyon adisyonèl pral, nan yon minimòm, ogmante transparans nan sa k ap pase nan DBMS a, epi nan maksimòm, ou yo pral kapab bay plis pwoteksyon done.
  2. Sèvi ak règleman modpas yo. Itilizasyon yo depann sou ki jan achitekti ou bati. Nan nenpòt ka, yon modpas nan dosye konfigirasyon yon aplikasyon entènèt ki konekte ak DBMS a pa ase pou pwoteksyon. Genyen yon kantite zouti DBMS ki pèmèt ou kontwole ke itilizatè a ak modpas mande pou mete ajou.

    Ou ka li plis sou fonksyon Rating itilizatè isit la, ou ka jwenn enfòmasyon tou sou MS SQL Vulnerability Assessmen isit la

  3. Anrichi kontèks sesyon an ak enfòmasyon ki nesesè yo. Si sesyon an opak, ou pa konprann ki moun k ap travay nan DBMS nan kad li a, ou ka, nan kad operasyon an k ap fèt, ajoute enfòmasyon sou ki moun ki ap fè sa ak poukisa. Enfòmasyon sa a ka wè nan kontwòl kontab la.
  4. Konfigure SSL si ou pa gen yon separasyon rezo ant DBMS yo ak itilizatè final yo; li pa nan yon VLAN separe. Nan ka sa yo, li enperatif pwoteje kanal ki genyen ant konsomatè a ak DBMS nan tèt li. Zouti sekirite yo disponib tou nan sous louvri.

Ki jan sa pral afekte pèfòmans DBMS la?

Ann gade egzanp PostgreSQL pou wè ki jan SSL afekte chaj CPU a, ogmante tan ak diminye TPS, epi si li pral konsome twòp resous si ou pèmèt li.

Chaje PostgreSQL lè l sèvi avèk pgbench se yon pwogram ki senp pou fè tès pèfòmans yo. Li egzekite yon sèl sekans kòmandman repete, pètèt nan sesyon baz done paralèl, ak Lè sa a, kalkile pousantaj tranzaksyon an mwayèn.

Tès 1 san SSL epi itilize SSL — koneksyon an etabli pou chak tranzaksyon:

pgbench.exe --connect -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres sslmode=require 
sslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key"

vs

pgbench.exe --connect -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres"

Tès 2 san SSL epi itilize SSL - tout tranzaksyon yo fèt nan yon sèl koneksyon:

pgbench.exe -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres sslmode=require
sslrootcert=rootCA.crt sslcert=client.crt sslkey=client.key"

vs

pgbench.exe -c 10 -t 5000 "host=192.168.220.129 dbname=taskdb user=postgres"

Lòt paramèt:

scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 5000
number of transactions actually processed: 50000/50000

Rezilta tès yo:

 
PA SSL
Ssl

Yo etabli yon koneksyon pou chak tranzaksyon

mwayèn latansi
171.915 MS
187.695 MS

tps ki gen ladan koneksyon etabli
58.168112
53.278062

tps eksepte koneksyon etabli
64.084546
58.725846

CPU
24%
28%

Tout tranzaksyon yo fèt nan yon sèl koneksyon

mwayèn latansi
6.722 MS
6.342 MS

tps ki gen ladan koneksyon etabli
1587.657278
1576.792883

tps eksepte koneksyon etabli
1588.380574
1577.694766

CPU
17%
21%

Nan chaj limyè, enfliyans SSL konparab ak erè mezi a. Si kantite done transfere yo gwo anpil, sitiyasyon an ka diferan. Si nou etabli yon sèl koneksyon pou chak tranzaksyon (sa a se ra, anjeneral koneksyon an pataje ant itilizatè), ou gen yon gwo kantite koneksyon / dekoneksyon, enpak la ka yon ti kras pi gwo. Sa vle di, ka gen risk pou diminye pèfòmans, sepandan, diferans lan se pa tèlman gwo ke yo pa sèvi ak pwoteksyon.

Tanpri sonje ke gen yon gwo diferans si w konpare mòd fonksyone yo: w ap travay nan menm sesyon an oswa nan sesyon diferan. Sa a se konprann: resous yo depanse pou kreye chak koneksyon.

Nou te gen yon ka lè nou konekte Zabbix nan mòd konfyans, se sa ki, md5 pa t tcheke, pa t 'gen bezwen pou otantifikasyon. Lè sa a, kliyan an te mande pou pèmèt mòd otantifikasyon md5. Sa a mete yon chay lou sou CPU a, ak pèfòmans tonbe. Nou te kòmanse chèche fason pou optimize. Youn nan solisyon yo posib nan pwoblèm nan se aplike yon restriksyon rezo, fè VLAN separe pou DBMS yo, ajoute anviwònman pou fè li klè ki moun ki konekte soti nan kote epi retire otantifikasyon.Ou kapab tou optimize anviwònman otantifikasyon yo pou diminye depans lè pèmèt otantifikasyon. , men an jeneral, itilizasyon diferan metòd otantifikasyon afekte pèfòmans epi li mande pou pran faktè sa yo an kont lè w ap desine pouvwa enfòmatik nan serveurs (pyès ki nan konpitè) pou DBMS la.

Konklizyon: nan yon kantite solisyon, menm ti nuans nan otantifikasyon ka anpil afekte pwojè a epi li move lè sa a vin klè sèlman lè aplike nan pwodiksyon an.

Odit aksyon

Odit ka pa sèlman DBMS. Yon odit se sou jwenn enfòmasyon sou sa k ap pase nan diferan segman. Sa a ka swa yon firewall baz done oswa sistèm nan fonksyone sou ki DBMS la bati.

Nan DBMS komèsyal nan nivo Enterprise tout bagay anfòm ak odit, men nan sous louvri - pa toujou. Men sa PostgreSQL genyen:

  • default log - bati-an antre;
  • ekstansyon: pgaudit - si enregistrement default pa ase pou ou, ou ka itilize paramèt separe ki rezoud kèk pwoblèm.

Anplis de rapò a nan videyo a:

"Logging deklarasyon debaz yo ka bay pa yon etablisman estanda ak log_statement = all.

Sa a akseptab pou siveyans ak lòt itilizasyon, men li pa bay nivo detay ki tipikman obligatwa pou odit.

Li pa ase pou gen yon lis tout operasyon yo fèt sou baz done a.

Li ta dwe posib tou pou jwenn deklarasyon espesifik ki enterese oditè a.

Logging estanda montre sa itilizatè a te mande, pandan y ap pgAudit konsantre sou detay yo sou sa ki te pase lè baz done a egzekite rechèch la.

Pa egzanp, oditè a ka vle verifye ke yo te kreye yon tab patikilye nan yon fenèt antretyen dokimante.

Sa a ka sanble yon travay senp ak odit debaz ak grep, men e si yo te prezante w ak yon bagay tankou egzanp sa a (entansyonèlman konfizyon):

DO$$
KÒMANSE
Egzekite 'KREYE TAB enpòte' || 'ant_table (id int)';
FINI$$;

Enskripsyon estanda ap ba ou sa a:

LOG: deklarasyon: DO $$
KÒMANSE
Egzekite 'KREYE TAB enpòte' || 'ant_table (id int)';
FINI$$;

Li sanble ke jwenn tab la nan enterè ka mande pou kèk konesans kòd nan ka kote tab yo kreye dinamik.

Sa a se pa ideyal, kòm li ta pi preferab tou senpleman rechèch pa non tab la.

Sa a se kote pgAudit vini an sou la men.

Pou menm opinyon an, li pral pwodwi pwodiksyon sa a nan boutèy demi lit la:

ODIT: SESYON,33,1,FONKSYON,FÈ,,,"FÈ $$
KÒMANSE
Egzekite 'KREYE TAB enpòte' || 'ant_table (id int)';
FINI$$;"
ODIT: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)

Se pa sèlman blòk DO a konekte, men tou tèks konplè CREATE TABLE a ak kalite deklarasyon, kalite objè, ak non konplè, sa ki fè rechèch pi fasil.

Lè w ap antre nan deklarasyon SELECT ak DML, pgAudit ka konfigirasyon pou konekte yon antre separe pou chak relasyon referans nan deklarasyon an.

Pa gen okenn analiz obligatwa pou jwenn tout deklarasyon ki manyen yon tab patikilye (*) ».

Ki jan sa pral afekte pèfòmans DBMS la?

Ann fè tès yo ak odit konplè pèmèt epi wè sa k ap pase pèfòmans PostgreSQL. Ann pèmèt maksimòm baz done anrejistreman pou tout paramèt.

Nou chanje prèske pa gen anyen nan fichye a konfigirasyon, bagay ki pi enpòtan se vire sou mòd nan debug5 jwenn enfòmasyon maksimòm.

postgresql.conf

log_destination = 'stderr'
logging_collector = sou
log_truncate_on_rotation = sou
log_rotation_age = 1d
log_rotation_size = 10MB
log_min_messages = debug5
log_min_error_statement = debug5
log_min_duration_statement = 0
debug_print_parse = sou
debug_print_rewritten = sou
debug_print_plan = sou
debug_pretty_print = sou
log_checkpoints = sou
log_connections = sou
log_disconnections = sou
log_duration = sou
log_hostname = sou
log_lock_wait = sou
log_replication_commands = sou
log_temp_files = 0
log_timezone = 'Ewòp/Moskou'

Sou yon DBMS PostgreSQL ak paramèt 1 CPU, 2,8 GHz, 2 GB RAM, 40 GB HDD, nou fè twa tès chaj lè l sèvi avèk kòmandman yo:

$ pgbench -p 3389 -U postgres -i -s 150 benchmark
$ pgbench -p 3389 -U postgres -c 50 -j 2 -P 60 -T 600 benchmark
$ pgbench -p 3389 -U postgres -c 150 -j 2 -P 60 -T 600 benchmark

Rezilta tès yo:

Pa gen antre
Avèk antre

Total baz done ranpli tan
KOUMANI sec
KOUMANI sec

RAM
24%
40%

CPU
72%
91%

Tès 1 (50 koneksyon)

Kantite tranzaksyon yo nan 10 minit
74169
32445

Tranzaksyon/sec
123
54

Mwayèn Latansi
405 ms
925 ms

Tès 2 (150 koneksyon ak 100 posib)

Kantite tranzaksyon yo nan 10 minit
81727
31429

Tranzaksyon/sec
136
52

Mwayèn Latansi
550 ms
1432 ms

Konsènan gwosè

DB gwosè
2251 MB
2262 MB

Gwosè boutèy demi lit baz done
0 MB
4587 MB

Anba liy: yon odit konplè pa trè bon. Done ki soti nan kontwòl kontab la pral gwo tankou done ki nan baz done a li menm, oswa menm plis. Kantite anrejistreman ki pwodui lè w ap travay ak yon DBMS se yon pwoblèm komen nan pwodiksyon an.

Ann gade lòt paramèt:

  • Vitès la pa chanje anpil: san yo pa antre - 43,74 segonn, ak antre - 53,23 segonn.
  • RAM ak pèfòmans CPU ap soufri, menm jan ou bezwen jenere yon dosye odit. Sa a se tou aparan nan pwodiktivite.

Kòm kantite koneksyon ogmante, natirèlman, pèfòmans lan ap deteryore yon ti kras.

Nan kòporasyon ki gen kontwòl kontab li se menm pi difisil:

  • gen anpil done;
  • odit ki nesesè pa sèlman atravè syslog nan SIEM, men tou nan dosye: si yon bagay rive syslog, dwe gen yon dosye tou pre baz done a kote done yo sove;
  • yon etajè separe nesesè pou odit pou yo pa gaspiye I / O disk, paske li pran anpil espas;
  • Sa rive ke anplwaye sekirite enfòmasyon yo bezwen estanda GOST toupatou, yo mande pou idantifikasyon eta a.

Limite aksè a done yo

Ann gade teknoloji yo itilize pou pwoteje done ak aksè nan DBMS komèsyal ak sous louvri.

Ki sa ou ka jeneralman itilize:

  1. Chidere ak ofiskasyon pwosedi ak fonksyon (Anbalaj) - se sa ki, zouti separe ak sèvis piblik ki fè kòd lizib li pa li. Se vre, Lè sa a, li pa ka ni chanje ni refactored tounen. Apwòch sa a pafwa obligatwa omwen sou bò DBMS - lojik restriksyon lisans oswa lojik otorizasyon chiffres jisteman nan nivo pwosedi ak fonksyon.
  2. Limite vizibilite done pa ranje (RLS) se lè itilizatè diferan wè yon tab, men yon konpozisyon diferan nan ranje ladan l, se sa ki, yon bagay pa ka montre yon moun nan nivo ranje a.
  3. Edite done ki parèt yo (Masking) se lè itilizatè yo nan yon kolòn nan tablo a wè swa done oswa sèlman asterisk, se sa ki, pou kèk itilizatè yo pral fèmen enfòmasyon yo. Teknoloji a detèmine ki itilizatè yo montre sa ki baze sou nivo aksè yo.
  4. Sekirite DBA/Aplikasyon DBA/DBA kontwòl aksè se, pito, sou restriksyon aksè nan DBMS nan tèt li, se sa ki, anplwaye sekirite enfòmasyon yo ka separe ak administratè baz done ak administratè aplikasyon yo. Gen kèk teknoloji sa yo nan sous louvri, men gen anpil nan yo nan DBMS komèsyal yo. Yo bezwen lè gen anpil itilizatè ki gen aksè a sèvè yo tèt yo.
  5. Limite aksè nan dosye nan nivo sistèm dosye. Ou ka bay dwa ak privilèj aksè nan anyè pou chak administratè gen aksè sèlman nan done ki nesesè yo.
  6. Aksè obligatwa ak netwaye memwa - teknoloji sa yo raman itilize.
  7. Fen-a-fen chifreman ki sòti dirèkteman nan DBMS a se chifreman bò kliyan ak jesyon kle sou bò sèvè a.
  8. Done chifreman. Pou egzanp, chifreman kolòn se lè ou itilize yon mekanis ki ankripte yon kolòn sèl nan baz done a.

Ki jan sa afekte pèfòmans DBMS la?

Ann gade egzanp chifreman kolòn nan PostgreSQL. Gen yon modil pgcrypto, li pèmèt ou estoke jaden chwazi yo nan fòm chiffres. Sa a itil lè sèlman kèk done ki gen anpil valè. Pou li jaden an chiffres, kliyan an transmèt yon kle dechifre, sèvè a dechifre done yo epi retounen li bay kliyan an. San kle a, pesonn pa ka fè anyen ak done ou yo.

Ann teste ak pgcrypto. Ann kreye yon tab ak done chiffres ak done regilye. Anba a se kòmandman yo pou kreye tab, nan premye liy lan gen yon kòmandman itil - kreye ekstansyon nan tèt li ak enskripsyon DBMS:

CREATE EXTENSION pgcrypto;
CREATE TABLE t1 (id integer, text1 text, text2 text);
CREATE TABLE t2 (id integer, text1 bytea, text2 bytea);
INSERT INTO t1 (id, text1, text2)
VALUES (generate_series(1,10000000), generate_series(1,10000000)::text, generate_series(1,10000000)::text);
INSERT INTO t2 (id, text1, text2) VALUES (
generate_series(1,10000000),
encrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'),
encrypt(cast(generate_series(1,10000000) AS text)::bytea, 'key'::bytea, 'bf'));

Apre sa, ann eseye fè yon echantiyon done nan chak tab epi gade nan tan ekzekisyon yo.

Chwazi nan yon tab san fonksyon chifreman:

psql -c "timing" -c "select * from t1 limit 1000;" "host=192.168.220.129 dbname=taskdb
user=postgres sslmode=disable" > 1.txt

Chronomèt la limen.

  id | tèks1 | tèks2
——+——-+——-
1 | 1 | 1
2 | 2 | 2
3 | 3 | 3
...
997 | 997 | 997
998 | 998 | 998
999 | 999 | 999
1000 | 1000 | 1000
(1000 liy)

Tan: 1,386 ms

Seleksyon nan yon tab ak fonksyon chifreman:

psql -c "timing" -c "select id, decrypt(text1, 'key'::bytea, 'bf'),
decrypt(text2, 'key'::bytea, 'bf') from t2 limit 1000;"
"host=192.168.220.129 dbname=taskdb user=postgres sslmode=disable" > 2.txt

Chronomèt la limen.

  id | dechifre | dechifre
——+—————+————
1 | x31 | x31
2 | x32 | x32
3 | x33 | x33
...
999 | x393939 | x393939
1000 | x31303030 | x31303030
(1000 liy)

Tan: 50,203 ms

Rezilta tès yo:

 
San cryptage
Pgcrypto (decrypto)

Egzanp 1000 ranje
1,386 ms
50,203 ms

CPU
15%
35%

RAM
 
+ 5%

Cryptage gen yon gwo enpak sou pèfòmans. Li ka wè ke tan an te ogmante, depi operasyon dechifre nan done chiffres (ak dechifre se anjeneral toujou vlope nan lojik ou) mande pou resous enpòtan. Sa vle di, lide ankripte tout kolòn ki gen kèk done chaje ak yon diminisyon nan pèfòmans.

Sepandan, chifreman se pa yon bal an ajan ki rezoud tout pwoblèm. Done yo dechifre ak kle a dechifre pandan pwosesis la nan dechifre ak transmèt done yo sitiye sou sèvè a. Se poutèt sa, kle yo ka entèsepte pa yon moun ki gen aksè konplè nan sèvè baz done a, tankou yon administratè sistèm.

Lè gen yon sèl kle pou kolòn nan tout antye pou tout itilizatè (menm si se pa pou tout moun, men pou kliyan nan yon seri limite), sa a se pa toujou bon ak kòrèk. Se poutèt sa yo te kòmanse fè chifreman fen-a-fen, nan DBMS yo te kòmanse konsidere opsyon pou chifreman done sou bò kliyan an ak sèvè, ak menm depo kle-vout sa yo te parèt - pwodwi separe ki bay jesyon kle sou DBMS la. bò.

Sekirite ak DBMS: sa ou bezwen sonje lè w ap chwazi zouti sekirite
Yon egzanp chifreman sa yo nan MongoDB

Karakteristik sekirite nan DBMS komèsyal ak sous louvri

Fonksyon
Kalite
Règleman modpas
Kontwòl kontab
Pwoteje kòd sous pwosedi ak fonksyon
RLS
Chifreman

Oracle
komèsyal
+
+
+
+
+

Msql
komèsyal
+
+
+
+
+

Jatoba
komèsyal
+
+
+
+
ekstansyon

Postgrèskl
Gratis
ekstansyon
ekstansyon
-
+
ekstansyon

MongoDb
Gratis
-
+
-
-
Disponib nan MongoDB Enterprise sèlman

Tablo a se byen lwen nèt, men sitiyasyon an se sa a: nan pwodwi komèsyal yo, pwoblèm sekirite yo te rezoud pou yon tan long, nan sous louvri, kòm yon règ, kèk kalite ajoute yo te itilize pou sekirite, anpil fonksyon ki manke. , pafwa ou oblije ajoute yon bagay. Pou egzanp, politik modpas - PostgreSQL gen anpil ekstansyon diferan (1, 2, 3, 4, 5), ki aplike politik modpas, men, nan opinyon mwen, okenn nan yo pa kouvri tout bezwen yo nan segman antrepriz domestik la.

Kisa ou dwe fè si ou pa gen sa ou bezwen nenpòt kote? Pou egzanp, ou vle sèvi ak yon DBMS espesifik ki pa gen fonksyon yo ke kliyan an mande.

Lè sa a, ou ka itilize solisyon twazyèm pati ki travay ak DBMS diferan, pou egzanp, Crypto DB oswa Garda DB. Si nou ap pale de solisyon ki soti nan segman domestik la, Lè sa a, yo konnen sou GOSTs pi bon pase nan sous louvri.

Dezyèm opsyon an se ekri sa ou bezwen tèt ou, aplike aksè done ak chifreman nan aplikasyon an nan nivo pwosedi a. Se vre, li pral pi difisil ak GOST. Men, an jeneral, ou ka kache done yo jan sa nesesè, mete yo nan yon DBMS, Lè sa a, rekipere li epi dechifre li jan sa nesesè, dwa nan nivo aplikasyon an. An menm tan an, imedyatman panse sou ki jan ou pral pwoteje algoritm sa yo nan aplikasyon an. Nan opinyon nou an, sa ta dwe fè nan nivo DBMS, paske li pral travay pi vit.

Rapò sa a te premye prezante nan @Databases Meetup pa Mail.ru Cloud Solutions. Gade videyo lòt pèfòmans ak abònman nan anons evènman sou Telegram Anviwon Kubernetes nan Mail.ru Group.

Ki lòt bagay pou li sou sijè a:

  1. Plis pase Ceph: MCS nwaj blòk depo.
  2. Ki jan yo chwazi yon baz done pou yon pwojè pou ou pa bezwen chwazi ankò.

Sous: www.habr.com

Add nouvo kòmantè