segura voip v3
Post on 16-Oct-2014
87 Views
Preview:
TRANSCRIPT
Alexandre B. Barretokabart@gmail.com
Implementando um Servidor VoIP Seguro
(OpenSer/Asterisk)Alexandre de Barros Barreto
kabart@gmail.comhttp://kabart.blogspot.com/
ITA
Alexandre B. Barretokabart@gmail.com
ObjetivoObjetivo
❖ Apresentar modelos de segurança aplicados a uma rede VoIP, bem como apresentar como é possível implementar esses modelos em uma rede Asterisk e Openser.
Alexandre B. Barretokabart@gmail.com
AgendaAgenda
❖ Questões de Segurança
em Sistemas de Telefonia
❖ Apresentação do Estudo
de Caso
❖ Arquiteturas de Auten
ticação
❖ Arquiteturas de
Garantia do Sigilo
❖ Arquiteturas de Alta
Disponibilidade
❖ VoIP Hardening
❖ Considerações Finais
Alexandre B. Barretokabart@gmail.com
Questões de Segurança em Questões de Segurança em Sistemas de TelefoniaSistemas de Telefonia
Alexandre B. Barretokabart@gmail.com
Segurança da InformaçãoSegurança da Informação
❖ “... a proteção da informação de vários tipos de ameaças para garantir a continuidade do negócio, minimizar o risco, maximizar o retorno sobre os investimentos e as oportunidades de negócio.”
(ISO/IEC, 2005)
Alexandre B. Barretokabart@gmail.com
Ameaças de Sistemas de Ameaças de Sistemas de TelefoniaTelefonia
❖ Fraude de Tarifação (Toll Fraud)❖ Monitoramento de Sessão❖ Service Use and Abuse❖ Roubo de Identidade de Usuário e Terminal❖ SPT (Spam over Telephony)❖ Interrupção de Serviço (DoS)❖ Phreakers
Alexandre B. Barretokabart@gmail.com
Ameaças Específicas de Ameaças Específicas de Sistemas VoIPSistemas VoIP
❖ Os mesmos dos sistemas de telefonia convencional;
❖ Problemas herdados dos sistemas IP que o hospedam (Buffer Overflow, SYN Flood, UDP Flood, etc);
❖ Session (Call) Hijacking;❖ DoS e DDoS;❖ ManintheMiddle (MITM);❖ SPIT (Spam over Internet Telephony).
Alexandre B. Barretokabart@gmail.com
ContraMedidasContraMedidas
❖ Integridade
❖ Autenticidade
❖ Confidencialidade
❖ Disponibilidade.
Alexandre B. Barretokabart@gmail.com
Apresentação do Estudo de CasoApresentação do Estudo de Caso
Openser x AsteriskOpenser x Asterisk
OpenserOpenser❖ Proxy SIP completo❖ Derivado do projeto SER
(iptel)Implementa em toda sua plenitude a RFC 3261.
❖ Característica Principal❖ Desempenho e escala
bilidade.❖ Limitação:
❖ Difícil Configuração.
AsteriskAsterisk❖ PABX IP completo com
suporte a uma diversidade de protocolos.
❖ Características Principais❖ Recursos de Telefonia
Avançados;❖ Simplicidade.
❖ Limitação:❖ Não é um proxy SIP.
Ambiente de EstudoAmbiente de Estudo(a) Usuários Internos(b) Asterisk x Openser(c) Usuários Externos(d) Entroncamento(e) Outras Redes
Alexandre B. Barretokabart@gmail.com
Arquiteturas de AutenticaçãoArquiteturas de Autenticação
Alexandre B. Barretokabart@gmail.com
Objetivo da AutenticaçãoObjetivo da Autenticação
❖Garantir a correta identificação dos
usuários do sistema telefônico;
❖Restringir o acesso aos recursos
telefônicos; e
❖Garantir que seja possível
implementar auditoria nos sistemas.
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticação
❖Usuários x Usuários
❖Usuários x Servidores
❖Servidores x Servidores
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoUsuários x ServidoresUsuários x Servidores
❖ Realizado através do Openser.
❖ TLS, HTTP Digest e noauthentication.
❖ Usar autenticação digest para os
usuários (HTTP Digest) usando banco
de dados (MySQL ou Postgress).
❖ modparam (“usrloc”, “db_mode”, 2)
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoUsuários x ServidoresUsuários x Servidores
❖ Armazenar as chaves usando hash
❖ MD5 (username, senha, realm)
❖ modparam("auth_db",
"password_column", “senha”)
❖ modparam("auth_db", "calculate_ha1",
yes)
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoUsuários x ServidoresUsuários x Servidores
❖Usar os métodos check_to() e
check_from() para verificar se o um
terminal não teve sua identidade
roubada.
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoUsuários x ServidoresUsuários x Servidores
❖ Divida os usuários em grupos de forma a restringir o acesso dos recursos oferecidos pelo seu proxy.
❖ INSERT INTO 'grp' ('username', 'domain', 'grp', 'last_modified') VALUES ('1000' , 'empresa1.com', 'ld', '00000000 00:00:00');
❖ if (uri=~”^sip:00[19][19][09]{1}@”){If (is_user_in(“credentials”, “ld”)){...
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoOpenser<>Asterisk (único host)Openser<>Asterisk (único host)
❖ Asterisk > Openser
❖ Usar o método register do
Asterisk, ser criado um usuário no
asterisk e ser criado uma conta no
Openser.
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoOpenser<>Asterisk (único host)Openser<>Asterisk (único host)
❖ Openser > Asterisk
❖ Devese criar um usuário no
Asterisk e usar o método funções
Openser (rewriteuser(),
rewriteuserpass(),
rewritehostport()).
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoOpenser<>Asterisk (único host)Openser<>Asterisk (único host)
Importante: Caso o Asterisk não
redirecione chamadas para o
Openser podese usar
(INSEGURO) a opção da tabela
trusted do Openser.
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoOpenser<>Asterisk (único host)Openser<>Asterisk (único host)
❖ INSERT INTO 'trusted'
('src_ip','proto','from_pattern')
VALUES ('localhost', 'any','^sip:.*$');
❖autocreatepeer=yes (Asterisk)
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoOpenser<>Asterisk (hosts distintos)Openser<>Asterisk (hosts distintos)❖Não se deve usar a opção da tabela
trusted do Openser.
❖Devese usar os mecanismos de
autenticação existentes no Asterisk e
Openser.
❖Devese criar um túnel VPN (IPSEC ou
TLS) entre os servidores.
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoAsterisk<>AsteriskAsterisk<>Asterisk
❖ Usar IAX.
❖ Usar suporte a autenticação segura
via RSA.
❖ A CA deve preferencialmente
ficar offline e protegida.
❖ /var/lib/asterisk/keys
Alexandre B. Barretokabart@gmail.com
AutenticaçãoAutenticaçãoAsterisk<>AsteriskAsterisk<>Asterisk
❖ IAX com RSA (/etc/iax.conf):
❖ auth = rsa
❖ inkeys = nome do arquivo de
chave pública.
❖ outkeys = nome da chave privada
usada.
Alexandre B. Barretokabart@gmail.com
Autenticação Openser x MysqlAutenticação Openser x Mysql((Registrar e Location ServerRegistrar e Location Server))
❖ Os parâmetros de conexão do Openser no Mysql atualmente são armazenados no arquivo .openserctlrc ($HOME) e não mais no script de inicialização do Openser (openser.cfg).
❖ Devese proteger esse arquivo contra leitura indevida.
❖ O servidor Mysql (preferencialmente) deve estar em outra máquina e a conexão com ele protegida com um túnel VPN.
Alexandre B. Barretokabart@gmail.com
Arquiteturas de Garantia do Arquiteturas de Garantia do SigiloSigilo
Garantia do SigiloGarantia do Sigilo(a) Usuários Internos(b) Asterisk x Openser(c) Usuários Externos(d) Entroncamento(e) Outras Redes
Alexandre B. Barretokabart@gmail.com
Proteção Baseadas em TúneisProteção Baseadas em Túneis
❖ Problemático quando se deseja implementar
para garantir a segurança fim a fim do canal.
❖ Necessidade de confiança transitiva entre
elementos da rede.
❖ Solução ideal quando se deseja entroncar
sistemas (Openser<>Gateway <>MySQL)
❖ Ex: OpenVPN (TLS) e FreeSWan (IPSEC)
Alexandre B. Barretokabart@gmail.com
OpenVPNOpenVPN
❖ Simples de configurar e usar.
❖ Bastante estável.
❖ Possui clientes para Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris e Smartphone (experimental).
❖ Tutorial muito bom em [7].
Alexandre B. Barretokabart@gmail.com
Proteção da Sinalização e da Proteção da Sinalização e da MídiaMídia
Alexandre B. Barretokabart@gmail.com
Proteção da Sinalização e da MídiaProteção da Sinalização e da Mídia❖ Proteção na Sinalização: Garantir a negociação
de chaves entre os pares para criar um canal
multimídia seguro.
❖ Proteção na Mídia: Garantir a conversação
segura entre dois pares.
Existe um consenso no protocolo usado para a
proteção da mídia (SRTP), porém isso não
ocorre na sinalização (TLS, MIKEY, ZRTP).
Alexandre B. Barretokabart@gmail.com
❖ Ideal pois ocasiona menos overhead do que as
soluções baseadas em túneis.
❖ Problemático quando o canal precisa passar por
algum tipo de codificação do Asterisk.
❖ Ainda não existe incorporado dentro do Asterisk
o suporte ao SRTP.❖ No Openser esse suporte deve ser prestado
pelo Media Proxy (não experimentado).
Proteção da Sinalização e da MídiaProteção da Sinalização e da Mídia
Alexandre B. Barretokabart@gmail.com
Proteção da Sinalização e da MídiaProteção da Sinalização e da Mídia
❖No caso de entroncamento e
usuários localizados externamente a
empresa, a melhor solução ainda é
usar túneis VPN (OpenVPN),
mesmo em ambientes móveis.
Alexandre B. Barretokabart@gmail.com
Arquiteturas de Alta Arquiteturas de Alta DisponibilidadeDisponibilidade
Requisitos de Alta Requisitos de Alta DisponibilidadeDisponibilidade
Alexandre B. Barretokabart@gmail.com
EstratégiasEstratégias
Tolerância a Falhas(Failover)
Distribuição de Carga(Load Balancing)
Alexandre B. Barretokabart@gmail.com
Estratégias de FailoverEstratégias de FailoverDNS Based Failover
Alexandre B. Barretokabart@gmail.com
Estratégias de Load BalancingEstratégias de Load BalancingLoad Sharing baseado em DNS
Alexandre B. Barretokabart@gmail.com
OpenserOpenser(DNS Failover)(DNS Failover)
❖Possui suporte a DNS Failover a partir da
versão 1.2.
❖Para não usar é necessário desabilitar.
Alexandre B. Barretokabart@gmail.com
OpenserOpenser(DNS Failover e Load Sharing)(DNS Failover e Load Sharing)
❖ Configurar BIND
❖ Prioridade => quanto menor, maior a prioridade.❖ Peso => No caso de prioridades iguais, os pesos são calculados
relativamente.❖ Ex. No caso de dois serviços com mesma prioridade, onde
S1 tem peso 5 e S2 peso 2, isso significa que a cada 7 requisições, 5 serão direcionadas a S1.
OpenserOpenser(DNS Failover e Load Sharing)(DNS Failover e Load Sharing)
1) Crie um arquivo dispatcher.cfg
# group sip addresses of your * units1 sip:gw1.example.com1 sip:gw2.example.com
OpenserOpenser(DNS Failover e Load Sharing)(DNS Failover e Load Sharing)
# Carrega o módulo dispatcherloadmodule("dispatcher.so")
#Define o tempo para que uma transação INVITE seja finalizadamodparam("tm", "fr_timer_avp", "i:24")
# Define fr_timer como 24 segundosmodparam("avpops","avp_aliases","fr_timer=i:24")
# failover support > store dests in avp valuemodparam("dispatcher", "flags", 2)
OpenserOpenser(DNS Failover e Load Sharing)(DNS Failover e Load Sharing)
route[0] {... if (is_method("INVITE") && uri=~"sip:.*@gw.example.com") { # replace domain part with first dispatcher target of group 1 (tag 2) ds_select_domain("1", "9"); # alg 9 > use first, second, etc
# Modifica fr_timer para 3 seconds avp_write("i:3", "$avp(fr_timer)");
# trata se a msg é uma retransmissãot_on_failure("1");
t_relay(); exit; } ... }
OpenserOpenser(DNS Failover e Load Sharing)(DNS Failover e Load Sharing)
failure_route[1] {... # 408 => Timeout if (t_check_status("408")) { # replace domain part with next dispatcher target if (ds_next_domain()) { t_relay(); exit; } } ...}
Alexandre B. Barretokabart@gmail.com
Failover no Serviço de RegistroFailover no Serviço de Registro(Replicação do DB)(Replicação do DB)
❖ Implementado via serviço de Cluster no Mysql❖ Instalação => ler tutorial [1].❖ Quando um registro do Openser fosse criado,
ele seria replicado para as diversas bases de dados existentes no cluster.
❖ Porém o Openser precisaria informar qual é o banco físico que ele deseja escrever, no caso de falha, ele tentaria escrever no banco de dados com problema.
Alexandre B. Barretokabart@gmail.com
Failover no Serviço de RegistroFailover no Serviço de Registro(Replicação do DB)(Replicação do DB)
Como fazer com que o Openser descubra qual a base física disponível?
ULTRAMONKEY
Alexandre B. Barretokabart@gmail.com
Failover no Serviço de RegistroFailover no Serviço de Registro(Replicação do DB)(Replicação do DB)
❖ UltraMonkey❖ Implementa a estratégia de IP Address Takeover.❖ Permite a criação de um IP virtual, fazendo com
que o Openser aponte para esse endereço e não o real.
❖ No caso de uma pane, o próprio UltraMonkey trata de direcionar a requisição.
Alexandre B. Barretokabart@gmail.com
Failover no Serviço de RegistroFailover no Serviço de Registro(Replicação do DB)(Replicação do DB)
❖ Necessário configurar 3 arquivos:❖ ha.cf❖ haresources❖ authkeys
❖ Necessário habilitar redirecionamento (/etc/sysctl)❖ net.ipv4.ip_forward = 1
Alexandre B. Barretokabart@gmail.com
Failover no Serviço de RegistroFailover no Serviço de Registro(Replicação do DB)(Replicação do DB)
❖ /etc/ha.d/ha.cf debugfile /var/log/hadebug logfile /var/log/halog logfacility local0 keepalive 200ms deadtime 2 warntime 1 initdead 120 udpport 694 bcast eth0
node srv01node srv02
Alexandre B. Barretokabart@gmail.com
Failover no Serviço de RegistroFailover no Serviço de Registro(Replicação do DB)(Replicação do DB)
❖ /etc/ha.d/haresources srv01 192.168.5.1 sipProxy
❖ /etc/ha.d/authkeys auth 11 sha1 senha
Lembrar de setar para que só o root tenha acesso ao arquivo
chmod 600 /etc/ha.d/authkeys
Alexandre B. Barretokabart@gmail.com
Failover no AsteriskFailover no Asterisk
❖ As soluções anteriores solucionaram o problema do Failover e Load Sharing para sistemas SIP e como resolver a questão para as redes não SIP?
Solução: failover no Asterisk com UltraMonkey
❖ Necessário que /etc/asterisk seja igual nos dois servidores.
Asterisk Primário
192.168.0.2
Asterisk Backup
192.168.0.3
IP Virtual 192.168.0.1
Telefones IP, ATAs e Softphones
Cabo Ethernet Cross para
Failover192 .168 .1/24
Alexandre B. Barretokabart@gmail.com
Hardening de Sistemas VoIPHardening de Sistemas VoIP
Hardening do Sistema Hardening do Sistema OperacionalOperacional
❖ Desabilitar os serviços desnecessários❖ SO + Asterisk❖ SO + Openser❖ SO +DB
❖ Ajustar as permissões dos arquivos, removendo os que possuem permissão de UID.
❖ Muda o proprietário de todos os arquivos para o root.
❖ Apagar os diretórios de montagem (mnt, media, sys)
❖ Remover permissão de execução /dev/null
Alexandre B. Barretokabart@gmail.com
Hardening Asterisk e OpenserHardening Asterisk e Openser
❖ Fazer com que o Openser e o Asterisk funcionem como usuário não root.
❖ Limitar o acesso do Asterisk e do Openser.❖ Os arquivos de configuração (/etc) o
Asterisk e Openser apenas precisam ler e não escrever nos mesmos.
❖ Habilite syslog e os coloque remotamente.
Alexandre B. Barretokabart@gmail.com
Hardening Asterisk e OpenserHardening Asterisk e Openser
❖ Limite o acesso a tty9❖ O Asterisk rodando no modo safe_asterisk
abre uma console de root sem senha na tty9 (/usr/sbin/safe_asterisk).
❖ Use o Tripwire para gerar uma assinatura de sua máquina.
❖ Habilite um firewall para limitar o acesso a seus servidores.
Alexandre B. Barretokabart@gmail.com
Asterisk e Openser in JailAsterisk e Openser in Jail
❖ Modifique o diretório root visível para o Asterisk e Openser (chroot).
❖ Limite os comandos e
programas que qualquer usuário (in jail) pode executar.
Alexandre B. Barretokabart@gmail.com
TCPWrappers no AsteriskTCPWrappers no Asterisk
Usar tanto no SIP como no IAX as regras de ACL existentes no
Asterisk.
permit
deny
Alexandre B. Barretokabart@gmail.com
Considerações FinaisConsiderações Finais
❖ Sistemas VoIP são mais difíceis de proteger que sistemas IP tradicionais:
❖ Usuários querem 100% disponibilidade.
SEGURANÇA X DISPONIBILIDADE X SEGURANÇA X DISPONIBILIDADE X PERFORMANCEPERFORMANCE
Alexandre B. Barretokabart@gmail.com
DúvidasDúvidas
Alexandre B. Barretokabart@gmail.com
BibliografiaBibliografia
[1] Davies, A. MySQL Cluster: Two Webserver Setup. http://dev.mysql.com/techresources/articles/mysqlclusterfortwoservers.html
[2] Rosemberg, J. e Schulzrinne, H. RFC 3261: Locating SIP Servers.
[3] Timme, Falko (ft@falkotimme.com). How To Set Up A LoadBalanced MySQL Cluster. http://www.howtoforge.com/loadbalanced_mysql_cluster_debian
Alexandre B. Barretokabart@gmail.com
BibliografiaBibliografia
[4] Singh, K. e Schulzrinne, H. Failover and Load Sharing in SIP Telephony.
[5] Gonçalves, F.E.A. Asterisk com Alta Disponibilidade. www.voffice.com.br.
[6] Asterisk Stability & Security. http://www.asteriskguru.com/downloads/asterisk_stability_and_security.ppt
[7] Tutorial do OpenVPN. http://openvpn.net/howto.html.
Alexandre B. Barretokabart@gmail.com
Implementando um Servidor VoIP Seguro
(OpenSer/Asterisk)Alexandre de Barros Barreto
kabart@gmail.comhttp://kabart.blogspot.com/
ITA
top related