Nascondi informazioni sulla versione Apache e sulla versione PHP

Di default Apache manda la propria versione di build ed informaizoni riguardanti i moduli installati (es: mod_php, mod_perl, mod_ssl) in ogni header http.

telnet www.example.com 80
Trying www.example.com.com…
Connected to www.example.com.
Escape character is ‘^]’.
HEAD / HTTP/1.0 <- <strong>Premi Enter un paio di volte</strong>

HTTP/1.1 200 OK
Date: Fri, 09 Jan 2007 18:18:26 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.12 with Suhosin-Patch
Connection: close
Content-Type: text/html; charset=UTF-8

Connection closed by foreign host.

In questo esempio si vede come con un semplice telnet ho scoperto che sistema operativo ho, quale versione del php installata e quale versione di Apache, e questo non è una buona cosa dal punto di vista della sicurezza.

Cosa faccio per disabilitarlo ?

Per disabiltiare l’invio di queste informazioni bisogna cambiare due direttive all’interno del file di configurazione di Apache :

/etc/apache2/apache2.conf

ServerTokens Prod
ServerSignature Off

e procedere ad un reload di Apache.
Occhio RELOAD… non RESTART.

Dopo questo passaggio l’output sarà :

HTTP/1.1 200 OK
Date: Thu, 13 Jan 2011 10:31:08 GMT
<strong>Server: Apache</strong>
Last-Modified: Tue, 18 May 2010 13:19:39 GMT
ETag: "2b4052-57d-486de318c90c0"
Accept-Ranges: bytes
Content-Length: 1405
Vary: Accept-Encoding
Connection: close
Content-Type: text/html

ScvHost

Conoscere meglio il processo Svchost e capirne il funzionamento può aiutare a risolvere parecchi problemi e, tra le altre cose, è un requisito fondamentale per ripulire a mano computer infettati da virus o malware particolarmente ostinati.

Cominciamo con la definizione ufficiale di Microsoft: “Svchost.exe è il nome di un processo host generico per servizi eseguiti da librerie di collegamento dinamico (DLL)”. Detto così non è che sia granché chiaro, cerchiamo di capire un po’ meglio.

Svchost è nato quando Microsoft ha cominciato a mettere i servizi di sistema dentro file .dll invece di eseguibili .exe, per migliorare l’approccio verso la riusabilità. Ma una DLL non può essere lanciata da sola, ha bisogno di un eseguibile che la carichi e la mandi in esecuzione, e Svchost fa proprio questo. La definizione di “servizio” aiuta a integrare il concetto: un servizio è un programma destinato a girare continuamente, che espleta una funzione particolare e che non necessita input dall’utente e quindi non ha interfaccia (Wikipedia).

Vista la pletora di servizi necessaria al funzionamento del sistema, Svchost ha la possibilità di lanciare più di un servizio, in modo da non intasare l’elenco dei processi; per motivi di stabilità, affidabilità e organizzazione vengono lanciate diverse istanze del processo nelle quali i servizi sono distribuiti secondo la funzionalità. Per esempio una istanza di Svchost fa girare i servizi relativi al firewall, un’altra istanza contiene quelli per l’interfaccia utente, e così via. Ecco uno screenshot di un task manager (potrebbe essere necessario cliccare su “Mostra i processi di tutti gli utenti”):

Si vedono i diversi processi Svchost, ciascuno con il loro PID (Process ID), che girano contemporaneamente nel sistema. Sembra complicato ma le cose si chiariscono osservando direttamente. Il comando da console per elencare i processi è tasklist, e la sintassi per elencare i servizi collegati a ciascun processo è questa:

tasklist /svc /fi “imagename eq svchost.exe”

Lo switch /svc visualizza i servizi ospitati da ciascun processo, /fi è un filtro, usato con questa sintassi per elencare solo i processi che ci interessano in questo momento. Ecco cosa si ottiene:

Ciascun processo è elencato con il suo PID e con la lista di servizi che ha caricato. I nomi sono criptici, ma è sufficiente cercarli nella linguetta “servizi” del task manager (da Vista in poi) e leggerne la descrizione. Ad esempio, il servizio “WPDBusEnum” lanciato dal processo Svchost con PID 920, viene descritto come “Servizio Enumeratore Dispositivi Mobili”. Se usate ancora XP, faticherete un po’ di più per trovare questa informazione perché non è disponibile nel task manager.

Andiamo avanti: lanciamo la gestione servizi e cerchiamo il “Servizio Enumeratore Dispositivi Mobili”; doppio clic e la finestra che si apre ci fornisce ulteriori informazioni:

In particolare si nota che il servizio viene caricato dal processo Svchost che contiene il gruppo LocalSystemNetworkRestricted, che il tipo di avvio del servizio è manuale, che al momento sta girando e, cliccando sul tab “Relazioni di dipendenza”, che dipende dal servizio RCP — uno dei servizi fondamentali per il fuzionamento di Windows. Dipendenza in questo caso significa che WDBusEnum ha bisogno che RPC sia in esecuzione per essere avviato.

Approfondiamo ancora e andiamo nel registro di sistema, dove risiedono tutte queste relazioni e impostazioni; lanciamo regedit e navighiamo fino a:

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Svchost

Ogni valore di questa chiave rappresenta un diverso gruppo Svchost, ciascuno dei quali appare come una diversa istanza del processo, come abbiamo verificato in precedenza. I valori sono del tipo REG_MULTI_SZ e contengono la lista dei servizi che girano sotto quel particolare gruppo Svchost. Continuando con il nostro esempio, individuiamo la chiave con il nome del gruppo LocalSystemNetworkRestricted, doppio click e verifichiamo che effettivamente il servizio WPDBusEnum compare nell’elenco. Ma come fa Svchost a sapere dove trovare la DLL e i parametri necessari a caricare il servizio, visto che qui appare solo il nome? Il sistema fa riferimento a un’altra sezione del registro di configurazione:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services

In questa sezione ciascuna chiave corrisponde ad un servizio; in quella chiamata WPDBusEnum si trovano diversi valori, tra cui quelli che contengono il percorso del file DLL da caricare (%SystemRoot%\system32\wpdbusenum.dll) e i parametri che ne controllano il comportamento e le dipendenze.

Queste chiavi di registro sono molto importanti perché rappresentano spesso un bersaglio per virus e malware: una delle varianti del famigerato Conficker si nasconde dentro un processo Svchost perfettamente legittimo, insieme ad altri servizi innocui e necessari al funzionamento del sistema. Molto spesso non è possibile arrestare un processo Svchost, e con esso tutti i servizi caricati tramite il relativo gruppo. In questo caso è necessario identificare il servizio del worm, trovarne il nome, cercarlo nel registro di configurazione in una delle istanze del processo Svchost e rimuoverlo manualmente dalla lista dei servizi caricati. Nel caso di Conficker il nome esteso del servizio è rappresentato da una coppia di parole inglesi in computer jargon, difficilmente identificabile senza una certa esperienza, mentre il nome vero e proprio del servizio sono solo lettere casuali e la descrizione manca del tutto.

Può essere utile incrociare tutte queste relazioni con il traffico di rete. Prendiamo per esempio un servizio innocuo: RDP, il desktop remoto. Sappiamo che il servizio ascolta sulla porta TCP/3389; verifichiamo il PID sotto il quale gira il processo utilizzando il comando

netstat -ao -p TCP | findstr :3389

Netstat visualizza informazioni sulle connessioni di rete TCP/IP, lo switch -ao visualizza tutte le connessioni in ascolto con le relative porte e numero di PID del processo, -p TCP restringe l’output al solo protocollo TCP, e findstr :3389 filtra solo la riga che ci interessa. Ecco l’output del comando:

L’informazione che ci serviva è il numero di PID, che è 1500. Guardando gli screenshot precedenti, si può verificare che il PID 1500 corrisponde a un Svchost che carica, tra gli altri, il servizio “TermService”, che il task manager descrive come “Servizi Desktop Remoto”.

Capire questi meccanismi e queste relazioni ci può aiutare molto a risolvere problemi particolarmente spinosi, perché arriva molto in profondità nel sistema e con un po’ di pazienza permette di ottenere risultati più efficaci di un generico tool di analisi e pulizia del sistema.

Uno dei pochi tool che fa bene questo tipo di lavoro è Process Explorer, con il quale potete ottenere le stesse informazioni che qui sopra sono state estratte solo con i normali strumenti di sistema. Il programma è stato creato da Mark Russnovich di Sysinternals, azienda acquisita da Microsoft nel 2006.

Settare mysql utf8

Di Default molte distribuzioni Linux , installano mysql con default character set settano a latin1.

Per modificare questo valore e impostarlo in utf8 :

alla fine di [client] section, aggiungi:

Code:
default-character-set = utf8

alla fine di  [mysqld] section, aggiungi:

Code:
character-set-server = utf8

restart mysql

Code:
> sudo /etc/init.d/mysql restart

per verificare :

Code:
> mysql -u root -p
mysql> show variables like '%char%';

dovresti vedere :

Code:
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
Code:
default-character-set = utf8

at the end of [mysqld] section, add:

Code:
character-set-server = utf8

then restart your mysql server:

Code:
> sudo /etc/init.d/mysql restart

and make sure it says OK with

Code:
* Starting MySQL database server mysqld

then check if it all works out

Code:
> mysql -u root -p
mysql> show variables like '%char%';

you should see the following:

Code:
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Quanto è bello l’Ipad !

Stamattina, passando in edicola per prendere il settimanale ATM, sono rimasto a bocca aperta davanti a una pila di iPad nuovi di zecca, e dato che costavano poco mi sono detto: perchè no? E quindi dopo un road test di mezz’ora sui mezzi pubblici, ecco le mie prime impressioni.

I pro. E’ leggerissimo! E cosa ancora più incredibile, alla Apple hanno fatto il miracolo: si piega senza rovinarsi. Lo schermo poi è nitido e con un contrasto fantastico: i caratteri sono davvero neri, la pagina bianca, e in condizioni di luminosità normale non affatica assolutamente gli occhi. Ma la cosa più incredibile è il multi touch, per chi non l’avesse mai sperimentato funziona così: si piegano indice e pollice fino a farli quasi toccare, li si porta sull’angolo dell’iPad, lo si afferra, e si fa un movimento diagonale. A quel punto, parte un’animazione (fatta così bene che sembra davvero di spostare un oggetto fisico), e l’iPad cambia pagina. Fantastico! C’è anche una modalità per chi odia far sbirciare i vicini in metropolitana, che permette di piegare il device fino a oscurare completamente i contenuti. Devo dire che le hanno pensate davvero tutte! Il collegamento dati poi ha funzionato a meraviglia, anche in galleria: sono riuscito a leggere senza interruzioni per una ventina di minuti.

I contro. Mi aspettavo qualche animazione alla Harry Potter, ma le fotografie sono tutte statiche: poco male, tanto trovo i video assolutamente noiosi e non li guardo nemmeno sul PC e tantomeno in televisione, e in movimento poi mi avrebbero probabilmente fatto venire il mal di mare. Il suo vero problema però è che costa troppo poco: in metropolitana ce l’avevano quasi tutti. Peccato, speravo di fare un figurone, ma nessuno mi ha degnato neanche di un’occhiata di invidia o curiosità. Anzi, ho visto addirittura un modello più compatto, che sembra offrire contenuti gratuiti. Sarà vero?

Concludo con una foto, per farvi apprezzare il design rivoluzionario di questo splendido oggetto.

Controllo automatico updates al login

Per avere sempre sotto controllo lo stato degli aggioranmenti del mio server, ed averlo sempre sotto controllo facendomelo uscire nello script di logon come nella foto sopra, ho scritto questo semplice programma : updates

#!/bin/bash
#La prima condizione e' sempre vera.

if [[ $(apt-get update 2>&1 | grep Hit) ]]; then
        if [[ $(apt-get --simulate upgrade 2>&1 | grep Inst) ]]; then
                apt-get --simulate upgrade | wc -l > /tmp/updates.txt
        else
                echo "No Updates available" > /tmp/updates.txt
        fi
fi

Se ci sono degli aggioranmenti disponibili scrivo in un file di testo il numero degli updates (wx -l ) in un file che per comodità viene posizionato in /tmp/updates.txt
Questo script non va eseguito ad ogni login per non appesantire la macchina visto che il controllo degli update fa un fetch di una serie di pagine web e svariati controlli che impegnano abbastanza il server a livello di I/O.
Meglio eseguirlo una volta sola, per questo è preferibile insierire questo script all’interno di /etc/cron.daily per lanciarlo una volta al giorno, piu’ che sufficiente.

A questo punto possiamo mettere all’interno del nostro script di loging l’otput di /tmp/updates.txt.
Io ho fatto così :

/etc/bash.bashrc :

if [  -f /tmp/updates.txt ];then echo -e "Updates Check :\t\t\t $(more /tmp/updates.txt)";fi

Abiliatare l’audit dei file in samba

Per abilitare questa feature di Samba, molto dipendiosa dal punto di vista di I/O del disco dovrete abilitare vfs stackable modules, in particoalre il modulo extd_audit

Apriamo ed editiamo il file /etc/samba/smb.conf e modifichiamo il valore LogLevel secondo quello che abbiamo bisogno :

Log Level Log Details - File and Directory Operations
0                 Make Directory, Remove Directory, Unlink
1                 Open Directory, Rename File, Change Permissions/ACLs
2                 Open & Close File
10                Maximum Debug Level

Editiamolo in questo modo :

syslog = 0
to
syslog = 10

ed aggiungiamo proprio sotto LogLevel :

vfs object = extd_audit

A questo punto samba inizierà a loggare tutte le operazioni fatte sulla nostra share samba.

Putty Connection Manager

Putty è uno di quei software fatti veramente bene (e tra l’altro esiste anche per linux, anche se io non lo uso). L’unico problema che ho riscontrato e` che dopo una mezz’ora di lavoro mi ritrovo completamente perso tra le finestre.

Una sola finestra con i tab, l connection manager messo su un tab verticale per accedere velocemente a tutte le connessioni registrate, la possibilita` di configurare la sessione di PuTTY anche dal punto di vista grafico.

Insomma se avete bisogno di accedere macchine linux da un OS Windows, PuTTY e` la soluzione, PuTTY Connection Manager e` la ciliegina sulla torta!

Per scaricarlo basta cliccare qui. Siccome PuTTY deve essere installato, il link per il download e` questo.