<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">Galera,<div><br></div><div>Houveram relatos de vários ataques phreak em diversos servidores com plantaforma Asterisk, como também em Atas, utilizados em operadoras Voip pelo mundo todo. Mas notei que há muitos ataques concentrados no Brasil.</div>
<div><br></div><div>Portanto, segue um complemento, de tudo que já existe postado em outros lugares(mas pouco se utiliza), como também parâmetros que &quot;deveriam&quot; ser utilizados por operadoras Voip, onde nos testes de meus clientes, descobri que a maioria delas são inseguras, disponibilizam seus clientes às várias ferramentas de ataques na rede. Seguem indicações para melhorar a segurança de nossas redes, ou pelo menos &quot;tentar&quot;:</div>
<div><br></div><div><br></div><div><span style="font-family: monospace; font-size: medium; ">Baseado nos recentes ataques sofridos na ultima semana, seria interessante atentarmos não só à segurança da rede dos nossos clientes, mas também no asterisk, que &quot;nós&quot; compilamos, segue abaixo algumas coisas que acho que deveríamos conhecer:</span></div>
<div><span style="font-family: monospace; font-size: medium; "><br></span></div><div><span style="font-family: monospace; font-size: medium; ">Ferramenta de ataque(toda e qualquer informação disponibilizada, é somente para consulta e proteção de servidores voip, não deverá ser utilizado para ataques):<br>
<br>Sipvicious(provavelmente o que foi utilizado no ataque à um dos clientes):<br><br>São 3 scripts em python, scanners em plantaformas voip, baseados em sip:<br><br>svmap.py – Sip scanner, que lista dispositivos sip(Asterisk, ou switch&#39;s(hardware) voip) de um endereço ou range de ips.<br>
<br>svwar.py – Lista ramais/usuários de contas sip(com ou sem segurança) em uma plataforma voip(ex.: servidor Asterisk).<br><br>svcrack.py – Utilizado para quebrar senhas de ramais sip(quando não há senha, também exibe status do ramal).<br>
<br></span></div><div><font face="monospace"><span style="font-size: medium; "><br></span></font></div><div><span style="font-family: monospace; font-size: medium; ">Erros mais frequentes de segurança:<br><br>* Ramais onde a senha é o numero do ramal.</span></div>
<div><span style="font-family: monospace; font-size: medium; ">* Ramais com senhas fracas, que podem ser facilmente encontradas em wordlists.<br>* Ramais sem senha(qualquer um pode utilizar, colocando qualquer senha ou nem colocando uma).<br>
* Firewall(parado ou sem regras seguras).<br>* Sem regras de permit/deny no sip.conf(quando não há necessidade de se utilizar com ip&#39;s dinamicos).<br>* Ramais tem permissão para ligarem para qualquer lugar(DDI, quase nunca necessário).<br>
<br><br></span></div><div><span style="font-family: monospace; font-size: medium; ">Rastreamento para encontrar plataformas SIP em uma rede(você estabelece um range de rede com o script feito em pyton), algumas operadoras Voip, que neste artigo não citarei o nome, são totalmente escancaradas, e listam seus clientes:<br>
<br>./svmap.py IPDOSERVIDORVOIP<br><br><div>| SIP Device        | User Agent   | Fingerprint |</div><div>--------------------------------------------------</div><div>| 187.xxx.xxx.xxx:5060 | Asterisk PBX | disabled    |</div>
<div><br></div><div><br></div><br>* Ok, o IP: 187.xxx.xxx.xxx é um alvo(IPBX Asterisk).<br><br>* Agora, roda-se o outro script para verificar quais ramais disponíveis neste servidor Asterisk:<br><br> ./svwar.py </span><span style="font-family: monospace; font-size: medium; ">187.xxx.xxx.xxx</span><span style="font-family: monospace; font-size: medium; "> </span></div>
<div><span style="font-family: monospace; font-size: medium; "><div>| Extension | Authentication |</div><div>------------------------------</div><div>| 696       | reqauth        |</div><div>| 652       | reqauth        |</div>
| 1100      | noauth         |<br>| 1101      | noauth         |<br><br>* Os dois ultimos ramais (sequer requerem senha de autenticação), posso usá-los para me registrar e discar para qualquer lugar(desde que tenha permissão de discagem no ramal).<br>
<br>* Se não houver nenhum ramal com falha de segurança na autenticação, basta rodar um outro script, para tentar identificar senhas fracas:<br><br>Identificando senhas numericas:<br><br>./svcrack.py 187.xxx.xxx.xxx -u 696<br>
<div><br></div><div>| Extension | Password |</div><div>------------------------</div><div>| 696       | 696      |</div><br><br>As alfanuméricas podem ser facilmente crackeadas com qualquer wordlist encontrada aos milhões pela internet:<br>
<br>./svcrack.py 187.xxx.xxx.xxx -u 202 -d /caminho/senhas_fracas.txt<br><br>| Extension | Password      |<br>—————————–<br>| 691       | teste         |<br><br><br>SUGESTÕES PARA MELHORIA DA SEGURANÇA:<br><br>- Por se tratar de sinalização SIP, não seria muito difícil desenvolver ferramentas para se aproveitar de falhas de segurança em servidores Asterisk.<br>
<br>- Implementei o fail2ban no Asterisk na Empresa, mas ainda faltam algumas coisas, porém, do jeito que esta, já temos algum sucesso:<br><br>- Identifiquei que em alguns servidores com Asterisk, que há algumas senhas utilizando &quot;secret&quot;, ao invés do padrão já tido como seguro, &quot;md5secret&quot;, isto também é uma falha.<br>
<br>- O parâmetro &quot;allowguest=&quot;, nas configurações gerais, deverá sempre ser habilitado no &quot;sip.conf&quot; em todos os servidores Asterisk, garantindo que um ramal sem autenticação nunca poderá efetuar uma chamada.<br>
<br>- Habilitar o parâmetro &quot;alwaysauthreject=yes&quot;, que fará com que o asterisk responda para bad autentication da mesma forma que invalid username, pela lógica da força bruta, recebendo um bad autentication, pois se existe um ramal, só falta descobrir a senha, quando o erro é sempre o mesmo seria mais difícil esta possibilidade.<br>
<br>- Como estou utilizando o &quot;fail2ban&quot; no servidor da empresa, para bloquear bruteforces para autenticações SIP também, segue o que foi feito:<br><br>* Configurando o Fail2Ban no Planetfone:<br><br>O &quot;fail2ban&quot;, é capaz de bloquear um série de acessos em diversos serviços, mas a intenção é fazer com o que ele identifique e bloqueie ataques contra o asterisk.<br>
<br>Os arquivos de configuração ficam em: /etc/fail2ban/filter.d<br><br>- Ainda dentro do diretório, criar o arquivo para o Asterisk:<br><br>Ex.: asterisk.conf<br><br>- Inserir o seguinte conteúdo no arquivo:<br><br>[INCLUDES]<br>
<br>[Definition]<br>failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘&lt;HOST&gt;’ – Wrong password<br>            NOTICE.* .*: Registration from ‘.*’ failed for ‘&lt;HOST&gt;’ – No matching peer found<br>            NOTICE.* .*: Registration from ‘.*’ failed for ‘&lt;HOST&gt;’ – Username/auth name mismatch<br>
            NOTICE.* .*: Registration from ‘.*’ failed for ‘&lt;HOST&gt;’ – Device does not match ACL<br>            NOTICE.* &lt;HOST&gt; failed to authenticate as ‘.*’$<br>            NOTICE.* .*: No registration for peer ‘.*’ \(from &lt;HOST&gt;\)<br>
            NOTICE.* .*: Host &lt;HOST&gt; failed MD5 authentication for ‘.*’ (.*)<br>            NOTICE.* .*: Failed to authenticate user .*@&lt;HOST&gt;.*<br>ignoreregex =<br><br><br><br>- No aquivo /etc/fail2ban/jail.conf, incluir o seguinte:<br>
<br>[asterisk-iptables]<br><br>enabled  = true<br>filter   = asterisk<br>action   = iptables-allports[name=ASTERISK, protocol=all]<br>     sendmail-whois[name=ASTERISK, <span style="color: rgb(0, 0, 139); text-decoration: none; "><span style="color: rgb(0, 0, 139); text-decoration: none; ">dest=seuemail@seudomino</span></span>, <span style="color: rgb(0, 0, 139); text-decoration: none; "><span style="color: rgb(0, 0, 139); text-decoration: none; ">sender=servidorqueenvia@seudominio</span></span>]<br>
<br>logpath  = /var/log/asterisk/full<br><br>maxretry = 3<br>bantime = 259200<br><br>###Finalizado a configuração do arquivo.<br><br>- Maxretry determina a quantidade de erros que o fail2ban vai aceitar de um determinado host antes de bloqueá-lo.<br>
<br>- &quot;bantime&quot;, em segundos, portanto neste caso qualquer tentativa de ataque ao asterisk será banida por 72 horas.<br><br><br>* Editar o /etc/asterisk/logger.conf e definir o &quot;dateformat&quot;(por padrão no nosso asterisk esta comentado) da seguinte forma.<br>
<br> [general]<br>dateformat=%F %T<br><br>- Em [logfiles], insira a linha:<br><br>syslog.local0 =&gt; notice<br><br>* Reload no &quot;logger&quot; do asterisk<br><br><br>Estas soluções, não garantem total segurança para nossos clientes, pois isto é impossível, mas pelo que é <span style="color: rgb(0, 0, 139); text-decoration: none; "><span style="color: rgb(0, 0, 139); text-decoration: none; ">hoje</span></span>, seria um &quot;respirar&quot; muito melhor.</span></div>
<div><br><br></div><div>-- <br>Leandro,</div></span><br><br>