Archive for the ‘Sicurezza’ Category

Qualcuno si è divertito…

Friday, October 2nd, 2009

Eh si`, proprio cosi`. Qualcuno si e` divertito a violare questo blog dove non viene mai nessuno. Mah… Contento lui…

Comunque, che cos’e` successo?
Il giorno 30 settembre 2009 il blog e` stato defacciato. Cosa significa? Che al posto della pagina principale del sito c’era questa bellissima pagina scritta in HTML 3.0

screen-capture

Bello eh? Capirete la mia sorpresa, il mio disgusto e il mio divertimento contemporanei. Mi sembrava che fosse passato di moda combinare questi scherzetti.

Purtroppo non so di preciso cosa abbiano fatto, ma so che

  • La home page e` stata sostituita con quella porcheria di sopra
  • La password di admin e` stata sostituita, secondo me a mano, direttamente dal database
  • L’indirizzo e-mail di admin e` stato storpiato, di modo che non potessi resettare la password

Tutte cose abbastanza fastidiose, se non avessi avuto accessi all’FTP e al database. Il fatto che non siano state cambiate queste password mi fa pensare che non sia stato violato alcun accesso, ma che piuttosto sia stato utilizzato qualche script che sfrutta una delle vulnerabilita` di wordpress o del tema che avevo prima.

Ragion per cui segnalo la cosa all’hosting, chiedendo di ispezionare i log, per capire almeno in modo in cui il lamer ha proceduto, e secondo, rimetto il mio vecchio tema (si` quello che ho fatto io), visto che piu` persone mi hanno detto che lo preferiscono a GoGreen :-) .

Be aware of pinciaoche™

Friday, December 1st, 2006

Continuano le difficoltà  nasali, visto che mi sono preso un raffreddore coi fiocchi (nel naso), di quelli che non ti lasciano respirare insomma. E questo mi dispiace visto che volevo fare una capatina da HM. Di studiare in queste condizioni ovviamente non se ne parla, perciò penso che passerò la giornata davanti a Warcraft 3. Nei momenti liberi terminerà di traslocare.

Eh si, perché ho cambiato stanza. Adesso occupo una stanza molto più grande, anche se non ho veramente nulla da ridire nei confronti della vecchia stanza, che, come recita questo post è in grado di accogliere in maniera più che confortevole ben quattro persone.

Oltre a questo ieri io e il mio socio brail (ma lui preferirebbe essere chiamato presidente, d’altro canto io preferirei chiamarlo pinciaoche, mangiamerda, gettafumo, tegolaro) abbiamo consegnato il progetto di Sicurezza nei sistemi di calcolo: un firewall con iptables.

Figurone, valutato come più che ottimo e con tanto di domanda

Ma voi questo lo fate per lavoro?

Insomma siamo stati dei fighi, perciò niente di nuovo.

Ovviamente abbiamo dovuto studiare, e un ringraziamento particolare e sentito va a Simone Piccardi autore di ottima documentazione riguardante l’argomento. Ho appena saputo che Simone ha apprezzato molto i nostri ringraziamenti :) . Grazie ancora!

Segue la parte tecnica, insomma, il firewall, che magari potrà  essere d’utilità  per qualcuno. (Trenqui Lagranz, tanto chi ci viene qui?)

#!/bin/sh
#
# Progetto di Sicurezza nei sistemi di calcolo per l'anno 2006/2007
#
# Luca Bagante   4XXXXX
# Stefano Lampis 4XXXXX
#

#
# Scenario
#
# Nel nostro scenario abbiamo 5 host appartenenti a 4 sottoreti di classe C.
# 10.126.0.1 su tap0  : Computer in DMZ con in esecuzione i servizi www domain
#                       smtp imap2
# 10.126.0.2 su tap0  : In realta` si tratta dello stesso host di sopra, con un
#                       ulteriore indirizzo IP allo scopo di simulare un altro host
#                       che faccia da mirror al web server dell'host precedente.
# 10.126.1.1 su tap1  : Host nella rete degli uffici.
# 10.126.2.1 su tap2  : Host nella rete degli uffici cui e` proibita la navigazione nel web.
# 10.126.3.1 su tap3  : Computer adibito all'amministrazione, da qui l'amministratore puo`
#                       collegarsi via SSH al firewall.
#
# NOTA
# Al fine di abilitare il NAT abbiamo nascosto le sottoreti virtuali al
# router centrale. Abbiamo cambiato gli indirizzi IP
# da 10.26.Y.1
# a 10.126.Y.1
#

#
# Protezioni a livello kernel
#
# Queste protezioni possono (e molte lo sono) essere attivate via iptables
# ma nel campo della sicurezza la ridondanza non fa mai male.
#

# Protezione per i pacchetti di tipo echo request diretti in broadcast
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disabilita i pacchetti il cui instradamento è insito nel pacchetto stesso.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route

# Protezione da attacchi di tipo syn flood.
# Potrebbe degradare le prestazioni, inoltre nel kernel è disabilitato di
# default.
#echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disabilita i pacchetti ICMP di tipo redirect
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects

# Disabilita l'invio dei pacchetti di sopra
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# Abilita la protezione antispoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# Effettua il log dei pacchetti con indirizzi impossibili.
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

#
# Politiche
#

# Vogliamo che di default vengano scartati tutti i pacchetti.
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Riportiamo tutto allo stato iniziale, azzerando catene, regole, contatori,
# nel caso che lo script venga invocato direttamente piuttosto che da un altro
# script sysVinit-like.
iptables -F
iptables -X
iptables -Z

iptables -t nat -F
iptables -t mangle -F

#
# Catene definite dall'utente
#

# Per prima cosa stabiliamo una serie di regole relative ai pacchetti da
# accettare in più circostanze e mettiamole in una nuova catena.
# La ricezione di questi pacchetti è sempre sicura.
iptables -N allowed

# Questo va fatto per consentire i pacchetti appartenenti a connessioni
# stabilite o correlate.
iptables -A allowed -m state --state ESTABLISHED,RELATED -j ACCEPT

# Consentiamo i pacchetti ICMP non pericolosi, o utili.
iptables -A allowed -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A allowed -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A allowed -p icmp --icmp-type echo-request -j ACCEPT
iptables -A allowed -p icmp --icmp-type fragmentation-needed -j ACCEPT

# Creiamo una catena per i servizi raggiungibili dall'esterno.
iptables -N services

# Webserver e mirror.
iptables -A services -d 10.126.0.1 -p tcp -m multiport \
	--destination-ports 80,443 -j ACCEPT
iptables -A services -d 10.126.0.2 -p tcp -m multiport \
	--destination-ports 80,443 -j ACCEPT

# Posta
iptables -A services -d 10.126.0.1 -p tcp -m multiport --destination-ports \
	25,143 -j ACCEPT

# Altro servizio
iptables -A services -d 10.126.0.1 -p tcp --dport 8080 -j ACCEPT

# DNS
iptables -A services -d 10.126.0.1 -p udp --dport 53 -j ACCEPT

# Raggruppa in maniera logica tutto il traffico tra le sottoreti e verso
# Internet
iptables -N forwarding

# La DMZ esce via http e ftp solo per effettuare gli aggiornamenti da
# security.debian.org che facciamo corrispondere a server.math.unipd.it
# in mancanza di accessi verso Internet.
iptables -A forwarding -m state --state NEW -p tcp -i tap0 -o eth0 \
	-s 10.126.0.0/24 -d security.debian.org -m multiport --destination-ports \
	21,80 -j ACCEPT

# La DMZ può contattare DNS server all'esterno.
iptables -A forwarding -m state --state NEW -p udp -i tap0 -o eth0 \
	-s 10.126.0.0/24 --dport 53 -j ACCEPT

# La sottorete in tap1 può accedere ai seguenti servizi.
iptables -A forwarding -m state --state NEW -p tcp -i tap1 -o eth0 \
	-s 10.126.1.0/24 -m multiport --destination-ports 21,22,25,80,110,143,443 \
	-j ACCEPT

iptables -A forwarding -m state --state NEW -p tcp -i tap1 -o tun0 \
	-s 10.126.1.0/24 --dport 80 -j ACCEPT

# NASELLO
# Meta` della sottorete non puo` uscire via SSH.
# iptables -A forwarding -m state --state NEW -p tcp -i tap2 -o eth0 \
#	-s 10.126.2.0/25 --dport 22 -j DROP

# La sottorete in tap2 può accedere ai servizi di sopra tranne la navigazione
# sul web.
iptables -A forwarding -m state --state NEW -p tcp -i tap2 -o eth0 \
	-s 10.126.2.0/24 -m multiport --destination-ports 21,22,25,110,143 -j ACCEPT

# La sottorete in tap3 può accedere agli stessi servizi di quella in tap1.
iptables -A forwarding -m state --state NEW -p tcp -i tap3 -o eth0 \
	-s 10.126.3.0/24 -m multiport --destination-ports 21,22,25,80,110,143,443 \
	-j ACCEPT

# Tutte le sottoreti hanno accesso alla DMZ per cio` che riguarda i servizi elencati.
iptables -A forwarding -m state --state NEW -p tcp -i tap+ -o tap0 \
	-s 10.126.0.0/16 -d 10.126.0.0/24 -m multiport --destination-ports \
	22,25,80,143,443,8080 -j ACCEPT
iptables -A forwarding -m state --state NEW -p udp -i tap+ -o tap0 \
	-s 10.126.0.0/16 -d 10.126.0.0/24 --dport 53 -j ACCEPT

iptables -A forwarding -m state --state NEW -p tcp -i tun0 -o tap0 \
	-d 10.126.0.0/24 -m multiport --destination-ports \
	25,80,143,443,8080 -j ACCEPT

#
# Attuazione delle regole
#

# INPUT chain
#iptables -A INPUT -j LOG --log-prefix "INPUT"
# Il firewall accetta sempre connessioni generate localmente.
iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

# Protezione contro lo spoof degli indirizzi IP.
iptables -A INPUT -i eth0 -s 10.0.0.0/8     -j DROP
iptables -A INPUT -i eth0 -s 172.16.0.0/12  -j DROP
iptables -A INPUT -i eth0 -s ! 192.168.84.0/24 -j DROP

iptables -A INPUT -j allowed

# OpenVPN
# Inseriamo un controllo anche sul MAC address. Questo ovviamente e` possibile
# solo nella nostra realta` dove i due estremi della VPN risiedono sullo
# segmento di rete.
iptables -A INPUT -m state --state NEW -p udp -s 192.168.84.27 \
	-m mac --mac-source 00:12:3f:ab:01:e1 --dport 1194 -j ACCEPT

# Consente a questo host che fa parte dell'amministrazione di connettersi
# via SSH.
iptables -A INPUT -m state --state NEW -p tcp -i tap3 -s 10.126.3.1 --dport 22 \
	-j ACCEPT

# Log di tutto il resto
iptables -A INPUT -j LOG --log-prefix "INPUT DROP: "

# OUTPUT chain

# Le connessioni dirette a localhost sono sempre permesse.
iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

iptables -A OUTPUT -j allowed

iptables -A OUTPUT -p udp -d 192.168.84.27 --dport 1194 -j ACCEPT

# Il firewall può collegarsi a Internet solo per effettuare gli aggiornamenti.
iptables -A OUTPUT -m state --state NEW -p tcp -o eth0 -d security.debian.org \
	-m multiport --ports 21,80 -j ACCEPT

# Il firewall può interrogare server DNS esterni e quello in DMZ.
iptables -A OUTPUT -m state --state NEW -p udp --dport 53 -o eth0 -j ACCEPT

iptables -A OUTPUT -m state --state NEW -p udp --dport 53 -o tap0 -j ACCEPT

# Log di tutto il resto
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "

# FORWARD chain
iptables -A FORWARD -j allowed

# Servizi raggiungibili dall'esterno
iptables -A FORWARD -i eth0 -o tap0 -m state --state NEW -j services

# Pacchetti che vengono instradati
iptables -A FORWARD -i tap+ -j forwarding

iptables -A FORWARD -i tun0 -j forwarding

# Log di tutto il resto
iptables -A FORWARD -j LOG --log-prefix "FORWARD DROP: "

#
# NAT
#
# Per prima cosa dobbiamo mascherare i pacchetti, poiché escono tutti
# con lo stesso IP.
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.84.26

# Log di tutto il resto
iptables -t nat -A POSTROUTING -o eth0 -j LOG --log-prefix "POSTROUTING DEBUG: "

# Il webserver in DMZ è raggiungibile dall'esterno.
# Vengono specificati due indirizzi IP perché nel nostro immaginario esistono
# un web server e un suo mirror.
# In questo modo si ottiene una forma semplificata di bilanciamento del carico.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
	--to-destination 10.126.0.1-10.126.0.2

# Anche il server smtp e imap
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --destination-ports \
	25,143,8080 -j DNAT --to-destination 10.126.0.1

# Anche il server DNS.
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 53 -j DNAT \
	--to-destination 10.126.0.1

# Log di tutto il resto
iptables -t nat -A PREROUTING -i eth0 -j LOG --log-prefix "PREROUTING DEBUG: "