10 de dezembro de 2017

Trazendo um roteador TP-Link TL-WR541G de volta a vida (só semi brickado)

Até semana passada usava na casa dos meus pais um TP-Link TL-WR541G, roteador que escrevi um pouco quando comprei ele em 2010, que me serviu bem durante todos estes anos. Tive um problema meio sério com ele, onde seu DNS foi alterado para um que redirecionava alguns sites como o do Itaú para um site fantasma que tentava roubar senhas, a defesa foi que o Itaú usa um navegador próprio, que não funcionava com o DNS alterado. Caso se usasse o Guardião, provavelmente o site também são seria aberto. O aplicativo de Android também não funcionava.

No passado tive problemas com modems ADSL que também tinham seu endereço de DNS trocados apenas de ficarem conectados a internet, era um bug de firmware, que foi corrigido em versões mais atuais. Eu atualizei e nunca mais voltou a ocorrer. Por este motivo, eu sempre travo o DNS do roteador para utilizar o do Google (8.8.8.8 e 8.8.4.4), que considero bastante estável e seguro. Mas desta vez, o que foi alterado foram as configurações do roteador. O interessante é que a senha do roteador não era a padrão, nem a senha da rede sem fio trivial. Aparentemente este tipo de golpe está se tornando comum em roteadores também.


Minha primeira reação foi retornar as configurações de fabrica e também atualizar o firmware, apesar de acreditar que ambas as ações só seriam paliativas, já que a atualização também era muito antiga e provavelmente não corrigiria a falha, mas não teria muito mais o que fazer. Só que a atualização de firmware não ocorreu bem e o roteador não funcionou corretamente mais, ele até ligava e abria a interface web, mas as páginas não estavam disponíveis, mesmo a página de atualização de firmware.

Desta maneira fiquei com um roteador que funcionava, mas não era possível alterar as configurações de fabrica, ou seja, um roteador praticamente inútil. Tentei métodos de recuperação de firmware usando TFTP, mas aparentemente o roteador era velho demais e não possui suporte a este método. Tentei utilizar o as portas internas UART, soldando os conectores e usando um Arduino como conversor UART/USB para entender o que estava acontecendo, mas nada feito também, conseguia ver o log de boot do roteador e enviar comandos, mas a opção de enviar um firmware não funcionava, na realidade apenas 3 comandos funcionavam.

No dia seguinte ao problema, antes de tentar estas soluções eu já comprei um outro roteador, um TP-Link Archer C20 v4, além deste problema de segurança, a velocidade da conexão sem fio padrão G do antigo roteador já começava a ser um gargalo para a rede. Então recuperar o roteador não era uma necessidade, apenas um desafio que gostaria de atingir.

Meu próximo passo seria tentar gravar a memória Flash do roteador diretamente com um gravador. Porém ai existem muitos problemas, o correto seria tirar o chip da placa do roteador, soldar em outra, gravar e voltar ele para a placa do roteador. A chance de eu danificar o chip e a placa seriam bem alta. Tentar gravar ele no local também seria uma possibilidade, mas outros componentes também são alimentados pela mesma linha de alimentação da memória, logo poderia ligar o roteador inteiro, ou ao menos o SoC e ele também tentaria enviar comandos ao chip de memória. Como não tenho um gravador para este tipo de memória, provavelmente iria escrever programas para o Arduino fazer a gravação e leitura, não saberia se eventuais problemas seriam no meu programa ou pelo roteador tentar ler o chip. Ou seja, é uma solução complicada, que tomaria muito tempo.

Mas dai ontem eu pensei, poxa o roteador liga, ele não tá brickado e se de alguma maneira eu conseguir enviar o firmware para ele, mas como? Cheguei a um pequeno script em bash para atualizar firmwares em massa, sem utilizar a interface web. E não é que funcionou? Eu não dava nada, foi tão rápido que nem apareceu que tinha atualizado, mas a interface voltou a funcionar.

Eu criei um repositório no Github com os arquivos necessários. O firmware e o script. Também coloquei o log do boot do firmware, caso tenham curiosidade.

Lendo mais sobre a falha cheguei a conclusão que é seguro utilizar o roteador. Basta fazer logoff quando tiver mexido nas configurações de firmware (ou apagar os cookies ou fechar e abrir o browser). A falha está em entrar em um site com um script mal intencionado que envia um comando para o endereço do roteador (que quase sempre é 192.168.0.1 ou 192.168.1.1), o roteador não deveria reconhecer o comando, mas aceita trocando o DNS.

6 de outubro de 2017

Alguns exemplos de sensores possíveis de uso em IoT - Parte 1

Conforme a definição de Internet of Things (IoT) os dispositivos devem possuir sensores ou atuadores, possivelmente ambos. Hoje iremos mostrar algumas opções de sensores utilizados para a criação de dispositivos para internet das coisas.

Um dispositivo que possui muitos sensores, que sempre usamos, mas não fazemos ideia dos sensores presentes é o smartphone. É possível encontrar sensores como de distância, acelerômetros, magnetômetros, giroscópios, pressão atmosférica, isso, é claro, desconsiderando as câmeras e microfone.

Acelerômetro


Placa SparkFun com o acelerômetro MMA8452Q (fonte)
Um acelerômetro, como o próprio nome diz, mede a aceleração em que ele está exposto. Ele pode ser utilizado para definir a direção do solo, pois existirá uma aceleração constante em sua direção. Esta é a solução empregada para girar a tela do celular conforme a orientação de uso (horizontal ou vertical). Outro uso importante é para detectar queda livre (e possivelmente invalidar a garantia do produto). Um uso interessante no universo de IoT é para detectar vibrações, o que pode ser utilizado para detectar problemas em motores e outros dispositivos.

As principais características dos acelerômetros é seu fundo de escala, que no geral é configurável entre algumas opções, resolução e taxa de amostragem. Tomemos como exemplo o acelerômetro NXP MMA8452Q: que possui um fundo de escala configurável entre 2g (duas vezes a gravidade da Terra, que é de 9.81 m/s2), 4g e 8g, resolução de 12 bits e frequência máxima de amostragem de 800 Hz. A resolução de 12 bits é constante, desta forma, quando se aumenta o fundo de escala a precisão das medidas diminui.

Magnetômetros e giroscópios


Quando se faz uso de um aplicativo de GPS no celular, como o Google Maps, ele aponta para a direção de deslocamento do carro. Quando o carro está em movimento é fácil saber esta direção, através das leituras do GPS, mas em baixas velocidades ou mesmo caminhando esta direção não é tão óbvia. Uma maneira de encontrar esta direção é fazendo uso de uma bússola, que é implementada utilizando um magnetômetro de 3 eixos.

Um exemplo de magnetômetro é o NXP MAG3110, que possui um fundo de escala de até 1000 µT, frequência de amostragem de 80 Hz e sensibilidade de 0,1 µT.

O fenômeno do Pokemon Go, que apareceu tão rápido quanto desapareceu, faz uso de realidade aumentada, unindo o mundo real com imagens do jogo. Para fazer essa junção é utilizado o giroscópio, que mede rotações. Alguns giroscópios, como os utilizados nos celulares, oferecem suporte as 3 direções possíveis de rotação. Suas principais características são o fundo de escala, por exemplo, ±250, ±500, ±2000 graus por segundo, a sensibilidade e a frequência de amostragem.

A junção dos sensores acelerômetro, magnetômetro e giroscópio da origem a sensores conhecidos como 9-DOF (Degree of Freedom). Um bom exemplo é o TDK InvenSense MPU-9250, que possui os 3 sensores em apenas uma encapsulamento. Nesta implementação são utilizados os acelerômetro e giroscópio da própria InvenSense e o magnetômetro Asahi Kasei AK8963.

Sensor de distância que utiliza o conceito de tempo de voo (Time-of-Flight) e LIDARs (Light Detection and Ranging)

A parte frontal dos celulares possuem, no geral, um sensor para saber se ele está encostado no rosto durante ligações e evitar toques acidentes. Este sensor não mede a distância exata, apenas se existe algo a uma distância certa distância, portando o resultado é binário, existe ou não.

Sensores de tempo de voo, como os utilizados na segunda geração do acessório do Microsoft Xbox Kinect, realmente medem a distância. É utilizado um laser, enquanto um fotodiodo (ou vários no caso do Kinect) aguarda receber a reflexão do laser. A distância máxima e precisão depende do sensor utilizado.

A STMicroelectronics tem uma linha de sensores de tempo de voo. O VL53L0X possui capacidade de medir distância até 2 e o VL6180X até 10 cm, obviamente diminuindo a acurácia. Esta por sua vez varia conforme a reflexibilidade do material utilizado para a medição.

LIDARs ficaram conhecidos para o uso de carros autônomos. Utilizando uma tecnologia parecida com os sensores Time-of-Flight eles são capazes de criar um mapa em 3D do ambiente. Isto possibilita a navegação em áreas desconhecidas ou mesmo a criação de imagens 3D do ambiente.

São sensores mais caros, porém são capazes de medir distâncias maiores. Uma opção mais em conta, mas ainda cara, é o LIDAR-Lite v3 da Garmin, capaz de atingir distâncias de 40 metros, com acurácia de 2,5 cm para distâncias menores de 5 metros e 10 cm para maiores.

Sensor de Batimento Cardíaco e Oxímetro

Alguns celulares como o Galaxy S8 ou wereables como o Apple Watch ou o Moto 360 possuem um sensor de batimento cardíaco e de oxigenação no sangue.

Esta nota técnica da NXP explica o funcionamento destes sensores. Células vermelhas do sangue contém uma proteína chamada hemoglobina, que se junta com o oxigênio, formando a oxiemoglobina, para leva-lo para as células. Quando ele irriga as células, liberando o oxigênio se transforma em desoxi-hemoglobina, voltando ao coração e repetindo o processo.

Ambas as substâncias possuem padrão de absorção de cores diferentes, desta maneira são utilizados dois LEDs de comprimentos de onda diferentes e um foto sensor, que mede o retorno da luz e calcula a concentração das substâncias. O batimento cardíaco pode ser medido tomando o tempo de variação destas medidas (já que o sangue se move com o batimento cardíaco).

Um exemplo de componente é o MAX30100 da Maxim. Ele possui dois LEDs e um fotodetector, juntamente com a lógica para a medição da pulsação e oxigenação. Neste caso é importante destacar que o uso de um sensor deste tipo em produtos comerciais ocasiona diversas questões de certificação que produtos relacionados a saúde estão sujeitos.