# Προειδοποιητικό σημάδι: ο διακομιστής ιστού ξεκινά shell

> Το PHP-FPM ή το Apache ξεκινά shell; Διαβάστε το δέντρο διεργασιών, ξεχωρίστε τις αθώες περιπτώσεις από ίχνη εισβολής και παρακολουθήστε το μοτίβο μόνιμα.

Πηγή: https://phpsos.de/el/blog/webserver-startet-shell/  
Ημερομηνία: 25/10/2026  
Πάροχος: PHP SOS, Επείγουσα βοήθεια PHP και ασφάλεια διακομιστών. Άμεση βοήθεια μέσω WhatsApp: https://wa.me/491736494914?text=%CE%93%CE%B5%CE%B9%CE%B1%20%CF%83%CE%B1%CF%82%2C%20PHP%20SOS%2C%20%CF%87%CF%81%CE%B5%CE%B9%CE%B1%CE%B6%CF%8C%CE%BC%CE%B1%CF%83%CF%84%CE%B5%20%CE%B2%CE%BF%CE%AE%CE%B8%CE%B5%CE%B9%CE%B1%20%CE%BC%CE%B5%20%CF%84%CE%BF%CE%BD%20%CE%B4%CE%B9%CE%B1%CE%BA%CE%BF%CE%BC%CE%B9%CF%83%CF%84%CE%AE%20PHP%20%CE%BC%CE%B1%CF%82.%20%CE%95%CF%84%CE%B1%CE%B9%CF%81%CE%B5%CE%AF%CE%B1%3A%20%E2%80%A6%20%CE%99%CF%83%CF%84%CF%8C%CF%84%CE%BF%CF%80%CE%BF%CF%82%3A%20%E2%80%A6

**Εν ολίγοις:** Όταν το PHP-FPM, το Apache ή άλλη διεργασία διακομιστή ιστού ξεκινά ένα shell όπως το `sh` ή το `bash`, αυτό είναι ένα από τα ισχυρότερα προειδοποιητικά σημάδια για εισβολή μέσω του ιστότοπου. Ελέγξτε το δέντρο διεργασιών, τη γραμμή εντολών και τον κατάλογο εργασίας του shell πριν τερματίσετε οτιδήποτε. Μεμονωμένα σύντομα shells μπορεί να είναι θεμιτά· shells που τρέχουν πολύ με εργαλεία δικτύου σχεδόν ποτέ.

## Γιατί αυτό το μοτίβο λέει τόσα πολλά

Ένας διακομιστής ιστού απαντά σε αιτήματα. Το PHP-FPM, ο διαχειριστής διεργασιών που εκτελεί scripts PHP για τον διακομιστή ιστού, δεν ξεκινά γι' αυτό κανονικά άλλα προγράμματα. Ένα shell κάτω από τον διακομιστή ιστού σημαίνει ότι κώδικας PHP κάλεσε σκόπιμα ένα πρόγραμμα. Είτε το κάνει η εφαρμογή επίτηδες, είτε κάποιος άλλος έχει παρεισφρήσει κώδικα.

Για το PHP2Shell δεν υπάρχουν δημοσιευμένοι, επιβεβαιωμένοι Indicators of Compromise, δηλαδή κατάλογος σταθερών χαρακτηριστικών αναγνώρισης. Η αναγνώριση βασίζεται στη συμπεριφορά. Σύμφωνα με τις αναφορές που διαθέτουμε, διεργασίες διακομιστή ιστού ή PHP-FPM που ξεκινούν shell συγκαταλέγονται στα ισχυρότερα γενικά προειδοποιητικά σημάδια. Αυτό ισχύει για κάθε ευπάθεια μέσω της οποίας οι επιτιθέμενοι εκτελούν κώδικα στον διακομιστή. Μια επισκόπηση περαιτέρω ενδείξεων δίνει το [Έχω ήδη παραβιαστεί;](https://phpsos.de/el/php2shell/bin-ich-gehackt-anzeichen/).

Γιατί είναι το shell τόσο σημαντικό για έναν επιτιθέμενο; Με μια ευπάθεια μπορεί αρχικά να στείλει μόνο μεμονωμένες εντολές μέσω της διεργασίας PHP. Ένα shell το μετατρέπει σε βολικό χώρο εργασίας: μπορεί να κοιτάξει γύρω του, να κατεβάσει εργαλεία, να διαβάσει διαπιστευτήρια από αρχεία διαμόρφωσης και να εγκατασταθεί μόνιμα. Όποιος αναγνωρίζει το shell, αναγνωρίζει συχνά και τον επιτιθέμενο τη στιγμή που περνά από την πρώτη πρόσβαση στο πραγματικό του σχέδιο.

## Το PHP-FPM ξεκινά bash: ανάγνωση του δέντρου διεργασιών

Κάθε διεργασία σε Linux έχει μια γονική διεργασία. Το ερώτημα είναι αν ένα shell τρέχει ως παιδί μιας διεργασίας διακομιστή ιστού. Οι παρακάτω εντολές απλώς διαβάζουν:

```bash
# Δέντρο διεργασιών με χρήστη, PID γονέα και χρόνο εκκίνησης
ps -eo user,pid,ppid,lstart,cmd --forest | grep -B2 -A4 -E "[p]hp-fpm|[a]pache2|[h]ttpd|[l]sphp"

# Shells που τρέχουν υπό τυπικούς χρήστες διακομιστή ιστού
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) " | grep -E "[ /](ba|da)?sh( |$)"

# Δέντρο ξεκινώντας από την παλαιότερη διεργασία PHP-FPM
pstree -alp "$(pgrep -o php-fpm)"
```

Αν βρήκατε ένα ύποπτο shell, οι εγγραφές κάτω από το `/proc` δίνουν περαιτέρω ενδείξεις, επίσης μόνο για ανάγνωση:

```bash
PID=12345   # PID του ύποπτου shell
tr '\0' ' ' < /proc/$PID/cmdline; echo        # πλήρης γραμμή εντολών
ls -l /proc/$PID/cwd /proc/$PID/exe            # κατάλογος εργασίας και αρχείο προγράμματος
ls -l /proc/$PID/fd 2>/dev/null | grep socket  # ανοιχτές συνδέσεις δικτύου
```

Τα ονόματα διεργασιών σε Debian και Ubuntu είναι συχνά `php8.3-fpm` ή παρόμοια· προσαρμόστε τα μοτίβα αναζήτησης. Κατάλογοι εργασίας στο `/tmp`, στο `/dev/shm` ή σε φακέλους upload είναι σαφές σημάδι.

## Θεμιτές εξαιρέσεις και πραγματικά προειδοποιητικά σημάδια

Ορισμένες εφαρμογές καλούν προγράμματα μέσω PHP. Εκεί μπορεί να δημιουργηθεί για λίγο ένα shell, για παράδειγμα όταν η PHP παραδίδει email μέσω `sendmail_path` ή μια εφαρμογή επεξεργάζεται εικόνες με εξωτερικό εργαλείο. Τέτοια shells ζουν μόνο δευτερόλεπτα και καλούν πάντα το ίδιο πρόγραμμα. Τεκμηριώστε αυτές τις αναμενόμενες περιπτώσεις μία φορά σωστά· τότε κάθε απόκλιση ξεχωρίζει αμέσως, αντί να χάνεται σε ένα πλήθος γνωστών μηνυμάτων.

| Παρατήρηση | Μάλλον αθώο, όταν | Ύποπτο, όταν |
|---|---|---|
| Σύντομο shell κάτω από το PHP-FPM | ξεκινά ένα γνωστό πρόγραμμα της εφαρμογής | ο στόχος και ο σκοπός είναι ασαφείς |
| Shell που τρέχει περισσότερο | ποτέ | τρέχει λεπτά ή ώρες |
| Εργαλεία δικτύου ως θυγατρική διεργασία | γνωστό ερώτημα ενημέρωσης ή API της εφαρμογής | ακολουθούν λήψεις σε προσωρινούς καταλόγους |
| Κατάλογος εργασίας | φάκελος έργου της εφαρμογής | `/tmp`, `/dev/shm`, φάκελοι upload |
| Χρονική στιγμή | ταιριάζει σε γνωστή ενέργεια, π.χ. αποστολή email | τη νύχτα, χωρίς δραστηριότητα χρήστη, κατά συστάδες |

Αν δεν ξέρετε αν η εφαρμογή σας καλεί προγράμματα, ρωτήστε τον προγραμματιστή ή αναζητήστε στον κώδικα συναρτήσεις όπως `exec`, `shell_exec`, `system`, `passthru`, `proc_open` και `popen`. Ευρήματα στον δικό σας κώδικα είναι φυσιολογικά, ευρήματα σε άγνωστα αρχεία όχι.

## Μόνιμη παρακολούθηση αντί για μία ματιά

Ένα στιγμιότυπο με `ps` πιάνει μόνο shells που τρέχουν εκείνη τη στιγμή. Οι βραχύβιες διεργασίες ξεφεύγουν. Πιο αξιόπιστο είναι να καταγράφονται μόνιμα οι εκκινήσεις προγραμμάτων από τον χρήστη του διακομιστή ιστού. Σε Linux αυτό το προσφέρει η υπηρεσία ελέγχου auditd με κανόνα για εκκινήσεις προγραμμάτων του χρήστη του διακομιστή ιστού. Η αξιολόγηση γίνεται με ανάγνωση:

```bash
# Εμφάνιση καταγεγραμμένων εκκινήσεων προγραμμάτων κάτω από ένα κλειδί κανόνα (το κλειδί ως παράδειγμα)
sudo ausearch -k web_exec --start today -i | grep -E "exe=|proctitle="
```

Πώς μοιάζει ο κανόνας, εξαρτάται από τη διανομή και το αναγνωριστικό χρήστη· δοκιμάστε τον πρώτα, γιατί σε πολύ φορτωμένους διακομιστές δημιουργούνται πολλές εγγραφές.

Δύο συμπληρώματα κάνουν την παρακολούθηση στιβαρή. Πρώτον, τα πρωτόκολλα πρέπει να στέλνονται επιπλέον σε ένα κεντρικό σύστημα, γιατί ένας επιτιθέμενος με δικαιώματα root μπορεί να διαγράψει τοπικά logs. Δεύτερον, χρειάζεται ειδοποίηση: μια εκκίνηση προγράμματος από τον χρήστη του διακομιστή ιστού που δεν βρίσκεται σε μια σύντομη λίστα αναμενόμενων προγραμμάτων πρέπει να προκαλεί ειδοποίηση και όχι απλώς μια εγγραφή στο log. Όποιος χρησιμοποιεί ήδη λύση ανίχνευσης σε τερματικά ή διακομιστές, μπορεί να αποτυπώσει τον ίδιο κανόνα εκεί. Προληπτικά μπορείτε να αποκλείσετε με το `disable_functions` ό,τι δεν χρειάζεται η εφαρμογή. Αυτό δεν κλείνει ευπάθεια στον διερμηνέα, δυσκολεύει όμως το επόμενο βήμα ενός επιτιθέμενου. Λεπτομέρειες στο [Σωστή χρήση του disable_functions](https://phpsos.de/el/ratgeber/disable-functions/).

## Τι κάνετε αν βρείτε shell κάτω από τον διακομιστή ιστού

1. **Τεκμηρίωση:** Διασφαλίστε σε αρχείο εκτός του καταλόγου ιστού την έξοδο του `ps`, τη γραμμή εντολών, τον κατάλογο εργασίας και τις ανοιχτές συνδέσεις.
2. **Μην καθαρίζετε:** Μη διαγράφετε αρχεία και μη τερματίζετε διεργασίες πριν διασφαλιστούν τα ίχνη.
3. **Απομόνωση:** Αποσυνδέστε τον διακομιστή από το δίκτυο ή περιορίστε σοβαρά την πρόσβαση.
4. **Αναζήτηση αιτίας:** Ελέγξτε logs, νέα αρχεία και μηχανισμούς διατήρησης όπως cronjobs, βλ. [Εύρεση ύποπτων διεργασιών σε διακομιστές Linux](https://phpsos.de/el/blog/verdaechtige-prozesse-linux/).
5. **Αλλαγή πρόσβασης:** Όλοι οι κωδικοί και τα κλειδιά που βρίσκονταν στον διακομιστή θεωρούνται γνωστά.

Αν η εφαρμογή τρέχει σε containers, ισχύει η ίδια αρχή σε μικρογραφία. Ένα shell σε container PHP είναι εξίσου ύποπτο όπως σε κλασικό διακομιστή και οι εικόνες container το περιέχουν συχνά μόνο επειδή το φέρνει το βασικό image. Διασφαλίστε πριν από την επανεκκίνηση του container την κατάστασή του, γιατί μαζί με το container εξαφανίζονται και τα ίχνη στο πρόσκαιρο σύστημα αρχείων.

Ελέγξτε επιπλέον τη γειτονιά. Ένας επιτιθέμενος με shell σε διακομιστή ιστού προσπαθεί συχνά να φτάσει από εκεί σε άλλα συστήματα, για παράδειγμα στη βάση δεδομένων, σε αποθήκευση αντιγράφων ασφαλείας ή σε εσωτερικές διεπαφές διαχείρισης. Τα διαπιστευτήρια σε αρχεία διαμόρφωσης της εφαρμογής του το διευκολύνουν.

> **Δράστε άμεσα:**
> Ένα shell που τρέχει πολύ κάτω από το PHP-FPM σε διακομιστή με δεδομένα πελατών αποτελεί περιστατικό ασφαλείας. Αντιμετωπίστε το ως τέτοιο: διασφάλιση, απομόνωση, δομημένη διερεύνηση, έλεγχος υποχρεώσεων γνωστοποίησης.

## Πώς βοηθά συγκεκριμένα η PHP SOS;

- **Κατάταξη του ευρήματος:** Ελέγχουμε δέντρο διεργασιών, γραμμές εντολών και συνδέσεις και ξεχωρίζουμε τη συμπεριφορά της εφαρμογής από ίχνη εισβολής.
- **Διασφάλιση ιχνών:** Διασφαλίζουμε την κατάσταση του συστήματος με τρόπο που μπορεί να ελεγχθεί, πριν αλλάξει οτιδήποτε.
- **Διαχείριση του περιστατικού:** Με την [αντιμετώπιση περιστατικών (Incident Response)](https://phpsos.de/el/leistungen/incident-response/) οδηγούμε από τον περιορισμό έως το τεκμηριωμένο κλείσιμο.
- **Μόνιμη θωράκιση:** Ρυθμίζουμε την καταγραφή εκκινήσεων προγραμμάτων και περιορίζουμε τις συναρτήσεις PHP στα απαραίτητα. Πώς λειτουργεί εσωτερικά το PHP-FPM, εξηγεί το [Το PHP-FPM εξηγείται](https://phpsos.de/el/php/php-fpm-erklaert/).


## Συχνές ερωτήσεις

**Είναι κάθε shell κάτω από το PHP-FPM επίθεση;**  
Όχι κάθε μία. Ορισμένες εφαρμογές καλούν σκόπιμα μέσω PHP προγράμματα, για παράδειγμα για επεξεργασία εικόνων ή αποστολή email, και τότε μπορεί να δημιουργηθεί για λίγο ένα shell. Γίνεται ύποπτο όταν το shell τρέχει για περισσότερο, ξεκινά εργαλεία δικτύου ή εργάζεται από ασυνήθιστους καταλόγους.

**Πρέπει να τερματίσω αμέσως την ύποπτη διεργασία;**  
Πρώτα τεκμηρίωση, μετά δράση. Καταγράψτε δεδομένα διεργασίας, γραμμή εντολών, κατάλογο εργασίας και συνδέσεις δικτύου. Έπειτα απομονώστε τον διακομιστή. Ένας βιαστικός τερματισμός καταστρέφει ίχνη και δεν εμποδίζει τον επιτιθέμενο να επιστρέψει.

**Υπάρχουν επιβεβαιωμένα χαρακτηριστικά αναγνώρισης για το PHP2Shell;**  
Όχι. Δεν υπάρχουν δημοσιευμένοι, επιβεβαιωμένοι Indicators of Compromise. Τα shells κάτω από τον διακομιστή ιστού είναι ένα γενικό προειδοποιητικό σημάδι για εισβολές μέσω εφαρμογών ιστού, όχι ειδικό για το PHP2Shell.

**Πώς εμποδίζω την PHP να ξεκινά καν shells;**  
Μέσω του disable_functions μπορούν να αποκλειστούν συναρτήσεις όπως exec, shell_exec, system και proc_open, αν η εφαρμογή δεν τις χρειάζεται. Αυτό δεν κλείνει ευπάθεια στον διερμηνέα PHP, δυσκολεύει όμως την εκμετάλλευση.

## Πηγές

- [BSI: Ομοσπονδιακή Υπηρεσία Ασφάλειας Πληροφορικής της Γερμανίας](https://www.bsi.bund.de/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [php.net: ανακοινώσεις ασφαλείας](https://www.php.net/)
