Πριν από μερικές μέρες μου ήρθε ένα ερώτημα από ένα φίλο για το τι είναι το C2 Level Auditing στον SQL Server. Δράττω την ευκαιρία αυτή για να το εξηγήσω σε όλους όσους ενδιαφέρονται να παρακολουθήσουν στενότερα το περιβάλλον τους στον SQL Server.
Εδώ και πολλά χρόνια όπως ξέρουμε τεράστια ποσά έχουν δαπανηθεί στο να έχουμε ασφαλή συστήματα. Αυτό γίνεται με το να οροθετούνται συνεχώς νέα πρότυπα και standards. Οι λόγοι για κάτι τέτοιο είναι βέβαια προφανείς αλλά ποτέ κανείς δεν έπαθε τίποτα από την επανάληψη τους διότι όπως έλεγαν οι αρχαίοι (δυστυχώς μόνο αυτοί) πρόγονοι μας "Η επανάληψη είναι η μητέρα της μάθησης", έτσι θα τους επαναλάβω εν τάχει.
· Να εντοπισθεί η κακομεταχείριση του συστήματος και να αποτραπεί η συνέχεια αυτής.
· Να αποδοθούν οι συνέπειες σε αυτούς που είναι υπεύθυνοι για την κακομεταχείριση του συστήματος.
· Να γίνουν οι ενέργειες που θα φέρουν το σύστημα στην προγενέστερη κατάσταση του, πριν δηλαδή από την υφιστάμενη κακομεταχείριση του.
Τι είναι όμως το C2;
Το Υπουργείο Άμυνας των ΗΠΑ έχει ορίσει μια σειρά από επίπεδα για το security level των υπολογιστικών συστημάτων τα οποία βασίζονται στις δυνατότητες τους αλλά και στο πως αυτά προσπελάζονται.
Με βάση όλα αυτά από την έκδοση του SQL Server 2000 η Microsoft παρέχει την δυνατότητα να έχω C2 Level για το περιβάλλον του SQL Server. Εδώ θα πρέπει να πως ότι ο SQL Server είναι ήδη από τότε C2 Level certified (και μην με ρωτήσετε από πού, αυτό νομίζω ότι είναι προφανές). Για παράδειγμα θα πω ότι ο SQL Server ότι όλα τα δεδομένα τα οποία βγαίνουν από το C2 (files) βγαίνουν μόνο σε NTFS partitions.
To C2 δημιουργεί auditing records για όλα τα server level events του SQL Server όπως shutdown. restart, successful & failed login attempts. Επίσης παρέχει την δυνατότητα να παρακολουθεί τα permissions σε database objects σε DDL, DCL, DML statements.
Η πληροφορία που καταγράφεται περιέχει
- timestamp
- identifier για τον account το οποίο έκανε trigger το event
- target server name
- event type
- success or failure outcome
- application name
- server process ID
- database name
Πώς ενεργοποιώ το C2 Auditing Level;
Αυτό μπορώ να το κάνω με δύο τρόπους, ο πρώτος τρόπος είναι από το Server Properties windows (δεξί κλικ στο όνομα του server μέσα στο SSMS) όπως παρακάτω
Ο δεύτερος τρόπος είναι με T-SQL commands όπως παρακάτω
Code Snippet
- USE master
- GO
-
sp_configure 'show advanced option', 1 - GO
-
- RECONFIGURE
- GO
-
sp_configure 'c2 audit mode',1 - GO
-
- RECONFIGURE
- GO
Σε κάθε περίπτωση απαιτείται restart του SQL Server για την ενεργοποίηση του!
Από το σημείο αυτό και μετά στο data directory που έχουμε ορίσει για τον SQL Server Instance μας π.χ. C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA παράγονται αρχεία της μορφής audittraceΥΥΥΥΜΜDDHHMMSS.trc. Κάθε τέτοιο αρχείο μπορεί να φτάσει τα 200MB. Σε αυτή την περίπτωση δημιουργείται νέο αρχείο το οποίο περιέχει την συνέχεια. Επίσης θα πρέπει να τονίσω ότι στην περίπτωση που γεμίσει ο δίσκος που είναι τα C2 files τότε ο SQL Server σταματάει αυτόματα. Σε αυτή την περίπτωση θα πρέπει να ξεκινήσουμε το SQL Server service με το διακόπτη -f και μετά να ελευθερώσουμε χώρο στο δίσκο.
Τα αρχεία αυτά μπορούμε να τα διαβάσουμε με δύο τρόπους. Ο ένας τρόπος είναι χρησιμοποιώντας τον SQL Server Profiler. Ο άλλος τρόπος είναι να τα δούμε σε μορφή πίνακα ώστε να τα κάνουμε manipulate με queries όπως παρακάτω
Code Snippet
- SELECT * FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\audittrace20100530214218.trc', default)
Βέβαια έχω την δυνατότητα να δω μόνο αυτά που θέλω πχ θέλω μόνο τα failed logins π.χ
Code Snippet
- SELECT * FROM fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\audittrace20100530214218.trc', default) WHERE TextData like '%Login failed%'
Μερικές χρήσιμες πληροφορίες
- Υπάρχει όπως είναι κατανοητό κάποιο performance penalty, μιας και πρέπει να γράφονται πράγματα στο δίσκο. Σε αυτή την την περίπτωση καλό είναι να γράφονται σε ξεχωριστό φυσικό δίσκο (όχι partition).
- Στην περίπτωση που δεν μπορεί να γίνει καταγραφή των συμβάντων ο SQL Server δεν ξεκινάει.
- Στον SQL Server 2008 υπάρχει εναλλακτικός τρόπος για την καταγραφή των συμβάντων τόσο σε επίπεδο server όσο και σε επίπεδο database. (θα ασχοληθώ με αυτό σε άλλο post)