Usando SMS silencioso para localizar usuários LTE
Usando SMS silencioso para localizar usuários LTEImplementação de prova de conceito
Nesta postagem do blog, vou me aprofundar em uma técnica intrigante: usar mensagens SMS silenciosas para rastrear a localização dos usuários LTE. Veremos como um invasor pode enviar mensagens SMS silenciosas com um padrão definido e analisar o tráfego LTE para verificar a localização da vítima. As seguintes ferramentas formam coletivamente o arsenal para esta prova de conceito:
- OnePlus2 (Rooted) – Este dispositivo funciona como um modem explorado pelo invasor para enviar mensagens SMS silenciosas.
- Celular da Vítima - Qualquer telefone com cartão SIM válido pode ser usado. Um telefone Android pode ser mais conveniente para utilizar aplicativos como o Network Signal Guru para recuperar informações cruciais sobre o eNodeB ao qual o telefone da vítima está conectado (sim, estamos alterando um pouco as regras).
- USRP B210 - Rádio Definido por Software (SDR) usado para interceptar tráfego LTE no downlink.
- LTESniffer – Um software de código aberto usado em conjunto com o USRP para interceptar tráfego LTE.
- Pelo menos dois cartões SIM – necessários para o telefone da vítima e o modem do invasor.
- Ubuntu 20.04 – O sistema operacional usado pelo invasor.
Mas primeiro, vamos começar com alguma teoria.
Nota: Como as mesmas definições descritas no 3GPP TS 23.0.40 foram utilizadas neste post, o glossário abaixo é o mesmo utilizado no GSM. Por exemplo, o termo “estação móvel” (MS) é sinônimo do termo “equipamento de usuário” (UE), conforme definido em UMTS e LTE.
Estrutura SMSTPDU
O 3GPP definiu seis tipos de mensagens que podem ser trocadas entre a Estação Móvel (MS) e a Central SMS (SC), e cada uma possui um formato diferente dependendo da direção da comunicação. No nosso caso, estamos interessados no tipo SMS-SUBMIT, que define a estrutura de uma mensagem enviada pelo usuário.
De acordo com a definição, o SMS SUBMIT é uma unidade de dados de protocolo de transferência de mensagens curtas contendo dados do usuário (a mensagem curta), sendo enviada de uma MS para um SC. O formato Transfer Protocol Data Uniti (TPDU) consiste em uma série de informações codificadas de 8 bits, representadas por uma string ASCII composta por pares de dígitos hexadecimais, cada um representando 8 bits. A representação esquemática de um TPDU é a seguinte:
A especificação nos diz que o identificador de protocolo TP (TP-PID) consiste em um octeto. Entre as várias configurações de bits neste octeto, lemos que no caso em que o bit 7 é 0, o bit 6 é 1 e os bits 5 a 0 são todos zeros, uma PDU SMS-SUBMIT do tipo “Short Message Type 0” é configurada .
Este tipo de mensagem, conforme descrito logo a seguir no documento da secção 9.2.3.9, estabelece que “o ME deve acusar a recepção da mensagem curta, mas deve descartar o seu conteúdo”. Isso significa que o Equipamento Móvel (ME) receberá a mensagem, mas não a armazenará nem no cartão SIM nem na memória do telefone e, o que é mais interessante, não notificará o usuário sobre o recebimento da mensagem com notificações ou sons.
Para criar uma PDU facilmente, você pode usar um dos serviços online como você pode ver na foto abaixo. O serviço irá gerar uma mensagem padrão. Para deixar claro, agora que identificamos o bit responsável por esta configuração, basta seguir o cenário descrito acima, onde TP-PID deve ser igual a 01000000 (40 em hexadecimal).
Enviando um SMS silencioso
Para enviar a mensagem silenciosa, aproveitei os comandos AT usados para gerenciamento da funcionalidade do modem. Como dispositivo ME, usei um OnePlus2 com privilégios de root. Conectando via ADB, inicialmente enviei o comando echo -e "AT\r" > /dev/smd0
para verificar se o modem estava pronto para a conexão. Simultaneamente, verifiquei as respostas do modem com um shell no qual executei o cat /dev/sdm0
. O restante dos comandos, juntamente com uma breve explicação, estão listados abaixo.
AT+CMGF=0 //Set PDU mode
AT+CMGS=19 //Send message, 19 octets (excluding the two initial zeros)
> 0011000C919333143244650000FF05F4F29C1E02 //Actual message (fake number)
^Z
//^Z acts as an "enter"
Para verificar a recepção da mensagem silenciosa, conectei o telefone alvo a um PC e iniciei o QCsuper . Como você pode ver na imagem abaixo, a mensagem silenciosa foi recebida corretamente!
Encontrar a localização da vítima
Agora que sabemos como enviar mensagens silenciosas, vamos imaginar um invasor que pretende determinar se a vítima está ou não em uma área específica. Para simplificar, vamos supor que o invasor conheça o número de telefone da vítima e tenha pelo menos conhecimento parcial de seus movimentos típicos. Para verificar se a vítima está em uma das áreas previamente identificadas, o invasor pode usar um Rádio Definido por Software (SDR) para detectar conexões de downlink e, ao mesmo tempo, enviar mensagens silenciosas para a vítima (sem que ela perceba), criando um padrão reconhecível. Eles podem então analisar os pacotes transmitidos em busca desse padrão para determinar se a vítima está ou não fisicamente naquele local.
Vamos ver como isso pode ser feito. Primeiramente, o invasor pode criar um script muito simples como o seguinte:
echo -e "AT\r" > /dev/smd0
for i in {1..10}
do
echo -e "AT+CMGS=19\r" > /dev/smd0
echo -e "0011000C919333143244650000FF05F4F29C1E02" > /dev/smd0
echo -e "^Z" > /dev/smd0
sleep 2
done
Este script enviará 10 mensagens, cada uma com intervalo de 2 segundos entre elas, criando um padrão bastante reconhecível, como veremos mais adiante. É claro que, num cenário real com centenas de utilizadores ligados à mesma Estação Base (BS), poderá ser necessário um padrão ainda mais distinto.
Neste ponto, tudo o que o invasor precisa fazer é conectar seu próprio USRP B210 e usar o LTEsniffer para detectar o tráfego de downlink LTE da estação base. Como mencionamos anteriormente, para esta prova de conceito simplificada, o invasor precisa estar ciente da área onde procura a vítima. Isto significa descobrir a frequência da estação base que cobre a área (ou, alternativamente, o seu ID). Para resolver este problema, pode-se utilizar um aplicativo de smartphone como o Network Signal Guru na área de interesse, utilizando um cartão SIM do mesmo provedor da vítima.
O invasor hipotético, depois de ouvir as transmissões LTE com LTEsniffer por um período de tempo suficiente, acabará com um arquivo pcap contendo as informações de controle de downlink (DCIs) e os identificadores temporários de rede de rádio (RNTIs) de todos os usuários ativos.
Ao analisar essas transmissões, eles conseguem identificar se a vítima está ou não presente na área monitorada. Pela imagem acima, podemos ver que a partir das 17h20, a vítima recebeu pacotes em intervalos de dois segundos (aproximadamente, contabilizando eventuais atrasos e interferências) para um total de 10 conexões, assim como o padrão implementado pelo script :D.
Deve-se notar que o RNTI obtido também pode ser usado para ataques posteriores.
Fique atento aos trabalhos futuros. Obrigado!
Referências:
https://www.slideshare.net/iazza/dcm-final-23052013fullmentecensurado
https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=747
https://www.ndss-symposium.org/wp-content/uploads/2018/02/ndss2018_02A-4_Hong_paper.pdf
Comentários
Postar um comentário