Hacking em Redes SS7
Este material é uma tradução de um artigo em espanhol da SBD - SecutiryByDefault.com, por este motivo farei na integra. Faz exatamente 6 anos, que, Tobias Engel, publicou na 25C3 um método para localizar uma vitima na rede móvel (GSM) utilizando mensagens do protocolo de rede SS7. Durante o seguimento da "Chaos Communication Congress - 31C3, pudemos desfrutar de varias conferencias sobre as vulnerabilidades da rede SS7; Karsten Nohl, Tobias Engel e Laurent Ghigonis com Alexandre De Oliveira (dos equipamentos Philippe Langlois) nos foi apresentado distintos pontos de vistas sobre a segurança desta rede, mostrando suas vulnerabilidades; algumas teóricas e outras exploradas.
Por outro lado, se temos GSM, UMTS e LTE como nome de redes de telecomunicações bem conhecidos pelo mundo, acredito que SS7 não goza da mesma fama e possivelmente isto tem impedido de que alguns interessados em segurança, se preocupa-se, em ter mais, interesse nos detalhes destas apresentações.
Mas o que é exatamente SS7?
Não é a intenção deste artigo descrever tecnicamente a complexa rede SS7, nem cada um dos seus protocolos, mas sim, comentar os conhecimentos necessários para entender, os ataques anteriores.
Quando falamos de SS7, estamos lembrando e passando pela historia das telecomunicações; Sua historia é muito grande, nós estamos voltando a decada de 70! Quando a AT&T desenvolveu seu precursor, Sistema de Sinalização 6 (SS6) e 5 anos mais tarde desenvolveu o Sistema de Sinalização 7 (SS7), que permitiria enlaces de sinalizações de 64.000 bps. A Organização ITU-T (International Telecommunications Union - Telecommunication Standardization) o adoto como padrão em 1980! Pelo que encarregaria de definir com os padrões internacionais (Q.7XX para SS7) para garantir a interconexão das redes em escalas mundiais.
Podemos pensar que SS7 é um conjunto de protocolos que, alem de algumas de suas funções mais importantes, ele permite estabelecer dinamicamente os circuitos para realizar uma chamada já que estabelece a sinalização necessária para que as redes envolvidas possam consultar entre elas as informações sobre os assinantes, como saber onde se encontra cada parte da chamada, dar serviços de valor agregado aos usuários, entre outras muitas funções que o SS7 tem.
Chegando no dia de Hoje! Estes protocolos são utilizados em todas as redes de telecomunicações conhecidas: Rede Telefônica Publica Comutada (RTPC - PSTN), a Rede Digital de Serviços Integrados (RDSI), Redes Inteligentes (IN) e as redes móveis (PLMN).
Protocolo de SS7 e SS7/SIGTRAN
Antes de olhar o conjunto de protocolos SS7, é muito importante ter em conta que SIGTRAN (derivado de signaling transport); Em principio é a sinalização de transporte utilizando um conjunto de protocolos chamados MTP (Message Transfer Part) dividido em 3 camadas.
Nível 1 (MTP1) - Signalling Data Link (representa a camada física, normalmente - na Europa - utiliza um timeslot em uma interface E1, camada 1 também do modelo OSI).
Nível 2 (MTP2) - Signalling Link (proporciona um meio confiável de transferência de sinalização entre dois pontos de sinalização - PointCodes (PC) - conectados diretamente, corresponde com a camada 2 do modelo OSI).
Nível 3 (MTP3) - Signalling Network (camada OSI 3 - o proposito principal é rotear mensagens entre os nós da rede SS7 de uma maneira confiável).
Porém com a chegada das Redes "Next Generation Networks" a NGN, se converteu em um requisito indispensável a convergência de todas as redes, assim o SS7 atualizou os seus protocolos de transporte que acabamos de ver e passou a adotar o protocolo IP. Esta atualização, chamada SIGTRAN, só tem efeito nas camadas de pilha do protocolos mais baixos, as camadas superiores (camada 4) permanecerão inalteradas.
ISUP (ISDN User Part): é o responsável em estabelecer dinamicamente os circuitos utilizados para as chamadas. Como pode ver pelo seu nome, em um momento esteve estreitamente ligado a rede RDSI (ISDN: Integrated Services Digital Network).
Map (Mobile Application Part): camada de aplicação que permite aos nós da redes moveis GSM e UMTS comunicar-se para proporcionar serviços aos usuários destas redes.
O que necessitamos saber da rede SS7?
Com a finalidade de preparar, para o que poderia ser uma auditoria de segurança, de um ataque na nossa rede SS7, vamos necessitar ter muito claro, que vamos precisar de cada protocolo da camada para poder levar a cabo nossa malignas intenções:
MSISDN (Mobile Station Integrated Services Digital Network): composto pelo código do país (do Brasil é 55, mas para o conceito do artigo iremos usar 34 que é o da Espanha) e o numero de telefone do assinante(National Destination Code mais o Subscriber Number). Um exemplo para o Brasil seria assim:
Representa o número discado associado ao assinante. É provido para o assinante pela operadora na hora da compra e é gravado no SIM card.
O MSISDN tem o seguinte formato:
Onde:
- CC = Country Code (código do país);
- NDC = National Destination Code (código nacional);
- SN = Subscriber Number (número de assinante).
Exemplo:
IMSI (International Mobile Subscriber Identity): é o identificador único de cada cartão SIM na rede móvel (formado pelo Mobile Country Code, Mobile Network Code e o Mobile Subscription Identification Number). Um exemplo para o Brasil seria assim:
Quando um usuário assina o serviço de uma operadora uma identificação única de assinante é fornecida, essa identificação é gravada no SIM card do assinante e também no HLR (Base de dados de assinantes na operadora).
O IMSI tem o seguinte formato:
Onde:
- MCC = Mobile Country Code (código do país do celular);
- MNC = Mobile Network Code (código da rede celular);
- MSIN = Mobile Station Identification Number (número de identificação do celular).
Exemplo:
IMEI (International Mobile Equipement Identity): é o identificador de cada terminal móvel (se pode consultar em todos os aparelhos móveis digitando *#06# no teclado.
GlobalTitlle (GT): é a direção SCCP de cada no na rede SS7, utilizando o mesmo formato que os números de telefone dos assinantes, porém neste caso representa os nós da rede, não pessoas.
SubSystemNumber (SSN): indica a cada no da rede com que outro tipo de no vai estabelecer o enlace/comunicação. Cada tipo de no tem seu próprio número; 6 HLR (MAP); 7 VLR (MAP); 8 MSC (MAP)...
PointCode (PC): é o identificador da camada 3 do MTP que é atribuído a cada nó da rede. Neste link você tem o Mapa SS7 do mundo.
Todos estes se encontram reunidos na seguinte URL, na 3GPP "TS 23.003: Numbering, addressing and identification", com uma descrição melhor e com o formato de cada um.
Hacking em SS7: Como? Onde?
No passado, a ideia de uma operadora de telecomunicações era analógica, a ideia de um governo ou país também. Desta maneira, nada via, de nenhuma maneira, objeção para interconectar as redes SS7 com o nível de segurança que oferece o SS7, era algo mais que necessário, pois permitiria realizar chamadas a qualquer parte do mundo.
Muito chulo! Porém... Quem pensou em segurança? A rede SS7 foi desenhada com uma suposta confiança; todos os jogadores/operadoras são legítimos e vem com som de paz. As coisas, evoluíram, muito, não somente passamos das interfaces E1 para enlaces IP, mais, se liberalizou o mercado de telecomunicações; então apareceu operadoras virtuais (OMV), com licenças de teste ou desenvolvimento temporários e um grande mercado de transporte de trafico internacional. Esta situação e que herdamos hoje, e a verdade é que nem todo mundo tem boas intenções, porém quando nos damos conta, já estarão conectados a nossa rede SS7.
Esta facilidade para conectar-se a rede SS7 é relativa, já existe uma regulamentação em todos os países que marca de alguma maneira quem, como e que passos devem dar para estabelecer uma interconexão com uma operadora e poder fornecer serviços aos seus usuários. Só que o problema é maior quando vem de alguns países, potencialmente pode estar interessado em obter informações de seus residentes no estrangeiro ou até mesmo espionar as pessoas de outros países (para não ser muito apocalíptico não vou citar muitos exemplos da atualidade, porém no mundo real, não é verdade Ángela M.?).
Ataques sobre a rede SS7
Os distintos ataques que vou comentar estão agrupados em quatro categorias:
- Informação filtrada por mal segurança (fugas de informações)
- Fuzzing de Protocolos (D.o.S, Resource Exhaustion, etc.)
- Reconhecimento e enumeração da rede (mapa e escaneamento dos nós, portas, etc.)
- Injeção de pacotes (SendRoutingInfo, ProvideSubscriberLocation, etc.)
Para revisar cada um deles em detalhes e poder mostrar exemplos reais, eu utilizei duas máquinas virtuais com Ubuntu Server e uma pilha de protocolo SS7, simulando dois nós de uma rede real. A configuração das máquinas que eu utilizei é: Uma máquina com IP 192.168.56.101 tem o PointCode 2 (PC = 2) e a outra máquina com IP 192.168.56.102 com o PointCode 1 (PC = 1). Ao iniciar a aplicação SS7 em ambas máquinas, podemos ver uma captura no WireShark de como se estabelece a associação M3UA:
As quatros primeiras linhas correspodem ao SCTP handshake (4-way handshake) que protege o protocolo SCTP dos possiveis ataques de "Negação de Serviço" (uma melhoria do respectivo protocolo TCP e que todos conhecemos dos ataques D.o.S SYN flood e similares) ao estabelecer o servidor/nó um Cookie na mensagem "INIT ACK" este não vai fazer a menor diferença para o cliente, até você receber esse Cookie de volta com a mensagem "Cookie Echo", então é fechada a associação com a mensagem "Cookie Ack", ficando os recursos do servidor protegidos durante a transação.
Em um cenário real, os objetivos serão os nós da rede móvel (HLR, MSC, STP, etc.), sobre os que possivelmente poderiam fazer ataques para enviar mensagens validas com a finalidade de obter informações importantes, como nossa localização, nossa identidade na rede (IMSI) ou modificar nossos dados armazenados na Base de Dados.
Todos nós já ouvimos ou recebemos no trabalho informações sobre a importancia de proteger as informações confidenciais da nossa empresa, isto se torna critico quando se trata da documentação da ISO 27001 (Padrão de Referencia Internacional para a Gestão da Segurança da Informação). Para a telefonia Móvel temos o IR 21, um documento que contém as "especificações técnicas" de cada operador, entregue para outra operadora como normativa para a interconexão entre elas. Coleta de informações importantes sobre arquitetura da rede, tipo de rede, versões de protocolos, os endereços IP dos nós da rede. Para conhecer este documento, faça uma busca rápida no Google com o nome "IR21 claro filetype:pdf" (Claro, TIM, Vivo ou OI).
Como pode observar na imagem acima (um fragmento de um IR 21), não somente podemos saber os fabricantes dos nós da rede e que nós são (MSCs Hibridos 2G e 3G da Ericsson) como seu Global Title (GT), e também sua devida localização.
Se eu tivese que escolher entre casar com a "Engenharia Reversa" ou com o "Fuzzing de Protocolos" ... simplesmente eu não poderia escolher :( . O Fuzzing esta demostrando ultimamente a grande quantidade de vulnerabilidades e defeitos de programações que podem ser encontrados de maneira automática e o potencial de ferramentas (PROTOS, Codenomicon, Scapy, etc.) que empregam métodos para estudar a segurança e a robustez do software. No caso do SS7, podemos começar a jogar com duas ferramentas; Scapy e Zzuf. Lembre-se não é intenção deste artigo explicar o que é Fuzzing, e os tipos de Fuzzers existentes (os interessados leiam este tutorial da InfoSec), porém claramente ao lançar estas ferramentas contra nossas pilhas de SS7, podemos ver como a aplicação é pesada em relação ao nosso servidor, assim como as mensagens de erros, enviados ao servidor. Podemos nos concentrar no protocolo que nos interessa investigar (SCTP, M3UA, SCCP, etc.) e uma vez mais a mensagem, reenviando a nossa outra máquina para comprovar nosso exito:
Usamos essas duas ferramentas, é aconselhável adaptar ou desenvolver um controle especifico para aplicação que é responsável por iniciar a pilha do protocolo SS7, como é muito possível que a qualquer momento algo aconteça, ao esperar o inesperado, é bom considerar que a mensagem ou que a situação tenha sido causada dentro do seu controle.
Desde o clássico NMAP até os módulos em Python que implementam SCTP através do SCTPSCAN, nos permite lançar SCANs do IP usando SCTP como transporte para descobrir tudo o que é necessário na topologia da rede.
Exemplo de NMAP:
root@~# nmap -sY 192.168.56.101
Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-24 15:53 CET
Nmap scan report for 192.168.56.101
Host is up (0.00030s latency).
Not shown: 41 closed ports
PORT STATE SERVICE
2905/sctp open m3ua
MAC Address:00:00:00:00:00:00 ()
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
root@~#
Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-24 15:53 CET
Nmap scan report for 192.168.56.101
Host is up (0.00030s latency).
Not shown: 41 closed ports
PORT STATE SERVICE
2905/sctp open m3ua
MAC Address:
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
root@~#
Exemplo de SCTPSCAN:
root@~# ./sctpscan.py 192.168.56.101
Scanning 192.168.56.101
Cant bind mirror port 2905, use 10000 instead
Cant bind default port 10000, use kernel attributed source port
SCTP Port Open: 192.168.56.101 2905
Results: 1 opened, 112 closed, 0 filtered
root@~#
Scanning 192.168.56.101
Cant bind mirror port 2905, use 10000 instead
Cant bind default port 10000, use kernel attributed source port
SCTP Port Open: 192.168.56.101 2905
Results: 1 opened, 112 closed, 0 filtered
root@~#
Na captura com WireShark podemos ver o 4-way handshske da porta 2905 aberta, entre todas as demais tentativas:
Quando o atacante em potencial, estiver identificado os nós da rede, o próximo passo é criar o seu próprio nó associado (se não existir) para enviar as mensagens de PMA, já que este nível de dados são manipulados, dados dos usuários, como vimos no esquema (IMSI, IMEI, MSISDN).
Nos podemos criar nosso próprio SCTP, pegando um script usado com Python ou utilizar de clientes disponíveis na pilha do protocolo SS7, o mais importante vai ser confirmar que o nó está em um todo usando a mesma versão do protocolo que nós, ai podemos construir nossos pacotes binários, para obter as informações que queremos da nossa vitima. Uma vez criada a associação SCTP, temos que levantar a camada, reconhecendo os nós, para podemos localizar, e realizar a busca no nó.
Usando o Dialogic SS7, como pilha de protocolos, podemos ver a lista de mensagens já formadas, prontas para usar o MAP Test Utility e Responder:
Syntax: -d<mode> [-m<mod> -u<map> -o<options>-b<base_did> -x<active> -n<num_dlg_ids> -c<sc> -p<phase> -s<message>-i<imsi> -e<msisdn> -f<ggsn_num>] -g<orig> -a<dest>
-a : destination address
-b : base MAP dialogue id
-c : service centre address (only valid for mode=0)
-d : mode of operation: 0 - Forward short message
1 - Send IMSI
2 - Send routing info for GPRS
3 - Send IMSI & Send routing info for GPRS
4 - Forward MT short message
5 - Send routing info for SM
6 - Send ProcessUnstructuredSS-Request
-e : MSISDN (only valid for mode=1 or 3)
-f : GGSN number (only valid for mode=2 or 3)
-g : originating address
-i : international mobile subscriber ID (mandatory for modes 0 and 2)
-m : mtu's module ID (default=0x2d)
-n : number of outgoing MAP dialogue ids
-o : Output display options (default=0x000f)
-p : MAP phase (i.e. phase 1 or phase 2 - default=2; only valid for mode=0)
-s : short message (only valid for mode=0)
-U : USSD String (e.g. *123*456789#)
-u : MAP module ID (default=0x15)
-x : number of active dialogues to maintain (default=0, max=1024)
-a : destination address
-b : base MAP dialogue id
-c : service centre address (only valid for mode=0)
-d : mode of operation: 0 - Forward short message
1 - Send IMSI
2 - Send routing info for GPRS
3 - Send IMSI & Send routing info for GPRS
4 - Forward MT short message
5 - Send routing info for SM
6 - Send ProcessUnstructuredSS-Request
-e : MSISDN (only valid for mode=1 or 3)
-f : GGSN number (only valid for mode=2 or 3)
-g : originating address
-i : international mobile subscriber ID (mandatory for modes 0 and 2)
-m : mtu's module ID (default=0x2d)
-n : number of outgoing MAP dialogue ids
-o : Output display options (default=0x000f)
-p : MAP phase (i.e. phase 1 or phase 2 - default=2; only valid for mode=0)
-s : short message (only valid for mode=0)
-U : USSD String (e.g. *123*456789#)
-u : MAP module ID (default=0x15)
-x : number of active dialogues to maintain (default=0, max=1024)
E dizer, sem necessidade de forjar nosso próprio pacote binário desde o zero, podemos provar e jogar com varias mensagens chave SS7 que pudemos ler: Send Routing Info, SendIMSI e Forward MT Short Message, simulando o ataque descrito anteriormente em nosso servidor.
Podemos ver o resultado ao enviar o "SendRoutingInfo" para o MSISDN 34666111222, e a resposta com o IMSI do suposto assinante:
Seguindo estes passos, podem ser realizados os ataques, que parece chocar a todos (Washington Post), e certamente não é para menos.
Conclusão
É impossível resumir a historia das telecomunicações e detalhar todos os aspectos técnicos dos protocolos que forma a rede SS7, mas espero que este breve resumo de SS7 e a enumeração dos principais vetores de ataque a esta rede de um apetite para que você pesquise a fundo sobre o assunto. Enquanto isto convido você para pesquisar por palestras em videos, slides de palestras, para entender um pouco melhor sobre a rede SS7 ou SS7/SIGTRAN. Assim melhorar a segurança da sua rede SS7 para que seus usuários não tenham suas informações roubadas.
Fonte: http://www.teleco.com.br/
OBS: Por curiosidade de uma olhada neste mapa de nós de rede. Graph of The Routed
Deixe um comentário