Μετάβαση στο περιεχόμενο
EuroVPSEuroVPS
Περιοχή πελατών

Γιατί ένας παραβιασμένος λογαριασμός root σημαίνει rebuild του server, όχι καθάρισμα.

Ένας λογαριασμός UID 0 χωρίς καταγραφή δημιουργίας δεν δημιουργήθηκε, γράφτηκε. Πώς βρίσκετε έναν κρυφό λογαριασμό root, και γιατί η παραβίαση του root σημαίνει rebuild, όχι καθάρισμα.

Από EuroVPS EngineeringΤο μηχανοστάσιο

4 λεπτά ανάγνωσης
Σε αυτό το άρθρο 5 ενότητες

Κάθε λογαριασμός σε ένα σύστημα Unix έχει πιστοποιητικό γέννησης. Μια γραμμή στο log αυθεντικοποίησης που καταγράφει ποιος τον δημιούργησε, πότε, και με ποιο εργαλείο. Ένας λογαριασμός χωρίς τέτοια γραμμή δεν δημιουργήθηκε μέσα από κανένα εργαλείο. Γράφτηκε, με το χέρι, κατευθείαν στο αρχείο χρηστών. Όταν αυτός ο λογαριασμός έχει και UID 0, η γραμμή που λείπει δεν είναι κενό στα αρχεία σας. Είναι το αποδεικτικό στοιχείο.

Εν συντομία
  • Ένας κρυφός λογαριασμός root είναι το δυσκολότερο backdoor στο να το δείτε, γιατί στο Unix ο root είναι αριθμός, όχι όνομα. Κάθε λογαριασμός με UID 0 έχει πλήρη δικαιώματα root. Δώστε σε έναν τέτοιο λογαριασμό ένα όνομα που διαφέρει κατά έναν χαρακτήρα από έναν νόμιμο daemon του συστήματος, και επιβιώνει σε μια πρόχειρη ματιά στη λίστα χρηστών. Το μάτι τον διαβάζει ως τυπογραφικό λάθος, όχι ως απειλή.
  • Δύο συνηθισμένες παρατηρήσεις στέλνουν τον responder σε λάθος κατεύθυνση: το μεταμφιεσμένο όνομα μοιάζει με ανορθογραφία ενός πραγματικού daemon, και ένας αυτοματοποιημένος έλεγχος υγείας έχει ήδη αναφέρει επιτυχία. Ένα all-clear.
  • Το σημάδι που κόβει και τα δύο: δεν υπάρχει καμία εγγραφή δημιουργίας λογαριασμού στα logs. Ο επιτιθέμενος δεν χρησιμοποίησε ποτέ το εργαλείο δημιουργίας λογαριασμών. Το hash του κωδικού γράφτηκε κατευθείαν στο αρχείο χρηστών, και μάλιστα στο αρχείο χρηστών, όχι στο shadow, που είναι δεύτερη ένδειξη από μόνη της.
  • Το δόγμα: σαρώστε για λογαριασμούς UID 0 ανεξάρτητα από τα logs δημιουργίας, θεωρήστε ένα hash σε λάθος αρχείο εύρημα, μην θεωρείτε ποτέ έναν μεμονωμένο αυτοματοποιημένο έλεγχο απόδειξη, και όταν ο root ήταν προσβάσιμος για οποιοδήποτε διάστημα, κάντε rebuild από επαληθευμένα καθαρό σημείο πριν από την παραβίαση. Μην καθαρίζετε επί τόπου.

Το UID 0 είναι αριθμός, όχι όνομα

Root δεν είναι ο λογαριασμός που λέγεται root. Root είναι κάθε λογαριασμός με user ID 0. Ο πυρήνας δίνει τα δικαιώματα με βάση τον αριθμό, και το όνομα είναι διακόσμηση. Άρα ένα backdoor δεν χρειάζεται να αγγίξει τον λογαριασμό root ή να μαντέψει κωδικό. Χρειάζεται μία ακόμα γραμμή στο αρχείο χρηστών με ένα 0 στο τρίτο πεδίο.

Δώστε σε αυτή τη γραμμή ένα όνομα που διαφέρει κατά έναν χαρακτήρα από έναν νόμιμο daemon του συστήματος, και εξαφανίζεται σε κοινή θέα. Μια λίστα χρηστών είναι μακριά, τα ονόματα είναι κρυπτικά από σχεδιασμό, και ένας responder που τη σαρώνει διαβάζει έναν γνωστό daemon, ελαφρώς ανορθόγραφο, και προχωράει. Η μεταμφίεση δεν είναι εξεζητημένη. Αρκεί να επιβιώσει μία ματιά.

ROOT IS A UID, NOT A NAME
# Root is a UID, not a name. List every account with UID 0.
awk -F: '$3 == 0 { print $1 }' /etc/passwd

# Exactly one line should come back: root. Any second line is a
# full-privilege account, whatever it calls itself.

Δύο λόγοι να προχωρήσετε. Και οι δύο λάθος.

Έναν καλό responder μπορούν να τον προσπεράσουν από έναν κρυφό λογαριασμό root δύο λογικές παρατηρήσεις. Και οι δύο είναι από αυτές που τις δέχεστε με ένα νεύμα και προχωράτε. Καμία δεν αντέχει δεύτερη ματιά.

Πώς μοιάζειΤι είναι
Το όνομα του λογαριασμού διαβάζεται ως τυπογραφικό λάθος ενός νόμιμου daemon του συστήματοςΈνας πλήρης λογαριασμός UID 0, με όνομα φτιαγμένο για να επιβιώσει μία ματιά, έναν χαρακτήρα μακριά από έναν πραγματικό daemon
Ένας αυτοματοποιημένος έλεγχος αναφέρει επιτυχία.Ένας αυτοματοποιημένος έλεγχος δεν είναι απόδειξη.

“Ένας μεμονωμένος αυτοματοποιημένος έλεγχος δεν είναι απόδειξη. Επιβεβαιώστε τον με ανεξάρτητη σάρωση.”

Ο λογαριασμός χωρίς πιστοποιητικό γέννησης

Κάθε λογαριασμός που δημιουργείται με τα standard εργαλεία αφήνει μια γραμμή στο log αυθεντικοποίησης: δημιουργήθηκε από ποιον, πότε, με ποια εντολή. Ένας φυτεμένος λογαριασμός δεν έχει καμία. Όχι διαγραμμένη γραμμή, καμία γραμμή, γιατί ο επιτιθέμενος δεν χρησιμοποίησε ποτέ το εργαλείο. Το hash του κωδικού γράφεται κατευθείαν στο αρχείο χρηστών με το χέρι, και γι' αυτό δεν υπάρχει τίποτα να καταγραφεί.

Και γράφεται σε λάθος αρχείο. Σε κάθε σύγχρονο σύστημα Unix το πεδίο κωδικού στο αρχείο χρηστών έχει μεταβιβαστεί στο αρχείο shadow. Κρατάει ένα placeholder, ποτέ πραγματικό hash. Ένα γνήσιο hash μέσα στο αρχείο χρηστών δεν είναι επιλογή διαμόρφωσης ούτε παλιά ιδιορρυθμία που μπορείτε να προσπεράσετε. Είναι το δακτυλικό αποτύπωμα μιας χειροκίνητης επεξεργασίας, και είναι ένδειξη από μόνο του.

Χωρίς γραμμή στο log, ο πραγματικός χρόνος δημιουργίας του λογαριασμού πρέπει να ανασυντεθεί από πλάγιες πηγές: χρονοσφραγίδες αρχείων, και τα ίχνη που άφησαν γύρω του άλλα γεγονότα. Η απουσία πιστοποιητικού γέννησης δεν σας εμποδίζει να προσδιορίσετε την ώρα γέννησης. Απλώς σημαίνει ότι θα δουλέψετε γι' αυτό.

A HASH IN THE WRONG FILE IS A FINDING
# The password field in /etc/passwd should be a placeholder (x),
# never a hash. The real hash lives in /etc/shadow.
awk -F: '$2 != "x" && $2 != "*" && $2 != "!" { print $1 }' /etc/passwd

# A name that comes back here has its hash in the wrong file.
# That is a manual edit, not a managed account.

“Ένας λογαριασμός UID 0 χωρίς καταγραφή δημιουργίας δεν δημιουργήθηκε. Γράφτηκε.”

Όταν μια ενημέρωση κλειδώνει τον επιτιθέμενο απ' έξω κατά λάθος

Το πιο παράξενο σε αυτόν τον τρόπο αποτυχίας είναι τι μπορεί να του κάνει μια ρουτίνα αυτόματης ενημέρωσης. Μια unattended ενημέρωση μπορεί να ξαναγράψει ένα φυτεμένο hash ως παρενέργεια και να κλειδώσει τον επιτιθέμενο έξω από το δικό του backdoor. Ο λογαριασμός μένει. Η πρόσβαση χάνεται. Το backdoor μπορεί τότε να μείνει αδρανές επ' αόριστον: μια ξεκλείδωτη πόρτα σε ένα δωμάτιο του οποίου το κλειδί δεν γυρίζει πια. Αυτό μοιάζει με ασφάλεια. Δεν είναι.

ΑΔΡΑΝΕΣ ΔΕΝ ΣΗΜΑΙΝΕΙ ΟΤΙ ΕΦΥΓΕ

Ένα backdoor που σταμάτησε να δουλεύει δεν είναι backdoor που έφυγε. Ένας αδρανής λογαριασμός UID 0 εξακολουθεί να είναι λογαριασμός UID 0 που κάποιος φύτεψε. Η παρουσία είναι η παραβίαση, όχι το login.

Δεν τον καθαρίζετε. Τον ξαναχτίζετε.

Το δελεαστικό κλείσιμο είναι «σβήνουμε τον κακό λογαριασμό, περνάμε το patch, τέλος». Αρνηθείτε το. Πρόσβαση root για οποιοδήποτε διάστημα, ακόμη και διάστημα που η τύχη έκλεισε αργότερα με πάταγο, σημαίνει ότι κάθε byte σε αυτό το μηχάνημα είναι πλέον ύποπτο: binaries, cron jobs, βιβλιοθήκες, και τα ίδια τα εργαλεία που θα χρησιμοποιούσατε για να το επιθεωρήσετε. Δεν μπορείτε να ελέγξετε τον δρόμο σας πίσω στην εμπιστοσύνη σε ένα σύστημα του οποίου τα εργαλεία ελέγχου δεν εμπιστεύεστε πια.

01

Σαρώστε για root ανεξάρτητα από τα logs.

Καταγράψτε κάθε λογαριασμό UID 0 με awk. Μη βασίζεστε στο log δημιουργίας, σε έναν μεμονωμένο αυτοματοποιημένο έλεγχο, ή στο ότι η λίστα χρηστών φαίνεται φυσιολογική.

02

Θεωρήστε ένα hash σε λάθος αρχείο εύρημα.

Ένα πραγματικό hash στο αρχείο χρηστών αντί για το shadow είναι χειροκίνητη επεξεργασία. Ερευνήστε το, μην το δικαιολογήσετε.

03

Επιβεβαιώστε κάθε αυτοματοποιημένο έλεγχο ανεξάρτητα.

Αν ένας αυτοματοποιημένος έλεγχος λέει «καθαρό» και η δική σας σάρωση βρίσκει έναν ανεξήγητο λογαριασμό UID 0, κυνηγήστε το εύρημα, όχι τον καθησυχασμό.

04

Προσδιορίστε τον χρόνο της παραβίασης, όχι τον χρόνο που το προσέξατε.

Ανασυνθέστε την πιο πρώιμη εύλογη παραβίαση από πλάγιες πηγές. Το καθαρό σημείο επαναφοράς σας πρέπει να προηγείται αυτής, όχι της ανακάλυψης.

05

Κάντε rebuild από επαληθευμένα καθαρό σημείο.

Επαναφέρετε από γνωστά καλό image πριν από την παραβίαση, αλλάξτε κάθε διαπιστευτήριο που μπορούσε να αγγίξει το μηχάνημα, και επαληθεύστε ξανά. Μην καθαρίζετε επί τόπου.

ΕΝΑ ΜΗ ΑΞΙΟΠΙΣΤΟ ΣΥΣΤΗΜΑ ΞΑΝΑΧΤΙΖΕΤΑΙ, ΔΕΝ ΚΑΘΑΡΙΖΕΤΑΙ

Root για οποιοδήποτε διάστημα σημαίνει μη αξιόπιστο σύστημα. Ένα μη αξιόπιστο σύστημα δεν το καθαρίζετε. Το ξαναχτίζετε από ένα σημείο που μπορείτε να αποδείξετε ότι ήταν καθαρό, πριν από την παραβίαση, ποτέ μετά.

“Root για ένα λεπτό είναι root μέχρι το rebuild. Αυτό το μηχάνημα δεν το καθαρίζετε. Το ξαναχτίζετε από ένα σημείο που μπορείτε να αποδείξετε ότι ήταν καθαρό.”

Ευθείες απαντήσεις

Πώς βρίσκω έναν κρυφό λογαριασμό root στο Linux;+

Καταγράψτε κάθε λογαριασμό με UID 0, όχι μόνο αυτόν που λέγεται root: awk -F: '$3 == 0 {print $1}' /etc/passwd. Ο πυρήνας δίνει root με βάση το UID, όχι το όνομα, άρα κάθε δεύτερη γραμμή είναι λογαριασμός με πλήρη δικαιώματα, όπως κι αν αυτοαποκαλείται. Σαρώστε γι' αυτόν απευθείας. Μη βασίζεστε στο ότι η λίστα χρηστών φαίνεται φυσιολογική ή σε έναν μεμονωμένο αυτοματοποιημένο έλεγχο που αναφέρει «καθαρό».

Τι σημαίνει ένα hash κωδικού στο /etc/passwd αντί για το /etc/shadow;+

Σε κάθε σύγχρονο σύστημα Unix το πεδίο κωδικού στο /etc/passwd είναι placeholder, συνήθως x, και το πραγματικό hash ζει στο /etc/shadow. Ένα γνήσιο hash μέσα στο /etc/passwd δεν είναι φυσιολογική διαμόρφωση. Είναι το δακτυλικό αποτύπωμα χειροκίνητης επεξεργασίας του αρχείου χρηστών, και είναι ένδειξη παραβίασης από μόνο του.

Γιατί δεν υπάρχει εγγραφή στο log για έναν λογαριασμό που σαφώς υπάρχει;+

Γιατί δεν δημιουργήθηκε με τα standard εργαλεία λογαριασμών, που είναι αυτά που γράφουν το log αυθεντικοποίησης. Αν κάποιος επεξεργαστεί το αρχείο χρηστών με το χέρι, ο λογαριασμός υπάρχει χωρίς καμία εγγραφή δημιουργίας. Ένας λογαριασμός UID 0 χωρίς καταγραφή δημιουργίας δεν δημιουργήθηκε μέσα από κανένα εργαλείο. Γράφτηκε.

Μπορώ απλώς να διαγράψω τον κακόβουλο λογαριασμό και να περάσω patch στον server;+

Όχι. Πρόσβαση root για οποιοδήποτε διάστημα σημαίνει ότι όλο το σύστημα είναι μη αξιόπιστο: binaries, cron, βιβλιοθήκες, και τα εργαλεία με τα οποία θα το επιθεωρούσατε. Διαγράφοντας τον λογαριασμό και περνώντας patch μένετε να εμπιστεύεστε ένα μηχάνημα που δεν μπορείτε πια να επαληθεύσετε. Κάντε rebuild από σημείο επαναφοράς πριν από την παραβίαση, αλλάξτε τα διαπιστευτήρια, και επαληθεύστε ξανά.

Ο λογαριασμός backdoor φαίνεται ανενεργός. Είναι ακόμα πρόβλημα;+

Ναι. Ένας αδρανής ή κλειδωμένος λογαριασμός UID 0 εξακολουθεί να είναι λογαριασμός με πλήρη δικαιώματα που κάποιος φύτεψε. Η παρουσία του είναι η παραβίαση, όχι κάποιο login. Μια αυτόματη ενημέρωση ή αλλαγή διαμόρφωσης μπορεί να απενεργοποιήσει ένα backdoor κατά λάθος χωρίς να αφαιρέσει την υποκείμενη παραβίαση. Θεωρήστε έναυσμα την παρουσία, όχι τη δραστηριότητα.

Ένας λογαριασμός root που δεν μπορείτε να εξηγήσετε;

Αν βρήκατε έναν λογαριασμό UID 0 χωρίς καταγραφή δημιουργίας, ή δεν είστε σίγουροι ότι το τελευταίο καθαρό σημείο επαναφοράς σας προηγείται του προβλήματος, μην τον καθαρίσετε επί τόπου. Μιλήστε με έναν μηχανικό που θα ανασυνθέσει το χρονολόγιο από πλάγιες πηγές και θα κάνει rebuild από ένα σημείο που μπορείτε να αποδείξετε ότι ήταν καθαρό.

Μιλήστε με έναν μηχανικό

Φτάσατε στο τέλος.

Βάλτε την ανάγνωση σε εφαρμογή

Τι τρέχετε;

Πείτε μας για τον φόρτο εργασίας, την κίνηση και τις απαιτήσεις ανάκαμψης. Ξεκινήστε από το εργαλείο διαμόρφωσης server ή συζητήστε τις λεπτομέρειες με έναν μηχανικό.

Γραμμένο από τους μηχανικούς που χτίζουν και λειτουργούν την υποδομή που περιγράφει.
Μιλήστε με έναν μηχανικό
XIn

4 λεπτά ακόμη