Pentesting VoIP
Informações Básicas sobre VoIP
Para começar a aprender como o VoIP funciona, confira:
pageBasic VoIP ProtocolsEnumeração VoIP
Números de Telefone
Um dos primeiros passos que uma Equipe Vermelha pode fazer é pesquisar números de telefone disponíveis para entrar em contato com a empresa usando ferramentas de OSINT, Pesquisas no Google ou raspando páginas da web.
Depois de obter os números de telefone, você pode usar serviços online para identificar o operador:
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 seu próprio PBX VoIP à rede telefônica tradicional.
Coisas como respostas automáticas de música geralmente indicam que o VoIP está sendo usado.
Google Dorks
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.svmap
do SIPVicious (sudo apt install sipvicious
): Localizará os serviços SIP na rede indicada.svmap
é fácil de bloquear porque usa o User-Agentfriendly-scanner
, mas você pode modificar o código em/usr/share/sipvicious/sipvicious
e alterá-lo.
sipscan.py
do sippts: Sipscan é 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).
metasploit:
Enumeração de Rede Adicional
A 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 sipenumerate.py
do sippts
Enumeração de Extensões
As extensões em um sistema PBX (Private Branch Exchange) se referem 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.
sipextend.py
do sippts: Sipexten identifica extensões em um servidor SIP. Sipexten pode verificar grandes intervalos de rede e portas.
metasploit: Você também pode enumerar extensões/nomes de usuário com o metasploit:
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.
Ataques VoIP
Força Bruta de Senha
Após descobrir o PBX e alguns ramais/nomes de usuário, uma Equipe Vermelha poderia tentar autenticar via o método REGISTER
em um ramal usando um dicionário de senhas comuns para forçar a autenticação.
Observe 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.
svcrack
do SIPVicious (sudo apt install sipvicious
): O SVCrack permite que você quebre a senha para um nome de usuário/ramal específico em um PBX.
sipcrack.py
do sippts: SIP Digest Crack é uma ferramenta para quebrar autenticações digest dentro do protocolo SIP.
Metasploit:
Interceptação de VoIP
Se você encontrar equipamentos VoIP dentro de uma rede Wifi aberta, você poderia interceptar todas as informações. Além disso, se estiver dentro de uma rede mais fechada (conectado via Ethernet ou Wifi protegido), você poderia realizar ataques de MitM como ARPspoofing entre o PBX e o gateway para interceptar as informações.
Entre as informações de rede, você poderia encontrar credenciais web para gerenciar o equipamento, ramais de usuários, nome de usuário, endereços IP, até mesmo senhas hash e pacotes RTP que você poderia reproduzir para ouvir a conversa, e mais.
Para obter essas informações, você poderia usar ferramentas como Wireshark, tcpdump... mas uma ferramenta especialmente criada para interceptar conversas VoIP é ucsniff.
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.
Credenciais SIP
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 força bruta nelas.
siptshar.py
,sipdump.py
,sipcrack.py
do sippts:SipTshark extrai dados do protocolo SIP de um arquivo PCAP.
SipDump Extrai autenticações do SIP Digest de um arquivo PCAP.
SIP Digest Crack é uma ferramenta para quebrar as autenticações digest dentro do protocolo SIP.
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:
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:
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
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 pessoa poderá se conectar a ele.
Por exemplo, essa configuração seria vulnerável:
host=10.10.10.10
insecure=port,invite
type=friend
Chamadas Gratuitas / Má Configuração de Contexto no 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:
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:
Este exemplo demonstra um contexto simples chamado "meu_contexto" com uma extensão "100". Quando alguém discar 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:
Se o administrador definir o contexto padrão como:
Qualquer pessoa poderá usar o servidor para ligar para qualquer outro número (e o administrador do servidor pagará pela ligação).
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.
sipinvite.py
do sippts: Sipinvite 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 INVITE sem autorização. Nesse caso, um atacante pode fazer chamadas sem saber nenhum usuário/senha.
Mais informações ou ações podem ser solicitadas.
Grampear
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:
As chamadas serão salvas em /tmp
.
Você também pode fazer o Asterisk executar um script que vazará a chamada quando ela for encerrada.
RTCPBleed
RTCPBleed é um grande problema de segurança que afeta servidores VoIP baseados em Asterisk (publicado em 2017). A vulnerabilidade permite que o tráfego RTP (Real Time Protocol), 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 (Network Address Translation).
Os proxies RTP tentam resolver as limitações do NAT que afetam os sistemas RTC ao fazer a intermediação de 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, consulte https://www.rtpbleed.com/
rtpbleed.py
do sippts: Detecta a vulnerabilidade de RTP Bleed enviando fluxos RTP.
rtcpbleed.py
do sippts: Detecta a vulnerabilidade de vazamento de RTP enviando fluxos de RTP.
rtpbleedflood.py
do sippts: Explora a vulnerabilidade RTP Bleed enviando fluxos RTP
rtpbleedinject.py
do sippts: Explora a vulnerabilidade RTP Bleed enviando fluxos RTP (de um arquivo de áudio)
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
.
Existe um comando chamado Shell
que pode ser usado em vez de System
para executar comandos do sistema, se necessário.
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.
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ê pode 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.
sipflood.py
de sippts: _SipFlood_ envia mensagens ilimitadas para o alvo.python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
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.
sipsend.py
de sippts: SIPSend nos permite enviar uma mensagem SIP personalizada e analisar a resposta.wssend.py
de sippts: WsSend nos permite enviar uma mensagem SIP personalizada sobre WebSockets e analisar a resposta.
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
Last updated