Bom Dia a todos. Começarei pelos antecedentes sobre o que me levou a realizar esta investigação, mas antes vou avisar: todas as ações práticas foram realizadas com o consentimento das estruturas governamentais. Qualquer tentativa de usar este material para entrar em uma área restrita sem o direito de estar lá é crime.
Tudo começou quando, enquanto limpava a mesa, coloquei acidentalmente a chave de entrada RFID no leitor NFC ACR122 – imagine minha surpresa quando o Windows tocou o som de detecção de um novo dispositivo e o LED ficou verde. Até o momento eu acreditava que essas chaves funcionavam exclusivamente no padrão Proximidade.
Mas como o leitor viu, significa que a chave atende a um dos protocolos do padrão ISO 14443 (também conhecido como Near Field Communication, 13,56 MHz). A limpeza foi imediatamente esquecida, pois vi uma oportunidade de me desfazer completamente do molho de chaves e guardar a chave da entrada no meu telefone (o apartamento já está equipado com fechadura eletrónica). Começando a estudar, descobri que escondida embaixo do plástico está uma etiqueta Mifare 1k NFC - o mesmo modelo dos crachás empresariais, cartões de transporte, etc. As tentativas de acessar o conteúdo dos setores não trouxeram sucesso a princípio, e quando a chave foi finalmente quebrada, descobriu-se que apenas o 3º setor foi utilizado, e o próprio UID do chip estava duplicado nele. Parecia muito simples, mas acabou sendo, e não haveria artigo se tudo corresse exatamente como planejado. Então recebi os miúdos da chave, e não há problema se precisar copiar a chave para outra do mesmo tipo. Mas a tarefa era transferir a chave para um dispositivo móvel, e foi o que fiz. Foi aqui que a diversão começou - temos um telefone - iPhone SE com instalado iOS 13.4.5 versão beta 17F5044d e alguns componentes personalizados para operação gratuita de NFC - não vou me alongar sobre isso por alguns motivos objetivos. Se desejar, tudo o que é dito abaixo também se aplica ao sistema Android, mas com algumas simplificações.
Lista de tarefas a resolver:
- Acesse o conteúdo da chave.
- Implemente a capacidade de emular uma chave pelo dispositivo.
Se com o primeiro tudo foi relativamente simples, com o segundo houve problemas. A primeira versão do emulador não funcionou. O problema foi descoberto rapidamente - em dispositivos móveis (iOS ou Android) no modo de emulação, o UID é dinâmico e, independentemente do que está conectado à imagem, ele flutua. A segunda versão (executada com direitos de superusuário) fixou rigidamente o número de série no selecionado - a porta se abriu. Porém, eu queria fazer tudo perfeitamente e acabei montando uma versão completa do emulador que pudesse abrir dumps do Mifare e emulá-los. Cedendo a um impulso repentino, mudei as chaves do setor para arbitrárias e tentei abrir a porta. E ela… ABERTO! Depois de um tempo percebi que eles estavam abrindo qualquer portas com esta fechadura, mesmo aquelas nas quais a chave original não cabia. Nesse sentido, criei uma nova lista de tarefas a serem concluídas:
- Descubra que tipo de controlador é responsável por trabalhar com chaves
- Entenda se existe uma conexão de rede e uma base comum
- Descubra por que uma chave praticamente ilegível se torna universal
Depois de conversar com um engenheiro da empresa de gestão, aprendi que controladores simples Iron Logic z5r são usados sem conexão a uma rede externa.
Leitor CP-Z2 MF e controlador IronLogic z5r
Recebi um conjunto de equipamentos para os experimentos:
Como fica claro aqui, o sistema é completamente autônomo e extremamente primitivo. A princípio pensei que o controlador estava em modo de aprendizagem - o significado é que ele lê a chave, armazena na memória e abre a porta - este modo é utilizado quando é necessário gravar todas as chaves, por exemplo, ao substituir o trancar em um prédio de apartamentos. Mas essa teoria não foi confirmada - esse modo está desligado no software, o jumper está na posição de trabalho - e ainda assim, quando ligamos o aparelho, vemos o seguinte:
Captura de tela do processo de emulação no dispositivo
... e o controlador sinaliza que o acesso foi concedido.
Isso significa que o problema está no software do controlador ou do leitor. Vamos verificar o leitor - ele funciona no modo iButton, então vamos conectar a placa de segurança Bolid - poderemos visualizar os dados de saída do leitor.
A placa será posteriormente conectada via RS232
Utilizando o método de testes múltiplos, descobrimos que o leitor transmite o mesmo código em caso de falha de autorização: 1219191919
A situação está começando a ficar mais clara, mas no momento não está claro para mim por que o controlador responde positivamente a este código. Supõe-se que quando o banco de dados foi preenchido - por acidente ou propositalmente foi apresentado um cartão com outras chaves do setor - o leitor enviou esse código e o controlador o salvou. Infelizmente, não tenho um programador proprietário da IronLogic para examinar o banco de dados de chaves do controlador, mas espero ter conseguido chamar a atenção para o fato de que o problema existe. Uma demonstração em vídeo de como trabalhar com esta vulnerabilidade está disponível
PS A teoria da adição aleatória se opõe ao fato de que em um centro de negócios em Krasnoyarsk também consegui abrir a porta usando o mesmo método.
Fonte: habr.com