Proteggere i Server da attacchi SlowHTTP/Slowloris

SlowHTTP difendersi da attacchi DDOS

SlowHTTP difendersi da attacchi DDOS

Gli attacchi del tipo SlowHTTP/Slowloris sono tra i più fastidiosi da ricevere in quanto il server di per sè non riporta nessuna anomalia se non un elevato numero di processi attivo, ma senza carico effettivo sulla macchina, questo perchè l’attacco apre quante più connessioni possibili al webserver e le lascia aperte inviando saltuariamente qualche header per mantenere aperta la connessione saturando di fatto il numero massimo di connessioni che il server può gestire e rendendolo irraggiungibile.

N.B.: con il termine attacco Slowloris s’intende un tipo di attacco chiamato Distributed Denial of Service (DDoS) che, in questo caso, sfrutta lo script Slowloris, scritto da Robert Hansen, grazie a cui vengono create una serie di connessioni web con lo scopo di inviare una enorme quantità di dati al server vittima in modo da renderlo inutilizzabile per gli utenti.

Un’ attacco con tale script permette tra l’altro ad una singola macchina attaccante di occupare le risorse di un server con un’ampiezza di banda minima e limitati effetti collaterali a servizi e porte non coinvolte.

Slowloris prova a mantenere le connessioni aperte ad un server web obiettivo e trattenerle aperte il più a lungo possibile. Fa questo, aprendo le connessioni al server web obiettivo e inviandogli richieste parziali. Periodicamente, invierà le successive intestazioni HTTP, aggiungendo ma mai completando la richiesta. I server attaccati terranno così le connessioni aperte, riempiendo il loro numero di connessioni disponibili, infine negando ulteriori tentativi di connessione dai client. Viene spesso usato anche per effettuare verifiche sulla stabilità di server, che forniscono servizi sotto stress.

Per proteggersi da questo tipo di attacchi si ricorre a degli escamotage, uno dei quali è limitare il numero di connessioni massime per IP in modo da evitare che questo possa intasare il server, per proteggere un server con directadmin, come pannello di gestione, e apache da questo tipo di attacchi basta semplicemente lanciare i seguenti comandi da root

cd /root
wget ftp://ftp.monshouwer.eu/pub/linux/mod_antiloris/installoris

chmod 755 installoris
./installoris

come segnalato sul sito di DirectAdmin

questi comandi non faranno altro che scaricare e installare il modulo mod_antiloris per apache (httpd), installarlo e riavviarlo.

 

#DifendersidaAttacchiSlowHTTP

 

Sicurezza – Honeypot SSH

Kippo honeypotUn Honeypot SSH con Kippo

Chiunque abbia un minimo di esperienza nel mettere a punto server rivolti verso Internet conosce bene la quantità di scansioni e di attacchi automatizzati che si possono ricevere in brevissimo tempo, a volte nel momento stesso in cui ci si collega in Rete.

Molti scanner non sono sofisticati e si limitano a cercare porte ssh aperte per tentare un bruteforce e, in caso di successo, passare il controllo ad un attaccante umano (un cracker non un hacker).

Come descritto in un precedente articolo “Sicurezza con il PortKnocking” , i passi da fare per mettersi al sicuro non sono mai abbastanza ed inparticolare alcuni servizi vanno completamente blindati anche solo per evitare enormi moli di log del firewall, solo per i tentativi di login al servizio SSH; proprio per questi motivi un ottimo esercizio e’ quello di creare un honeypot partendo da quest’ultimo servizio.

In questo contesto si colloca Kippo: un honeypot che simula un server ssh vulnerabile il cui obiettivo è quello di impegnare un attaccante e registrarne i movimenti. E’ un tool open source scritto in Python progettato quindi per registrare attacchi di tipo bruteforce e, soprattutto, l’intera interazione shell effettuata dall’ attaccante. In pratica quando un utente malintenzionato cercherà di entrare nel vostro sistema si troverà davanti un finto sistema che registrerà tutte le sue attività.

Kippo nel tempo si è guadagnato una certa popolarità dovuta alla sua semplicità d’uso, portabilità e al fatto che permette di riprodurre i log degli attacchi registrati.

Installazione

Kippo è programmato in Python e si basa sul framework Twisted, è necessario quindi un interprete python almeno alla versione 2.5.

I requisiti sono i seguenti:

  • Python 2.5+
  • Twisted 8.0+
  • PyCrypto
  • Zope Interface

come prima cosa bisogna cambiare la porta del server SSH per fare questo basta aprire e modificare il file sshd_config:

# vim /etc/ssh/sshd_config

e sostituire la porta 22 con un’altra a vostra scelta,

Dopo aver modificato il parametro Port 22 con un altro (es. 2443) riavviare il servizio con il commando:

 # /etc/init.d/ssh restart

Una volta sistemato questo piccolo dettaglio, bisogna installare tutti i pacchetti necessari per il corretto funzionamento di Kippo:

Prima di mettere in esecuzione l’ honeypot occorre configurarlo agendo sui parametri nel file kippo.cfg.

Le principali opzioni sono le seguenti:

  • ssh_addr: l’indirizzo dell’interfaccia su cui vogliamo mettere kippo in ascolto (di default su tutte)
  • ssh_port: il numero della porta
  • password: la password per collegarsi all’ honeypot, di default è 123456 che statisticamente è la password più comune che si può trovare. Se impostiamo una password difficile rischiamo di far fallire un attacco brute force! e ci perdiamo il bello del divertimento.
  • [database_mysql]: parametri per loggare tutta l’attività di kippo su un db mysql. Di default questa opzione non è attiva.

Su Linux per motivi di sicurezza kippo non può essere eseguita come root e quindi non può mettersi direttamente in ascolto sulle porte basse del sistema (< 1024) tra cui anche quella di default del server ssh (la porta 22).

Per reindirizzare la porta 22 sulla porta in cui abbiamo messo in ascolto la honeypot dobbiamo impostare un reindirizzamento con il firewall di sistema. L’impostazione corretta dipende dal firewall che state usando sul vostro server e dalla tipologia della rete.

Ad esempio con iptables:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j REDIRECT --to-port 2443

oppure usando l’ottimo tool rinetd, come spiegato enll’articolo “Catturare il traffico di rete“.

Installiamo i pacchetti
# apt-get install python-dev openssl python-openssl python-pyasn1 python-twisted

Visto che la porta 22 (che kippo dovrà monitorare) può essere utilizzata solo dall’ utente root e per ragioni di sicurezza non è consigliato usare kippo come utente root bisogna installare un altra piccola applicazione, Authbind, che ci permetterà di eseguire kippo sulla porta 22:

# apt-get install authbind

Ora creiamo un altro utente (non-root) che useremmo per eseguire kippo (non è vietato eseguire kippo come root ma per ragioni di sicurezza è consigliato usare un utente apposito):

# adduser kippo

e aggiungiamolo alla lista dei sudoers:

 # vim /etc/sudoers

aggiungendo la seguente stringa nel file:

kippo ALL=(ALL:ALL) ALL

(sotto l’utente root)

 Non ci resta che dare all’ utente kippo i privilegi per usare la porta 22:

# touch /etc/authbind/byport/22
# chown kippo:kippo /etc/authbind/byport/22
# chmod 777 /etc/authbind/byport/22

Ora non ci resta che cambiare utente ed entrare nel sistema con l’utente kippo, una volta cambiato utente siamo pronti a scaricare kippo (verificare sul sito del progetto per nuove versioni):

# wget https://kippo.googlecode.com/files/kippo-0.8.tar.gz /home/<utente xxx>/Downloads/

estraiamo i file:

# tar -zxvf kippo-0.8.tar.gz -C /opt/

ora ci spostiamo nella cartella del programma e modifichiamo il file kippo.cfg inserendo la porta 22 come target (di default è impostata la 2222) con la porta da voi prescelta, tipo la 2443.

# vim kippo.cfg

ed in fine modifichiamo il file start.sh:

# vim start.sh

sostituendo la stringa:

twistd -y kippo.tac -l log/kippo.log –pidfile kippo.pid

con:

authbind –deep twistd -y kippo.tac -l log/kippo.log –pidfile kippo.pid

ora non ci resta che eseguire il programma con:

# ./start.sh

…… e qualsiasi tentativo di connettersi alla porta 22 del sistema sarà registrato da Kippo e file di log verranno archiviati nella cartella corrispondente. Kippo rimane in esecuzione in background e aspetta che qualche attaccante si faccia vivo.

Quando finalmente riusciremo a registrare un attacco (e solitamente è questione di solo poche ore!) l’honeypot si occuperà di registrare ogni movimento.

Nella cartella log/ verranno salvati i log interattivi delle sessioni registrate e in quella dl/ verranno salvati i file e gli eseguibili che gli ignari attaccanti tenteranno di scaricare sul server (di solito rootkit, malware generici, etc)

Il divertimento, una volta collezionati un po di log interattivi, è quello di riprodurli con il playlog che è una utilità che permette di riprodurre i log come se fossero un video.

Il programma si trova nella cartella utils/, per eseguirlo (da linea di comando):

python playlog.py /path/to/xxx.log

Statistiche

Quando si ha una honeypot funzionante a pieno regime può risultare scomodo controllare periodicamente i log per capire il numero di attacchi ricevuti, la durata e altre informazioni utili.

Per facilitarci le cose possiamo affidarci a un programma come Kippo Graph che si occupa di generare statistiche dettagliate e farci risparmiare del tempo prezioso.