2 de dezembro de 2021

Do bit Ao Byte

Embarcados, Linux e programação

Monitorar câmeras e ONVIF no Raspberry

monitorar câmeras

Se você está na dúvida em relação à quantidade de câmeras que usam o protocolo ONVIF, eu respondo na hora: Também não sei. Mas com certeza um monte; tanto que alguém se importou com isso e, veremos como monitorar câmeras e instalaremos ONVIF no Raspberry, para monitoramento.

O que é ONVIF?

Se vai monitorar câmeras, tem que conhecer sim. ONVIF é o acrônimo de Open Network Video Interface Forum. Trata-se de um fórum aberto e mundial, que tem o intento de facilitar a interface com um padrão aberto para dispositivos de segurança IP. Essa jornada começou em 2008, já não é novo, mas é “jovem”. Entre as indústrias envolvidas estão a Sony e a Bosh, portanto podemos crer que a definição de um protocolo adequado deve já estar estabelecido, apesar de como é feita essa transação.

O que é o ONVIFViewer?

Daí como já se tratava de um protocolo aberto, claro que haveríamos de ter algo para Linux, hum? E o software para monitorar câmeras no Linux se chama ONVIFviewer, porém não está disponível pelo tradicional gerenciador de pacotes apt. Teremos que usar o (eca) flatpak.

Atualmente vivemos uma moda de gerenciadores de pacote; poetry, pip pypi, setuptool, flatpak, snapd e outros que não me ocorrem agora, mas vão tomando seus espaços invés de juntar esforços às ferramentas tradicionais.

Esse é o primeiro artigo da série sobre segurança envolvendo IoT e a partir da configuração, consideraremos os pontos importantes que poderão reduzir os riscos em sua rede de dispositivos. Talvez isso devesse ter sido dito lá na primeira linha, mas tudo bem.

Câmeras utilizadas

Adquiri algumas câmeras diferentes e dessas, não sei quais suportam ONVIF. A primeira câmera que chegou é essa da imagem de destaque, cujo modelo é CA1105A8 1080P. Não sei se a marca é ICSee ou se o software é ICSee, mas a primeira dica de segurança é: Não adquira uma câmera para colocar em uma rede que você não tem controle absoluto.

Estrutura de rede

Uma estrutura completa foi adquirida para fazer uma implementação séria para monitorar câmeras, mas o material todo ainda está a caminho. Porém pelo vasto tempo que atuei em segurança de redes, posso prever alguns pontos.

Conectividade

Essas câmeras terão uma rede exclusiva. Algumas estarão conectadas por cabo, outras por WiFi. O roteador adquirido para esse propósito foi um Archer C80, que poderá substituir meu Archer C6 para a rede “humana” e assumir o papel de gateway das câmeras. De qualquer modo o desenho deixa claro como será a estrutura; um roteador para as câmeras, um roteador para a rede doméstica e um roteador de saída para a rede pública – no caso, o MODEM da operadora de telecom em questão.

Mais acima citei que não se deve ter uma câmera que não possa ser supervisionada. É como deixar sua arma de defesa exposta; pode se voltar contra você. Assim sendo, um conjunto de regras deverá ser definido para que as câmeras não façam traquinagem, enviando dados pessoais para fabricantes das câmeras, crackers e pilantras de plantão. Regra número 1: Só sai o que for requisitado.

Pensando em um ataque, não seria esse o caminho natural? Bem, de fato. Só que para acessar externamente, será necessário fazer uma conexão VPN ao computador de monitoramento, que servirá também de firewall para a entrada da rede de câmeras. Esse computador de monitoramento já está pronto para receber configurações. Ele é também um storage hoje em minha rede atual, rodando Linux, claro.

Conforme for implementando, vou escrevendo artigos sobre cada uma das partes. Usarei 3 endereçamentos de rede diferentes em minha estrutura (uma para monitorar câmeras), mas passarei outros 3 endereçamentos nos artigos para não expor os dados reais, Também eliminarei a rede que deixei pública até hoje, para reduzir os riscos, que agora tem importância.

Endereçamento de rede

Tenho de cabeça os endereçamentos de rede pública e privada, classes e mascaramento. Porém existem diversos programas para calcular endereços, como o subnetcalc,o sipcalc e o ipcalc. O mais bonitinho é o ipcalc, mas provavelmente as outras duas ferramentas são mais claras na informação:

monitorar câmeras - subnets

Podemos usar 3 reservas de uma classe, 3 classes diferentes, 3 subnets de uma classe. Vai da sua habilidade em configurar as redes, porque não basta simplesmente colocar os endereços. Tem que fazer roteamento também, mas explicarei em detalhes e talvez até em alguns vídeos, conforme for fazendo a implementação.

Até então estão definidos 4 roteadores, sendo que o firewall trabalhará mais ou menos como um broker. Teremos 3 endereçamentos de rede e agora vamos falar dos sistemas que devem ser implementados.

Sistemas para monitorar câmeras (e outras coisas mais)

Precisaremos de um sistema de monitoramento. No firewall (que também é storage), terei também o ZoneMinder para monitoramento.

Não podemos nos esquecer do ONVIFViewer! Configurações e monitoramento definidos.

Não vou contratar um vigilante para monitorar as câmeras, portanto será necessário uma inteligência para isso. Algumas das câmeras tem alguns recursos de IA, como cerca virtual, people detection e anomaly detection. As que tiverem, farei uso, mas de qualquer modo vou treinar alguns models para reconhecimento de armas , gestos e objetos. Esses models rodarão em Raspberry Pi; pelo menos 3 Raspberry. Aqui nesse link estão dispostos montes de artigos sobre inteligência artificial e visão computacional. Se é algo de seu interesse, divirta-se!

Não bastam sistemas de monitoramento. O que acontece quando determinado evento for disparado? Primeiramente, a ideia é enviar mensagem via Telegram bot. Havendo eventos reais de invasão ou outra intercorrência, uma mensagem é enviada para alguém que não estiver na casa; as câmeras devem então ser observadas e caso seja verdadeiro, tomar as medidas cabíveis, como acionar a polícia. Em caso de detecção de arma na mão de um estranho, o sistema liga automaticamente para a polícia.

Tudo parece bem amarrado até aqui, mas existem pontos que normalmente não são considerados. Por exemplo, o que acontece se uma câmera pára? O que acontece se uma câmera não exibe imagem? O que acontece se cair a energia? O que acontece se cair a Internet?

Câmera deixa de funcionar

A câmera deve ter um IP fixo e ser claramente identificada. Esses protocolos estarão bem definidos nos respectivos artigos. Através de um protocolo de validação, se a câmera for constatada como fora da rede, deverá alarmar.

Câmera não exibe imagem

Se a câmera estiver na rede mas não estiver exibindo imagem pode ser desde cocô de pombo à fita adesiva para inibir monitoramento. Isso pode ser validado com visão computacional, através de uma análise do histograma de um quadro.

Câmeras externas

Câmeras externas precisam ser à prova d’água, precisam ter uma boa proteção no cabo de alimentação e quase sempre essa infra vem de dentro da parede. Bem, estou implementando isso tudo para uma nova casa que estou de mudança, portanto é claro que não tenho essa infra-estrutura toda. Nesse caso, além da câmera ser à prova d’água, ela também será PoE – alguns aqui já sabem; Power over Ethernet. E para isso é necessário que o switch de interconexão seja PoE também. Tudo será explicado em detalhes a cada artigo, não se preocupe.

Falta de energia elétrica

O sistema estará conectado a um bom no-break, de modo que as câmeras, a Internet e os sistemas de monitoramento se manterão ligados por um longo, longo período. Nesse caso será possível aplicar um conjunto de tratamento específico:

  • Câmera da rua analisa se as casas vizinhas tem energia – foi um corte proposital?
  • O sistema afere a integridade da infra e inicia um estado de atenção.
  • Referências são cruzadas para avaliar a anomalia.

Para que seja possível esse controle, terei um sistema com banco de dados timeseries, um monitor e disparador de eventos – no caso, o Grafana. Tenho diversos artigos sobre o tema, basta dar uma pesquisada, ao lado direito do menu.

Os dispositivos da rede perdem conectividade

Eu citei que algumas das câmeras usarão WiFi. Serão as redundantes, mas ainda assim não serão “tão” seguradas, considerando que esses dispositivos são todos 2.4GHz, que sofrem interferências de telefones sem fio, microondas e ataques diretos, como WiFi deauther. Por essa razão, peguei um smartphone que estava sem uso até o momento e que a partir da implementação será ponto redundante, onde servirá de teathering com 4G, que já é mais que o suficiente para envio de status.

Apesar de todos esses cuidados, essa é uma visão de dentro para fora. Precisamos ter algo de fora para dentro, olhando se, por exemplo, caiu um meteoro e realmente não há mais nada disponível. Nesse caso, uma EC2 t2.micro na AWS servirá bem o propósito, bastando limitar sua periodicidade e volume de dados, para se manter no free tier – isso aí, serviço em nuvem gratuito!

O número de dispositivos conectados

Quem estiver conectado na rede, obviamente poderá fazer livre uso. E se alguém consegue de algum modo acessar a rede? – Pra isso também o Grafana é incrível. Todos os dispositivos da rede serão registrados no sistema e terão seus endereços amarrados pelo MAC. Não haverá reserva extra para mais dispositivos; se for necessário, uma configuração deverá ser feita de forma explícita, adicionando um novo dispositivo.

Uma rede para convidados será criada no roteador e habilitada “somente” quando receber visitas. Claro que habilitar essa rede gerará alarmes e monitoramento.

Reconhecimento facial

Na entrada já deve haver um Raspberry para fazer esse reconhecimento. Já escrevi montes de artigos sobre reconhecimento facial também e um específico de reconhecimento facial com Raspberry. Parentes e amigos confiáveis podem ser registrados ao sistema em um momento. Assim, qualquer estranho que adentrar a casa gerará alarme.

Um dos monitoramentos rodará em Raspberry e no caso vou usar a Raspberry Pi 400, disponível na Saravati (por enquanto, o melhor preço que tenho visto). Não tenha receio em adquirir, ela é espetacular e já escrevi uma série de artigos sobre ela no menu RASPBERRY.

Alexa

Utilizar alguns Echo Dot também tem suas vantagens. Até porque se houver alguém escondido em um cômodo no momento de um evento, pode usar a Alexa para interagir com a situação. Inclusive, não havendo uma emergência, mas na necessidade de uma avaliação, podemos fazer drop-in da rua para um dos dispositivos da casa de forma discreta e ouvir o som ambiente.

Se precisa comprar seu Echo Dot, minha recomendação é sempre a Saravati! Esse é o link para o dispositivo.

Rede IoT

Não acabou. A casa tem aquecimento à gás e o gás não é encanado. Logo, imagine o tamanho do bujão! Morro de medo de vazamento, incêndio etc. Vou aproveitar uma série de sensores da CurtoCircuito e monitorar o bujão, chamas etc. Aproveitando os sensores de presença infravermelho, não tem como passar despercebido por uma câmera, auxiliando a eliminar pontos cegos e apontando rotas do caminho que alguém possa estar caminhando.

Algumas luzes serão mantidas ligadas durante a noite no quintal, assim como serão instaladas algumas iluminações à bateria, com carregamento solar, mas também vou criar um processo de acionamento randômico de uns pontos de luz para dar a impressão de presença humana, ainda que não haja alguém em casa, ou estejamos todos dormindo.

Por fim, haverá uma sirene ou duas, que serão acionadas em um tipo de alarme mais grave, como uma investida armada, alguém pulando o muro ou algo do tipo.

Instalar o ONVIFViewer no Ubuntu para monitorar câmeras

O título do artigo diz “monitorar câmeras” e acabei falando do sistema de segurança inteiro nesse artigo. Mas está ok, agora ficou clara a razão de eu estar escrevendo um artigo sobre como monitorar câmeras. Mas devemos seguir para a instalação no computador de monitoramento primeiro – presumo que o mesmo para você.

Instale o flatpak

Como o programa precisa ser instalado pelo flatpak, o flatpak deve ser instalado em seu sistema Ubuntu. Faça:

sudo apt-get install -y flatpak

Depois de o pacote estar instalado, siga com a instalação do ONVIFViewer:

flatpak install onvifviewer

Algumas perguntas precedem a instalação, então inicia-se o processo com uma tela mais ou menos assim:

monitorar câmeras instalando onvifviewer

Depois a execução do programa depende dessa forma bizarra de chamada:

flatpak run net.meijn.onvifviewer

Para desinstalar:

flatpak --user uninstall net.meijn.onvifviewer

Instalar o ONVIFViewer no Raspberry

Se você é do tipo que não gosta de ler, deve estar me odiando, se é que já não abandonou o artigo. Mas acredite, foi necessário escrever isso tudo, até para servir de guia para o que escreverei à posteriori.

O ONVIF no Raspberry é client para permitir o gerenciamento de câmera por esse protocolo.

Se estiver tendo problemas de lentidão no download do Raspberry, siga a dica que está em “Repositórios safadinhos” antes de proceder com os comandos abaixo.

A instalação no Raspberry é diferente. Menos pior, mas não ideal. faça o seguinte:

sudo su
apt-get update
apt-get install snapd
shutdown -r now

Após reiniciar o sistema, temos mais duas linhas de comandos a executar:

sudo su
snap install core
snap install onvif

Se desejar compilar manualmente o ONVIFViewer:

git clone https://gitlab.com/caspermeijn/onvifviewer.git
mkdir build-onvifviewer
cd build-onvifviewer
cmake -DCMAKE_BUILD_TYPE=Release ../onvifviewer
make 
sudo make install

Mas daqui por diante fica para o próximo artigo relacionado, porque só vou ligar a câmera quando chegar o roteador adquirido para esse fim.

Espero que goste e acompanhe, mas já deixo também a dica de inscrever-se no canal DobitaobyteBrasil no Youtube para não perder nada! E ative as notificações!