Individuare gli script PHP che inviano SPAM: differenze tra le versioni
(14 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili|Wheezy|Jessie|Stretch}} | |||
__TOC__ | __TOC__ | ||
== Introduzione == | == Introduzione == | ||
Quando un sito in PHP viene viene utilizzato per inviare tonnellate di email di SPAM tramite una qualche vulnerabilità nel codice, la prima cosa che si deve affrontare, oltre alla pulizia della coda di postfix, è l’individuazione dello script PHP responsabile. | Quando un sito in PHP viene viene utilizzato per inviare tonnellate di email di SPAM tramite una qualche vulnerabilità nel codice, la prima cosa che si deve affrontare, oltre alla pulizia della coda di postfix, è l’individuazione dello [[script]] PHP responsabile. | ||
<br/> | <br/> | ||
Le cose si fanno più difficili quando sul nostro server sono presenti decine di Virtual Host, poichè il file colpevole dell’invio di spam diventa difficilmente identificabile. | Le cose si fanno più difficili quando sul nostro server sono presenti decine di Virtual Host, poichè il file colpevole dell’invio di [[spam]] diventa difficilmente identificabile. | ||
<br/> | <br/> | ||
Possiamo però modificare il comportamento di default di PHP per l'invio di email, istruendolo a tenere traccia di tutti gli invii effettuati in un file di log, che potremo poi consultare alla ricerca dello script colpevole. | Possiamo però modificare il comportamento di default di PHP per l'invio di email, istruendolo a tenere traccia di tutti gli invii effettuati in un file di log, che potremo poi consultare alla ricerca dello script colpevole. | ||
Riga 15: | Riga 16: | ||
con contenuto: | con contenuto: | ||
<pre> | <pre> | ||
#! | #!/bin/sh | ||
# Logging sendmail wrapper | |||
SENDMAIL="/usr/sbin/sendmail -t" | |||
LOGFILE="/var/log/mail_php.log" | |||
DT=`date "+%Y-%m-%d %H:%M:%S"` | |||
DTFN=`date "+%Y%m%d-%H%M%S"` | |||
TMPFP=`tempfile --prefix=lsm_` | |||
cat | tee "$TMPFP" | $SENDMAIL $* | |||
RETVAL=$? | |||
TO=`grep "To:" <"$TMPFP"` | |||
rm -f "$TMPFP" | |||
echo "$DT: $PWD sends e-mail $TO" >>$LOGFILE | |||
exit $RETVAL | |||
</pre> | </pre> | ||
Rendiamo eseguibile lo script appena creato: | Rendiamo eseguibile lo script appena creato: | ||
Riga 60: | Riga 43: | ||
<pre> | <pre> | ||
# touch /var/log/mail_php.log | # touch /var/log/mail_php.log | ||
# chmod | # chown root:adm /var/log/mail_php.log | ||
# chmod 662 /var/log/mail_php.log | |||
</pre> | </pre> | ||
Ora istruiamo PHP a fare uso del nuovo script: | Ora istruiamo PHP a fare uso del nuovo script: | ||
<pre> | <pre> | ||
# nano /etc/php5/apache2/php.ini | # nano /etc/php5/apache2/php.ini | ||
</pre> | |||
Da '''Debian Stretch''' il file da modificare è: | |||
<pre> | |||
# nano /etc/php/7.0/apache2/php.ini | |||
</pre> | </pre> | ||
modificando le istruzioni: | modificando le istruzioni: | ||
Riga 79: | Riga 67: | ||
;sendmail_path = | ;sendmail_path = | ||
</pre> | </pre> | ||
in | in: | ||
<pre> | <pre> | ||
[mail function] | [mail function] | ||
Riga 92: | Riga 80: | ||
sendmail_path = /usr/local/bin/sendmail-php | sendmail_path = /usr/local/bin/sendmail-php | ||
</pre> | </pre> | ||
Se usate PHP come CGI, con SUPHP o FCGI, modificate alla stessa maniera anche il file < | Se usate PHP come CGI, con SUPHP o FCGI, modificate alla stessa maniera anche il file <code>/etc/php5/cgi/php.ini</code>. | ||
<br/> | |||
<br/> | |||
Aggiungiamo una configurazione per [[Logrotate]], in modo da non trovarci il server intasato di log: | |||
<pre> | |||
# nano /etc/logrotate.d/sendmail-php | |||
</pre> | |||
di contenuto: | |||
<pre> | |||
/var/log/sendmail.log { | |||
weekly | |||
rotate 4 | |||
compress | |||
delaycompress | |||
missingok | |||
create 662 root adm | |||
} | |||
</pre> | |||
<br/> | <br/> | ||
Riavviamo Apache per fargli digerire le modifiche: | Riavviamo Apache per fargli digerire le modifiche: | ||
Riga 98: | Riga 103: | ||
# /etc/init.d/apache2 restart | # /etc/init.d/apache2 restart | ||
</pre> | </pre> | ||
Da '''Debian Stretch''': | |||
<pre> | |||
# systemctl reload apache2 | |||
</pre> | |||
== Test della configurazione == | |||
Per verificare che tutto funzioni correttamente, creiamo un file di test nella root di Apache: | |||
<pre> | |||
# nano /var/www/testphpmail.php | |||
</pre> | |||
di contenuto: | |||
<pre> | |||
<?php | |||
mail('yourname@yourdomain.com','This is a test message subject','This is a test message body'); | |||
echo 'Mail sent.'; | |||
?> | |||
</pre> | |||
Richiamiamolo in un browser: | |||
<pre> | |||
http://ip.del.nostro.server/testphpmail.php | |||
</pre> | |||
e verifichiamo nei log che l'invio sia stato tracciato correttamente: | |||
<pre> | |||
# cat /var/log/mail_php.log | |||
2014-03-12 09:24:29: /var/www sends e-mail To: yourname@yourdomain.com | |||
2014-03-12 09:24:31: /var/www sends e-mail To: yourname@yourdomain.com | |||
2014-03-12 09:25:50: /var/www sends e-mail To: yourname@yourdomain.com | |||
</pre> | |||
{{Autori | |||
|Autore = [[Utente:Ferdybassi|Ferdybassi]] 09:31, 15 mar 2014 (CEST) | |||
}} | |||
[[Categoria:Firewall]] | |||
[[Categoria:Monitoraggio]] | |||
[[Categoria:Antispam&Content filtering]] |
Versione attuale delle 19:43, 9 ott 2017
Versioni Compatibili Debian 7 "wheezy" Debian 8 "jessie" Debian 9 "stretch" |
Introduzione
Quando un sito in PHP viene viene utilizzato per inviare tonnellate di email di SPAM tramite una qualche vulnerabilità nel codice, la prima cosa che si deve affrontare, oltre alla pulizia della coda di postfix, è l’individuazione dello script PHP responsabile.
Le cose si fanno più difficili quando sul nostro server sono presenti decine di Virtual Host, poichè il file colpevole dell’invio di spam diventa difficilmente identificabile.
Possiamo però modificare il comportamento di default di PHP per l'invio di email, istruendolo a tenere traccia di tutti gli invii effettuati in un file di log, che potremo poi consultare alla ricerca dello script colpevole.
Configurazione di PHP
Creiamo un nuovo file contenente le istruzioni personalizzate:
# nano /usr/local/bin/sendmail-php
con contenuto:
#!/bin/sh # Logging sendmail wrapper SENDMAIL="/usr/sbin/sendmail -t" LOGFILE="/var/log/mail_php.log" DT=`date "+%Y-%m-%d %H:%M:%S"` DTFN=`date "+%Y%m%d-%H%M%S"` TMPFP=`tempfile --prefix=lsm_` cat | tee "$TMPFP" | $SENDMAIL $* RETVAL=$? TO=`grep "To:" <"$TMPFP"` rm -f "$TMPFP" echo "$DT: $PWD sends e-mail $TO" >>$LOGFILE exit $RETVAL
Rendiamo eseguibile lo script appena creato:
# chmod +x /usr/local/bin/sendmail-php
Creiamo il file di log e rendiamolo scrivibile:
# touch /var/log/mail_php.log # chown root:adm /var/log/mail_php.log # chmod 662 /var/log/mail_php.log
Ora istruiamo PHP a fare uso del nuovo script:
# nano /etc/php5/apache2/php.ini
Da Debian Stretch il file da modificare è:
# nano /etc/php/7.0/apache2/php.ini
modificando le istruzioni:
[mail function] ; For Win32 only. SMTP = localhost smtp_port = 25 ; For Win32 only. ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path =
in:
[mail function] ; For Win32 only. ;SMTP = localhost ;smtp_port = 25 ; For Win32 only. ;sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = /usr/local/bin/sendmail-php
Se usate PHP come CGI, con SUPHP o FCGI, modificate alla stessa maniera anche il file /etc/php5/cgi/php.ini
.
Aggiungiamo una configurazione per Logrotate, in modo da non trovarci il server intasato di log:
# nano /etc/logrotate.d/sendmail-php
di contenuto:
/var/log/sendmail.log { weekly rotate 4 compress delaycompress missingok create 662 root adm }
Riavviamo Apache per fargli digerire le modifiche:
# /etc/init.d/apache2 restart
Da Debian Stretch:
# systemctl reload apache2
Test della configurazione
Per verificare che tutto funzioni correttamente, creiamo un file di test nella root di Apache:
# nano /var/www/testphpmail.php
di contenuto:
<?php mail('yourname@yourdomain.com','This is a test message subject','This is a test message body'); echo 'Mail sent.'; ?>
Richiamiamolo in un browser:
http://ip.del.nostro.server/testphpmail.php
e verifichiamo nei log che l'invio sia stato tracciato correttamente:
# cat /var/log/mail_php.log 2014-03-12 09:24:29: /var/www sends e-mail To: yourname@yourdomain.com 2014-03-12 09:24:31: /var/www sends e-mail To: yourname@yourdomain.com 2014-03-12 09:25:50: /var/www sends e-mail To: yourname@yourdomain.com
Guida scritta da: Ferdybassi 09:31, 15 mar 2014 (CEST) | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |