Il sito VirusTotal, ora tradotto anche in italiano, ci offre questo servizio a titolo gratuito. Oltre al controllo on-line, è possibile inviare un file via e-mail della grandezza massima di 10 MB.
Premete Sfoglia e selezionate il file che volete far analizzare. Quindi premete Invia File.
Attendete qualche momento, a seconda delle dimensioni del file da caricare.
In certi momenti della giornata, l’attesa potrebbe essere molto lunga; in questo caso, potete inviare il file via e-mail o riprovare più tardi.
Sebbene vi avvisino che potrebbero anche sbagliare, il grado di identificazione dei virus è molto alto e quindi il servizio offerto è più che affidabile.
A questo punto, vi viene fornito il risultato dell’analisi.
Come potete vedere, quello che segue è il risultato finale: il virus è stato riconosciuto quasi da tutti gli antivirus, magari con un nome diverso, ma avete la certezza che quel file è infetto.
Talvolta, nelle foto potete vedere nomi diversi per lo stesso virus. Ciò accade perché ogni casa utilizza il proprio “alias“, cioè stesso virus, ma con nome differente.
Premendo il pulsante Formattato, potrete passare ad un formato pagina più compatto.
Questo servizio non elimina il virus, se presente, ma almeno vi dà la certezza che avete un problema, identificando il vostro “nemico”.
È possibile integrare nel menu Invia a un piccolo eseguibile, che permette di inviare direttamente i file sospetti al controllo di VirusTotal, senza neanche dover aprire il browser.
Una volta installato, basterà selezionare il file, cliccarvi sopra con il tasto destro del mouse, aprire il collegamento ad Internet, selezionare Invia a e scegliere VirusTotal.
Si avvierà l’upload del file.
A questo punto, basterà attendere il risultato della verifica per sapere se il nostro file sia o meno infetto.
E’ possibile monitorare il funzionamento di Apache con diversi strumenti.
Log di Apache
Sono il primo posto dove indagare in caso di problemi. Generalmente vengono scritti in una directory tipo /var/log/httpd, comunque nel file di configurazione la loro posizione è definita con le direttiveAccessLog e ErrorLog.
Con la direttiva LogLevel è possibile modificare il livello di logging.
Opzioni di invocazione httpd -V Mostra i parametri usati in fase di configurazione httpd -l Mostra i moduli compilati direttamente nel file httpd. httpd -L Mostra le direttive che possono essere usate con i moduli direttamente compilati. httpd -t Esegue un test sulla configurazione di Apache.
Server-status e Server-info
Sono container speciali che permettono di visualizzare direttamente via web informazioni: http://www.sito.com/server-status/ – Mostra lo stato del server. http://www.sito.com/server-info/ – Mostra informazioni sulla configurazione usata e i moduli presenti.
Comandi di Sistema ps -adef | grep httpd – Elenco dei processi Apache in esecuzione netstat -natup – Elenco delle connessioni di rete in ascolto e attive. ldd /usr/sbin/httpd – Mostra le librerie condivise usate dal binario indicato. strace -p PID – Traccia le system call del processo indicato. lsof | grep httpd – Visualizza tutti i file aperti dal processo http
Sono disponibili vari strumenti per monitorare e capire il funzionamento di Apache, il suo stato e quello che sta facendo.
Log di Apache
I log di Apache sono il primo posto dove cercare la soluzione di problemi (oltre che, ovviamente, analizzare il traffico Web sul sito). Di default sono in/usr/local/apache/logs ma se si è installato Apache tramite un RPM li si potranno trovare in /var/log/httpd o comunque dove specificato nel file di configurazione principale (verificare la direttiva ErrorLog e definire la verbosità dei log con LogLevel (per diagnostica mettere LogLevel debug per il massimo della verbosità, in condizioni normali lasciare LogLevel warn).
Server-status e Server-info
Apache fornisce due moduli che permettono all’amministratore di visualizzare informazioni utili in tempo reale. Server-status mostra info sulle connessioni esistenti, l’uptime del server, il traffico generato, la CPU impegnata, la versione di Apache. E’ possibile avere lo status sia in modalità normale che in modalità estesa, dove per ogni connessione si vedono maggiori informazioni. Di default, se abilitato, si trova suhttp://www.sito.com/server-status/ Server-info fornisce dettagliate informazioni sulla configurazione di Apache e sulle direttive relative ad ogni singolo modulo. Di default, se abilitato, si trova suhttp://www.sito.com/server-info/
Opzioni di invocazione
Anche le opzioni che possono essere passate ad Apache, eseguendo httpd danno informazioni utili: httpd -V Mostra il numero di versione, e i parametri usati in fase di configurazione httpd -l Mostra i moduli compilati direttamente nel file httpd. httpd -L Mostra tutte le direttive che possono essere usate con i moduli direttamente compilati (vengono escluse tutte quelle che sono fornite dai moduli caricabili dinamicamente). httpd -t Esegue un test sulla configurazione di Apache e segnala eventuali errori di sintassi.
Variabili d’ambiente
Apache setta ed utilizza una serie di variabili d’ambiente che possono essere utilizzate da script CGI, PHP, Perl o trattate in sede di configurazione per gestire il comportamento del server sulla base dell’ambiente generale e delle singole connessioni. Per visualizzarle esistono vari metodi indiretti, per esempio uno è quello di utilizzare PHP all’interno di pagine HTML: <?php echo $REMOTE_ADDR ?> visualizza l’IP del client remoto.
Apache fornisce la possibilità di monitorare in tempo reale, direttamente via web, il suo stato, l’uptime, il tempo di CPU occupato, le connessioni che sta gestendo, i processi child in esecuzione e altre informazioni utili.
Questa funzionalità è fornita dal modulo mod_status che prevede delle specifiche direttive utilizzabili con una configurazione simile: <Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .dominio.it
</Location>
Con questo esempio viene definita una Location accessibile all’url: http://www.dominio.it/server-status/ in cui vengono visualizzate informazioni varie sullo stato del server Web. In questo caso l’accesso è consentito solo da host nel dominio.it. Lasciando solo la riga SetHandler server-status si lascia accessibile a tutto il mondo la location server-status (opzione generalmente non consigliabile, in quando vengono visualizzate informazioni utili anche a potenziali intrusori).
Se si specifica, nella configurazione la direttiva ExtendedStatus On le informazioni fornite sono molto più dettagliate (per ogni connessione vengono indicati IP e porta del client, PID del child che la gestisce e altre info).
Su server in produzione ad alto traffico è consigliabile NON usare l’ExtendedStatus che appesantisce e rallenta il sistema.
E’ possibile aggiornare automaticamente la visualizzazione dello status di un server digitando sul browser un ULR tipo: http://openskills.info/server-status?refresh=3 (la pagina viene aggiornata ogni 3 secondi).
E’ anche possibile visualizzare lo status da shell Unix, con: apachectl status (si deve aver installato il browser testuale Lynx sul server o, se si ha solo Linksavere un link simbolico di /usr/bin/lynx che punta a /usr/bin/links).
Apache può fornire molte informazioni sui moduli utilizzati e le direttive supportate.
Tramite il modulo mod_info è possibile abilitare la funzionalità server-info e visualizzarne le informazioni del caso in un URL tipo http://www.dominio.it/server-info con queste righe nella configurazione generale: <Location /server-info>
SetHandler server-info
</Location>
All’URL indicato si possono visualizzare molte informazioni utili sulla configurazione di Apache al momento in cui è stato eseguito. In particolare è interessante la possibilità di vedere quali direttive sono utilizzate nella configurazione e quali sono i moduli che le forniscono.
Anche in questo caso le informazioni visibili sono piuttosto sensibili dal punto di vista della sicurezza, per cui è fortemente consigliato limitare l’accesso all’URL server-info da IP trusted. <Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 192.168.5.1 192.168.5.2
</Location>
Copiare semplicemente la cartella del server non basta perchè non si possono avere due macchine con lo stesso UUID
Cannot register the hard disk ‘PATH’ with UUID {id goes here} because a hard disk ‘PATH2’ with UUID {same id goes here} already exists in the media registry (‘PATH to XML file’).
C’è un comando da CLI che ci permette di clonare un disco senza problemi :
VBoxManage clonehd “Disk1.vdi” “Disk1_Copy.vdi”
VBoxManage lo trovate all’interno dela cartella di installazione di VirtualBox
Nel caso remoto in cui il problema persista forzare il cambio di UUID con questo comando :
L’ultima versione LTS del sistema operativo in uso in azienda prevede nei repository ufficiale l’uso del php versione 5.3.
Purtroppo, in azienda abbiamo dei software che hanno bisogno ancora della versione del php 5.2.
Ecco una rapida soluzione per forzare l’installazione del php dalla 5.3 alla 5.2 utilizzando i reposittory di Karmic :
#!/bin/sh
# Script to install PHP 5.2 from 9.10 on 10.04
# And pin it so it does not get updated
PKGS=`dpkg -l | grep php | awk '{print $2}'`
apt-get remove $PKGS
sed s/lucid/karmic/g /etc/apt/sources.list |
tee /etc/apt/sources.list.d/karmic.list
mkdir -p /etc/apt/preferences.d/
for PACKAGE in $PKGS
do
echo "Package: $PACKAGE
Pin: release a=karmic
Pin-Priority: 991
" | tee -a /etc/apt/preferences.d/php
done
apt-get update
apt-get install $PKGS
WhatWeb è uno strumento per la riga di comando che serve a prendere in brevissimo tempo molte informazioni sull’host interessato.
Gli elementi monitorabili spaziano da semplici aspetti come il server Web fino ad arrivare a quale versione del CMS o quale strumento Javascript di uso comune viene rilevato.
Un utile strumento per verificare quali informazioni esponiamo all’esterno.
L’output del comando è per gli amanti della shell: ecco un esempio :
Vediamo come installarlo su ubuntu e provarlo su qualche sito.
La prima cosa da fare, è scarica il pacchetto da qui
Ed installiamo le librerie :
/bin/bash
ls /boot/ | grep vmlinuz | sed "s@vmlinuz-@linux-image-@g" | grep -v `uname -r` > /tmp/kernels.tmp
for I in `cat /tmp/kernels.tmp`
do
aptitude remove $I
done
rm -f /tmp/kernels.tmp
update-grub
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
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:
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:
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.