CriticoFamiglia antivirus

php.bkdr.obf: backdoor offuscata, a volte travestita da immagine

php.bkdr.obf è la firma di una backdoor il cui codice è offuscato, cioè trasformato in modo da non essere leggibile né dalle persone né dai filtri più semplici: catene di base64_decode, gzinflate, str_rot13, stringhe spezzate e ricomposte. php.gif.bkdr e php.bkdr.cloaked.png sono la stessa idea con un camuffamento in più: il codice sta in un file che si presenta come immagine. Nel corpus di misura di WPsec.it dell'agosto 2026 le tre firme insieme compaiono su 13 domini e 6 server; fra le estensioni rilevate ci sono .webp, .gif e .phar accanto a .php.

Famiglia: Backdoor offuscata o nascosta in un'immagine · Anche noto come: bkdr.obf, mlw.obf, gif.bkdr, cloaked.png · Aggiornato il 1 settembre 2026

Le stringhe esatte

Se hai trovato una di queste stringhe sul tuo sito, sei nella pagina giusta.

  • php.bkdr.obf
  • SMW-BLKH-SA-CLOUDAV-php.bkdr.obf
  • mlw.obf
  • php.gif.bkdr
  • php.bkdr.cloaked.png

Dove si trova

  • Fuori dalle cartelle di WordPress nel 94% dei casi
  • In file con estensione da immagine, .webp o .gif, che il server esegue solo perché un altro file li include o perché una regola di .htaccess lo dice
  • In wp-content/uploads quando il vettore è stato un upload non filtrato: l'immagine caricata era un file PHP con intestazione grafica

Cosa fa

  • Fa ciò che fa ogni backdoor, ma con un codice che una lettura veloce non riconosce: chi cerca eval o system a occhio non lo trova.
  • Nella variante immagine supera i filtri di upload che controllano solo l'estensione o i primi byte del file.
  • Nel corpus era quasi sempre integra: solo l'1% dei file era stato svuotato dall'antivirus, contro il 71% dei finti plugin. L'offuscamento funziona anche contro la quarantena.

Come verificare

Comandi di sola lettura: non modificano nulla. Sostituisci ESEMPIO.it con il tuo dominio ed esegui dalla radice del sito.

  1. Cerca le catene di decodifica tipiche dell'offuscamento

    grep -rn --include='*.php' -E '(base64_decode|gzinflate|gzuncompress|gzdecode|str_rot13|strrev|convert_uu)\s*\(' . | grep -vE 'wp-(admin|includes)/|plugins/(akismet|jetpack|woocommerce)/' | head -30
  2. Cerca file immagine che contengono codice PHP

    find . -type f \( -iname '*.gif' -o -iname '*.png' -o -iname '*.jpg' -o -iname '*.webp' -o -iname '*.ico' \) -size -200k -exec grep -lI -m1 '<?php' {} + 2>/dev/null | head
  3. Cerca chi include file con estensione da immagine

    grep -rn --include='*.php' -E '(include|require)(_once)?\s*\(?\s*[^;]*\.(gif|png|jpg|webp|ico)' . | head -20

Cosa non basta fare

  • Leggere il file per capire cosa fa: è offuscato apposta, e decodificarlo a mano è lento e rischioso. Il verdetto dell'antivirus basta per trattarlo come backdoor.
  • Cancellare l'immagine sospetta: va trovato il file PHP che la include, altrimenti ne arriva un'altra.
  • Contare sul filtro di upload del plugin: la variante immagine è nata per superarlo.

Cosa fare

  • Salva una copia del file fuori dal sito e rimuovilo insieme a chi lo include.
  • Cerca gli upload non filtrati: moduli, gallerie, importatori. È il vettore tipico della variante immagine.
  • Se hai accesso alla configurazione, impedisci l'esecuzione di PHP in wp-content/uploads con una regola dedicata.
  • Chiudi il vettore di ingresso e ripeti la scansione dopo qualche giorno.

FAQ

Domande frequenti

  • Da sola no. Un file .gif che contiene PHP viene eseguito solo se un altro file PHP lo include, oppure se una regola del server dice di trattare quell'estensione come PHP. Per questo la verifica cerca prima gli include e gli handler: l'immagine è il carico, non l'innesco.

Se il sito è compromesso

Trovare la firma è il primo passo, chiudere la via di ingresso è quello che conta

Rimuovere l'artefatto senza chiudere il punto da cui è entrato porta alla reinfezione. La scansione gratuita è il modo più rapido per capire cosa è osservabile dall'esterno del tuo sito.

Questa pagina pubblica firme di rilevamento, non codice sfruttabile. I casi citati sono descritti in forma anonima.