Linux Intrusion Detection System - μία παρουσίαση

Μιχάλης Καμπριάνης
Μαρ 2000

Το LIDS, Linux Intrusion Detection System είναι ένα add-on του πυρήνα του linux, που συνοδεύεται από ένα admin tool, το οποίο φροντίζει να κάνει το σύστημά μας κάπως πιο... "ασφαλές"

1. Εισαγωγή

2. Capabilities

3. LIDS λοιπόν...

4. Άρα....

[1. Εισαγωγή]

Το linux, ως unix-type λειτουργικό, κουβαλάει μαζί του κάποιες αδυναμίες των παλιών και άλλων unices. Μία από αυτές τις αδυναμίες, έχει να κάνει με το γενικότερα σύστημα authorization, όπου υπάρχουν πάρα πολλά πράγματα, που μπορεί να τα κάνει μόνο το παντοδύναμο root account... Αυτό το σχήμα της ασφάλειας, θεωρείται ξεπερασμένο, εφόσον

Πολλά από αυτά τα θέματα, θα μπορούσαν να ξεπεραστούν με χρήση των capabilities, ένα "τρικ", το οποίο προστέθηκε στην έκδοση 2.2 του Linux kernel.

[2. Capabilities]

[2.1 Τι είναι τα capabilities?]

Τα capabilities είναι ένα set, όπως λέει και το όνομά τους, δυνατοτήτων, που ορίζονται μέσα στον πυρήνα, και περιορίζουν τις δυνατότητες του root που μέχρι τώρα ξέραμε ότι είχε (και των setuid root προγραμμάτων αντίστοιχα). Τα capabilites ορίστηκαν από κάποιο POSIX draft (το οποίο τώρα αποσύρθηκε), ενώ ο πυρήνας του Linux έχει και πολλά capabilities τα οποία δεν αναφέρονται στο draft αλλά είναι linux-specific.

Ένα παράδειγμα capability, είναι το CAP_CHOWN το οποίο επιτρέπει την αλλαγή ιδιοκτήτη ενός αρχείου. Όπως καταλαβαίνετε, για να κάνουμε chown ένα αρχείο, πρέπει να είμαστε ο root, άρα ένα πρόγραμμα που θέλουμε να κάνει chown πρέπει να είναι setuid root. Κάτι τέτοιο όμως αυτόματα σημαίνει ότι το ίδιο πρόγραμμα, θα μπορεί να διαβάσει το αρχείο /etc/shadow, δημιουργώντας έτσι, για κάτι τόσο απλό, μία τρύπα ασφαλείας στο σύστημα. Με χρήση των capabilities, μπορεί το setuid root πρόγραμμα να αρχίσει να τρέχει, και μετά να "ρίξει" όλα τα capabilities που δεν χρειάζεται και να κρατήσει μόνο το cap_chown. Μπορεί επίσης, να αλλάξει το effective uid και πλέον να μην μπορεί καν να ανακτήσει τα dropped capabilities.

[2.2 Δεν κατάλαβα τι μου παρέχουν...]

Λογικό, γιατί ακόμα, δεν μας παρέχουν τίποτα. Για να τα λέμε σωστά τα πράγματα, πρέπει η εφαρμογή μας να γραφτεί έτσι ώστε να χρησιμοποιεί τα capabilities, αλλιώς δεν κερδίζουμε τίποτα.. Γι αυτό ξεκίνησε και το project LIDS (Linux Intrusion Detection System) το οποίο παρέχει απλά ένα layer μεταξύ του συστήματος (kernel) και των εφαρμογών, για να επιβάλλει την χρήση capabilities σε ήδη γραμμένες εφαρμογές.

[2.3 Δεν μου αναφέρεις μερικά capabilities;]

Αμέ... Το CAP_CHOWN που είδαμε πιο πάνω, το CAP_NET_BIND_SERVICE που επιτρέπει σε μία εφαρμογή να ανοίξει ένα port κάτω από το 1024 (privileged ports), το CAP_SYS_PTRACE που επιτρέπει την χρήση της ptrace() σε οποιοδήποτε process...

Μία πλήρη λίστα για τον δικό σας πυρήνα, θα βρείτε εδώ:

   /usr/src/linux/include/linux/capability.h 

[3. LIDS λοιπόν...]

Το LIDS αποτελείται από δύο κομμάτια: ένα (μεγαλούτσικο) kernel patch, και ένα administration πρόγραμμα, το lidsadm. Ας τα δούμε ξεχωριστά.

[3.1 Το kernel-patch]

Παρέχει τις εξής extra παραμέτρους στον πυρήνα:

[3.2 Το lidsadm]

Το πρόγραμμα /sbin/lidsadm είναι απαραίτητο για να μπορούμε να χρησιμοποιήσουμε σωστά και αποδοτικά το LIDS. Δεν θα μπούμε βέβαια σε λεπτομέρειες χρήσης, θα πούμε μόνο ότι με αυτό το πρόγραμμα:

Νομίζω ότι πιάσατε την κεντρική ιδέα. Υπάρχουν βέβαια περιορισμοί. Συγκεκριμένα, τα file-attributes που θέτουμε, τίθενται με βάση το inode, άρα δεν μπορούμε να κλειδώσουμε το /etc directory και να περιμένουμε να δουλεύει η εντολή passwd (η οποία αναδημιουργεί το password file κάθε φορά, άρα αυτό αποκτά άλλο inode κάθε φορά, συνεπώς ΔΕΝ μπορούμε να δώσουμε full privilege στην εντολή passwd πάνω σε αυτό το αρχείο).

[4. Άρα....]

[4.1 Hints and tricks]

Πολύ χρήσιμο κρίνεται το remote logging που παρέχει το LIDS. Πρέπει να δοθεί προσοχή στις ρυθμίσεις (σε ποιο server θα κάνει logging, με ποια μέθοδο κλπ) και να σχεδιαστεί σωστά το δίκτυο ούτως ώστε να μην έχουμε "κομμένες" γραμμές εκεί (π.χ. κάποιος αποφάσισε να βάλει ένα firewall ανάμεσα στα συστήματά μας :-).

Θέλει σοβαρή μελέτη το ποια αρχεία/directories θα κλειδώσουμε, πόσο θα τα κλειδώσουμε (όπως είπαμε μπορούμε να τα κρύψουμε εντελώς, να τα κάνουμε μόνο ανάγνωσης, να τα κάνουμε μόνο append ή να τα κάνουμε εγγραφής/ανάγνωσης), σε ποια προγράμματα θα δώσουμε δικαίωμα να προσπελαύνουν τα αρχεία/directories αυτά... Το μόνο σίγουρο είναι ότι δεν υπάρχει συνταγή, και μάλλον είναι δύσκολο να γραφτεί μία. Μην εμπιστευτείτε καμία συνταγή, αν πρόκειται για production σύστημα.

Πρέπει επίσης να μελετηθεί σωστά το σε ποια αρχεία/executables θα δοθούν τα capabilities που θα επιτρέπουν να κάνουν unmount τα filesystems και να τερματίζουν διεργασίες, για να μπορεί το σύστημα να "κατεβαίνει" κανονικά, και να μην κάνει fsck σε κάθε boot, ούτε να βρίσκει "ανοιχτά" processes.

Σε κάθε περίπτωση, πρέπει να επιτραπεί το switching κατά το compile του πυρήνα, για να μπορείτε να απενεργοποιήσετε το lids προσωρινά. Αλλιώς, το root account, σε μία normal εγκατάσταση, θα είναι τόσο περιορισμένο που θα είναι άχρηστο.

Τέλος, αν δείτε ότι το σύστημα δεν καλο-δουλεύει μετά τις αλλαγές που κάνατε, ένα security=0 σαν command parameter στο lilo θα σας δώσει τη δυνατότητα να ξεκινήσετε το σύστημα με το LIDS απενεργοποιημένο.

[4.2 Που το βρίσκω; Άλλο Documentation;]

Που το βρίσκετε; Μα που αλλού, εκτός από το http://www.lids.org[1]. Εκεί θα βρείτε, εκτός από τα patches για τους πυρήνες της σειράς 2.4 και της σειράς 2.2, και διάφορα links για documentation. Το δικό τους FAQ, links για άρθρα που έχουν γραφτεί για το LIDS, links για reviews, link για εκείνο το POSIX draft....

Καλό θα ήταν βέβαια να υπήρχε ένα graphical configuration utility (πεδίον δόξης λαμπρό για τους απανταχού qt ή gtk programmers) αλλά δεν έχει γραφτεί κάποιο τέτοιο ακόμα από ότι ξέρω. Ιδού η Ρόδος....

1: http://www.lids.org

[4.3 Disclaimer και συμπεράσματα.]

Δεν χρειάζεται βέβαια να πω ότι η χρήση του LIDS δεν προτείνεται αν είστε αρχάριος. Σε κάθε περίπτωση, για ότι κάνετε με το LIDS (ή και χωρίς αυτό :-) δεν φέρω καμία ευθύνη. Διαβάστε το documentation, ξαναδιαβάστε το, κι αν είστε έτοιμοι, πάρτε ένα backup τα αρχεία σας και δοκιμάστε το...

Το LIDS δεν μου φάνηκε ακόμα έτοιμο για production servers, κυρίως λόγω της έλλειψης documentation και ενός εύκολου configuration utility. Όπως ξαναείπα, ιδού πεδίο δόξης λαμπρό...

Η αλήθεια είναι πάντως, ότι παρέχει ένα επίπεδο ακόμα ασφαλείας στο παλιό γνωστό και ταλαιπωρημένο Unix-security scheme... Μόλις δοθεί η δυνατότητα υποστήριξης capabilities και στο filesystem, όλα θα είναι καλύτερα :-)

Αρχική Σελίδα