Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
SEMINAR
FORENZIKA MICROSOFT SQL SERVER
BAZE PODATAKA
Roko Zubčić
Zagreb, siječanj 2018.
1
Sadržaj
Uvod ...................................................................................................................................... 2
1. Organizacija baze podataka ........................................................................................... 3
2. SQL Server Audit .......................................................................................................... 4
2.1. SQL Server Audit .................................................................................................. 4
2.2. Server Audit Specification..................................................................................... 5
2.3. Database Audit Specification ................................................................................ 6
2.4. Pristup Audit zapisima .......................................................................................... 7
3. Temporalne tablice ........................................................................................................ 9
4. SQL Server Profiler ..................................................................................................... 10
5. ApexSQL Log ............................................................................................................. 11
Zaključak ............................................................................................................................. 14
Literatura ............................................................................................................................. 15
2
Uvod
Baze podataka su gotovo neizostavan element svakog složenijeg programskog rješenja.
Microsoft SQL Server je sustav za upravljanje relacijskim bazama podataka koji pruža
trajnu pohranu podataka te efikasan pristup istim. Također, omogućava i konkurentan
višekorisnički pristup uporabom vlastitog mehanizma zaključavanja kako bi sačuvao
integritet baze podataka. Zbog osjetljivosti podataka koje sadrži, baza podataka je često
meta zlonamjernih napada. Administratori baza podataka bi trebali provoditi sigurnosnu
politiku, te ovisno o potrebama, različitim korisnicima dodjeljivati minimalne potrebne
razine prava za njihovo uspješno obavljanje predviđenih poslovnih aktivnosti. Ako se u
nekom trenutku u sustavu evidentiraju nepravilnosti koje su bazu podataka dovele u
nekonzistentno stanje potrebno je detektirati kako je do tih nepravilnosti došlo te pokrenuti
postupak obnove kako bi sustav nesmetano mogao nastaviti s radom. U ovom radu će biti
prikazani osnovni mehanizmi bilježenja događaja unutar sustava kako bi se isti mogli
iskoristiti u eventualnoj forenzičkoj analizi.
3
1. Organizacija baze podataka
Svaka SQL Server baza podataka je pohranjena unutar minimalno dvije datoteke
operacijskog sustava. Prva je primarna podatkovna datoteka koja sadrži podatke o
objektima unutar baze podataka poput tablica, indeksa ili procedura. Druga datoteka je
dnevnik transakcija koji sadrži podatke potrebne za obnovu transakcija i dovođenje baze u
konzistentno stanje. Primarna podatkovna datoteka se može organizirati pomoću dodatnih,
korisnički definiranih sekundarnih datoteka. Na taj način se može izbjeći problem
povećanja baze podataka gdje bi primarna datoteka prelazila najveću moguću dopuštenu
veličinu definiranu datotečnim sustavom.
Microsoft SQL ServerDatabase Engine
.mdf .ldf
Database3
.mdf .ldf
Database2
.mdf .ldf
Database1
Slika 1 Arhitektura SQL Server baze podataka
Osim transakcijskog dnevnika, instanca SQL Server baze podataka vodi i dnevnik
pogrešaka (SQL Server Error Log) u kojem se pohranjuju sistemski i korisnički definirani
događaji. Prilikom svakog pokretanja SQL Servera stvara se nova ERRORLOG datoteka u
koju se pohranjuje dnevnik pogrešaka, a istovremeno se čuva posljednjih šest.
4
2. SQL Server Audit
Zakonska regulativa nalaže da se u nekim slučajevima provodi nadzor nad aktivnostima
djelatnika u sustavu. Takav nadzor može pomoći da se ustanovi je li došlo do neželjenih
aktivnosti te kako da se njihov učinak neutralizira.
SQL Server Audit je funkcionalnost koja omogućava praćenje i bilježenje svih događaja na
serveru, bilo promjena postavki servera, prijavljivanja korisnika na sustav ili rada s bazom
podataka na način da se mijenjaju strukture podataka (tablice, indeksi) odnosno vrši
manipulacija podataka (unos, izmjena ili brisanje zapisa).
Za korištenje funkcionalnosti potrebno je definirati sljedeće komponente:
SQL Server Audit
Server Audit Specification
Database Audit Specification
2.1. SQL Server Audit
SQL Server Audit objekt se stvara na razini instance SQL Servera i može ih biti više. Za
svaki audit objekt potrebno je definirati ime, lokaciju za pohranu informacija o događajima
te kako da server reagira u slučaju nemogućnosti bilježenja događaja. Ako se kao lokacija
odabere proizvoljan direktorij na disku, onda je potrebno odrediti veličinu i broj datoteka
koje se mogu koristiti. Nakon što se iskoristi maksimalna dodijeljena veličina diska, zapisi
o novim događajima prepisuju najstarije (rollover tehnika). Za lokaciju pohrane zapisa
može se odabrati i Security Log ili Application Log. U slučaju pogreške, odnosno
nemogućnosti bilježenja informacije o događaju, može se odrediti da server nastavi s
radom uz mogućnost prihvaćanja ili odbijanja izvršavanja operacije koja je pogrešku i
uzrokovala, a moguće je i podesiti da server u potpunosti prestane s radom. Može se
definirati i period od vremena događaja do vremena njegovog evidentiranja gdje vrijednost
0 predstavlja sinkrono vođenje evidencije. Prije pohrane zapisa moguće je izvršiti
proizvoljno filtriranje te tako još više suziti izbor događaja koji se bilježe.
5
Slika 2 Stvaranje Audit objekta
2.2. Server Audit Specification
Za svaki audit objekt dozvoljeno je definirati jednu specifikaciju na razini servera (Server
Audit Specification). Tom specifikacijom se definira koje događaje na razini instance
servera je potrebno bilježiti. Prilikom stvaranja nove serverske specifikacije potrebno je
definirati ime specifikacije, naziv audit objekta kojem pripada i kojim je zapravo određena
lokacija spremanja informacija o događajima te grupu događaja koji se bilježe. Naime,
događaji na razini servera su grupirani u tzv. Audit Action Groups pa specifikacija definira
koje grupe događaja je potrebno pratiti, a ne događaje pojedinačna.
6
Slika 3 Definiranje specifikacije na razini servera
2.3. Database Audit Specification
Za svaki audit objekt je dozvoljeno definirati po jednu specifikaciju na razini svake baze
podataka (Database Audit Specification). Uz odabir naziva specifikacije i naziva audit
objekta potrebno je definirati i događaje koji se prate. Moguće je odabrati grupu događaja
kao što je to bio slučaj u serverskoj specifikaciji, međutim specifikacija na razini baze
podataka omogućava i odabir događaja na razini objekta ili korisnika, odnosno korisničke
grupe. Za svaki objekt se evidentira shema i ime objekta. Korisnike je moguće adresirati
individualno ili preko grupa kojima pripadaju, tako se na primjer public grupa odnositi na
sve korisnike sustava.
7
Slika 4 Definiranje specifikacije na razini baze podataka
2.4. Pristup Audit zapisima
Alat SQL Server Management Studio omogućava pregled audit zapisa. Ako je kao način
pohrane audit objekta odabrana datoteka, njenom sadržaju je moguće pristupiti i pomoću
sljedeće SQL naredbe:
SELECT * FROM fn_get_audit_file('C:\RacFor\AuditRacFor*',default,default);
Slika 5 Pristup audit zapisima pomoću SQL naredbe
8
Slika 6 Pregled audit zapisa pomoću SQL Server Management Studio alata
Ako je kao lokacija pohrane audit zapisa odabrana opcija Windows Security Log ili
Windows Application Log onda se zapisi mogu pregledati pomoću Event Viewer alata.
Slika 7 Pregled audit zapisa pomoću Event Viewer alata
9
3. Temporalne tablice
Tablice u produkcijskoj bazi podataka najčešće odražavaju trenutno stanje. SQL Server
uvodi novitet po pitanju pohrane povijesnih vrijednosti u vidu temporalnih tablica (system-
versioned temporal table). Pomoću temporalnih tablica vrijeme valjanosti određenih zapisa
nije pod nadležnosti korisnika već isključivo sustava za upravljanje bazom podataka. Ovaj
mehanizam omogućava da se odredi kakvo je bilo stanje u bilo kojem trenutku prošlosti.
Temporalne tablice sadrže dva dodatna atributa tipa datetime2 kojima se bilježi vrijeme
valjanosti svakog zapisa i čijim vrijednostima upravlja sam sustav. Za svaku temporalnu
tablicu kreira se dodatna povijesna tablica u koju se spremaju nevažeći zapisi. Ona se
popunjava svaki put kada korisnik izmijeni ili izbriše neki aktivni zapis u glavnoj tablici
koja sadrži trenutno važeće zapise. U nastavku je dan prikaz kreiranja temporalne tablice
Ispit zajedno s pripadnom povijesnom tablicom IspitHistory:
CREATE TABLE dbo.Ispit ( [idPredmet] int NOT NULL , [idStudent] int NOT NULL , [Bodovi] float NOT NULL , [BodoviMax] float NOT NULL , [Ocjena] int NOT NULL , [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START , [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo) , CONSTRAINT PK_Ispit PRIMARY KEY NONCLUSTERED ([idPredmet], [idStudent]) , CONSTRAINT FK_Ispit_Predmet FOREIGN KEY ([idPredmet]) REFERENCES dbo.Predmet(idPredmet) , CONSTRAINT FK_Ispit_Student FOREIGN KEY ([idStudent]) REFERENCES dbo.Student(idStudent) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.IspitHistory));
Ako je potrebno dohvatiti zapise iz tablice ispit koji su bili važeći u nekom određenom
trenutku može se iskoristiti za to predviđena fraza FOR SYSTEM_TIME u FOR dijelu upita
kako je to prikazano u nastavku:
SELECT * FROM Ispit FOR SYSTEM_TIME
BETWEEN '2018-01-20 19:12:50.0000000' AND '2018-01-20 19:12:50.0000000'
10
4. SQL Server Profiler
SQL Server Profiler je alat koji omogućava snimanje događaja koji se odvijaju na bazi
podataka. Prilikom pokretanja stvara se nova trace datoteka u kojoj se bilježe događaji.
Snimanje događaja je moguće po potrebi zaustavljati i nastavljati, a trace datoteku trajno
pohraniti na disk i naknadno analizirati. Za svaki događaj se bilježi vrijeme, tekst naredbe,
korisnik i aplikacija iz koje je naredba pokrenuta.
Slika 8 Prikaz SQL Server Profiler alata
11
5. ApexSQL Log
ApexSQL Log je komercijalni alat koji krajnjem korisniku na razumljiv i vizualan način
prikazuje podatke te omogućava naprednu analizu dnevnika transakcija. Kod učitavanja
datoteke dnevnika moguće je postaviti brojne parametre kako bi se pobliže odredio opseg
pretrage. Tako je moguće odrediti vremenski period koji je zanimljiv za analizu, vrstu
operacija te odabrati skup objekata nad kojima su one izvršene.
Slika 9 ApexSQL Log - odabir operacija
Napredne postavke omogućavaju pretraživanje operacija čak i za otkazane (aborted) i
trenutne (running) transakcije te njihovo filtriranje ovisno o korisniku koji ih je inicirao i
minimalnom vremenu trajanju. Rezultate pretrage je moguće prikazati u interaktivnom
sučelju ili ih pohraniti u nekom od ponuđenih formata.
12
Interaktivni prikaz nudi opciju dodatnog filtriranja inicijalno određenog seta operacija. Za
svaku se operaciju bilježi koji je njen tip (Insert, Rename Object, Create Table,…), nad
kojim je objekt pokrenuta, korisnik koji ju je inicirao, vrijeme početka i završetka
obavljanja te id transakcije kojoj pripada.
Za svaki tip operacije se može odabrati prikaz detalja gdje će u slučaju Insert naredbe biti
prikazani podaci novog zapisa koji je unesen, dok će u slučaju Update naredbe biti moguće
vidjeti vrijednosti svakog atributa prije i poslije same izmjene.
Slika 10 ApexSQL Log - prikaz detalja operacije
Alat omogućava kreiranje skripti za ponovno izvršavanje operacija odnosno poništavanje
njihovih efekata. Zanimljiva funkcionalnost je i generiranje takvih skripti za skup
odabranih operacija ili čak na razini transakcija čime se može u potpunosti poništiti njihov
efekt. Generirani kod je moguće pohraniti u nekom od prikladnih formata ili ga uz pomoć
interaktivnog sučelja izvršiti na samoj bazi podataka.
13
Slika 11 ApexSQL Log - generiranje skripte za poništavanje skupa operacija
14
Zaključak
Za uspješnu forenzičku analizu baze podataka potrebno je voditi evidenciju o aktivnostima
korisnika koje su kritične za poslovanje. Uz pohranu backup datoteka te vođenje dnevnika
transakcija SQL Server nudi i dodatne funkcionalnosti kojima se informacije o događajima
od interesa redundantno pohranjuju. SQL Server Audit funkcionalnost omogućava detaljno
specificiranje što i kako pratiti unutar sustava dok temporalne tablice omogućavaju
pohranu povijesnih zapisa. SQL Server Profiler je alat kojim se mogu u stvarnom vremenu
pratiti događaji na instanci servera. Za svaki događaj se bilježi korisnik koji ga je inicirao,
klijentsko računalo, aplikacija kao i tekst naredbe. ApexSQL Log omogućava interaktivan i
razumljiv pristup podacima iz dnevnika transakcija te generiranje potrebnih skripti za
poništavanje neželjenih efekata pojedinih operacija.
15
Literatura
[1] STEYNBERG, M. Understanding the SQL Server Audit
https://www.sqlshack.com/understanding-sql-server-audit/ (Pristup 21.01.2018.)
[2] RUBOCKI, B. Auditing and Forensics with Temporal Tables in SQL Server 2016
https://bobrubocki.wordpress.com/2017/01/11/auditing-and-forensics-with-temporal-
tables-in-sql-server-2016/ (Pristup 21.01.2018.)
[3] APEXSQL SOLUTION CENTER. Tracking DDL changes in SQL Server – the ‘Trouble
with Triggers’
https://solutioncenter.apexsql.com/tracking-ddl-changes-in-sql-server-the-trouble-
with-triggers/ (Pristup 21.01.2018.)
[4] MICROSOFT DOCS. SQL Server Audit (Database Engine)
https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-
server-audit-database-engine (Pristup 21.01.2018.)
[5] MICROSOFT DOCS. Temporal Tables
https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables
(Pristup 21.01.2018.)
[6] MICROSOFT DOCS. SQL Server Profiler
https://docs.microsoft.com/en-us/sql/tools/sql-server-profiler/sql-server-profiler
(Pristup 21.01.2018.)