Técnicas avançadas com Iptables

Started by C00L3R, 11 de December , 2008, 12:02:23 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

C00L3R

neste artigo vou mostrar técnicas com iptables dificil de ver por ai
não vou mostrar cliches de iptables que vocês encontram em blogs,portais etc...

Iptables tem sido um dos firewalls mais usados no mundo todo por ter suas facilidades
praticamente todo usuário do pinguin prefere ele até conhecer o "PF" que é famoso por ter macros
para quem não sabe seria o packet filter firewall do famoso OpenBSD, mas como não estou aqui para
falar da diferença dos dois vou falar somente do iptables que mesmo não sendo o melhor para min é muito bom
se for usado de forma correta...

bem suponhamos que você já saiba o básico sobre iptables
vamos intender como é logado o que ocorre com ele
usando a regra
# iptables -A INPUT -j LOG --log-ip-options

vamos testar com um ping
[ext_scanner]$ ping -c 1 -T tsonly 71.157.X.X
PING 71.157.X.X (71.157.X.X) 56(124) bytes of data.
64 bytes from 71.157.X.X icmp_seq=1 ttl=64 time=0.211 ms
TS:     68579524 absolute
        578
        0
        -578
--- 71.157.X.X ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.211/0.211/0.211/0.000 ms


agora vamos ver os logs usando tail
[iptablesfw]# tail /var/log/messages | grep ICMP
Jul 22 15:03:00 iptablesfw kernel: IN=eth0 OUT=
MAC=00:13:d3:38:b6:e4:00:30:48:80:4e:37:08:00 SRC=144.202.X.X DST=71.157.X.X
LEN=124 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF OPT (44280D00041670C404167306000000
00000000000000000000000000000000000000000000000000) PROTO=ICMP TYPE=8 CODE=0
ID=57678 SEQ=1


certo mas e agora como podemos identificar um ataque com nmap em que o atacante usou flag
FIN simples usando nome flag FIN numa busca pelos logs

[ext_scannner]# nmap -P0 -sF 71.157.X.X
Starting Nmap 4.01 ( http://www.insecure.org/nmap/ ) at 2007-07-03 00:33 EDT
All 1672 scanned ports on 71.157.X.X are: open|filtered
Nmap finished: 1 IP address (1 host up) scanned in 36.199 seconds


veja o uso do grep e repare só na linha q tem "DROP INVALID" isso que resulto
no resultadodo nmap "open|filtered"
[iptablesfw]# grep FIN /var/log/messages | tail -n 1
Jul 3 00:34:17 iptablesfw kernel: DROP INVALID IN=eth0 OUT=
MAC=00:13:d3:38:b6:e4:00:30:48:80:4e:37:08:00 SRC=144.202.X.X DST=71.157.X.X
LEN=40 TOS=0x00 PREC=0x00 TTL=54 ID=50009 PROTO=TCP SPT=60097 DPT=1437
WINDOW=3072 RES=0x00 FIN URGP=0


e um ataque com datagramas(UDP) como seria?
simples veja o exemplo
[ext_scanner]# nmap -P0 -sU 71.157.X.X
Starting Nmap 4.01 ( http://www.insecure.org/nmap/ ) at 2007-07-03 00:44 EDT
All 1482 scanned ports on 71.157.X.X are: open|filtered
Nmap finished: 1 IP address (1 host up) scanned in 32.260 seconds

analisando o log
[iptablesfw]# tail /var/log/messages | grep UDP | tail -n 1
Jul 3 00:45:01 iptablesfw kernel: DROP IN=eth0 OUT=
MAC=00:13:d3:38:b6:e4:00:30:48:80:4e:37:08:00 SRC=144.202.X.X DST=71.157.X.X
LEN=28 TOS=0x00 PREC=0x00 TTL=42 ID=48755 PROTO=UDP SPT=60906 DPT=381 LEN=8


mudando de assunto vamos saber como o iptables pode evitar ataques de "buffer Overflow"
aqui no boteco na parte de segurança fiz um artigo explicando como funciona estouro de pilha

de uma lida nele se você não sabe o que é...
para evitar buffer overflow  podemos usar a regra
# iptables -I FORWARD 1 -p tcp --dport 443 -m state --state
ESTABLISHED -m string --string "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAA" -j LOG --log-prefix "SSL OVERFLOW "


repare só a string repetitiva "AAAA.*" tipica de overflow esta regra funciona como se fosse um tipo de regex
para evitar ataque na porta "443" uma das portas prediléta dos crackers tambem podemos defender a porta ftp
de buffer overflow como neste outro exemplo:

# iptables -I FORWARD 1 -p tcp --dport 21 -m state --state
ESTABLISHED -m string --string "site" --algo bm -m string --string "chown"
--algo bm -m length --length 140 -j LOG --log-prefix "CHOWN OVERFLOW "


certo até agora ja vimos como se proteger de exploits e scans
agora vamos ver SQL injection um dos ataques mais populares do mundo do defacement
bem um dos logs populares do snort quando vemos ataques de sql injection é
alert tcp $EXTERNAL_NET any -> $SQL_SERVERS 1433 (msg: "BLEEDING-EDGE
EXPLOIT MS-SQL SQL Injection closing string plus line comment"; flow:
to_server,established; content: "'|00|"; content: "-|00|-|00|";
reference:url,www.nextgenss.com/papers/more_advanced_sql_injection.pdf;
reference:url,www.securitymap.net/sdm/docs/windows/mssql-checklist.html;
classtype: attempted-user; sid: 2000488; rev:5; )


ou seja como evitar isso vamos usar a regra
[iptablesfw]# iptables -I FORWARD 1 -p tcp --dport 1433 -m state --state
ESTABLISHED -m string --hex-string "'|00|" --algo bm -m string --hex-string
"-|00|-|00|" --algo bm -j LOG --log-prefix "SQL INJECTION COMMENT "


explicando: repare soh na linha que tem "--hex-string" esta mostrando para o iptables onde esta o que é para
bloquiar ou seja dado que o snort nos deu mostrando que ele tem o conteudo "-|00|-|00|"

com iptables tambem podemos bloquiar ataques do tipo phishing imagine uma situação
em que o atacante anda mandando conteudo de phishing com as seguintes informações

When signing on to Citibank Online, you or somebody else have made several login attempts and
reached your daily attempt limit. As an additional security measure your access to Online
Banking has been limited. This Web security measure does not affect your access to phone
banking or ATM banking. Please verify your information <a href="http://196.41.X.X/sys/"
onMouseMove="window.status='https://www.citibank.com/us/cards/index.jsp';return true;"
onMouseout="window.status=''">here</a>, before trying to sign on again. You will be able
to attempt signing on to Citibank Online within twenty-four hours after you verify your
information. (You do not have to change your Password at this time.)


como bloquiar isso ?
simples vamos usar a regra
# iptables -I FORWARD 1 -p tcp --dport 25 -m state --state
ESTABLISHED -m string --string "http://196.41.X.X/sys/" --algo bm -m string
--hex-string "window.status=|27|https://www.citibank.com" -j LOG --log-prefix
"CITIBANK PHISH "

sem mistérios

bem finalizando o artigo vou deixar uma regra para quem quer evitar "syn floods"
#iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT


dai você me pergunta nossa C00L3R_ onde você arrumou estas dicas ?
dai eu respondo
Eu li dois livros de iptables fiz um resumo do que achei não genérico e postei para ajudar
o pessoal do darkers ;)
um deles foi -> http://nostarch.com/firewalls.htm
e outro para quem quer  aprender a usa rprimeiro http://www.linuxmall.com.br/index.php?product_id=1872