Το προφίλ μας στο Google Plus
0

Αποτροπή root password reset σε συστήματα Linux

Σε προηγούμενο άρθρο δείξαμε πώς βάζουμε νέο password για το χρήστη root ενός συστήματος Linux, όταν δεν θυμόμαστε το τρέχον. Εν τάχει, ξεκινάμε τροποποιώντας κατάλληλα το σχετικό boot entry στο μενού του GRUB2 και δευτερόλεπτα αργότερα ορίζουμε νέο password για τον root. Η τεχνική είναι ιδιαίτερα χρήσιμη για τους ξεχασιάρηδες, σημαίνει όμως ότι οποιοσδήποτε έχει φυσική πρόσβαση στον υπολογιστή είναι σε θέση να αποκτήσει πρόσβαση στο λογαριασμό του διαχειριστή.

Όπως κι εσείς μπορείτε να διαπιστώσετε, αρκεί κάποιος να καθίσει μπροστά από ένα σύστημα Linux και θα καταφέρει να ορίσει νέο password για τον root χωρίς να γνωρίζει το παλιό. Ως πρώτη σκέψη για αντίμετρο θα μπορούσαμε να σκεφτούμε password για το BIOS (ή για το UEFI) του PC. Πράγματι, ξεκινώντας ή επανεκκινώντας ένα PC με password στο BIOS, καλούμαστε να το πληκτρολογήσουμε πριν φτάσουμε στην οθόνη του GRUB2 ή όποιου άλλου boot manager. Το θέμα είναι ότι τα BIOS passwords είναι σχετικά εύκολο να διαγραφτούν, ειδικά αν μιλάμε για PC με ανεμπόδιστη πρόσβαση στο motherboard. Αναλυτικότερα, το password ακυρώνεται με επαναφορά των εργοστασιακών ρυθμίσεων του BIOS. Η δε επαναφορά επιτυγχάνεται αφαιρώντας προσωρινά τη μπαταρία του motherboard ή αλλάζοντας θέση στο κατάλληλο jumper. Σίγουρα ένας κακόβουλος χρήστης επιβραδύνεται σημαντικά όταν χρειάζεται να κάνει reset στο BIOS, αλλά όπως και να ‘χει η συγκεκριμένη μέθοδος προστασίας είναι ανεπαρκής.

Μια εναλλακτική λύση, η οποία μπορεί να μην είναι τέλεια αλλά αλλά ανεβάζει το επίπεδο δυσκολίας για attackers χωρίς επαρκείς γνώσεις περί Linux, αφορά στον καθορισμό password για το GRUB2. Συγκεκριμένα, αναφερόμαστε σε password το οποίο θα ζητείται κατά την ενεργοποίηση boot entry ή/και κατά την απόπειρα τροποποίησής του. Δείτε στη συνέχεια πώς ορίζουμε password για το GRUB2 όταν η διανομή μας είναι το openSUSE ή το Ubuntu.

Περίπτωση openSUSE

Τα πράγματα δεν θα μπορούσαν να είναι απλούστερα. Για την προστασία των boot entries του GRUB2 από τροποποιήσεις, αρκεί να ενεργοποιήσουμε το module ονόματι bootloader του YaST2: σε ένα τερματικό απλά πληκτρολογούμε sudo yast2 bootloader. Δείτε τα τρία screenshots που ακολουθούν, διαβάστε και τις αντίστοιχες περιγραφές.

Προστασία των boot entries του GRUB2 με password. Δουλεύουμε μέσα από το module με όνομα bootloader, του YaST2.

Στο module bootloader του YaST2 πηγαίνουμε κατευθείαν στην κατηγορία Bootloader Options (απλά πατάμε το συνδυασμό πλήκτρων [ALT+L]). Θέλουμε βεβαίως να ενεργοποιήσουμε αυτό το Protect Boot Loader with Password, οπότε πατάμε [ALT+E]. Επειδή μας ενδιαφέρει η δυνατότητα για απομακρυσμένα reboot, ενεργοποιούμε το Protect Entry Modification Only ([ALT+R]). Υπάρχει ένας χρήστης του GRUB2 ο οποίος ονομάζεται “root” και γι’ αυτόν ορίζουμε ένα password πατώντας [ALT+P]. Φυσικά, για λόγους ασφαλείας καλούμαστε να πληκτρολογήσουμε ξανά το ίδιο ακριβώς password ([ALT+Y]). Σημειώστε ότι κατά την πληκτρολόγηση του password, στη θέση των χαρακτήρων εμφανίζονται αστερίσκοι. Επικυρώνουμε τις επιλογές μας με το συνδυασμό [ALT+O].

Το ωραίο, text-based μενού του GRUB2 στην εγκατάστασή μας. Θέλουμε να τροποποιήσουμε το πρώτο boot entry, ώστε να βρεθούμε σε θέση για αλλαγή του root password.

Αντικρίζουμε το ωραίο, text-based μενού του GRUB2. Θέλουμε να τροποποιήσουμε το πρώτο boot entry, με στόχο ν’ αλλάξουμε το password του χρήστη root. Το επιλέγουμε, λοιπόν, κι αμέσως πατάμε το πλήκτρο [E] (από το “Edit”).

Τέλος στις ανέμελες αλλαγές των boot entries του GRUB2! Χρειάζεται πλέον να γνωρίζουμε το όνομα του κατάλληλου χρήστη (του GRUB2), βεβαίως και το αντίστοιχο password.

Η απόπειρά μας για τροποποίηση του boot entry προκαλεί τον GRUB2 να μας ζητήσει username και password. Για το πρώτο δίνουμε “root” (χωρίς εισαγωγικά και μιλάμε για τον root του GRUB2, όχι για τον ομώνυμο χρήστη του συστήματος), ενώ για password πληκτρολογούμε αυτό που ορίσαμε πριν από λίγο, στο module ονόματι bootloader του YaST2. Μόνον εφόσον πληκτρολογήσουμε σωστά username και password θα μας επιτραπεί να κάνουμε αλλαγές στο boot entry.

Περίπτωση Ubuntu

Στο πλαίσιο των δοκιμών μας εργαστήκαμε σε ένα σύστημα με Zesty Zapus, δηλαδή με Ubuntu 17.04. Παρόμοια θα εργαστεί κάποιος σε άλλες εκδόσεις του Ubuntu — ακόμη και σε άλλες διανομές του Linux που χρησιμοποιούν το GRUB2. Ξεκινάμε τροποποιώντας ελαφρά το αρχείο /etc/default/grub, με δικαιώματα διαχειριστή φυσικά: sudo vi /etc/default/grub. Φροντίζουμε ώστε η γραμμή…

GRUB_HIDDEN_TIMEOUT=0

…πάνω πάνω, να γίνει έτσι:

#GRUB_HIDDEN_TIMEOUT=0

Σχολιάζοντάς τη, λοιπόν, έχουμε την ευκαιρία να βλέπουμε το μενού του GRUB2 κάθε φορά που ανοίγουμε ή επανεκκινούμε τον υπολογιστή. Προαιρετικά, αλλάζουμε και το χρόνο παραμονής του μενού πριν ξεκινήσει το φόρτωμα του προκαθορισμένου boot entry. Εμείς, π.χ., από τα 10 δευτερόλεπτα τον κατεβάσαμε στα 3, οπότε στο /etc/default/grub έχουμε την ακόλουθη γραμμή:

GRUB_TIMEOUT=3

Θέλουμε να βλέπουμε το μενού του GRUB2 στην εγκατάσταση του Ubuntu μας, αλλά μετά τρία δευτερόλεπτα αδράνειας να φορτώνει το προεπιλεγμένο boot entry.

Αποθηκεύουμε τις αλλαγές στο /etc/default/grub και χωρίς καμία καθυστέρηση παράγουμε ένα PBKDF2 hash για το password που θέλουμε να έχει ο διαχειριστής του GRUB2. Δεν χρειάζεται ν’ αποφασίσουμε από τώρα για το username του εν λόγω διαχειριστή, χρειαζόμαστε όμως ένα PBKDF2 hash για το password του. Προς τούτο, στο τερματικό μας πληκτρολογούμε:

grub-mkpasswd-pbkdf2

Το εργαλείο θα μας ζητήσει να πληκτρολογήσουμε το επιθυμητό password και μετά άλλη μια φορά, για λόγους ασφαλείας (καθώς πληκτρολογούμε, οι χαρακτήρες του password δεν εμφανίζονται στην οθόνη). Με την προϋπόθεση ότι δεν θα κάνουμε κάποιο λάθος, θα πάρουμε ένα μήνυμα της μορφής PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.the_rest_of_it.

Μόλις δημιουργήσαμε ένα PBKDF2 hash, ξεκινώντας από το password που πληκτρολογήσαμε για το χρήστη με δικαιώματα διαχείρισης του GRUB2. Παρατηρήστε την τονισμένη περιοχή: αυτό ακριβώς είναι το PBKDF2 hash!

Στη συνέχεια πληκτρολογούμε sudo vi /etc/grub.d/42_password, ώστε με δικαιώματα root να δημιουργήσουμε το αρχείο 42_password εντός του καταλόγου /etc/grub.d. Φροντίζουμε ώστε το περιεχόμενό του να μοιάζει με το ακόλουθο:

#! /bin/sh
exec tail -n +3 $0
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.the_rest_of_it
export superusers
set unrestricted_menu="y"
export unrestricted_menu

Προσοχή ώστε στη θέση του grub.pbkdf2.sha512.10000.the_rest_of_it να βάλετε ολόκληρο το string που σας επέστρεψε το grub-mkpasswd-pbkdf2 (δείτε ξανά με προσοχή το προηγούμενο screenshot, διαβάστε και το συνοδευτικό κείμενο). Παρατηρήστε εξάλλου ότι τον έναν και μοναδικό διαχειριστή του GRUB2 (βλ. οδηγία set superusers) ονομάσαμε root. Εσείς φυσικά μπορείτε να του δώσετε κάποιο άλλο username — και μην παραλείψετε να βάλετε το σωστό username και στη γραμμή από κάτω, στα δεξιά του password_pbkdf2 και στ’ αριστερά του grub.pbkdf2.sha512.10000.

Στο αρχείο /etc/grub.d/42_password ορίζεται το username του χρήστη με δικαιώματα διαχείρισης του GRUB2, ενώ παρατίθεται και το PBKDF2 hash που παρήχθη με το εργαλείο grub-mkpasswd-pbkdf2 ξεκινώντας από το password του προαναφερθέντος χρήστη.

Αποθηκεύουμε τις αλλαγές στο /etc/grub.d/42_password κι εγκαταλείπουμε τον editor. Φροντίζουμε και για τα σωστά δικαιώματα του νέου αρχείου, δίνοντας sudo chmod 700 /etc/grub.d/42_password. Οι αλλαγές που μόλις κάναμε δεν έχουν ακόμη ληφθεί υπόψη από τον GRUB2, οπότε τον ενημερώνουμε σχετικά πληκτρολογώντας sudo update-grub.

Ενημέρωση του GRUB2 για τις αλλαγές που μόλις πραγματοποιήσαμε.

Πάμε τώρα να ελέγξουμε αν όλα δουλεύουν κατά το αναμενόμενο. Επανεκκινούμε το σύστημα και, λογικά, θα δούμε το μενού του GRUB2.

Ιδού το μενού του GRUB2 στην εγκατάσταση του Ubuntu που χρησιμοποιήσαμε για τις δοκιμές μας.

Πατώντας το πλήκτρο [Enter] (ενεργοποίηση) ή το [E] (τροποποίηση) πάνω από ένα οποιοδήποτε boot entry, ο GRUB2 ζητά να πληκτρολογήσουμε σωστά το username κάποιου διαχειριστή (root, για το παράδειγμά μας) καθώς και το αντίστοιχο password. Το ίδιο συμβαίνει και μετά το πέρας του προκαθορισμένου χρόνου παραμονής του μενού (3 δευτερόλεπτα).

Πατώντας το πλήκτρο Enter (ενεργοποίηση) ή το E (τροποποίηση) πάνω από ένα οποιοδήποτε boot entry, ο GRUB2 ζητά να πληκτρολογήσουμε σωστά το username κάποιου διαχειριστή καθώς και το αντίστοιχο password. Το ίδιο συμβαίνει και μετά το πέρας του προκαθορισμένου χρόνου παραμονής του μενού.

Και μια παρατήρηση για το τέλος: Ένας αποφασισμένος attacker με επαρκείς γνώσεις περί Linux, φυσική πρόσβαση στον υπολογιστή μας και με λίγο χρόνο στη διάθεσή του, θα καταφέρει να ακυρώσει και αυτό το μέτρο προστασίας (θα bootάρει από το Live DVD κάποιας άλλης διανομής και θα προβεί σε συγκεκριμένες ενέργειες, οι οποίες είναι εκτός θέματος του παρόντος άρθρου). Αν θέλουμε απόλυτη προστασία για μια εγκατάσταση Linux, τότε ο καλύτερος σύμμαχός μας είναι η κρυπτογράφηση του δίσκου ή των δίσκων του συστήματος. Βέβαια με την κρυπτογράφηση δίσκων, κάθε φορά που ξεκινάμε τον υπολογιστή οφείλουμε να πληκτρολογούμε το κατάλληλο password για την αποκρυπτογράφηση. Αλλά έτσι είναι: περισσότερη ασφάλεια σημαίνει λιγότερη ευκολία — και φυσικά ισχύει και το αντίστροφο.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων