You are on page 1of 7

Microsoft SQL Server 2012 bezbednost i praktični primeri

Microsoft SQL Server 2012 security and practical examples

Apstrakt: U radu su prikazane mogućnosti Microsoft SQL Ako dođe do upada u servis, napadač stiče prava na sistemu
Server platforme u oblastima bezbednosti, kriptografije koja ima servis čime mu olakšavamo posao.
podataka, praćenja aktivnosti i automatizacije
administrativnih zadataka. Sve mogućnosti su
Prilikom instalacije SQL Servera automatski se nude novi
demonstrirane kroz primere TSQL koda.
različiti nalozi za svaki od njih, a sama instalaciona
Ključne reči: Microsoft SQL Server, bezbednost, procedura će napraviti naloge i podesiti minimalni set
kriptografija, administracija potrebnih prava kako bi servisi ispravno funkcionisali.
Da bi iskoristili ovu mogućnost instalacionog programa,
Abstract: This paper presents the capabilities of Microsoft moramo ga pokrenuti u bezbednosnom kontekstu lokalnog
SQL Server platform in the areas of security, ili domenskog administratora ako želimo da napravi
cryptography, monitoring activities and administrative
domenske naloge.
tasks automating. All features are demonstrated through
TSQL code examples.
U slučaju da ima potrebe da se nalozi ručno kreiraju i
Keywords: Microsoft SQL Server, security, cryptography, podese potrebna prava pre instalacije SQL Servera,
administration informacije o neophodnim pravima svakog naloga se
nalaze na MSDN sajtu „Configure Windows Service
1. UVOD Accounts and Permissions“ [link].
Rad je nastao kao rezultat više projekata instalacije,
Nalozi koje koriste servisi se mogu naknadno promeniti
administracije i održavanja Microsft SQL Servera, sa
preko “Sql Server Configuration Manager” alata koji
posebnim naglaskom na verziju 2012. Namena rada je da
dolazi uz SQL Server ili pomoću Services apleta u okviru
administratorima i programerima pruži uvid u mogućnosti
Administrative tools grupe na Windows računaru:
platforme i dobru praksu u oblastima bezbednosti servisa,
podataka i automatskih notifikacija.
Pre svega treba se upoznati sa ključnim MS SQL Server
Slika 1: Sql Server Configuration Manager
platformom i servisima koji je čine:

1. Database engine – osnovni servis koji predstavlja


relacionu bazu podataka
2. Analysis servis – servis koji služi za analitičko
procesiranje podataka, multidimensional upite i
analize.
3. Reporting servis – kreiranje izveštaja, integracija sa
SharePoint platformom.
4. Integration servis – ETL (Extract Transform & Load)
funkcionalnosti za razmenu i transformaciju podataka.
5. Ostali servisi i funkcionalsti: replikacija, full-text
pretraga, Data Quality servis i Master Data servis.

Većina servisa zahteva nalog pod kojim će se prijaviti na


sistem (lokalni kompjuter ili domen) gde se instalira.
Najčešće se koristi lokalni nalog koji pripada lokalnoj
Administrators grupi, a česte su situacije gde se koristi
nalog koji pripada Domain Admin grupi. Obe varijante
(posebno druga), su veoma opasne i treba ih izbegavati.
2. AUTENTIFIKACIJA I AUTORIZACIJA Kolona „password“ sadrži HASH passworda u slučaju
SQL Server naloga, odnosno NULL vrednost u slučaju
Autentifikacija je proces predstavljanja/identifikacije naloga koji koristi Windows autentifikaciju. U drugom
korisnika nekom sistemu na osnovu koga sistem slučaju password se nalazi u Active Directory bazi, takođe
dozvoljava ili ne dozvoljava pristup svojim resursima. u HASH obliku.

Autorizacija je proces dodele prava autentifikovanom Autorizacija, odnosno dodela prava autentifikovanim
korisniku. Određuje koje resurse može koristiti i na koji korisnicima se kasnije odvija nezavisno od načina
način. autentifikacije i nije predmet ovog rada.
SQL Server poznaje dva načina autentifikacije:
1. SQL Server autentifikacija gde SQL Server vrši
autentifikaciju korisnika korišćenjem user Preporuke:
name/password para. Mora se koristiti u mrežama bez
domena ili za pristup serveru koji je publikovan na  Instalirati samo potrebne servise i time smanjiti
javnom Webu direktno preko TCP/IP protokola. Može potencijalnu površinu za napad
se naravno koristiti i u mrežama koje imaju domen ali  Posle instalacije zaustaviti servise koji se još uvek ne
tada je bolje koristiti drugi način autentifikacije. koriste u produkciji
2. Windows autentifikacija (takođe od ranije poznata
 Gde god je moguće koristiti Windows autentifikaciju
po imenima Trusted i Integrated), gde autentifikaciju
 Ako se mora koristiti SQL Server autentifikacija
vrši Windows domain. SQL server administrator
postaviti polise za kompleksnost šifre
određuje koje domenske grupe i korisnici mogu da se
 Izbrisati ili onemogućiti (disable) guest korisnika u
autentifikuju na SQL server, pa na taj način SQL
svakoj bazi:
Server „veruje“ (trust) Windows sistemu
autentifikacije. Ovo je preporučljiv vid autentifikacije
USE ImeBaze
na SQL Server jer se koriste napredni Windows
REVOKE CONNECT FROM [guest]
mehanizmi, smart kartice, domenske polise i slično.

 Voditi računa o ispravnom korišćenju Public role


Aktivni način autentifikacije, kao i opcije praćenja
logovanja se postavljaju preko Server properties dijaloga:  Izmeniti default TCP/IP port (1433)
 Uključiti praćenje logovanja/neuspešnog logovanja na
Slika 2: Server properties dialog – Security sekcija server
 Voditi računa o potencijalno opasnim naredbama i
mogućnostima: xp_cmdshell, CLR integracija,…
 Ukloniti zaostale logine iz razvojne faze…
 Onemogućiti SQL Server sa administratorski login;

ALTER LOGIN [sa] DISABLE

ili mu promeniti ime:

ALTER LOGIN sa WITH NAME = NovoIme

 Redovno primenjivati ažuriranja i servisne pakete –


manualno, nikako automatski.
 Sarađivati sa razvojnim timom i administratorima
mreže i domena

Kod obe vrste autentifikacije korisnici se upisuju u


sistemsku tabelu čiji sadržaj možemo videti (ne i menjati),
preko view-a sys.syslogins koji enkapsulira podatke:

SELECT * FROM sys.syslogins


3. KRIPTOGRAFIJA

Sql Server poseduje sve potrebne opcije vezane za Slika 3: Rezultat poslednjeg HashByte primera gde se
kriptografiju koje su jednostavne za korišćenje. Takođe je prikazuje digest šifre korisnika u drugoj koloni
moguće proširiti postojeće mogućnosti korišćenjem
extended stored procedura pisanih u C++ programskom
jeziku, ali ova opcija će biti uklonjena u sledećim
verzijama Sql Servera. Najbolje je ovo uraditi pomoću
CLR (Common Language Runtime) integracije, odnosno
integracije sa .NET platformom i .NET programskim
jezicima.

Više o CLR integraciji [link]

HASH funkcija

HASH je inreverzibilna funkcija koja za isti ulaz različite


veličine vraća isti izlaz fiksne dužine. Na primer, ako se
uradi HASH email poruke, nezavisno od njene dužine
dobiće se rezultat fiksne dužine – hash (zove se i digest).
Ako primaocu pošaljemo poruku i njen kriptovan hash, on
može da ponovo uradi hash poruke i uporedi ga sa
poslatim. Ako su isti, poruka nije modifikovana. Takođe se Transparent Data Encryption (TDE)
koristi za čuvanje šifara, pa se prilikom logovanja unesena
šifra hash-uje i onda poredi sa sačuvanim hash-om. Taj TDE je mehanizam gde Sql Server automatski vrši
sistem koristi SQL Server, Windows security sistem, a enkripciju svih fajlova date baze podataka (data i log).
takođe je široko korišćen kod developera prilikom Služi kao zaštita od fizičke krađe fajlova koji predstavljaju
implementacije aplikativne bezbednosti. bazu podataka. Zaštićeni su sertifikatom koji se nalazi u
Postoji više HASH funkcija [link], a Sql Server podržava certificate skladištu domena ili Sql Servera.
sve koji se standardno koriste. Enkripcija se jednom podesi i posle toga je transparentna
TSQL programski jezik poseduje funkciju HashBytes za korisnika. Enkripcija se vrši u realnom vremenu i na
[link] koja implementira sve podržane HASH funkcije. raspolaganju su AES_128, AES_192, AES_256 i 3DES
Ulazni parametri su tip hash funkcije i string koji treba simetrični kripto algoritmi - koriste se simetrični algoritmi
„heshovati“. Izlaz je tipa varbinary i predstavlja digest zbog veće brzine u odnosu na asimetrične.
zadatog stringa. Podržani HASH algoritmi su: Ne povećava se značajno veličina fajlova koji se kriptuju,
MD2, MD4, MD5, SHA, SHA1, SHA2_256 i SHA2_512 ali se povećava opterećenje procesora zbog potrebe stalne
enkripcije i dekripcije blokova podataka prilikom čitanja,
Sledi par primera upotrebe: izmene, dodavanja i brisanja podataka.

SELECT HashBytes ('MD5', 'SQL server 2012') Backup ovakve “TDE enabled” baze je takođe kriptovan i
GO ako želimo da uradimo njen Restore na drugom serveru
SELECT HashBytes ('SHA2_512', 'SQL server 2012') moramo preneti i sertifikat sa originalnog servera. Ako se
GO kreira Mirror TDE baze, on je takođe kriptovan. Isto važi
ukoliko se uspostavi Log Shipping TDE baze ka jednom ili
više target servera.
USE AdventureWorks2012
GO Na sledećem primeru je prikazan postupak postavljanja
SELECT Transparent Data Encryption mehanizma baze podataka
LoginID, AdventureWorks2012:
HashBytes ('SHA2_512', password) AS PwdHash
FROM
HumanResources.Employee
USE master USE AdventureWorks2012
GO GO
-- kreiranje master ključa za enkripciju -- ako ne postoji master ključ, kreirati ga
CREATE MASTER KEY ENCRYPTION BY IF NOT EXISTS
PASSWORD = '<Ovde koristiti jaku šifru>' (SELECT * FROM sys.symmetric_keys WHERE
GO symmetric_key_id = 101)
-- kreiranje sertifikata koga štiti master ključ CREATE MASTER KEY ENCRYPTION BY
CREATE CERTIFICATE MyServerCert WITH PASSWORD =
SUBJECT = 'My DEK Certificate' '23987hxJKL95QYV4369#ghf0%lekjg5k3fd117r$$#194
GO 6kcj$n44ncjhdlj'
GO
USE AdventureWorks2012 -- kreiranje sertifikata za ovu namenu
GO CREATE CERTIFICATE Sales09
-- kreira se database ključ za enkripciju WITH SUBJECT = 'Customer Credit Card Numbers';
-- koga štiti sertifikat GO
CREATE DATABASE ENCRYPTION KEY WITH -- kreiramo simetrični ključ koji se štiti prethodno
ALGORITHM = AES_128 ENCRYPTION BY SERVER -- kreiranim sertifikatom
CERTIFICATE MyServerCert CREATE SYMMETRIC KEY CreditCards_Key11
GO WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Sales09;
-- postavlja se baza da koristi TDE GO
ALTER DATABASE AdventureWorks2012 SET -- kreiramo varbinary kolonu za čuvanje kriptovanog
ENCRYPTION ON -- podatka u postojećoj tabeli Sales.CreditCard
GO ALTER TABLE Sales.CreditCard
ADD CardNumber_Encrypted varbinary(128);
GO
-- otvaramo simetrični ključ za kriptovanje podataka
Kriptovanje pojedinačnih kolona (podataka) u tabeli OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTION BY CERTIFICATE Sales09;
Ovaj mehanizam omogućava kriptovanje podataka na -- enkriptujemo podatke u koloni CardNumber
nivou kolone u tabeli Sql Server baze podataka. -- korišćenjem ključa CreditCards_Key11
Fizički, podaci se skladište u kriptovanom obliku u data -- čuvamo rezultat u koloni CardNumber_Encrypted.
fajlu baze podataka. UPDATE Sales.CreditCard
Mehanizam je procesno manje zahtevan od predhodnog SET CardNumber_Encrypted =
TDE jer se ne kriptuje cela baza (odnosno data i log fajlovi) EncryptByKey(Key_GUID('CreditCards_Key11')
već tipično samo njen mali deo. , CardNumber, 1, HashBytes ('SHA1',
Izuzetno je korisno ako treba zaštiti samo određene CONVERT( varbinary, CreditCardID)));
informacije – lične podatke, brojeve platnih kartica i tome GO
slično.
Postupak je malo složeniji u odnosu na TDE jer se podaci -- čitanje kriptovanih podataka
moraju eksplicitno dekriptovati i enkriptovati – -- otvaramo simetrični ključ za dekriptovanje
respektivno funkcije ENCRYPTBYKEY [link] i OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTBYKEY [link]. DECRYPTION BY CERTIFICATE Sales09;
Obe funkcije zbog potrebe za brzinom koriste simetrične GO
ključeve, odnosno algoritme: RC2, RC4, DES, 3DES, -- prikazujemo podatke
DESX, AES_128, AES_192, AES_256 SELECT CardNumber, CardNumber_Encrypted
AS 'Encrypted card number', CONVERT(nvarchar,
Kriptovani podatak se u tabeli čuva u varbinary formatu. DecryptByKey(CardNumber_Encrypted, 1 ,
Sledi pseudo primer postavljanja i korišćenja ovog HashBytes('SHA1', CONVERT(varbinary,
mehanizma: CreditCardID)))) AS 'Decrypted card number'
FROM Sales.CreditCard;
GO
4. SQL SERVER AUDIT

Sql Server poseduje više metoda za nadgledanje (audit) -- Kreiranje audit-a


aktivnosti i događaja koje se odvijaju na serveru. -- Folder D:\TestAudit mora da postoji
Mogu se pratiti aktivnosti na nivou kompletnog servera ili USE master
na nivou pojedinačnih baza podataka. Preporuka je da se GO
optimalno postave filteri koji sužavaju tipove aktivnosti i CREATE SERVER AUDIT TestAudit
objekata nad kojima se te aktivnosti prate. TO FILE
U suprotnom će biti generisana velika količina audit ( FILEPATH = 'D:\TestAudit'
informacija koja može biti praktično nemoguća za analizu. ,MAXSIZE = 0 MB
Upis audit aktivnosti se može vršiti u sistemski event log, ,MAX_ROLLOVER_FILES = 2147483647
u datoteku fajl sistema ili Sql Server tabelu. Preporuka je ,RESERVE_DISK_SPACE = OFF
ovo drugo ili treće, opet zbog mogućeg velikog obima )
generisanih podataka. WITH
Ako sigurnosne polise u kompaniji mandatorno zahtevaju ( QUEUE_DELAY = 1000
vođenje audit informacija, moguće je postaviti opciju da se ,ON_FAILURE = SHUTDOWN
u slučaju nedostatka audita SqlServer automatski ugasi: )
GO
ON_FAILURE=SHUTDOWN

Slika 4: Šema audit mehanizma -- Kreiranje server audit specifikacije za BACKUP &
-- RESTORE operacije na serveru
USE master
GO
CREATE SERVER AUDIT SPECIFICATION
ServerAuditSpecifikacija
FOR SERVER AUDIT TestAudit
ADD (BACKUP_RESTORE_GROUP)
GO

-- Kreiranje database audit specifikacije za Delete


-- naredbu nad tabelom Customers
USE Northwind
GO
CREATE DATABASE AUDIT SPECIFICATION
DatabaseAuditSpecifikacija
Sledi primer postavljanja dva audit mehanizma: FOR SERVER AUDIT TestAudit
ADD
1. Praćenje BACKUP i RESTORE operacija na nivou (DELETE ON OBJECT::[dbo].[Customers] BY [public])
Sql Server instance – odnosi se na sve baze podataka, GO
uključujući i sistemske.

2. Kreiranje audit mehanizma na nivou baze Northwind,


tabela Customers, prati se DELETE operacija za sve
korisnike (public rola Northwind baze).

Za oba audita se automatski kreiraju fajlovi u folderu


D:\TestAudit.
U slučaju da audit prestane da funkcioniše, izvršiće se
automatski SHUTDOWN Sql Server instance.
Ako dođe do takve situacije, neophodno je postaviti
parametar –m u komandnoj liniji koja pokreće Sql Server.
5. PRAĆENJE AKTIVNOSTI KORISNIKA 6. AUTOMATSKE NOTIFIKACIJE

Za praćenje aktivnosti korisnika se na osnovnom nivou Automatskim notifikacijama upravlja servis Sql Server
koriste events i extended events mehanizmi. Oni se Agent. Zadužen je za automatizaciju poslova, praćenje
postavljaju preko TSQL naredbi i slično audit sistemu događaja i notifikacije administratorima. Omogućava
mogu događaje upisivati u datoteku, Sql tabelu ili sistemski proaktivnu administraciju, odnosno uočavanje
log. potencijalnih problema i pokušaja upada u sistem pre nego
Zarad lakše administracije i korišćenja postoji aplikacija što se zaista dogode.
SQL Server Profiler koja nudi GUI jednostavan za Koristi Database mail sistem kako bi preko SMTP email
upotrebu, a oslanja se na pomenute mehanizme. servera slao notifikacije. Notifikacije mogu biti rezultat
Profiler se postavlja između Sql Servera i klijenata koji mu definisanih događaja na Sql Serveru ili rezultat izvršavanja
pristupaju. Kreira se trace u kome se definiše koji događaji automatizovanih job-ova kao što su Backup, ETL i slični.
se prate i filteri. Na primer, želimo pratiti sve pozive stored Konfiguracija i metapodaci ovog servisa se čuvaju u
procedura nad određenom bazom pod uslovom da njihovo sistemskoj bazi podataka MSDB.
izvršavanje traje više od 10 sekundi.
Zahvaljujući velikom broju ponuđenih događaja i filtera Konfiguracija ovog servisa se može postaviti preko SQL
moguće je precizno podesiti trace i dobiti potrebne Server Management studija.
informacije vezane za performanse, bezbednost ili bilo šta
drugo što treba ispratiti na Sql Serveru. Slika 7: Konfiguracija Sql Server Agent servisa
Treba računati na dodatno opterećenje servera koga
pratimo, te je preporuka da informacije o praćenju ne
snimamo na njega već na neki drugi server u mreži, kao što
je prikazano na sledećoj slici:

Slika 5: Preporučena Sql Server Profiler šema

Slika 8: Šema funkcionisanja Sql Server Agent servisa


Slika 6: Pregled RPC (Remote Procedure Call) događaja u
Sql Server Profiler-u
7. ZAKLJUČAK - Osnovne akcije za obezbeđenje i REFERENCE
nadgledanje SQL Servera
[1] MSDN: Sql Server accounts and permissions:
http://msdn.microsoft.com/en-
 Koristiti posvećeni server (ili Virtualni Server) us/library/ms143504(v=sql.110).aspx
za SQL instalaciju
 Prvo obezbediti operativni sistem, pa potom i [2] SQL Server CLR Integration:
Sql Server http://msdn.microsoft.com/en-
 Kontrolisati admin pristup serveru i bazama us/library/ms254498(v=vs.110).aspx
podataka
[3] Hash funkcije:
 Kriptovati podatke između klijenta i SQL
http://en.wikipedia.org/wiki/List_of_hash_functions
servera ako to zahteva polisa firme
 Uvek kriptovati poverljive podatke u bazi [4] HASHBYTES (Transact-SQL)
 Smanjiti potencijalnu površinu napada http://msdn.microsoft.com/en-
isključivanjem servisa i opcija koje nisu us/library/ms174415(v=sql.110).aspx
potrebne
 Koristititi Windows režim autentifikacije gde [5] ENCRYPTBYKEY (Transact-SQL)
god je moguće http://msdn.microsoft.com/en-
us/library/ms174361(v=sql.110).aspx
 Raditi redovni audit servera i akcija koje se
sprovode nad podacima i objektima [6] DECRYPTBYKEY (Transact-SQL)
 Postaviti automatske notifikacije za kritične http://msdn.microsoft.com/en-
operacije us/library/ms181860(v=sql.110).aspx
 Regularno primenjivati unapređenja i servisne
pakete
 Proveravati da li su desk top aplikacije, web i
mobilne aplikacije i ostale, koje koriste Sql
Server u skladu sa bezbednosnim polisama

You might also like