Εν ολίγοις: Τα αλλαγμένα αρχεία τα βρίσκετε σε Linux με το find και ένα χρονικό παράθυρο, για παράδειγμα από τις 17 Οκτωβρίου 2026, την ημέρα της πρώτης παρατηρηθείσας απόπειρας επίθεσης για το PHP2Shell σύμφωνα με δημοσιεύματα. Ελέγξτε όχι μόνο τον χρόνο αλλαγής του περιεχομένου (mtime), αλλά και τον χρόνο των μεταδεδομένων (ctime), επειδή το πρώτο παραποιείται εύκολα. Το αποτέλεσμα γίνεται αξιόπιστο μόνο με αντιπαραβολή με αθροίσματα ελέγχου πακέτων, Git ή αντίγραφο ασφαλείας.
Γιατί οι χρονοσημάνσεις είναι καλή αφετηρία, όχι όμως απόδειξη
Όποιος φέρνει κώδικα σε έναν διακομιστή, αλλάζει αρχεία. Νέα webshells, προσαρμοσμένα αρχεία διαμόρφωσης, επιπλέον γραμμές σε υπάρχοντα scripts: όλα αφήνουν χρονοσημάνσεις. Η αναζήτηση αλλαγών στο σωστό χρονικό παράθυρο είναι γι' αυτό ένας από τους ταχύτερους δρόμους προς τα πρώτα ευρήματα.
Για το PHP2Shell ως αρχή του παραθύρου προσφέρεται η 17 Οκτωβρίου 2026, η ημέρα της πρώτης παρατηρηθείσας απόπειρας επίθεσης σύμφωνα με δημοσιεύματα. Τα patches κυκλοφόρησαν στις 21 Οκτωβρίου. Όποιος ενημέρωσε τον διακομιστή του μόνο μετά, ψάχνει μέχρι την ημέρα της δικής του ενημέρωσης και πέρα από αυτήν. Πώς αναγνωρίζετε webshells ανάμεσα στα ευρήματα, περιγράφει το Αναγνώριση και αφαίρεση webshell. Εδώ πρόκειται για τη μέθοδο της ίδιας της αναζήτησης.
Οι τρεις χρονοσημάνσεις ενός αρχείου
Το Linux αποθηκεύει για κάθε αρχείο πολλές χρονικές στιγμές. Για την αναζήτηση αλλαγών είναι καθοριστικές δύο.
| Χρονοσήμανση | Σημασία | Παραποιήσιμη; |
|---|---|---|
| mtime | τελευταία αλλαγή του περιεχομένου | ναι, π.χ. με touch, από οποιονδήποτε επιτρέπεται να γράψει το αρχείο |
| ctime | τελευταία αλλαγή περιεχομένου ή μεταδεδομένων όπως τα δικαιώματα | όχι με απλά μέσα |
| atime | τελευταία πρόσβαση ανάγνωσης | συχνά απενεργοποιημένο ή ανακριβές, ακατάλληλο για την αναζήτηση |
Οι επιτιθέμενοι πισωγυρίζουν συχνά το mtime στην ημερομηνία των γειτονικών αρχείων, ώστε ένα νέο αρχείο να μην προκαλεί προσοχή. Το ctime όμως αλλάζει μαζί. Ένα αρχείο με παλιό mtime και φρέσκο ctime είναι γι' αυτό ισχυρή ένδειξη παραποίησης.
Προσέξτε στη σύγκριση τις ζώνες ώρας. Το find και το ls δείχνουν την τοπική ώρα του διακομιστή, πολλά αρχεία log και υπηρεσίες δουλεύουν όμως σε UTC. Όποιος τοποθετεί δίπλα-δίπλα ευρήματα από το σύστημα αρχείων και από logs, πρέπει να μετατρέψει όλες τις ενδείξεις στην ίδια ζώνη ώρας, αλλιώς τα γεγονότα φαίνονται να μην ταιριάζουν. Τα patches κυκλοφόρησαν περίπου στις 21 Οκτωβρίου στις 14:00 UTC, δηλαδή στις 16:00 ώρα Γερμανίας.
Εύρεση αλλαγμένων αρχείων σε Linux με find
Όλες οι εντολές απλώς διαβάζουν. Προσαρμόστε διαδρομή και ημερομηνία.
# Περιεχόμενο αλλαγμένο από τις 17.10.2026, ταξινομημένο, με mtime, ctime και ιδιοκτήτη
find /var/www -type f -newermt "2026-10-17" -printf '%TY-%Tm-%Td %TH:%TM %CY-%Cm-%Cd %CH:%CM %u %p\n' | sort
# Μεταδεδομένα αλλαγμένα από τις 17.10.2026 (βρίσκει και αρχεία με πισωγυρισμένη ημερομηνία)
find /var/www -type f -newerct "2026-10-17" -printf '%C+ %T+ %p\n' | sort
# Απόκρυψη γνωστού θορύβου: cache, logs, sessions
find /var/www -type f -newerct "2026-10-17" \
-not -path "*/cache/*" -not -path "*/logs/*" -not -path "*/sessions/*" -printf '%C+ %p\n' | sort
# Έλεγχος και εκτός του καταλόγου ιστού
find /etc /usr/local/bin /tmp /var/tmp /dev/shm -xdev -type f -newerct "2026-10-17" -printf '%C+ %p\n' 2>/dev/null | sort
Συγκρίνετε σε κάθε εύρημα και τις δύο χρονοσημάνσεις. Αν το ctime είναι σαφώς νεότερο από το mtime και κανείς δεν άλλαξε εκείνη την ώρα δικαιώματα ή δεν αντέγραψε αρχεία, το αρχείο μπαίνει στη λίστα. Προσέξτε και τον ιδιοκτήτη: ένα αρχείο του χρήστη του διακομιστή ιστού ανάμεσα σε αρχεία του χρήστη deploy προκαλεί προσοχή.
Μην ξεχνάτε κρυφά αρχεία και καταλόγους. Ονόματα που αρχίζουν με τελεία δεν τα δείχνουν πολλοί διαχειριστές αρχείων ούτε ένα απλό ls. Οι επιτιθέμενοι το εκμεταλλεύονται συχνά, όπως και ονόματα που μοιάζουν πολύ με πραγματικά αρχεία.
# Κρυφά αρχεία και φάκελοι στον κατάλογο ιστού, χωρίς γνωστά όπως .htaccess και .git
find /var/www -name ".*" -not -name ".htaccess" -not -name ".well-known" -not -path "*/.git/*" -printf '%C+ %u %p\n' | sort
Αντιπαραβολή με αξιόπιστη πηγή
Οι χρονοσημάνσεις δείχνουν πού κινήθηκε κάτι. Το αν ήταν θεμιτή αλλαγή το δείχνει μόνο η σύγκριση με μια πηγή που εμπιστεύεστε.
- Διαχείριση πακέτων: Για αρχεία συστήματος ελέγχουν τα
dpkg --verify(Debian/Ubuntu) ήrpm -Va(οικογένεια RHEL) τα αρχεία σε σχέση με τα αθροίσματα ελέγχου των εγκατεστημένων πακέτων. Τα αρχεία διαμόρφωσης αποκλίνουν θεμιτά, τα αρχεία προγραμμάτων όχι. - Git: Αν η εφαρμογή βρίσκεται σε αποθετήριο, το
git -C /var/www/projekt status --porcelainδείχνει κάθε απόκλιση από το τελευταίο commit. - Αθροίσματα ελέγχου CMS: Πολλά συστήματα μπορούν να αντιπαραβάλλουν τα αρχεία του πυρήνα τους με τα επίσημα αθροίσματα ελέγχου, βλ. Σύγκριση των αρχείων πυρήνα CMS με το πρωτότυπο.
- Αντίγραφο ασφαλείας πριν από το περιστατικό: Μια σύγκριση σε δοκιμαστική εκτέλεση απαριθμεί διαφορές χωρίς να αντιγράφει τίποτα.
# Μόνο καταγραφή των διαφορών μεταξύ αντιγράφου ασφαλείας και ζωντανού συστήματος (δοκιμαστική εκτέλεση, δεν αντιγράφει τίποτα)
rsync -rcn --out-format="%n" /backup/www-2026-10-15/ /var/www/
Η σύγκριση με αντίγραφο ασφαλείας προϋποθέτει ότι το αντίγραφο δημιουργήθηκε πριν από το περιστατικό και δεν έχει το ίδιο αλλοιωθεί. Γιατί τα αντίγραφα που φυλάσσονται χωριστά είναι εδώ καθοριστικά, εξηγεί το Αντίγραφα ασφαλείας με τον κανόνα 3-2-1.
Αποθηκεύετε τα αποτελέσματα κάθε αναζήτησης με ημερομηνία σε αρχείο εκτός του διακομιστή. Από αυτές τις λίστες προκύπτει αργότερα η χρονολογική γραμμή του περιστατικού και τεκμηριώνουν τι ελέγξατε και πότε.
Όταν δεν υπάρχει ούτε αντίγραφο ασφαλείας ούτε αποθετήριο
Σε πολλούς μικρότερους ιστότοπους δεν υπάρχει καθαρή βάση σύγκρισης: κανένα Git, κανένα αντίγραφο ασφαλείας πριν από το περιστατικό, plugins που ενημερώνονται εδώ και χρόνια με το χέρι. Εντελώς χωρίς σημείο αναφοράς δεν είστε παρ' όλα αυτά.
Κατεβάστε το CMS και τις επεκτάσεις ακριβώς στις εγκατεστημένες εκδόσεις από τον κατασκευαστή και συγκρίνετε αυτά τα αρχεία με τον διακομιστή. Ό,τι αποκλίνει ή λείπει εκεί, αξίζει μια ματιά. Απομένουν οι δικές σας προσαρμογές, τα uploads και η διαμόρφωση· εκεί βοηθά η αναζήτηση χρονοσημάνσεων, συμπληρωμένη με μια ματιά σε ιδιοκτήτη και δικαιώματα. Αρχεία που είναι τα μόνα σε έναν κατάλογο με άλλη ομάδα, άλλα δικαιώματα ή σαφώς νεότερο ctime από τους γείτονές τους, μπαίνουν στη λίστα.
Ειλικρινά: χωρίς βάση σύγκρισης παραμένει μια υπολειπόμενη αβεβαιότητα. Σε συστήματα με ευαίσθητα δεδομένα μια αναδόμηση από καθαρές πηγές είναι τότε συχνά πιο αξιόπιστη από την αναζήτηση κάθε μεμονωμένου αλλαγμένου αρχείου. Για το μέλλον το δίδαγμα είναι απλό: ένα αποθετήριο για τον κώδικα και τακτικά αντίγραφα ασφαλείας που φυλάσσονται χωριστά.
Τυπικές πηγές σφαλμάτων στην αναζήτηση
- Υπερβολικά γενναιόδωροι αποκλεισμοί: Οι φάκελοι cache και upload είναι δημοφιλείς κρυψώνες.
- Έλεγχος μόνο του mtime: Αρχεία με πισωγυρισμένη ημερομηνία ξεφεύγουν.
- Deployment μέσα στο παράθυρο: Ένα κανονικό rollout αλλάζει εκατοντάδες αρχεία και καλύπτει μεμονωμένα ευρήματα. Αντιπαραβάλετε με το αποθετήριο.
- Αρχεία που έχουν ήδη ανοιχτεί ή αντιγραφεί: Αντίγραφα χωρίς διατήρηση των χρονοσημάνσεων καταστρέφουν ίχνη. Διασφαλίστε με εργαλεία που διατηρούν τις χρονοσημάνσεις.
- Αναζήτηση μόνο στον κατάλογο ιστού: Οι επιτιθέμενοι αποθέτουν εργαλεία και στο
/tmp, στο/dev/shmή στον αρχικό κατάλογο του χρήστη του διακομιστή ιστού. - Παράβλεψη αλλαγών δικαιωμάτων: Ένα αρχείο του οποίου τα δικαιώματα επιτρέπουν ξαφνικά εγγραφή σε όλους είναι εύρημα, ακόμη κι αν το περιεχόμενό του δεν άλλαξε.
Πώς τα ευρήματα συντίθενται σε μια πορεία, δείχνει το Δημιουργία της χρονολογικής γραμμής ενός περιστατικού.
Πώς βοηθά συγκεκριμένα η PHP SOS;
- Συστηματική αναζήτηση: Ερευνούμε καταλόγους ιστού και διαδρομές συστήματος για αλλαγές στο σχετικό χρονικό παράθυρο και αξιολογούμε μαζί το mtime και το ctime.
- Έλεγχος σε σχέση με τα πρωτότυπα: Αντιπαραβάλλουμε με πακέτα, αποθετήριο, αθροίσματα ελέγχου CMS και τα αντίγραφα ασφαλείας σας.
- Αξιολόγηση ευρημάτων: Ξεχωρίζουμε τις κανονικές αλλαγές από παραποιήσεις και διασφαλίζουμε αποδεικτικά.
- Καθαρισμός: Με την αφαίρεση κακόβουλου λογισμικού αποκαθιστούμε καθαρό επίπεδο και το τεκμηριώνουμε.
Συχνές ερωτήσεις
Πώς βρίσκω όλα τα αρχεία που άλλαξαν από μια ορισμένη ημερομηνία;
Με το find και την επιλογή -newermt, για παράδειγμα find /var/www -type f -newermt "2026-10-17". Για αλλαγές στα μεταδεδομένα χρησιμοποιήστε το -newerct. Και οι δύο εντολές απλώς διαβάζουν και δεν αλλάζουν τίποτα.
Ποια είναι η διαφορά μεταξύ mtime και ctime;
Το mtime είναι ο χρόνος της τελευταίας αλλαγής του περιεχομένου και μπορεί να πισωγυρίσει με απλά μέσα. Το ctime είναι ο χρόνος της τελευταίας αλλαγής περιεχομένου ή μεταδεδομένων και δεν παραποιείται τόσο εύκολα. Αν τα δύο αποκλίνουν πολύ, αξίζει προσεκτική ματιά.
Πώς αποκλείω αρχεία cache από την αναζήτηση;
Με το -not -path για γνωστούς φακέλους cache, logs και sessions. Μην αποκλείετε όμως υπερβολικά γενναιόδωρα, γιατί οι επιτιθέμενοι αποθέτουν αρχεία με προτίμηση ακριβώς εκεί όπου πολλές αλλαγές είναι φυσιολογικές.
Ποιος έλεγχος είναι ο πιο αξιόπιστος;
Η αντιπαραβολή με αξιόπιστη πηγή: αθροίσματα ελέγχου της διαχείρισης πακέτων, ένα αποθετήριο Git ή ένα αντίγραφο ασφαλείας πριν από το περιστατικό. Οι χρονοσημάνσεις είναι καλή αφετηρία, όχι όμως απόδειξη.