[AsteriskBrasil] Segurança em servidores Asterisk

leandro alves thc.leandro em gmail.com
Terça Agosto 3 23:37:29 BRT 2010


Galera,

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.

Portanto, segue um complemento, de tudo que já existe postado em outros
lugares(mas pouco se utiliza), como também parâmetros que "deveriam" 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 "tentar":


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 "nós" compilamos, segue abaixo algumas coisas que acho que
deveríamos conhecer:

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):

Sipvicious(provavelmente o que foi utilizado no ataque à um dos clientes):

São 3 scripts em python, scanners em plantaformas voip, baseados em sip:

svmap.py – Sip scanner, que lista dispositivos sip(Asterisk, ou
switch's(hardware) voip) de um endereço ou range de ips.

svwar.py – Lista ramais/usuários de contas sip(com ou sem segurança) em uma
plataforma voip(ex.: servidor Asterisk).

svcrack.py – Utilizado para quebrar senhas de ramais sip(quando não há
senha, também exibe status do ramal).


Erros mais frequentes de segurança:

* Ramais onde a senha é o numero do ramal.
* Ramais com senhas fracas, que podem ser facilmente encontradas em
wordlists.
* Ramais sem senha(qualquer um pode utilizar, colocando qualquer senha ou
nem colocando uma).
* Firewall(parado ou sem regras seguras).
* Sem regras de permit/deny no sip.conf(quando não há necessidade de se
utilizar com ip's dinamicos).
* Ramais tem permissão para ligarem para qualquer lugar(DDI, quase nunca
necessário).


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:

./svmap.py IPDOSERVIDORVOIP

| SIP Device        | User Agent   | Fingerprint |
--------------------------------------------------
| 187.xxx.xxx.xxx:5060 | Asterisk PBX | disabled    |



* Ok, o IP: 187.xxx.xxx.xxx é um alvo(IPBX Asterisk).

* Agora, roda-se o outro script para verificar quais ramais disponíveis
neste servidor Asterisk:

 ./svwar.py 187.xxx.xxx.xxx
| Extension | Authentication |
------------------------------
| 696       | reqauth        |
| 652       | reqauth        |
| 1100      | noauth         |
| 1101      | noauth         |

* 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).

* Se não houver nenhum ramal com falha de segurança na autenticação, basta
rodar um outro script, para tentar identificar senhas fracas:

Identificando senhas numericas:

./svcrack.py 187.xxx.xxx.xxx -u 696

| Extension | Password |
------------------------
| 696       | 696      |


As alfanuméricas podem ser facilmente crackeadas com qualquer wordlist
encontrada aos milhões pela internet:

./svcrack.py 187.xxx.xxx.xxx -u 202 -d /caminho/senhas_fracas.txt

| Extension | Password      |
—————————–
| 691       | teste         |


SUGESTÕES PARA MELHORIA DA SEGURANÇA:

- 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.

- Implementei o fail2ban no Asterisk na Empresa, mas ainda faltam algumas
coisas, porém, do jeito que esta, já temos algum sucesso:

- Identifiquei que em alguns servidores com Asterisk, que há algumas senhas
utilizando "secret", ao invés do padrão já tido como seguro, "md5secret",
isto também é uma falha.

- O parâmetro "allowguest=", nas configurações gerais, deverá sempre ser
habilitado no "sip.conf" em todos os servidores Asterisk, garantindo que um
ramal sem autenticação nunca poderá efetuar uma chamada.

- Habilitar o parâmetro "alwaysauthreject=yes", 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.

- Como estou utilizando o "fail2ban" no servidor da empresa, para bloquear
bruteforces para autenticações SIP também, segue o que foi feito:

* Configurando o Fail2Ban no Planetfone:

O "fail2ban", é 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.

Os arquivos de configuração ficam em: /etc/fail2ban/filter.d

- Ainda dentro do diretório, criar o arquivo para o Asterisk:

Ex.: asterisk.conf

- Inserir o seguinte conteúdo no arquivo:

[INCLUDES]

[Definition]
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – Wrong
password
            NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – No
matching peer found
            NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ –
Username/auth name mismatch
            NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – Device
does not match ACL
            NOTICE.* <HOST> failed to authenticate as ‘.*’$
            NOTICE.* .*: No registration for peer ‘.*’ \(from <HOST>\)
            NOTICE.* .*: Host <HOST> failed MD5 authentication for ‘.*’ (.*)
            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
ignoreregex =



- No aquivo /etc/fail2ban/jail.conf, incluir o seguinte:

[asterisk-iptables]

enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, protocol=all]
     sendmail-whois[name=ASTERISK, dest=seuemail em seudomino,
sender=asterisk em dominio]

logpath  = /var/log/asterisk/full

maxretry = 3
bantime = 259200

###Finalizado a configuração do arquivo.

- Maxretry determina a quantidade de erros que o fail2ban vai aceitar de um
determinado host antes de bloqueá-lo.

- "bantime", em segundos, portanto neste caso qualquer tentativa de ataque
ao asterisk será banida por 72 horas.


* Editar o /etc/asterisk/logger.conf e definir o "dateformat"(por padrão no
nosso asterisk esta comentado) da seguinte forma.

 [general]
dateformat=%F %T

- Em [logfiles], insira a linha:

syslog.local0 => notice

* Reload no "logger" do asterisk


Estas soluções, não garantem total segurança para nossos clientes, pois isto
é impossível, mas pelo que é hoje, seria um "respirar" muito melhor.


-- 
Leandro,
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20100803/713889d4/attachment-0001.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil