Τρέχουσα κατάσταση: PHP2Shell. Δύο κρίσιμες ευπάθειες της PHP (CVSS 9.2) επιτρέπουν κακόβουλο κώδικα χωρίς σύνδεση. Patches από τις 21/10/2026.Τι πρέπει να γίνει τώρα →

Έλεγχος της βάσης δεδομένων για κώδικα που έχει εισαχθεί

Όποιος ελέγχει μόνο αρχεία χάνει το μισό. Δείτε πώς θα ψάξετε περιεχόμενο, ρυθμίσεις, triggers και λογαριασμούς της βάσης δεδομένων για κώδικα που έχει εισαχθεί, μόνο με ανάγνωση και σε αντίγραφο.

Ημερομηνία 6 λεπτά ανάγνωσηςΕντοπισμός και ψηφιακή εγκληματολογία

Εν ολίγοις: Για να ελέγξετε τη βάση δεδομένων για κακόβουλο κώδικα, ψάξτε μια εξαγωγή ή ένα αντίγραφο με ερωτήματα μόνο ανάγνωσης για σενάρια που έχουν εισαχθεί, ξένες διευθύνσεις και συγκαλυμμένο κώδικα σε περιεχόμενο και ρυθμίσεις. Ελέγξτε επιπλέον triggers, προγραμματισμένα συμβάντα, αποθηκευμένες διαδικασίες και τους χρήστες της βάσης δεδομένων. Καθαρίστε μόνο μετά την αξιολόγηση και ποτέ με τυφλή αναζήτηση και αντικατάσταση, επειδή έτσι σπάνε τα σειριοποιημένα δεδομένα.

Το τυφλό σημείο πολλών καθαρισμών

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

Για τους επιτιθέμενους η βάση δεδομένων είναι ελκυστική κρυψώνα. Ένα σενάριο σε ένα widget σερβίρεται σε κάθε σελίδα. Μια αλλαγμένη ρύθμιση διεύθυνσης κατευθύνει όλους τους επισκέπτες αλλού. Ένας πρόσθετος λογαριασμός διαχειριστή ανοίγει την πόρτα για αργότερα. Τίποτα από αυτά δεν γίνεται αντιληπτό σε μια σάρωση αρχείων.

Μετά το PHP2Shell, τις ευπάθειες CVE-2026-109618 και CVE-2026-109619 με εκτέλεση κώδικα χωρίς σύνδεση, η βάση δεδομένων ανήκει γι' αυτό σε κάθε έλεγχο. Όποιος μπορεί να εκτελέσει κώδικα στον διακομιστή μπορεί κατά κανόνα να διαβάσει από τη διαμόρφωση τα διαπιστευτήρια της βάσης δεδομένων και να γράψει εκεί ό,τι θέλει. Πώς επικοινωνεί η εφαρμογή με τη βάση δεδομένων, εξηγεί το PHP και βάσεις δεδομένων: PDO και mysqli.

Πού κρύβεται ο κακόβουλος κώδικας στη βάση δεδομένων

Σημείο εύρεσης Τυπικό περιεχόμενο Αποτέλεσμα
Περιεχόμενο (άρθρα, σελίδες, προϊόντα) μπλοκ <script>, αόρατοι σύνδεσμοι, <iframe> κακόβουλος κώδικας ή spam για τους επισκέπτες
Ρυθμίσεις και επιλογές αλλαγμένη διεύθυνση του ιστοτόπου, ξένα σενάρια σε widgets ή επιλογές θέματος ανακατευθύνσεις, σενάρια σε όλες τις σελίδες
Πίνακες χρηστών πρόσθετοι διαχειριστές μόνιμη πρόσβαση
Triggers κώδικας που αλλάζει περιεχόμενο σε κάθε αποθήκευση ο κακόβουλος κώδικας επιστρέφει μετά τον καθαρισμό
Προγραμματισμένα συμβάντα επαναλαμβανόμενες εργασίες στον διακομιστή βάσης δεδομένων αλλαγές χωρίς πρόσβαση μέσω ιστού
Χρήστες βάσης δεδομένων πρόσθετοι λογαριασμοί με εκτεταμένα δικαιώματα πρόσβαση παρακάμπτοντας το CMS

Οι τρεις τελευταίες γραμμές παραβλέπονται ιδιαίτερα συχνά, επειδή δεν βρίσκονται στους πίνακες του CMS αλλά στον ίδιο τον διακομιστή βάσης δεδομένων.

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

Σκεφτείτε επίσης άλλες βάσεις δεδομένων στον ίδιο διακομιστή. Δοκιμαστικά αντίγραφα και αντίγραφα staging, παλιές καταστάσεις έργων ή βάσεις δεδομένων άλλων ιστοτόπων βρίσκονται συχνά δίπλα και είναι προσβάσιμα με τα ίδια διαπιστευτήρια. Ό,τι βρεθεί στη βάση δεδομένων παραγωγής πρέπει να ελεγχθεί και εκεί, προτού ένα αντίγραφο χρησιμοποιηθεί αργότερα ξανά ως βάση.

Έλεγχος βάσης δεδομένων για κακόβουλο κώδικα: περιεχόμενο και ρυθμίσεις

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

# Δημιουργία συνεπούς εξαγωγής (τα διαπιστευτήρια ζητούνται διαδραστικά)
mysqldump --single-transaction --routines --triggers --events -u BENUTZER -p DATENBANK > export.sql
sha256sum export.sql > export.sql.sha256

# Καταμέτρηση τυπικών μοτίβων στην εξαγωγή
grep -oiE '<script[^>]{0,80}' export.sql | sort | uniq -c | sort -rn | head -30
grep -oiE '(eval\(|base64_decode|fromCharCode|document\.write|atob\()' export.sql | sort | uniq -c
grep -oiE 'https?://[a-z0-9.-]+' export.sql | sort | uniq -c | sort -rn | head -50

Το τελευταίο ερώτημα απαριθμεί όλα τα domains που εμφανίζονται στη βάση δεδομένων, κατά συχνότητα. Ξένα domains που δεν γνωρίζει κανείς στην ομάδα είναι οι σημαντικότεροι υποψήφιοι. Για στοχευμένα ερωτήματα στην ίδια τη βάση δεδομένων ταιριάζουν εντολές SELECT. Το παράδειγμα χρησιμοποιεί πίνακες του WordPress· το πρόθεμα και τα ονόματα των πινάκων άλλων συστημάτων αναφέρονται στην τεκμηρίωσή τους:

-- Ρυθμίσεις με σενάρια ή ύποπτες συναρτήσεις
SELECT option_name, LENGTH(option_value) AS laenge
FROM wp_options
WHERE option_value LIKE '%<script%'
   OR option_value LIKE '%eval(%'
   OR option_value LIKE '%base64_decode%'
ORDER BY laenge DESC;

Εγγραφές με πολύ μεγάλο περιεχόμενο αξίζουν ιδιαίτερη προσοχή. Υπόβαθρο για κρυψώνες ειδικά του WordPress προσφέρει ο οδηγός Εύρεση κερκόπορτων στο WordPress.

Triggers, συμβάντα και λογαριασμοί βάσης δεδομένων

Τα triggers και τα προγραμματισμένα συμβάντα δεν προβλέπονται καθόλου σε πολλές διαδικτυακές εφαρμογές. Αν υπάρχουν, κάποιος πρέπει να μπορεί να εξηγήσει γιατί. Αυτά τα ερωτήματα διαβάζουν μόνο από τους πίνακες συστήματος της MySQL και της MariaDB:

-- Triggers σε όλες τις βάσεις δεδομένων
SELECT TRIGGER_SCHEMA, TRIGGER_NAME, EVENT_OBJECT_TABLE, CREATED
FROM information_schema.TRIGGERS;

-- Προγραμματισμένα συμβάντα
SELECT EVENT_SCHEMA, EVENT_NAME, STATUS, CREATED, LAST_EXECUTED
FROM information_schema.EVENTS;

-- Αποθηκευμένες διαδικασίες και συναρτήσεις
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, CREATED
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema');

-- Χρήστες βάσης δεδομένων
SELECT user, host FROM mysql.user ORDER BY user;

Αν η εφαρμογή σας χρησιμοποιεί PostgreSQL ή άλλο σύστημα βάσης δεδομένων, οι πίνακες συστήματος και οι εντολές ονομάζονται διαφορετικά· η αρχή παραμένει η ίδια. Για την ανάλυση συνιστάται ξεχωριστός χρήστης βάσης δεδομένων που επιτρέπεται μόνο να διαβάζει. Έτσι ούτε ένα τυπογραφικό λάθος σε ένα ερώτημα μπορεί να αλλάξει κάτι και ο έλεγχος δεν αφήνει ίχνη στα δεδομένα.

Ένα trigger που προσθέτει κώδικα κατά την αποθήκευση ενός άρθρου εξηγεί γιατί ο κακόβουλος κώδικας επιστρέφει μετά από κάθε καθαρισμό. Οι άγνωστοι χρήστες βάσης δεδομένων ανήκουν στον έλεγχο λογαριασμών όπως και οι λογαριασμοί διαχειριστή στο CMS· περισσότερα στο Εύρεση ξένων λογαριασμών διαχειριστή σε CMS και διακομιστή.

Καθαρισμός χωρίς καταστροφή δεδομένων

Ο καθαρισμός είναι το πιο λεπτό μέρος. Αυτή η σειρά έχει αποδειχθεί:

  1. Αξιολόγηση ευρημάτων: Κάθε εύρημα κατατάσσεται ως γνωστό, αθώο και εξηγήσιμο ή ξένο. Οι κώδικες παρακολούθησης και χαρτών είναι συχνά θεμιτοί.
  2. Κλείσιμο της εισόδου: Φέρτε την PHP σε διορθωμένη έκδοση (8.5.12, 8.4.27, 8.3.36, 8.2.35 ή επιβεβαιωμένο backport), επανεκκινήστε όλους τους workers, ενημερώστε την εφαρμογή.
  3. Στοχευμένη αφαίρεση: Καθαρίστε το ξένο περιεχόμενο μέσω της εφαρμογής ή με εργαλεία που χειρίζονται σωστά σειριοποιημένα δεδομένα. Διαγράψτε ξένα triggers, συμβάντα και λογαριασμούς.
  4. Αλλαγή διαπιστευτηρίων: Νέος κωδικός βάσης δεδομένων, καταχώρισή του στη διαμόρφωση της εφαρμογής, περιορισμός των δικαιωμάτων του χρήστη της εφαρμογής στη δική του βάση δεδομένων.
  5. Επανέλεγχος: Επαναλάβετε τα ερωτήματα αναζήτησης έπειτα από λίγες ημέρες.
Σημαντικό

Μην αντικαθιστάτε τίποτα με αναζήτηση και αντικατάσταση στην εξαγωγή SQL. Τα σειριοποιημένα δεδομένα PHP αποθηκεύουν μαζί και το μήκος κάθε συμβολοσειράς. Αν αλλάξει το μήκος, η ρύθμιση γίνεται αδιάβαστη και ο ιστότοπος μπορεί να τεθεί εκτός λειτουργίας.

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

Πώς βοηθά συγκεκριμένα η PHP SOS;

  • Διασφαλίζουμε τη βάση δεδομένων με άθροισμα ελέγχου και ψάχνουμε την εξαγωγή για σενάρια, ξένα domains και συγκαλυμμένο κώδικα.
  • Ελέγχουμε triggers, συμβάντα, διαδικασίες και χρήστες βάσης δεδομένων που βρίσκονται εκτός του CMS.
  • Καθαρίζουμε τα ευρήματα στο πλαίσιο της αφαίρεσης κακόβουλου λογισμικού, χωρίς να καταστρέψουμε σειριοποιημένα δεδομένα.
  • Περιορίζουμε τα δικαιώματα του χρήστη της εφαρμογής και επαναλαμβάνουμε τον έλεγχο μετά τον καθαρισμό.

Συχνές ερωτήσεις

Μπορεί να κρύβεται κακόβουλος κώδικας στη βάση δεδομένων;

Ναι. Οι επιτιθέμενοι γράφουν JavaScript σε άρθρα, περιγραφές προϊόντων ή widgets, αλλάζουν ρυθμίσεις διευθύνσεων για ανακατευθύνσεις ή δημιουργούν λογαριασμούς διαχειριστή. Στη MySQL και στη MariaDB μπορούν επιπλέον triggers και προγραμματισμένα συμβάντα να αλλάζουν δεδομένα. Μια σάρωση αρχείων δεν βρίσκει τίποτα από αυτά.

Πώς ψάχνω τη βάση δεδομένων χωρίς να καταστρέψω κάτι;

Εργαστείτε σε εξαγωγή ή αντίγραφο και χρησιμοποιήστε μόνο ερωτήματα SELECT. Μια εξαγωγή μπορεί επιπλέον να αναζητηθεί ως αρχείο κειμένου με grep. Αλλαγές γίνονται μόνο όταν έχει αξιολογηθεί κάθε εύρημα και υπάρχει αντίγραφο ασφαλείας.

Γιατί να μην καθαρίσω τα ευρήματα με αναζήτηση και αντικατάσταση στην εξαγωγή;

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

Είναι ύποπτο κάθε σενάριο στη βάση δεδομένων;

Όχι. Κώδικες παρακολούθησης, χάρτες, βίντεο ή widgets chat αποθηκεύονται επίσης ως σενάριο. Αποφασιστικό είναι αν κάποιος στην ομάδα γνωρίζει την εγγραφή και τη διεύθυνση προορισμού.

Πηγές

Άμεση επικοινωνία

Κάθε ώρα μετράει. Γράψτε μας τώρα.

Περιγράψτε σύντομα το σύστημα, την έκδοση PHP και ό,τι παρατηρείτε. Θα επικοινωνήσουμε μαζί σας, θα διευκρινίσουμε την κατάσταση και θα εργαστούμε εξ αποστάσεως μέχρι το περιστατικό να κλείσει και να τεκμηριωθεί.

Άμεση βοήθεια