Shellshock Bug verifichiamo il nostro sistema

Shellshock Bug

Shellshock Bug

I ricercatori di Red Hat hanno recentemente segnalato un particolare bug denominato “Shellshock” presente nella Shell che potrebbe mettere in serio pericolo milioni di sistemi Linux. A quanto pare questo bug potrebbe essere utilizzato da utenti malintenzionati per poter operare sul sistema operativo.

Shellshock pare sia un exploit molto più pericoloso di Heartbleed, che avrebbe potuto mettere letteralmente in ginocchio la maggioranza dei web server esistenti, perché permette di prendere il pieno controllo della macchina, non importa quale, ed eseguire del codice (ottenendo tutti i permessi d’amministrazione).

Cos’è e come funziona Shellshock?  In pratica, è una vulnerabilità del terminale, che gli utenti di Windows conoscono meglio come Prompt dei comandi,  che espone all’attacco una serie di servizi, da Apache al DHCP dei router ecc… Se la versione di BASH installata è afflitta dal bug, un malintenzionato potrebbe eseguire da remoto una serie d’operazioni, che spaziano dai comandi CGI ai demoni avviati in automatico dal sistema operativo. Significa che, senza una patch ad hoc chiunque potrebbe prendere possesso dei server.

Non è però ben chiaro come questi possano accederne dato che effettuare modifiche nel sistema, installazione di software ecc vengono richiesti i permessi di root. Da notare inoltre che Red Hat e le principali distribuzioni Linux hanno già risolto il bug, basterà quindi aggiornare la distribuzione o server Linux per risolvere questo problema.

Possiamo facilmente verificare se il nostro sistema operativo è o meno  “infetto” da Shellshock.

Basta semplicemente avviare il terminale e digitare:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

se avremo come risultato:

vulnerable
this is a test

vuol dire che nel nostro sistema è presente il bug Shellshock in bash

se invece abbiamo come risultato

this is a test

possiamo star tranquilli.

Per risolvere il problema bastera’ semplicemente aggiornare la Bash digitando da terminale:

Per Debian, Ubuntu e derivate:

sudo apt-get update
sudo apt-get install bash

Per Fedora, CentOS, Red Hat e derivate:

sudo yum install bash

Per openSUSE e derivate:

sudo zypper install bash

Per Arch Linux e derivate, Chakra, Manjaro ecc:

sudo pacman -Sy bash

Al termine bastera’ rilanciare il comando di verifica, ed ecco risolto il problema di Shellshock.

 

#ShellshockBugVerifichiamo

OSSEC host-based intrusion detection system

host-based intrusion detection system

OSSEC host-based intrusion detection system

Spesso, da sisteimsti, capita di dover tenere sotto controllo un grande numero di sistemi e di dover analizzare i log con una certa costanza per problemi di sicurezza. Ma amministrare molti sistemi e collegarcisi quotidianamente è un’operazione dispendiosa e anche noiosa.

Il problema può essere affrontato con l’aiuto di analizzatori di log, come ad esempio il noto Logwatch oppure con software di integrity checker come AIDE, oppure con rootkit control come Rkhunter. Ci sono molti di questi strumenti, ma la loro funzione è molto specifica, ed alla fine ci occorre installare diversi software per poter ottenere un controllo completo.

OSSEC è un “host-based intrusion detection system” (HIDS) opensource, ed e’ in grado di monitorare il funzionamento di un sistema “dal suo interno” anziché ricorrere all’uso delle interfacce di rete, come fanno invece i network-based intrusion detection system. Ossec e’ un sistema scalabile che possiede un potente motore di analisi e correlazione che può effettuare analisi dei log, file integrity checking, Windows registry monitoring (per scovare intrusioni non autorizzate), rootkit detection, real-time alerting e active response; inoltre Ossec è multipiattaforma e supporta la maggior parte dei sistemi operativi, come Linux, OpenBSD, MacOS, Solaris e Windows.

I software HIDS , si occupano di sorvegliare costantemente il comportamento del sistema oggetto d’esame e lo stato in cui sta operando. Mentre i NIDS ispezionano il contentuto di ogni singolo pacchetto dati in transito, un HIDS, qual è OSSEC, può stabilire a quali risorse tentano di accedere i programmi installati bloccando tempestivamente operazioni sospette. Per esempio, un word-processor non deve poter modificare le password di sistema o la configurazione di aree vitali, se lo fa significa che, con buona probabilità, sta eseguendo del codice maligno, collegato all’azione di un malware.
Un HIDS quindi controlla lo stato del sistema verificando le informazioni memorizzate, sia in RAM che sul file system, i file di log e così via, poiche’ l’obiettivo è quello di rilevare tempestivamente le anomalie.

In particolare, OSSEC si incarica di analizzare i log di sistema, verificare l’integrita dei file memorizzati su disco, controllare la presenza di rootkit e tenere traccia delle performance di ogni macchina collegata alla rete locale nella quale e installato.

CARATTERISTICHE:
Architettura: Ossec è costituito da più di un dispositivo, possiede un Manager centrale che monitorizza tutto e riceve informazioni da agents (sensori), syslog e databases.

  • Manager: Il manager è la parte centrale di Ossec e contiene i databases dei file integrity checking , dei logs e degli eventi. Contiene anche tutte le regole, i decoder e le configurazioni cosi da
    rendere più facile l’amministrazione di agents multipli.
  • Agent: L’agent è un piccolo programma installato nei sistemi che si desidera monitorare. Esso raccoglie informazioni e le spedisce al Manager per l’analisi. Sono progettati per utilizzare veramente poche risorse quindi non influenzano le prestazioni del sistema.
  • Agentless: Per i sistemi in cui non si possono installare agents, Ossec permette operazioni di file integrity monitoring . Alcuni esempi possono essere firewalls, routers o anche particolari sistemi Unix.
  • Sicurezza: Ossec offre svariate funzionalità nell’ambito della sicurezza:
    • Analisi dei log e correlazioni:
    • Regole flessibili basate su XML
    • Time Based Alerting
    • Libreria contenente molte regole già integrata
    • Integrity Checking
    • Root Kit detection
    • Active Response: Ossec permette di intervenire immediatamente sulla minaccia con vari metodi:
    • Disabilitare il servizio per un determinato intervallo di tempo (espresso in minuti)
    • Blacklists
    • Firewall-Drop: uno script che permette di comunicare universalmente con i firewall delle più comuni distribuzioni Unix/Linux Firewalls, Switch e Routers: Ossec può ricevere ed analizzare eventi di Syslog da una grande varietà di firewalls, switch e routers che supportano
      questa tecnologia.
  • Scansione dei processi nascosti: grazie all’utilizzo delle funzioni getsid() e kill() sicontrolla se esistono pid utilizzati. In caso positivo, se il comando permostrare i processi attivi (ps in Linux, tasklist in Windows) non `e in grado di rilevarli, significa che nel sistema `e presente un rootkit a livello kernel;
  • Scansione delle porte segrete: con la funzione bind() si controlla ogni porta TCP e UDP del sistema. Se il binding relativo a una porta fallisce (il che significa che tale porta `e attualmente utilizzata), ma netstat, il comando che permette di visualizzare le connessioni attive del computer, non `e in grado di rilevarla, `e probabile la presenza di un rootkit all’interno del sistema
  • Scansione delle interfacce di rete: se una o pi`u interfacce sono in modalit`a promiscua, e il comando ifconfig non lo evidenzia, `e probabile che un rootkit stia nascondendo la presenza di uno o pi`u dispositivi che intercettano tutti i pacchetti di rete

Un’altra interessante estensione del software permette di realizzare la disabilitazione distribuita delle memorie USB, per impedire ai dipendenti di appropriarsi in modo illecito dei contenuti del patrimonio informativo aziendale.


Funzionalita’
OSSEC ha un motore di analisi dei log in grado di correlare e analizzare i log da più dispositivi e formati. I seguenti sono quelli attualmente supportati:

  • Sistemi Unix:
    • Unix PAM
    • sshd
    • Telnetd Solaris
    • Samba
    • Su
    • Sudo
  • Server FTP:
    • ProFTPd
    • Pure FTPd
    • vsftpd
    • Microsoft FTP Server
    • Ftpd Solaris
  • I server di posta:
    • Imapd e pop3d
    • Postfix
    • Sendmail
    • Vpopmail
    • Microsoft Exchange Server
  • Basi di dati:
    • PostgreSQL
    • MySQL
  • Server Web:
    • Apache Server
    • Web server IIS
    • Log Zeus errori del server Web
  • Applicazioni Web:
    • Horde IMP
    • SquirrelMail
    • ModSecurity
  • Firewall:
    • Iptables firewall
    • Solaris IPFilter firewall
    • AIX IPsec/firewall
    • Netscreen firewall
    • Windows Firewall
    • Cisco PIX
    • Cisco FWSM
    • Cisco ASA
  • NIDS:
    • Modulo Cisco IOS IDS/IPS
    • Snort IDS
  • I tool di sicurezza:
    • Symantec AntiVirus
    • Nmap
    • Arpwatch
    • Cisco VPN Concentrator
  • Altri:
    • Detto
    • Proxy Squid
    • Zeus Traffic Manager eXtensible

 

INSTALLAZIONE
Partiamo installando i pre-requisiti di base con il seguente comando :

sudo apt-get install build-essential apache2 libapache2-mod-php5 apache2-utils

Adesso passiamo ad effettuare il download dei pacchetti che ci servono direttamente dal sito del produttore  DOWNLOAD

Server/Agent 2.8 – Linux/BSD  : ossec-hids-2.8.tar.gz
Web UI 0.8 : ossec-wui-0.8.tar.gz

tar xfz ossec-hids-2.8.tar.gz
cd ossec-hids-2.8/
sudo ./install.sh

Start OSSEC HIDS:

sudo /var/ossec/bin/ossec-control start

Installiamo OSSEC Web UI

tar xfz ossec-wui-0.8.tar.gz
sudo mv ossec-wui-0.8 /var/www/html/osssec-wui/
cd /var/www/html/osssec-wui/
sudo ./setup.sh

Restart apache:

sudo apache2ctl restart

Adesso apriamo il browser e facciamolo puntare all’url :  http://localhost/osssec-wui/

Una volta entrati con le credenziali impostate durante l’installazione non rimane che fare pratica delle configurazioni.
Nel prossimo articolo vedremo come affiancare ad Ossec un ottimo tool per la getione dei Log come l’ottimo Splunk.

Splunk è un tool che può essere integrato in OSSEC per trasformare i log in formato grafico con integrati alcuni report che permettono di controllare più facilmente i sistemi monitorati.

#OssecHIDS

Trasferire grandi quantita’ di file alla max velocita’

Spostare molti files velocemente

Netcat per spostare grandi files

NETCAT

Con questo articolo iniziamo a presentare un ottimo tool che, almeno personalmente, e’ stato davvero utile in mille attivita’ sistemistiche, netcat.

Utilita’ 1
Vi è mai capitato di dover trasferire delle directory contenenti elevati quantitativi di files da un server Linux ad un altro ? In caso affermativo avrete sicuramente notato come, anche se il trasferimento avveniva in LAN, comunque la durata dell’operazione aumentava esponenzialmente con l’aumentare dei files da trasferire. Si tratta di un normale fenomeno di overhead dovuto al fatto che ogni singolo trasferimento di file avviene su un differente stream di dati, ed il numero di stream gestibili in contemporanea da un server è di solito piuttosto limitato.

Spesso si cerca di ovviare al problema creando prima un unico archivio .tar contenente i files da trasferire e quindi procedendo con un unico trasferimento. In questro caso si risolve egregiamente il problema di overhead di rete ma la cosa potrebbe diventare comunque problematica nel caso in cui ad esempio lo spazio su disco fosse limitato al punto da non poter consentire la creazione del tar temporaneo.
Se però il comando tar viene utilizzato in maniera intelligente assieme all’utility netcat, abbiamo la possibilità di effettuare comunque un traferimento super-veloce su un unico stream di dati senza la necessità di dover creare degli archivi temporanei. Ecco come possiamo procedere:
Sul server di destinazione (quello verso cui trasferiremo i nostri files), lanciamo il comando:

nc -l -p 888 | tar zxvPp   # il server di destinazione e' in ascolto sulla porta 888 pronto per decomprimere

Sul server master (quello da cui traferiamo i files), lanciamo il comando:

tar czvOPp --same-owner /<source_dir> | netcat -w 5 <ip_macchina_destinazione> 888

Queste due operazioni, effettuate in sequenza, fanno si che i files contenuti nella directory “/source/dir” del server master, vengano compressi in un tar che verrà inviato immediatamente (grazie alla pipe gestita con netcat) verso la porta 888 del server di destinazione. Quest’ultimo da parte sua è configurato per rimanere in ascolto sulla porta 888 e per redirezionare il flusso di dati ricevuto in ingresso direttamente al comando tar lanciato in modo da effettuare una decompressione nella directory “/target/dir” che avrete preventivamente creato ed in cui vi sarete spostati per ricevere il flusso di dati.

Gli usi di netcat sono davvero innumerevoli, tra cui aprire shell remote per lanciare comandi, scansioni di rete fin’anche alla clonazione di intere partizioni o addirittura di un’intera linux-box.
Tutto cio’ lo vedremo nei prossimi articoli su netcat.

#netcattoolmultiuso

Controlliamo la velocita’ della nostra rete da terminale

speedtest-cli

Speed Test da Terminale

In questo articolo vedremo come effettuare uno speed test senza aprire il browser ed usando solo il terminale.

Premessa
Saper usare i molti comandi offerti dalla shell sul nostro terminale offre sicuramente enormi potenzialità, nonostante un primo impatto non sempre amichevole, con questo valido strumento avremo sempre il pieno controllo delle funzionalità di una distribuzione Linux, su cui potremo fare qualsiasi cosa senza usare interfacce grafiche.

Se per esempio vogliamo conoscere in tempo reale la velocità della nostra linea ADSL normalmente dovremmo aprire il browser, digitare un sito per effettuare la prova di velocità (per esempio speedtest.net) ed attendere il risultato; invece con la seguente mini guida utilizzeremo solo ed esclusivamente il terminale per effettuare lo stesso tipo di test di velocità sulla nostra linea.

Impariamo ad usare speedtest-cli, un piccolo tool che utilizza il popolare sito speedtest.net.

Il tool possiede gia di per se un lungo elenco di server disponibili per il test, divisi in ordine di distanza, ed è possibile utilizzarlo per testare il ping su un server specifico o connettersi agli Speedtest Mini server; mentre per gli utenti meno esigenti è possibile generare automaticamente un URL con l’immagine dello Speedtest ed i risultati ottenuti.

Installazione
Speedtest-cli può essere installato utilizzando Python Pip. Per installare Pip su Ubuntu (dalla 13.10 e successive, ma sono supportate anche le versioni precedenti), dovremo lanciare il seguente comando da terminale:

# sudo apt-get install python-pip

Usiamo quindi Pip per installare speetest-cli

# sudo pip install speedtest-cli

Per il futuro, quando si desidererà aggiornare speedtest-cli, potremo utilizzare il seguente comando:

# sudo pip install speedtest-cli --upgrade

Se non siete su Ubuntu esistono altri modi per installare speedtest-cli, basta visitare la pagina GitHub del programma.

Controllare la velocità della rete da terminale
Per testare la velocità di connessione a Internet da riga di comando utilizzando il miglior server (basato su ping) tutto quello che dovete fare è eseguire il seguente comando:

# speedtest-cli

Nota: il tool funziona anche con il comando speedtest invece di speedtest-cli (se avete installato lo strumento utilizzando Python Pip). Nei successivi comandi useremo il comando più corto per facilitare la digitazione.

Esempio di test rete adsl casalinga :

# speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Vodafone DSL (88.xx.xx.xx)...
Selecting best server based on latency...
Hosted by ColocationIX (Berlin) [5.80 km]: 51.852 ms
Testing download speed........................................
Download: 7.65 Mbits/s
Testing upload speed..................................................
Upload: 2.51 Mbits/s

Il tool è estremamente flessibile e permette di impostare degli argomenti per svolgere ulteriori test. Per esempio è possibile testare la velocità di Internet ed ottenere automaticamente un link con l’immagine da condividere ovunque utilizzando il comando:

# speedtest --share # (che creera' un URL con un'immagine sul portale di speedtest.net)

Per un uso più avanzato, come la visualizzazione dei server di speedtest.net, il collegamento ad un determinato server e così via, possiamo leggere la guida indicata con il seguente comando:

# speedtest -h

Buon Test !

#speedtestsenzabrowserusandosoloilterminale

Bloccare la pubblicita’ senza plug-in

Linux Ad Block

Linux Ad Block

 

Negli ultimi anni i banner pubblicitari presenti nelle pagine di molti siti si sono trasformati in un mostro incontrollato e soprattutto molto invasivo e, a causa dell’abuso da parte di alcuni, sono finiti per diventare la bestia nera di Internet, inducendo numerosi utenti a trovare un modo per bloccarli con i metodi più disparati.

 

Tra questi figurano ad esempio due note estensioni per browser, ad esempio su Chrome tra i piu’ conosciuti possiamo trovare AdBlock e AdBlock Plus, che svolgono egregiamente il proprio lavoro modificando al volo il foglio di stile delle pagine web impedendone la visualizzazione. D’altra parte questo vantaggio ha un peso materiale: entrambe le estensioni finiscono per appesantire notevolmente il browser, il che potrebbe essere uno svantaggio per molti.

In questo breve articolo verra’ illustrato un metodo efficace per bloccare la visualizzazione dei banner pubblicitari dei più noti circuiti pubblicitari, usando una versione modificata del file /etc/hosts

 

Bloccare la pubblicità senza AdBlock 

Il criterio che utilizzeremo è di per se molto semplice, infatti il file /etc/hosts permette di associare manualmente host ad indirizzi IP senza affidarsi alla risoluzione tramite server DNS; grazie al lavoro ed alla costanza di alcuni sviluppatori, è possibile scaricare un file modificato ad-hoc affinché agli host dei più noti banner pubblicitari venga automaticamente associato l’indirizzo IP 127.0.0.1, ovvero l’indirizzo locale della propria macchina (localhost).  Risultato:
i banner non verranno più visualizzati!

Senza dilungarci in ulteriori spiegazioni procediamo alla modifica: andiamo innanzitutto a creare un backup del file /etc/hosts presente nel nostro sistema operativo, da ripristinare in caso di problemi, dopodiché, andremo a creare uno script per il download/upgrade automatico del file che inseriremo nel nostro crontab.

*Preparazione
Creamo innanzitutto un backup del nostro file /etc/hosts originale da ripristinare in caso di problemi: per farlo, da terminale, digitiamo

# sudo cp /etc/hosts /etc/hosts.bak

Adesso creiamo lo script che sara’ in grado di scaricare automaticamente il nuovo file host, concedendogli eventualmente una serie di tentativi qualora la connessione ad Internet non fosse subito disponibile, quindi dal nostro terminale digitiamo

# sudo vim /usr/local/bin/adblock.sh

All’interno del file appena creato inseriamo quanto segue:

#!/bin/bash

exec 2> /tmp/adblock.log
exec 1>&2
set -x
wget -q -O - 1 --retry-connrefused http://someonewhocares.org/hosts/hosts | grep -P "^(127.0.0.1 |::1 |# )" > /etc/hosts

chmod 644 /etc/hosts

Salviamo il file ed usciamo dall’editor, dopodiché renderlo eseguibile con il comando

# sudo chmod +x /usr/local/bin/adblock.sh

Ora facciamo in modo di aggiungere il nostro nuovo script nel crontab del sistema in modo da farlo eseguire, in automatico, almeno ogni 4 ore (la scelta ottimale sta a voi).

Per coloro che non sono soliti ad utilizzare la gestione del crontab facciamo un breve ripasso sulla sua sintassi :

Esempi di sintassi dei comandi cron

Il file crontab deve rispettare una sintassi ben precisa, diversamente il sistema non accetterà le impostazioni. Quello che segue è un esempio generico:

5 3 * * * /usr/bin/apt-get update

L’esempio precedente eseguirà il comando apt-get update ogni giorno di ogni mese alle ore 03:05 (l’orario viene indicato nel formato a 24 ore).

La prima parte della voce descrive quando l’azione deve essere effettuata. Ci sono cinque campi (nell’esempio precedente, «5 3 * * *»), separati da uno spazio, ognuno dei quali accetta un numero, un asterisco o un testo appropriato. I campi specificano, in ordine (tra parentesi l’abbreviazione standard):

  • minuti, da 0 a 59 («m»);
  • ore, da 0 a 23 («h»);
  • giorno del mese, da 1 a 31 («dom»);
  • mese, da 1 a 12 («mon»);
  • giorno della settimana, da 0 (domenica) a 6 (sabato) («dow»)

 

Quelle che seguono sono alcune varianti della precedente pianificazione d’esempio:

Stringa

Descrizione

«12 03 * * *»

tutte le mattine, più o meno alle 3

« 12 03 15 * *»

tutti i 15 del mese, alla stessa ora

«12 03 31 * *»

7 volte l’anno, alla stessa ora

«0 12 * * 0»

ogni domenica, a mezzogiorno

«2 0 * * *»

ogni giorno, più o meno a mezzanotte

«02 03 * * 1,5»

ogni lunedì e venerdì, alle 3 del mattino circa

Altri esempi per aiutarvi a capire le varie combinazioni :

  • Esempio 1
1-30 * * * * /comando/da/eseguire

il comando verrà eseguito ogni giorno, ogni ora e quando i minuti vanno da 1 a 30.

  • Esempio 2
30 * 1-7 * * /comando/da/eseguire

il comando verrà eseguito i primi sette giorni di ogni mese, ad ogni ora e quando i minuti valgono 30.

  • Esempio 3
00 */2 15 * * /comando/da/eseguire

il comando verrà eseguito il quindicesimo giorno di ogni mese, ogni due ore.

  • Esempio 4
00 1-9/2 1 5 * /comando/da/eseguire

il comando viene eseguito il primo maggio alle 1,00 – 3,00 – 5,00 – 7,00 – 9,00. Cioè ogni due ore dalle 1,00 alle 9,00.

  • Esempio 5
00 1-10/2 1 5 * /comando/da/eseguire

il comando viene eseguito il primo maggio alle 1,00 – 3,00 – 5,00 – 7,00 – 9,00. Cioè ogni due ore dalle 1,00 alle 10,00. Si noti come l’ultimo valore utile dell’intervallo non coincida, in questo caso, con l’ora in cui viene fatta partire l’ultima esecuzione giornaliera del comando.

  • Esempio 6
00 13 2,8,14 * * /comando/da/eseguire

il comando verrà eseguito il secondo, l’ottavo e il quattordicesimo giorno di ogni mese alle 13.00

  • Esempio 7
30 13 1-15 4,10 * /comando/da/eseguire

il comando verrà eseguito i primi quindici giorni di aprile e ottobre alle 13,30.

  • Esempio 8
*/30 13,20 * 1-7,9-12 1-5 /comando/da/eseguire

il comando verrà eseguito nei giorni feriali (da lunedì a venerdì) di tutti i mesi tranne agosto, alle 13,00 – 13,30 – 20,00 – 20,30.

  • Esempio 9
00 14,19 1-15 * 5 /comando/da/eseguire

il comando verrà eseguito alle 14,00 e alle 19,00 dei primi quindici giorni di ogni mese e anche ogni venerdì.

** Ora per tornare al nostro esempio possiamo editare il file del nostro crontab tramite il comando

# crontab -e

ed in base agli esempi appena visti la riga di configurazione per far si che lo script venga eseguito ogni 4 ore di ogni giorno dell’anno sara’ la seguente :

# 00 */4 * * *  /usr/local/bin/adblock.sh

una volta salvato ed usciti non rimarra’ altro da fare che riavviare il servizio per far si che la modifica diventi operativa

# sudo /etc/init.d/cron restart

per verificare che effettivamente la schedulazione sia stata inserita verifichiamo tramite il comando

# crontab -l

Se doveste riscontrare problemi nella gestione della navigazione e voleste tornare alla configurazione iniziale vi bastera’ rieditare il crontab eliminando la stringa inserita e ripristinare il file hosts iniziale di cui avevamo fatto il backup tramite il comando :

# sudo mv /etc/hosts.bak /etc/hosts

Buon Anno!

#linuxadblocksenzaplugin