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