Mastodon
Connect with us

Hacking

PoisonedRefresh: μνήμη‑μόνο backdoor σε F5 BIG‑IP APM

Μια νέα τεχνική επίθεσης εισάγει PHP web shell μόνο στη μνήμη των Apache/PHP processes σε F5 BIG‑IP APM, καθιστώντας άχρηστη την αποκλειστική εστίαση σε έλεγχο αρχείων. Η άμεση εφαρμογή patches, η ανάλυση μνήμης και η παρακολούθηση διεργασιών είναι κρίσιμες.

Published

on

PoisonedRefresh: μνήμη‑μόνο backdoor σε F5 BIG‑IP APM

Μία νέα, σύνθετη επίθεση που στοχεύει σε εγκαταστάσεις F5 BIG‑IP APM έφερε στο φως ένα εργαλείο που αλλάζει τα δεδομένα στην ανίχνευση: το PoisonedRefresh. Σε αντίθεση με τις παραδοσιακές web‑shells που αποθηκεύονται στο δίσκο, αυτός ο implant τροποποιεί τη συμπεριφορά της Apache διαδικασίας στο μνήμη, εισάγοντας έναν PHP web shell μόνο στην εσωτερική, σεμνή εικόνα των σεναρίων.

Η τεχνική εκμεταλλεύεται την ευπάθεια CVE‑2025‑53521 σε περιβάλλοντα BIG‑IP APM όπου υπάρχει διαμορφωμένη access policy σε virtual server. Το αποτέλεσμα είναι ένα ιδιαίτερα δύσκολο στον εντοπισμό backdoor που αφήνει καθαρά αρχεία στον δίσκο αλλά εκτελεί τροποποιημένο κώδικα από τη μνήμη.

Τι είναι το PoisonedRefresh και γιατί ξεχωρίζει

Οι παραδοσιακές web‑shells είναι μικρά scripts (συνήθως PHP, JSP ή ASP) που γράφονται σε έναν web‑προσβάσιμο φάκελο. Αυτό επιτρέπει στους αναλυτές να κυνηγήσουν τροποποιημένα αρχεία, ύποπτα POST αιτήματα ή αλλοιωμένα hashes. Το PoisonedRefresh ακυρώνει αυτό το μοντέλο: δεν αφήνει «αποδεικτικά» ίχνη στο filesystem· η τροποποίηση συμβαίνει κατά το mmap() των στοχευμένων αρχείων και μόνο στην εικονική μνήμη της διαδικασίας Apache.

Η πρακτική του είναι να παρεμβαίνει στο libphp —το PHP module μέσα στον Apache— ώστε όταν το λειτουργικό σύστημα μοιράζει το περιεχόμενο ενός .php3 αρχείου στη μνήμη, η εικόνα που βλέπει ο interpreter έχει ήδη ενισχυθεί με κακόβουλο payload. Το αποτέλεσμα: ο Apache εργάτης εκτελεί έναν «μνήμη‑μόνο» web shell ενώ το αρχείο στο δίσκο παραμένει αναλλοίωτο και φαινομενικά «καθαρό».

Πώς δουλεύει το implant σε επίπεδο μηχανισμού

Σε επίπεδο δυαδικών, το implant είναι ένα stripped, στατικά linked ELF που χρησιμοποιεί κρυπτογράφηση των συμβολοσειρών του με RC4. Αντί της τυπικής ακολουθίας εκκίνησης της διαδικασίας, το binary lanσάρει έναν custom loader: ξανανοίγει τον εαυτό του μέσω /proc/self/exe, κάνει map ένα ενσωματωμένο αρχικό εκτελέσιμο στη μνήμη και ανακατευθύνει την εκτέλεση γύρω από μια wrapper υλοποίηση του __libc_start_main.

Με αυτόν τον τρόπο το implant αποκτά έλεγχο προτού η εφαρμογή φτάσει στο normal main() και έτσι μπορεί να αναζητήσει και να επιλύσει API, να αποκρυπτογραφήσει strings, και να εγκαταστήσει hooks σε κρίσιμα σημεία. Με άλλα λόγια, παίρνει «προνόμια» παρατήρησης και τροποποίησης την κατάλληλη στιγμή, πριν ο Apache αρχίσει κανονικά να εξυπηρετεί αιτήματα.

Πώς εισάγεται ο PHP web shell στη μνήμη και πώς επικοινωνεί

Αφού ο implant έχει φορτώσει και ενεργοποιήσει τους hooks, παρακολουθεί συγκεκριμένες λειτουργίες της Apache Portable Runtime (APR), ιδιαίτερα την apr_dso_load. Όταν η Apache φορτώνει το PHP module, το PoisonedRefresh εντοπίζει το module μέσω του χάρτη μνήμης (/proc/self/maps), προσωρινά αλλάζει δικαιώματα μνήμης, προβαίνει σε binaries patching σε relocation/call targets και επαναφέρει τα δικαιώματα.

Τα hooks που εγκαθιστά παρεμβαίνουν σε syscalls και βιβλιοθηκες όπως open, close, mmap και __fxstat. Έτσι, όταν ένας Apache worker κάνει mmap() ενός στοχευμένου αρχείου —η Sophos αναφέρει αρχεία όπως apm_css.php3, full_wt.php3 και webtop_popup_css.php3— ο loader αντικαθιστά το περιεχόμενο που θα εμφανιστεί στην εικονική μνήμη με ένα κακόβουλο PHP payload.

Το web shell που εγχέεται διαβάζει raw δεδομένα από php://input, αναζητά ένα magic prefix σε κάθε αίτημα, αποκρυπτογραφεί το υπόλοιπο payload και το εκτελεί μέσω της PHP eval(). Η απάντηση που επιστρέφει είναι HTTP 201 με Content‑Type: text/css; charset=utf-8, επιχειρώντας να συγκαλύψει την κακόβουλη επικοινωνία πίσω από φαινομενικά CSS‑σχετικές αιτήσεις.

Επιπλέον backdoor: το UNIX socket και η αλληλεπίδραση σε τοπικό επίπεδο

Το PoisonedRefresh δεν περιορίζεται στην HTTP‑οδηγούμενη εκτέλεση. Παράλληλα εγκαθιστά ένα δεύτερο κανάλι πρόσβασης μέσω ενός UNIX domain socket στο /run/bigtlog.pipe. Αντί να ανοίξει έναν TCP listener που είναι ευκολοανιχνεύσιμος από network scans, το implant περιμένει για συμβάν στην hooked apr_time_now, ξεκινά έναν background worker και δεσμεύει την τοπική socket διεπαφή.

Μετά την αυθεντικοποίηση στο socket, το κακόβουλο στοιχείο ανακατευθύνει τα streams standard input/output/error στη σύνδεση και εκτελεί το /bin/bash, δημιουργώντας μια διαδραστική τοπική shell. Παράλληλα, το backdoor forkάρει child processes ώστε να συνεχίσει να δέχεται επόμενες συνδέσεις. Ο σχεδιασμός αυτός προσφέρει στους επιτιθέμενους δύο συμπληρωματικούς τρόπους πρόσβασης: HTTP‑based εκτέλεση κώδικα και τοπική, interactive πρόσβαση μέσω του UNIX socket.

Δείκτες συμβιβασμού και πώς να τους ψάξετε

Σε μια επίθεση PoisonedRefresh, οι παραδοσιακές, δισκ‑κεντρικές τεχνικές ανίχνευσης αποδεικνύονται ανεπαρκείς. Τα παρακάτω σήματα είναι κρίσιμα για τον εντοπισμό και τη διερεύνηση συμβιβασμού:

  • Apache workers που διαβάζουν /proc/self/maps ή εμφανίζουν ασυνήθιστη πρόσβαση σε maps της μνήμης.
  • Αλλαγές στα δικαιώματα μνήμης γύρω από το libphp —από writable σε executable— μετά από loading του module.
  • Δημιουργία του /run/bigtlog.pipe socket ή άλλων άγνωστων UNIX sockets στον host.
  • Apache‑σχετικές διεργασίες που εκτελούν /bin/bash ή παρουσιάζουν fork/exec συμπεριφορές που δεν εξηγούνται από τον κανονικό πόρο της υπηρεσίας.
  • Αναπάντεχα POST αιτήματα προς αρχεία .php3 που επιστρέφουν HTTP 201 και Content‑Type text/css.

Για έλεγχο, χρειάζεται μνήμηκή ανάλυση (memory forensics), έλεγχος διεργασιών, συλλογή /proc maps και εξαγωγή ίχνων από δικτυακή τηλεμετρία και web server logs. Τα EDR/EDR‑like εργαλεία που παρακολουθούν syscalls και ανωμαλίες στη μνήμη είναι αποφασιστικής σημασίας.

Ευπάθεια, εκδόσεις και διορθώσεις

Η επίθεση εκμεταλλεύεται την CVE‑2025‑53521, μια unauthenticated RCE μετά από misconfiguration σε BIG‑IP APM όπου υπάρχει access policy πάνω σε virtual server. Η ευπάθεια επηρεάζει πολλές σειρές του προϊόντος, μεταξύ άλλων τις branches 15.1.x, 16.1.x, 17.1.x και 17.5.x. Οι επιδιορθώσεις που κυκλοφόρησαν περιλαμβάνουν τις εκδόσεις 15.1.10.8, 16.1.6.1, 17.1.3 και 17.5.1.3.

Ο καθαρός κανόνας: οι οργανισμοί που τρέχουν BIG‑IP APM πρέπει να εφαρμόσουν άμεσα τις διορθώσεις και να ακολουθήσουν τις οδηγίες αξιολόγησης συμβιβασμού της F5. Η απλή «σκληροποίηση» του Apache δεν αρκεί, γιατί το πρόβλημα δεν είναι σε ένα ξεχωριστό HTTP listener αλλά στον ίδιο τον συνδυασμό της ευπάθειας στον APM και στην ικανότητα του implant να παρεμβαίνει στη μνήμη της Apache.

Τι σημαίνει στην πράξη για τις επιχειρήσεις και την άμυνα

Η περίπτωση PoisonedRefresh αντικατοπτρίζει μια τάση: επιθέσεις που λειτουργούν αποκλειστικά στη μνήμη και αποφεύγουν τα «απτά» ίχνη στο filesystem. Αυτό αλλάζει ριζικά το προφίλ της ανίχνευσης και απαιτεί βαθύτερα εργαλεία παρακολούθησης σε runtime. Οι επιχειρήσεις χρειάζονται defense‑in‑depth που να περιλαμβάνει γρήγορο patching, runtime monitoring, memory inspection και δικτυακή τηλεμετρία.

Πρακτικά βήματα που πρέπει να γίνουν άμεσα είναι:

  1. Εφαρμογή των επιδιορθώσεων F5 για CVE‑2025‑53521 και πλήρης έλεγχος των APM configurations.
  2. Κατάσχεση μνήμης από ύποπτους Apache workers για ανάλυση και εντοπισμό injected images.
  3. Έλεγχος web logs για ασυνήθιστες POST αιτήσεις στα στοχευμένα .php3 αρχεία και για HTTP 201 / text/css απαντήσεις.
  4. Έλεγχο του συστήματος για παρουσία του /run/bigtlog.pipe και αναλυτική παρακολούθηση διεργασιών που forkάρουν για να τρέξουν /bin/bash.
  5. Αναβάθμιση των μηχανισμών ανίχνευσης ώστε να συμπεριλαμβάνουν monitoring για mmap/open hooks, αλλαγές σε memory protections και αναπάντεχη χρήση του /proc/self/maps.

Τέλος, αναδεικνύεται η αξία της προετοιμασίας incident response που περιλαμβάνει ικανότητα γρήγορης μνήμη‑forensics, εντοπισμό lateral movement και διαδικασίες ανακατασκευής συστημάτων μετά από πιθανό συμβιβασμό.

Advertisement