You are on page 1of 7

Microsoft SQL Server 2012 bezbednost i praktini primeri

Microsoft SQL Server 2012 security and practical examples




Mr. Milo Milosavljevi, Privredna komora Srbije Udruenje Informatike delatnosti, milos.milosavljevic@pks.rs


Apstrakt: U radu su prikazane mogunosti Microsoft SQL
Server platforme u oblastima bezbednosti, kriptografije
podataka, praenja aktivnosti i automatizacije
administrativnih zadataka. Sve mogunosti su
demonstrirane kroz primere TSQL koda.

Kljune rei: Microsoft SQL Server, bezbednost,
kriptografija, administracija

Abstract: This paper presents the capabilities of Microsoft
SQL Server platform in the areas of security,
cryptography, monitoring activities and administrative
tasks automating. All features are demonstrated through
TSQL code examples.

Keywords: Microsoft SQL Server, security, cryptography,
administration

1. UVOD

Rad je nastao kao rezultat vie projekata instalacije,
administracije i odravanja Microsft SQL Servera, sa
posebnim naglaskom na verziju 2012. Namena rada je da
administratorima i programerima prui uvid u mogunosti
platforme i dobru praksu u oblastima bezbednosti servisa,
podataka i automatskih notifikacija.
Pre svega treba se upoznati sa kljunim MS SQL Server
platformom i servisima koji je ine:

1. Database engine osnovni servis koji predstavlja
relacionu bazu podataka
2. Analysis servis servis koji slui za analitiko
procesiranje podataka, multidimensional upite i
analize.
3. Reporting servis kreiranje izvetaja, 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.

Veina servisa zahteva nalog pod kojim e se prijaviti na
sistem (lokalni kompjuter ili domen) gde se instalira.
Najee 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.
Ako doe do upada u servis, napada stie prava na sistemu
koja ima servis ime mu olakavamo posao.

Prilikom instalacije SQL Servera automatski se nude novi
razliiti nalozi za svaki od njih, a sama instalaciona
procedura e napraviti naloge i podesiti minimalni set
potrebnih prava kako bi servisi ispravno funkcionisali.
Da bi iskoristili ovu mogunost instalacionog programa,
moramo ga pokrenuti u bezbednosnom kontekstu lokalnog
ili domenskog administratora ako elimo da napravi
domenske naloge.

U sluaju da ima potrebe da se nalozi runo kreiraju i
podese potrebna prava pre instalacije SQL Servera,
informacije o neophodnim pravima svakog naloga se
nalaze na MSDN sajtu Configure Windows Service
Accounts and Permissions [link].

Nalozi koje koriste servisi se mogu naknadno promeniti
preko Sql Server Configuration Manager alata koji
dolazi uz SQL Server ili pomou Services apleta u okviru
Administrative tools grupe na Windows raunaru:


Slika 1: Sql Server Configuration Manager










2. AUTENTIFIKACIJA I AUTORIZACIJA

Autentifikacija je proces predstavljanja/identifikacije
korisnika nekom sistemu na osnovu koga sistem
dozvoljava ili ne dozvoljava pristup svojim resursima.

Autorizacija je proces dodele prava autentifikovanom
korisniku. Odreuje koje resurse moe koristiti i na koji
nain.
SQL Server poznaje dva naina autentifikacije:
1. SQL Server autentifikacija gde SQL Server vri
autentifikaciju korisnika korienjem user
name/password para. Mora se koristiti u mreama bez
domena ili za pristup serveru koji je publikovan na
javnom Webu direktno preko TCP/IP protokola. Moe
se naravno koristiti i u mreama koje imaju domen ali
tada je bolje koristiti drugi nain autentifikacije.
2. Windows autentifikacija (takoe od ranije poznata
po imenima Trusted i Integrated), gde autentifikaciju
vri Windows domain. SQL server administrator
odreuje koje domenske grupe i korisnici mogu da se
autentifikuju na SQL server, pa na taj nain SQL
Server veruje (trust) Windows sistemu
autentifikacije. Ovo je preporuljiv vid autentifikacije
na SQL Server jer se koriste napredni Windows
mehanizmi, smart kartice, domenske polise i slino.

Aktivni nain autentifikacije, kao i opcije praenja
logovanja se postavljaju preko Server properties dijaloga:

Slika 2: Server properties dialog Security sekcija


Kod obe vrste autentifikacije korisnici se upisuju u
sistemsku tabelu iji sadraj moemo videti (ne i menjati),
preko view-a sys.syslogins koji enkapsulira podatke:

SELECT * FROM sys.syslogins
Kolona password sadri HASH passworda u sluaju
SQL Server naloga, odnosno NULL vrednost u sluaju
naloga koji koristi Windows autentifikaciju. U drugom
sluaju password se nalazi u Active Directory bazi, takoe
u HASH obliku.

Autorizacija, odnosno dodela prava autentifikovanim
korisnicima se kasnije odvija nezavisno od naina
autentifikacije i nije predmet ovog rada.


Preporuke:

Instalirati samo potrebne servise i time smanjiti
potencijalnu povrinu za napad
Posle instalacije zaustaviti servise koji se jo uvek ne
koriste u produkciji
Gde god je mogue koristiti Windows autentifikaciju
Ako se mora koristiti SQL Server autentifikacija
postaviti polise za kompleksnost ifre
Izbrisati ili onemoguiti (disable) guest korisnika u
svakoj bazi:

USE ImeBaze
REVOKE CONNECT FROM [guest]

Voditi rauna o ispravnom korienju Public role
Izmeniti default TCP/IP port (1433)
Ukljuiti praenje logovanja/neuspenog logovanja na
server
Voditi rauna o potencijalno opasnim naredbama i
mogunostima: xp_cmdshell, CLR integracija,
Ukloniti zaostale logine iz razvojne faze
Onemoguiti SQL Server sa administratorski login;

ALTER LOGIN [sa] DISABLE

ili mu promeniti ime:

ALTER LOGIN sa WITH NAME = NovoIme

Redovno primenjivati auriranja i servisne pakete
manualno, nikako automatski.
Saraivati sa razvojnim timom i administratorima
mree i domena

3. KRIPTOGRAFIJA

Sql Server poseduje sve potrebne opcije vezane za
kriptografiju koje su jednostavne za korienje. Takoe je
mogue proiriti postojee mogunosti korienjem
extended stored procedura pisanih u C++ programskom
jeziku, ali ova opcija e biti uklonjena u sledeim
verzijama Sql Servera. Najbolje je ovo uraditi pomou
CLR (Common Language Runtime) integracije, odnosno
integracije sa .NET platformom i .NET programskim
jezicima.

Vie o CLR integraciji [link]


HASH funkcija

HASH je inreverzibilna funkcija koja za isti ulaz razliite
veliine vraa isti izlaz fiksne duine. Na primer, ako se
uradi HASH email poruke, nezavisno od njene duine
dobie se rezultat fiksne duine hash (zove se i digest).
Ako primaocu poaljemo poruku i njen kriptovan hash, on
moe da ponovo uradi hash poruke i uporedi ga sa
poslatim. Ako su isti, poruka nije modifikovana. Takoe se
koristi za uvanje ifara, pa se prilikom logovanja unesena
ifra hash-uje i onda poredi sa sauvanim hash-om. Taj
sistem koristi SQL Server, Windows security sistem, a
takoe je iroko korien kod developera prilikom
implementacije aplikativne bezbednosti.
Postoji vie HASH funkcija [link], a Sql Server podrava
sve koji se standardno koriste.
TSQL programski jezik poseduje funkciju HashBytes
[link] koja implementira sve podrane HASH funkcije.
Ulazni parametri su tip hash funkcije i string koji treba
heshovati. Izlaz je tipa varbinary i predstavlja digest
zadatog stringa. Podrani HASH algoritmi su:
MD2, MD4, MD5, SHA, SHA1, SHA2_256 i SHA2_512

Sledi par primera upotrebe:

SELECT HashBytes ('MD5', 'SQL server 2012')
GO
SELECT HashBytes ('SHA2_512', 'SQL server 2012')
GO


USE AdventureWorks2012
GO
SELECT
LoginID,
HashBytes ('SHA2_512', password) AS PwdHash
FROM
HumanResources.Employee


Slika 3: Rezultat poslednjeg HashByte primera gde se
prikazuje digest ifre korisnika u drugoj koloni



Transparent Data Encryption (TDE)

TDE je mehanizam gde Sql Server automatski vri
enkripciju svih fajlova date baze podataka (data i log).
Slui kao zatita od fizike krae fajlova koji predstavljaju
bazu podataka. Zatieni su sertifikatom koji se nalazi u
certificate skladitu domena ili Sql Servera.
Enkripcija se jednom podesi i posle toga je transparentna
za korisnika. Enkripcija se vri u realnom vremenu i na
raspolaganju su AES_128, AES_192, AES_256 i 3DES
simetrini kripto algoritmi - koriste se simetrini algoritmi
zbog vee brzine u odnosu na asimetrine.
Ne poveava se znaajno veliina fajlova koji se kriptuju,
ali se poveava optereenje procesora zbog potrebe stalne
enkripcije i dekripcije blokova podataka prilikom itanja,
izmene, dodavanja i brisanja podataka.

Backup ovakve TDE enabled baze je takoe kriptovan i
ako elimo da uradimo njen Restore na drugom serveru
moramo preneti i sertifikat sa originalnog servera. Ako se
kreira Mirror TDE baze, on je takoe kriptovan. Isto vai
ukoliko se uspostavi Log Shipping TDE baze ka jednom ili
vie target servera.

Na sledeem primeru je prikazan postupak postavljanja
Transparent Data Encryption mehanizma baze podataka
AdventureWorks2012:

USE master
GO
-- kreiranje master kljua za enkripciju
CREATE MASTER KEY ENCRYPTION BY
PASSWORD = '<Ovde koristiti jaku ifru>'
GO
-- kreiranje sertifikata koga titi master klju
CREATE CERTIFICATE MyServerCert WITH
SUBJECT = 'My DEK Certificate'
GO

USE AdventureWorks2012
GO
-- kreira se database klju za enkripciju
-- koga titi sertifikat
CREATE DATABASE ENCRYPTION KEY WITH
ALGORITHM = AES_128 ENCRYPTION BY SERVER
CERTIFICATE MyServerCert
GO

-- postavlja se baza da koristi TDE
ALTER DATABASE AdventureWorks2012 SET
ENCRYPTION ON
GO



Kriptovanje pojedinanih kolona (podataka) u tabeli

Ovaj mehanizam omoguava kriptovanje podataka na
nivou kolone u tabeli Sql Server baze podataka.
Fiziki, podaci se skladite u kriptovanom obliku u data
fajlu baze podataka.
Mehanizam je procesno manje zahtevan od predhodnog
TDE jer se ne kriptuje cela baza (odnosno data i log fajlovi)
ve tipino samo njen mali deo.
Izuzetno je korisno ako treba zatiti samo odreene
informacije line podatke, brojeve platnih kartica i tome
slino.
Postupak je malo sloeniji u odnosu na TDE jer se podaci
moraju eksplicitno dekriptovati i enkriptovati
respektivno funkcije ENCRYPTBYKEY [link] i
DECRYPTBYKEY [link].
Obe funkcije zbog potrebe za brzinom koriste simetrine
kljueve, odnosno algoritme: RC2, RC4, DES, 3DES,
DESX, AES_128, AES_192, AES_256

Kriptovani podatak se u tabeli uva u varbinary formatu.
Sledi pseudo primer postavljanja i korienja ovog
mehanizma:


USE AdventureWorks2012
GO
-- ako ne postoji master klju, kreirati ga
IF NOT EXISTS
(SELECT * FROM sys.symmetric_keys WHERE
symmetric_key_id = 101)
CREATE MASTER KEY ENCRYPTION BY
PASSWORD =
'23987hxJKL95QYV4369#ghf0%lekjg5k3fd117r$$#194
6kcj$n44ncjhdlj'
GO
-- kreiranje sertifikata za ovu namenu
CREATE CERTIFICATE Sales09
WITH SUBJECT = 'Customer Credit Card Numbers';
GO
-- kreiramo simetrini klju koji se titi prethodno
-- kreiranim sertifikatom
CREATE SYMMETRIC KEY CreditCards_Key11
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Sales09;
GO
-- kreiramo varbinary kolonu za uvanje kriptovanog
-- podatka u postojeoj tabeli Sales.CreditCard
ALTER TABLE Sales.CreditCard
ADD CardNumber_Encrypted varbinary(128);
GO
-- otvaramo simetrini klju za kriptovanje podataka
OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTION BY CERTIFICATE Sales09;
-- enkriptujemo podatke u koloni CardNumber
-- korienjem kljua CreditCards_Key11
-- uvamo rezultat u koloni CardNumber_Encrypted.
UPDATE Sales.CreditCard
SET CardNumber_Encrypted =
EncryptByKey(Key_GUID('CreditCards_Key11')
, CardNumber, 1, HashBytes ('SHA1',
CONVERT( varbinary, CreditCardID)));
GO

-- itanje kriptovanih podataka
-- otvaramo simetrini klju za dekriptovanje
OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTION BY CERTIFICATE Sales09;
GO
-- prikazujemo podatke
SELECT CardNumber, CardNumber_Encrypted
AS 'Encrypted card number', CONVERT(nvarchar,
DecryptByKey(CardNumber_Encrypted, 1 ,
HashBytes('SHA1', CONVERT(varbinary,
CreditCardID)))) AS 'Decrypted card number'
FROM Sales.CreditCard;
GO

4. SQL SERVER AUDIT

Sql Server poseduje vie metoda za nadgledanje (audit)
aktivnosti i dogaaja koje se odvijaju na serveru.
Mogu se pratiti aktivnosti na nivou kompletnog servera ili
na nivou pojedinanih baza podataka. Preporuka je da se
optimalno postave filteri koji suavaju tipove aktivnosti i
objekata nad kojima se te aktivnosti prate.
U suprotnom e biti generisana velika koliina audit
informacija koja moe biti praktino nemogua za analizu.
Upis audit aktivnosti se moe vriti u sistemski event log,
u datoteku fajl sistema ili Sql Server tabelu. Preporuka je
ovo drugo ili tree, opet zbog mogueg velikog obima
generisanih podataka.
Ako sigurnosne polise u kompaniji mandatorno zahtevaju
voenje audit informacija, mogue je postaviti opciju da se
u sluaju nedostatka audita SqlServer automatski ugasi:

ON_FAILURE=SHUTDOWN

Slika 4: ema audit mehanizma


Sledi primer postavljanja dva audit mehanizma:

1. Praenje BACKUP i RESTORE operacija na nivou
Sql Server instance odnosi se na sve baze podataka,
ukljuujui 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 sluaju da audit prestane da funkcionie, izvrie se
automatski SHUTDOWN Sql Server instance.
Ako doe do takve situacije, neophodno je postaviti
parametar m u komandnoj liniji koja pokree Sql Server.


-- Kreiranje audit-a
-- Folder D:\TestAudit mora da postoji
USE master
GO
CREATE SERVER AUDIT TestAudit
TO FILE
( FILEPATH = 'D:\TestAudit'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = SHUTDOWN
)
GO


-- 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
FOR SERVER AUDIT TestAudit
ADD
(DELETE ON OBJECT::[dbo].[Customers] BY [public])
GO



5. PRAENJE AKTIVNOSTI KORISNIKA

Za praenje aktivnosti korisnika se na osnovnom nivou
koriste events i extended events mehanizmi. Oni se
postavljaju preko TSQL naredbi i slino audit sistemu
mogu dogaaje upisivati u datoteku, Sql tabelu ili sistemski
log.
Zarad lake administracije i korienja postoji aplikacija
SQL Server Profiler koja nudi GUI jednostavan za
upotrebu, a oslanja se na pomenute mehanizme.
Profiler se postavlja izmeu Sql Servera i klijenata koji mu
pristupaju. Kreira se trace u kome se definie koji dogaaji
se prate i filteri. Na primer, elimo pratiti sve pozive stored
procedura nad odreenom bazom pod uslovom da njihovo
izvravanje traje vie od 10 sekundi.
Zahvaljujui velikom broju ponuenih dogaaja i filtera
mogue je precizno podesiti trace i dobiti potrebne
informacije vezane za performanse, bezbednost ili bilo ta
drugo to treba ispratiti na Sql Serveru.
Treba raunati na dodatno optereenje servera koga
pratimo, te je preporuka da informacije o praenju ne
snimamo na njega ve na neki drugi server u mrei, kao to
je prikazano na sledeoj slici:

Slika 5: Preporuena Sql Server Profiler ema




Slika 6: Pregled RPC (Remote Procedure Call) dogaaja u
Sql Server Profiler-u


6. AUTOMATSKE NOTIFIKACIJE

Automatskim notifikacijama upravlja servis Sql Server
Agent. Zaduen je za automatizaciju poslova, praenje
dogaaja i notifikacije administratorima. Omoguava
proaktivnu administraciju, odnosno uoavanje
potencijalnih problema i pokuaja upada u sistem pre nego
to se zaista dogode.
Koristi Database mail sistem kako bi preko SMTP email
servera slao notifikacije. Notifikacije mogu biti rezultat
definisanih dogaaja na Sql Serveru ili rezultat izvravanja
automatizovanih job-ova kao to su Backup, ETL i slini.
Konfiguracija i metapodaci ovog servisa se uvaju u
sistemskoj bazi podataka MSDB.

Konfiguracija ovog servisa se moe postaviti preko SQL
Server Management studija.

Slika 7: Konfiguracija Sql Server Agent servisa



Slika 8: ema funkcionisanja Sql Server Agent servisa



7. ZAKLJUAK - Osnovne akcije za obezbeenje i
nadgledanje SQL Servera

Koristiti posveeni server (ili Virtualni Server)
za SQL instalaciju
Prvo obezbediti operativni sistem, pa potom i
Sql Server
Kontrolisati admin pristup serveru i bazama
podataka
Kriptovati podatke izmeu klijenta i SQL
servera ako to zahteva polisa firme
Uvek kriptovati poverljive podatke u bazi
Smanjiti potencijalnu povrinu napada
iskljuivanjem servisa i opcija koje nisu
potrebne
Koristititi Windows reim autentifikacije gde
god je mogue
Raditi redovni audit servera i akcija koje se
sprovode nad podacima i objektima
Postaviti automatske notifikacije za kritine
operacije
Regularno primenjivati unapreenja 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























REFERENCE

[1] MSDN: Sql Server accounts and permissions:
http://msdn.microsoft.com/en-
us/library/ms143504(v=sql.110).aspx

[2] SQL Server CLR Integration:
http://msdn.microsoft.com/en-
us/library/ms254498(v=vs.110).aspx

[3] Hash funkcije:
http://en.wikipedia.org/wiki/List_of_hash_functions

[4] HASHBYTES (Transact-SQL)
http://msdn.microsoft.com/en-
us/library/ms174415(v=sql.110).aspx

[5] ENCRYPTBYKEY (Transact-SQL)
http://msdn.microsoft.com/en-
us/library/ms174361(v=sql.110).aspx

[6] DECRYPTBYKEY (Transact-SQL)
http://msdn.microsoft.com/en-
us/library/ms181860(v=sql.110).aspx

You might also like