Vous êtes sur la page 1sur 63

ImplementandoumServidor VoIPSeguro (OpenSer/Asterisk)

AlexandredeBarrosBarreto kabart@gmail.com http://kabart.blogspot.com/ ITA


AlexandreB.Barreto kabart@gmail.com

Objetivo
y Apresentar modelos de segurana aplicados a uma rede VoIP, bem como apresentar como possvel implementar esses modelos em uma rede Asterisk e Openser.
AlexandreB.Barreto kabart@gmail.com

Agenda
y Questes de Segurana y Arquiteturas emSistemasdeTelefonia GarantiadoSigilo de

y Apresentao do Estudo y Arquiteturas de Alta deCaso y Arquiteturas de Auten ticao Disponibilidade y VoIPHardening y ConsideraesFinais

AlexandreB.Barreto kabart@gmail.com

QuestesdeSeguranaem SistemasdeTelefonia

AlexandreB.Barreto kabart@gmail.com

SeguranadaInformao
y ... a proteo da informao de vrios tipos de ameaas para garantir a continuidade do negcio, minimizar o risco, maximizar o retorno sobre os investimentoseasoportunidadesdenegcio. (ISO/IEC,2005)

AlexandreB.Barreto kabart@gmail.com

AmeaasdeSistemasde Telefonia
y FraudedeTarifao(TollFraud) y MonitoramentodeSesso y ServiceUseandAbuse y RoubodeIdentidadedeUsurioeTerminal y SPT(SpamoverTelephony) y InterrupodeServio(DoS) y Phreakers

AlexandreB.Barreto kabart@gmail.com

AmeaasEspecficasde SistemasVoIP
y Os mesmos dos sistemas de telefonia convencional; y Problemas herdados dos sistemas IP que o hospedam (Buffer Overflow, SYN Flood, UDP Flood,etc); y Session(Call)Hijacking; y DoSeDDoS; y ManintheMiddle(MITM); y SPIT(SpamoverInternetTelephony).

AlexandreB.Barreto kabart@gmail.com

ContraMedidas
y Integridade y Autenticidade y Confidencialidade y Disponibilidade.

AlexandreB.Barreto kabart@gmail.com

ApresentaodoEstudodeCaso

AlexandreB.Barreto kabart@gmail.com

OpenserxAsterisk
Openser Asterisk
y ProxySIPcompleto y PABX IP completo com suporte a uma diversidade y Derivado do projeto SER deprotocolos. (iptel)Implementa em toda suaplenitudeaRFC3261. y CaractersticasPrincipais y CaractersticaPrincipal y Recursos de Telefonia y Desempenho e escala Avanados; bilidade. y Simplicidade. y Limitao:
y

y Limitao:
y

DifcilConfigurao.

NoumproxySIP.

AmbientedeEstudo
(a)UsuriosInternos (b)AsteriskxOpenser (c)UsuriosExternos (d)Entroncamento (e)OutrasRedes

ArquiteturasdeAutenticao

AlexandreB.Barreto kabart@gmail.com

ObjetivodaAutenticao
y Garantir a correta identificao dos usuriosdosistematelefnico; y Restringir o acesso aos recursos telefnicos;e y Garantir que seja possvel

implementarauditorianossistemas.
AlexandreB.Barreto kabart@gmail.com

Autenticao
yUsuriosxUsurios yUsuriosxServidores yServidoresxServidores

AlexandreB.Barreto kabart@gmail.com

Autenticao UsuriosxServidores
y RealizadoatravsdoOpenser. y TLS,HTTPDigestenoauthentication. y Usar autenticao digest para os usurios (HTTP Digest) usando banco dedados(MySQLouPostgress).
y

modparam(usrloc,db_mode,2)

AlexandreB.Barreto kabart@gmail.com

Autenticao UsuriosxServidores
y Armazenaraschavesusandohash y MD5(username,senha,realm)
y

modparam("auth_db", "password_column",senha)

modparam("auth_db", "calculate_ha1", yes)

AlexandreB.Barreto kabart@gmail.com

Autenticao UsuriosxServidores
y Usar os mtodos check_to() e check_from() para verificar se o um terminal no teve sua identidade roubada.

AlexandreB.Barreto kabart@gmail.com

Autenticao UsuriosxServidores
y Divida os usurios em grupos de forma a restringir o acesso dos recursos oferecidospeloseuproxy. y INSERT INTO 'grp' ('username', 'domain', 'grp', 'last_modified') VALUES ('1000' , 'empresa1.com', 'ld', '000000 0000:00:00');
y

if(uri=~^sip:00[19][19][09]{1}@){ If(is_user_in(credentials,ld)){...

AlexandreB.Barreto kabart@gmail.com

Autenticao Openser<>Asterisk(nicohost)
y Asterisk>Openser
y

Usar o mtodo register do Asterisk,sercriadoumusuriono asteriskesercriadoumacontano Openser.

AlexandreB.Barreto kabart@gmail.com

Autenticao Openser<>Asterisk(nicohost)
y Openser>Asterisk
y

Devese criar um usurio no Asteriskeusaromtodofunes Openser (rewriteuser(),

rewriteuserpass(), rewritehostport()).
AlexandreB.Barreto kabart@gmail.com

Autenticao Openser<>Asterisk(nicohost)
Importante:CasooAsteriskno redirecionechamadasparao Openserpodeseusar (INSEGURO)aopodatabela trusteddoOpenser.

AlexandreB.Barreto kabart@gmail.com

Autenticao Openser<>Asterisk(nicohost)
y INSERT INTO 'trusted'

('src_ip','proto','from_pattern') VALUES('localhost','any','^sip:.*$'); y autocreatepeer=yes(Asterisk)

AlexandreB.Barreto kabart@gmail.com

Autenticao Openser<>Asterisk(hostsdistintos)
y No se deve usar a opo da tabela trusteddoOpenser. y Devese Openser. y Devese criar um tnel VPN (IPSEC ou TLS)entreosservidores.
AlexandreB.Barreto kabart@gmail.com

usar

os

mecanismos

de

autenticao existentes no Asterisk e

Autenticao Asterisk<>Asterisk
y UsarIAX. y Usar suporte a autenticao segura viaRSA.
y

A CA deve preferencialmente ficarofflineeprotegida.

/var/lib/asterisk/keys

AlexandreB.Barreto kabart@gmail.com

Autenticao Asterisk<>Asterisk
y IAXcomRSA(/etc/iax.conf):
y

auth=rsa inkeys = nome do arquivo de chavepblica.

outkeys=nomedachaveprivada usada.

AlexandreB.Barreto kabart@gmail.com

AutenticaoOpenserxMysql (RegistrareLocationServer)
y OsparmetrosdeconexodoOpenserno Mysql atualmente so armazenados no arquivo .openserctlrc ($HOME) e no maisnoscriptdeinicializaodoOpenser (openser.cfg). y Devese proteger esse arquivo contra leituraindevida. y O servidor Mysql (preferencialmente) deveestaremoutramquinaeaconexo comeleprotegidacomumtnelVPN.
AlexandreB.Barreto kabart@gmail.com

ArquiteturasdeGarantiado Sigilo

AlexandreB.Barreto kabart@gmail.com

GarantiadoSigilo
(a)UsuriosInternos (b)AsteriskxOpenser (c)UsuriosExternos (d)Entroncamento (e)OutrasRedes

ProteoBaseadasemTneis
y Problemticoquandosedesejaimplementar paragarantiraseguranafimafimdocanal. y Necessidade de confiana transitiva entre elementosdarede. y Soluo ideal quando se deseja entroncar sistemas(Openser<>Gateway<>MySQL)
y

Ex:OpenVPN(TLS)eFreeSWan(IPSEC)

AlexandreB.Barreto kabart@gmail.com

OpenVPN
y Simplesdeconfigurareusar. y Bastanteestvel. y Possui clientes para Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, SolariseSmartphone(experimental). y Tutorialmuitobomem[7].
AlexandreB.Barreto kabart@gmail.com

ProteodaSinalizaoeda Mdia

AlexandreB.Barreto kabart@gmail.com

ProteodaSinalizaoedaMdia
y ProteonaSinalizao:Garantiranegociao de chaves entre os pares para criar um canal multimdiaseguro. y Proteo na Mdia: Garantir a conversao seguraentredoispares. Existeumconsensonoprotocolousadoparaa proteodamdia(SRTP),pormissono ocorrenasinalizao(TLS,MIKEY,ZRTP).
AlexandreB.Barreto kabart@gmail.com

ProteodaSinalizaoedaMdia
y Ideal pois ocasiona menos overhead do que as soluesbaseadasemtneis. y Problemticoquandoocanalprecisapassarpor algumtipodecodificaodoAsterisk. y AindanoexisteincorporadodentrodoAsterisk osuporteaoSRTP.
y

No Openser esse suporte deve ser prestado peloMediaProxy(noexperimentado).

AlexandreB.Barreto kabart@gmail.com

ProteodaSinalizaoedaMdia
y No caso de entroncamento e usurioslocalizadosexternamentea empresa, a melhor soluo ainda usar tneis VPN (OpenVPN), mesmoemambientesmveis.

AlexandreB.Barreto kabart@gmail.com

ArquiteturasdeAlta Disponibilidade

AlexandreB.Barreto kabart@gmail.com

RequisitosdeAlta Disponibilidade

Estratgias
TolernciaaFalhas (Failover) DistribuiodeCarga (LoadBalancing)

AlexandreB.Barreto kabart@gmail.com

EstratgiasdeFailover
DNSBasedFailover

AlexandreB.Barreto kabart@gmail.com

EstratgiasdeLoadBalancing
LoadSharingbaseadoemDNS

AlexandreB.Barreto kabart@gmail.com

Openser (DNSFailover)
y PossuisuporteaDNSFailoverapartirda verso1.2. y Paranousarnecessriodesabilitar.

AlexandreB.Barreto kabart@gmail.com

Openser (DNSFailovereLoadSharing)
y ConfigurarBIND

y y

Prioridade=>quantomenor,maioraprioridade.

Peso=>Nocasodeprioridadesiguais,ospesossocalculados relativamente.
y

Ex. No caso de dois servios com mesma prioridade, onde S1 tem peso 5 e S2 peso 2, isso significa que a cada 7 requisies,5serodirecionadasaS1.
AlexandreB.Barreto kabart@gmail.com

Openser (DNSFailovereLoadSharing)
1)Crieumarquivodispatcher.cfg #groupsipaddressesofyour*units 1sip:gw1.example.com 1sip:gw2.example.com

Openser (DNSFailovereLoadSharing)
#Carregaomdulodispatcher loadmodule("dispatcher.so") #DefineotempoparaqueumatransaoINVITEsejafinalizada modparam("tm","fr_timer_avp","i:24") #Definefr_timercomo24segundos modparam("avpops","avp_aliases","fr_timer=i:24") #failoversupport>storedestsinavpvalue modparam("dispatcher","flags",2)

Openser (DNSFailovereLoadSharing)
route[0]{... if(is_method("INVITE")&&uri=~"sip:.*@gw.example.com"){ #replacedomainpartwithfirstdispatchertargetofgroup1(tag2) ds_select_domain("1","9");#alg9>usefirst,second,etc #Modificafr_timerpara3seconds avp_write("i:3","$avp(fr_timer)"); #trataseamsgumaretransmisso t_on_failure("1"); t_relay(); exit;}...}

Openser (DNSFailovereLoadSharing)
failure_route[1]{ ... #408=>Timeout if(t_check_status("408")){ #replacedomainpartwithnextdispatchertarget if(ds_next_domain()){ t_relay(); exit; } } ...}

FailovernoServiodeRegistro (ReplicaodoDB)
y ImplementadoviaserviodeClusternoMysql
y y

Instalao=>lertutorial[1]. Quando um registro do Openser fosse criado, ele seria replicado para as diversas bases de dadosexistentesnocluster. PormoOpenserprecisariainformarqualo bancofsicoqueeledesejaescrever,nocaso de falha, ele tentaria escrever no banco de dadoscomproblema.
AlexandreB.Barreto kabart@gmail.com

FailovernoServiodeRegistro (ReplicaodoDB)
Comofazercomqueo Openserdescubraquala basefsicadisponvel? ULTRAMONKEY

AlexandreB.Barreto kabart@gmail.com

FailovernoServiodeRegistro (ReplicaodoDB)
y UltraMonkey
y y

ImplementaaestratgiadeIPAddressTakeover. Permite a criao de um IP virtual, fazendo com queoOpenseraponteparaesseendereoenoo real. Nocasodeumapane,oprprioUltraMonkeytrata dedirecionararequisio.

AlexandreB.Barreto kabart@gmail.com

FailovernoServiodeRegistro (ReplicaodoDB)
y Necessrioconfigurar3arquivos: y ha.cf
y y

haresources authkeys

y Necessriohabilitarredirecionamento(/etc/sysctl)
y

net.ipv4.ip_forward=1

AlexandreB.Barreto kabart@gmail.com

FailovernoServiodeRegistro (ReplicaodoDB)
y /etc/ha.d/ha.cf debugfile logfile logfacility keepalive deadtime warntime initdead udpport bcasteth0 nodesrv01 nodesrv02
AlexandreB.Barreto kabart@gmail.com

/var/log/hadebug /var/log/halog local0 200ms 2 1 120 694

FailovernoServiodeRegistro (ReplicaodoDB)
y /etc/ha.d/haresources srv01192.168.5.1sipProxy y /etc/ha.d/authkeys auth 1 1 sha1 senha Lembrardesetarparaquesoroottenha acessoaoarquivo chmod600/etc/ha.d/authkeys
AlexandreB.Barreto kabart@gmail.com

FailovernoAsterisk
solues anteriores y As solucionaram o problema do FailovereLoadSharingpara sistemas SIP e como resolver a questo para as redesnoSIP? Soluo:failovernoAsterisk comUltraMonkey y Necessrioque/etc/asterisk sejaigualnosdois servidores.
AlexandreB.Barreto kabart@gmail.com

Asterisk Primrio 192.168.0.2

CaboEthernet Crosspara Failover 192 .168 .1/24

Asterisk Backup 192.168.0.3

IPVirtual 192.168.0.1

TelefonesIP,ATAse Softphones

HardeningdeSistemasVoIP

AlexandreB.Barreto kabart@gmail.com

y Desabilitarosserviosdesnecessrios y SO+Asterisk y SO+Openser y SO+DB y Ajustar as permisses dos arquivos, removendoosquepossuempermissodeUID. y Muda o proprietrio de todos os arquivos para oroot. y Apagarosdiretriosdemontagem(mnt,media, sys) y Removerpermissodeexecuo/dev/null

HardeningdoSistema Operacional

HardeningAsteriskeOpenser
y Fazer com que o Openser e o Asterisk funcionemcomousurionoroot. y LimitaroacessodoAsteriskedoOpenser.
y

Os arquivos de configurao (/etc) o AsteriskeOpenserapenasprecisamlere noescrevernosmesmos.

y Habilitesyslogeoscoloqueremotamente.
AlexandreB.Barreto kabart@gmail.com

HardeningAsteriskeOpenser
y Limiteoacessoatty9
y

O Asterisk rodando no modo safe_asterisk abreumaconsolederootsemsenhanatty9 (/usr/sbin/safe_asterisk).

y Use o Tripwire para gerar uma assinatura de suamquina. y Habiliteumfirewallparalimitaroacessoaseus servidores.


AlexandreB.Barreto kabart@gmail.com

AsteriskeOpenserinJail
y Modifique o diretrio root visvel para o Asterisk e Openser (chroot). y Limite os comandos e programas que qualquer usurio (in jail)podeexecutar.

AlexandreB.Barreto kabart@gmail.com

TCPWrappersnoAsterisk
UsartantonoSIPcomo noIAXasregrasde ACLexistentesno Asterisk. permit deny
AlexandreB.Barreto kabart@gmail.com

ConsideraesFinais
y SistemasVoIPsomaisdifceisdeprotegerque sistemasIPtradicionais:
y

Usuriosquerem100%disponibilidade.

SEGURANAXDISPONIBILIDADEX PERFORMANCE

AlexandreB.Barreto kabart@gmail.com

Dvidas

AlexandreB.Barreto kabart@gmail.com

Bibliografia
[1] Davies, A. MySQL Cluster: Two Webserver Setup. http://dev.mysql.com/techresources/articles/mysqlclusterfor twoservers.html [2] Rosemberg, J. e Schulzrinne, H. RFC 3261: Locating SIP Servers. [3]Timme,Falko(ft@falkotimme.com).HowToSetUpALoad Balanced MySQL Cluster. http://www.howtoforge.com/loadbalanced_mysql_cluster_debi an
AlexandreB.Barreto kabart@gmail.com

Bibliografia
[4]Singh,K.eSchulzrinne,H.FailoverandLoadSharinginSIP Telephony. [5] Gonalves, F.E.A. Asterisk com Alta Disponibilidade. www.voffice.com.br. [6]AsteriskStability&Security. http://www.asteriskguru.com/downloads/asterisk_stability_ and_security.ppt [7]TutorialdoOpenVPN.http://openvpn.net/howto.html.
AlexandreB.Barreto kabart@gmail.com

ImplementandoumServidor VoIPSeguro (OpenSer/Asterisk)


AlexandredeBarrosBarreto kabart@gmail.com http://kabart.blogspot.com/ ITA
AlexandreB.Barreto kabart@gmail.com