
BLE sob o microscópio. Parte 4
Algumas palavras sobre a lista de permissões.
Aconteceu que, durante muito tempo, me afastei do tópico do BLE. Mas ele voltou :-) Hoje eu quero tocar no tópico da lista branca. Para que é isso? Se queremos que apenas alguns telefones funcionem com o nosso gadget, enquanto outros não, a lista de permissões é o que precisamos.
Para começar a discutir esse tópico, será necessário voltar um pouco. Para que os dispositivos iniciem a troca de dados, é necessário seguir o procedimento de conexão. Eu escrevi sobre isso em artigos anteriores. E aqui é muito importante não confundir o conceito de apego e emparelhamento. No caso de ingressar, depois de interromper a conexão, esquecemos com quem conversamos. Em caso de acasalamento, lembramos do parceiro. Assim, por exemplo, conectamos nosso telefone com fones de ouvido bluetooth. Agora, esses dispositivos são chamados de vinculados. Agora, ao digitalizar o éter, a conexão com o dispositivo conectado ocorrerá sem intervenção humana.
Por que estou falando sobre tudo isso? O fato é que a lista de permissões é formada a partir de uma lista de dispositivos relacionados. Esta é a primeira coisa a lembrar. Em segundo lugar, você precisa entender como o emparelhamento de dispositivos é formado. Existem duas maneiras. O primeiro é pelo endereço MAC, o segundo usa as teclas. Por que tudo é tão complicado? O fato é que, inicialmente, deveria ser vinculativo apenas pelo endereço MAC. Mas, ao transmitir pacotes pelo ar, é visível para todos. Por esse motivo, examinando o ar e usando programas especiais, um invasor pode alterar facilmente o endereço MAC do telefone. Como resultado, mesmo ao usar a lista de permissões, ele pode acessar o seu dispositivo. Para impedir que isso aconteça, é usado outro método de emparelhamento de dispositivos - usando as teclas irk (Identity Resolving Key). Diferentemente do endereço MAC, o comprimento da chave é de 16 bytes e, com a troca de dados padrão, eles não são visíveis no ar. Sua troca ocorre em um lugar seguro, excluindo a escuta. Além disso, a especificação BLE4.2 descreve outro recurso. Aqui está literalmente:
6.1 INTERVALO DE GERAÇÃO DE ENDEREÇO PRIVADO
Um endereço privado deve ser gerado usando a geração de endereços privados resolvíveis (consulte a Seção 1.3.2.2) .A camada de link deve definir um temporizador determinado pelo host. Um novo endereço privado será gerado quando o cronômetro expirar. Se a camada de link for redefinida, um novo endereço privado será gerado e o temporizador iniciado com qualquer valor no intervalo permitido.
Nota: Se o endereço privado for gerado com freqüência, os horários de estabelecimento da conexão poderão ser afetados. É recomendável ajustar o temporizador para 15 minutos.
Em suma, o dispositivo BLE pode transmitir não seu próprio endereço público, mas um endereço privado, que é recomendado para ser alterado a cada 15 minutos. Portanto, lembrá-los não faz sentido. Lembre-se, você só precisa de um endereço estático público e aleatório. No depurador, fica assim:

Vale a pena notar aqui que o valor do contador addr_count na imagem à esquerda é 0x01 e o contador irk_count na imagem à direita é 0x02. O fato é que conectei dois telefones ao dispositivo com o Android 4.4 (bluetooth 4.0) e o Android 8.1 (bluetooth 4.1). I.e. o primeiro se comunica pelo endereço MAC e o segundo já usa chaves irk. Além disso, amarrei o telefone com o Android 8.1 duas vezes. Meu dispositivo não o reconheceu e os viu como dois telefones diferentes.
Há um bom
artigo no site que descriptografa abreviações e fornece uma visão geral da tecnologia BLE. Além disso, quero observar que pode haver imprecisões no texto, porque Eu não lido com esse tópico tanto quanto gostaria. Portanto, comentários construtivos são bem-vindos e bem-vindos.
Pecherskikh Vladimir