Εν ολίγοις: Αρχεία backup στο webroot, δηλαδή dumps βάσεων δεδομένων (.sql), αρχεία (.zip, .tar.gz) και αντίγραφα ασφαλείας (.bak, .old, ~), μπορεί να τα κατεβάσει όποιος γνωρίζει ή μαντεύει το όνομα του αρχείου. Αναζητήστε τέτοια αρχεία τακτικά με find, μεταφέρετε τα αντίγραφα εκτός του δημόσιου φακέλου, αποκλείστε τις τυπικές καταλήξεις στον διακομιστή ιστού και ελέγξτε στα αρχεία καταγραφής πρόσβασης αν έχουν ήδη ανακτηθεί.
Το backup που γίνεται διαρροή
Λίγο πριν από μια ενημέρωση κάποιος δημιουργεί γρήγορα ένα αντίγραφο: backup.zip στον κύριο φάκελο, δίπλα το datenbank.sql. Η ενημέρωση πετυχαίνει, τα αρχεία μένουν. Μήνες αργότερα είναι ακόμη εκεί, με ολόκληρο τον κώδικα, όλα τα δεδομένα πελατών και τα στοιχεία πρόσβασης του ιστοτόπου.
Αυτό το μοτίβο συγκαταλέγεται στα πιο συχνά ευρήματα στους ελέγχους διακομιστών ιστού. Δεν χρειάζεται εκμετάλλευση ούτε ευπάθεια της PHP. Ένας διακομιστής ιστού παραδίδει από το webroot ό,τι υπάρχει εκεί, και τα αρχεία ή τα αρχεία SQL δεν τα εκτελεί, αλλά τα προσφέρει για λήψη.
Ένα αρχείο ενός ιστοτόπου περιέχει όχι μόνο δεδομένα, αλλά και τον κώδικα μαζί με τη διαμόρφωση. Όποιος το κατεβάσει, μπορεί να αναζητήσει με την ησυχία του αδυναμίες και γνωρίζει τα στοιχεία πρόσβασης στη βάση δεδομένων.
Αυτοματοποιημένοι σαρωτές αναζητούν στοχευμένα τυπικά ονόματα όπως backup.zip, site.tar.gz ή dump.sql, συχνά σε συνδυασμό με το όνομα domain ή μια ημερομηνία. Όποιος πιστεύει ότι ένα ασυνήθιστο όνομα αρχείου προστατεύει, υποτιμά πόσο συστηματικά διεξάγεται αυτή η αναζήτηση.
Ποια αρχεία εννοούμε
Τα αρχεία backup στο webroot εμφανίζονται σε διάφορες μορφές:
| Είδος | Τυπικές καταλήξεις | Τι περιέχουν |
|---|---|---|
| Dumps βάσεων δεδομένων | .sql, .sql.gz, .dump |
Δεδομένα πελατών, παραγγελίες, hashes κωδικών, ρυθμίσεις |
| Αρχεία ιστοτόπου | .zip, .tar, .tar.gz, .tgz, .rar, .7z |
ολόκληρος ο κώδικας, διαμόρφωση, uploads |
| Αντίγραφα μεμονωμένων αρχείων | .bak, .old, .orig, .save, .php~, .copy |
συχνά αρχεία διαμόρφωσης με στοιχεία πρόσβασης |
| Κατάλοιπα επεξεργαστών | .swp, .swo, ~ στο τέλος |
τμήματα αρχείων που επεξεργάζονταν εκείνη τη στιγμή |
| Αντίγραφα πρόσθετων | δικοί τους υποφάκελοι στο CMS | πλήρη αντίγραφα ασφαλείας, εν μέρει με ονόματα που μαντεύονται |
Ιδιαίτερα λεπτά είναι τα αντίγραφα αρχείων διαμόρφωσης. Το αρχικό αρχείο config.php το εκτελεί ο διακομιστής, το περιεχόμενό του μένει κρυφό. Το αντίγραφο config.php.bak το παραδίδει ως κείμενο, μαζί με τον κωδικό βάσης δεδομένων.
Εντοπισμός backup στο webroot: αναζήτηση στον διακομιστή
Η παρακάτω αναζήτηση καταγράφει ύποπτα αρχεία κάτω από τα webroots με ημερομηνία και μέγεθος. Προσαρμόστε τις διαδρομές στον διακομιστή σας:
find /var/www /srv/www -type f \( \
-iname '*.sql' -o -iname '*.sql.gz' -o -iname '*.dump' -o \
-iname '*.zip' -o -iname '*.tar' -o -iname '*.tar.gz' -o -iname '*.tgz' -o \
-iname '*.rar' -o -iname '*.7z' -o \
-iname '*.bak' -o -iname '*.old' -o -iname '*.orig' -o -iname '*.save' -o \
-iname '*~' -o -iname '*.swp' \) \
-printf '%TY-%Tm-%Td %10s %p\n' 2>/dev/null | sort
Δεν είναι κάθε εύρημα πρόβλημα. Ορισμένα αρχεία παρέχονται συνειδητά για λήψη, για παράδειγμα εγχειρίδια. Κάθε αρχείο αξίζει όμως μια συνειδητή απόφαση. Προσέξτε ιδιαίτερα μεγάλα αρχεία και φακέλους πρόσθετων backup. Σε κοινόχρηστη φιλοξενία χωρίς πρόσβαση shell βοηθά η επισκόπηση αρχείων στο πάνελ φιλοξενίας ή μια ανάκτηση μέσω SFTP.
Αν βρείτε ένα dump βάσης δεδομένων με δεδομένα πελατών στο webroot, μεταφέρετέ το αμέσως εκτός του δημόσιου φακέλου και φυλάξτε τα αρχεία καταγραφής πρόσβασης προτού περιστραφούν. Μόνο μετά διευκρινίστε αν το αρχείο ανακτήθηκε.
Έχει ήδη κατέβει το αρχείο;
Η απάντηση βρίσκεται στα αρχεία καταγραφής πρόσβασης του διακομιστή ιστού. Αναζητούνται επιτυχείς ανακτήσεις, δηλαδή κατάσταση 200, στα αρχεία που βρέθηκαν:
# Επιτυχείς ανακτήσεις τυπικών καταλήξεων backup (μορφή αρχείου καταγραφής Combined)
zgrep -hE '\.(sql|sql\.gz|zip|tar|tgz|gz|bak|old|7z|rar)[ ?]' /var/log/nginx/access.log* \
| awk '$9 == 200 {print $4, $1, $7, $10}'
Η έξοδος δείχνει χρονική στιγμή, διεύθυνση, διαδρομή και μέγεθος της απάντησης. Αν το μέγεθος που μεταφέρθηκε αντιστοιχεί στο μέγεθος του αρχείου, το αρχείο φορτώθηκε ολόκληρο. Πόσο πίσω φτάνουν τα αρχεία καταγραφής, εξαρτάται από την περιστροφή. Αν δεν φτάνουν μέχρι την ημερομηνία δημιουργίας του αρχείου, μια παλαιότερη ανάκτηση δεν μπορεί να αποκλειστεί. Αναλυτικά το περιγράφει το Ανάλυση των αρχείων καταγραφής του διακομιστή ιστού μετά από επίθεση. Χωρίς πρόσβαση στα ανεπεξέργαστα αρχεία καταγραφής, για παράδειγμα σε κοινόχρηστη φιλοξενία, ζητήστε από τον πάροχο φιλοξενίας τα αρχεία για την εν λόγω περίοδο.
Αν ανακτήθηκε ένα dump με προσωπικά δεδομένα ή αυτό δεν μπορεί να αποκλειστεί, αρχίζει ο έλεγχος μιας υποχρέωσης γνωστοποίησης. Τα βασικά συνοψίζει το Υποχρέωση γνωστοποίησης ΓΚΠΔ: 72 ώρες μετά το περιστατικό· την αξιολόγηση σε κάθε περίπτωση αναλαμβάνει ο υπεύθυνος προστασίας δεδομένων σας. Τα στοιχεία πρόσβασης από αρχεία που ανακτήθηκαν τα αντικαθιστάτε σε κάθε περίπτωση.
Πρόσθετα backup, πάνελ και μετακομίσεις
Πολλά ευρήματα οφείλονται σε πρόσθετα backup για CMS και καταστήματα. Αποθηκεύουν συχνά αντίγραφα σε έναν υποφάκελο του webroot, εν μέρει με ονόματα από ημερομηνία και domain που μαντεύονται. Ελέγξτε σε κάθε πρόσθετο τρεις ρυθμίσεις: Πού γίνεται το αντίγραφο; Διαγράφονται τα τοπικά αντίγραφα μετά το ανέβασμα σε εξωτερικό προορισμό; Είναι ο τοπικός φάκελος προστατευμένος από άμεση ανάκτηση;
Τα αντίγραφα από πάνελ φιλοξενίας βρίσκονται κατά κανόνα εκτός του webroot, για παράδειγμα στον αρχικό φάκελο. Το πρόβλημα προκύπτει όταν κάποιος αντιγράφει ένα τέτοιο αντίγραφο στο webroot, επειδή η λήψη από τον browser είναι πιο βολική από το SFTP. Για μετακομίσεις ισχύει γι' αυτό: μεταφορά μέσω SFTP ή απευθείας μεταξύ των διακομιστών, ποτέ μέσω δημόσιου συνδέσμου.
Αν πρακτορεία ή πάροχοι υπηρεσιών φροντίζουν τους ιστοτόπους σας, αυτός ο κανόνας πρέπει να αναγράφεται και στη σύμβαση, μαζί με την υποχρέωση καθαρισμού μετά από εργασίες συντήρησης. Υποδείξεις δίνει το Συμβάσεις παρόχων IT: σαφής ρύθμιση υποχρεώσεων ασφαλείας.
Μόνιμη πρόληψη: χώρος αποθήκευσης και αποκλεισμοί
Για να μην επαναληφθεί το πρόβλημα, χρειάζονται δύο επίπεδα. Το πρώτο είναι οργανωτικό: τα αντίγραφα έχουν σταθερή θέση εκτός του webroot και επιπλέον εκτός του διακομιστή. Πώς μοιάζει ένα αξιόπιστο αντίγραφο, περιγράφει ο οδηγός Backups με τον κανόνα 3-2-1.
Το δεύτερο επίπεδο είναι τεχνικό: ο διακομιστής ιστού αρνείται καταρχήν τυπικές καταλήξεις backup, ακόμη κι αν κάποτε μείνει ένα αρχείο.
location ~* \.(sql|sql\.gz|dump|bak|old|orig|save|swp|swo)$ {
return 404;
}
location ~ ~$ {
return 404;
}
Αρχεία όπως τα .zip τα αποκλείετε μόνο αν ο ιστότοπός σας δεν προσφέρει λήψεις σε αυτή τη μορφή, ή στοχευμένα στους φακέλους όπου δεν υπάρχουν λήψεις. Συμπληρωματικά βοηθούν μια τακτική αυτόματη αναζήτηση με ειδοποίηση και ένας σύντομος κανόνας στην ομάδα: κανένα backup και κανένα αντίγραφο στο webroot, ούτε για πέντε λεπτά. Συγγενείς περιπτώσεις όπως τα κρυφά αρχεία διαμόρφωσης πραγματεύεται το Σωστή προστασία στοιχείων πρόσβασης και αρχείων .env.
Πώς βοηθά συγκεκριμένα η PHP SOS;
- Ψάχνουμε τα webroots σας για dumps, αρχεία, αντίγραφα και backups πρόσθετων και αξιολογούμε κάθε εύρημα.
- Ελέγχουμε με βάση τα αρχεία καταγραφής πρόσβασης αν ανακτήθηκαν αρχεία και τεκμηριώνουμε το αποτέλεσμα για την αξιολόγηση προστασίας δεδομένων σας.
- Στήνουμε αποκλεισμούς στον διακομιστή ιστού και μια τακτική αυτόματη αναζήτηση.
- Μεταφέρουμε τα αντίγραφα ασφαλείας σε προστατευμένο χώρο εκτός του webroot.
Αυτές οι εργασίες είναι μέρος της σκλήρυνσης διακομιστή για διακομιστές ιστού PHP.
Συχνές ερωτήσεις
Γιατί καταλήγουν εν γένει τα backups στο webroot;
Συνήθως από ευκολία: ένα dump δημιουργείται για μια μετακόμιση, ένα πρόσθετο αποθηκεύει αντίγραφα στον δικό του φάκελο, ή πριν από μια αλλαγή φτιάχνεται γρήγορα ένα αντίγραφο ενός αρχείου με κατάληξη .bak. Έπειτα το αρχείο ξεχνιέται.
Πόσο επικίνδυνο είναι ένα αρχείο όπως το config.php.bak;
Πολύ. Ένα αρχείο με κατάληξη .php εκτελείται από τον διακομιστή και το περιεχόμενό του μένει κρυφό. Ένα αντίγραφο με άλλη κατάληξη το παραδίδει αντίθετα ο διακομιστής συνήθως ως κείμενο, μαζί με τον κωδικό βάσης δεδομένων και τα κλειδιά.
Είναι ένα δημόσια προσβάσιμο dump βάσης δεδομένων παραβίαση δεδομένων;
Αν περιέχει προσωπικά δεδομένα και ανακτήθηκε ή δεν μπορεί να αποκλειστεί ανάκτηση, εξετάζεται υποχρέωση γνωστοποίησης σύμφωνα με τον ΓΚΠΔ. Την αξιολόγηση σε κάθε περίπτωση αναλαμβάνει ο υπεύθυνος προστασίας δεδομένων ή η νομική σας συμβουλή.
Πού πρέπει να βρίσκονται τα backups αντί γι' αυτό;
Εκτός του webroot και επιπλέον εκτός του διακομιστή, σύμφωνα με τον κανόνα 3-2-1. Τουλάχιστον ένα αντίγραφο πρέπει να αποθηκεύεται έτσι ώστε ο ίδιος ο διακομιστής ιστού να μην μπορεί να το διαγράψει ή να το αλλάξει.