Sou Greg Heffner, e essa é uma conversa sobre como um hacker de Hollywood usa câmeras de vigilância. Alguns de vocês podem ou não saber que quando meu trabalho sobre este tópico foi publicado pela primeira vez, um artigo apareceu no portal da Internet da Reuters.

Para mim, como palestrante, foi realmente ótimo. Mas o problema era que o artigo decidiu enfatizar que eu trabalhava para uma instituição específica com um nome de três letras, sobre o qual havia muito poucas notas na imprensa recentemente. E foram tão longe que alegaram que apresentei no BlackHat meu trabalho realizado para esta agência de três letras. Esta publicação levou a alguns telefonemas muito interessantes do meu ex-empregador.
Felizmente, temos pessoas que atendem às minhas ligações, então eles basicamente gritaram com eles, não comigo, mas eu ainda tinha que tranquilizar as pessoas e, no final, consegui convencer o ex-empregador de que às vezes as pessoas na Internet também estão errados.
Portanto, para ser bem claro, explicarei que a conversa de hoje não é sobre qualquer trabalho que já fiz para ex-empregadores, mas sobre o que faço para meu atual empregador. Trabalho como analisador de vulnerabilidades em tempo integral na Tactical Network Solutions, também ensino cursos de operações de dispositivos incorporados e, ocasionalmente, dedico-me à invasão de dispositivos sem fio.
Hoje vou falar sobre a segurança das câmeras de vigilância, ou melhor, a falta dessa segurança. No início do passado, 2011, comecei a estudar a questão da segurança do firmware de câmeras conectadas à rede de vigilância e descobri muitas coisas interessantes.
Deixarei de lado a ameaça do "dia zero", falarei sobre isso quando chegar a ela. Primeiro, mostrarei como, no estilo de um verdadeiro hacker de Hollywood, posso tirar proveito das vulnerabilidades que descobri.
Então, quando comecei a estudar câmeras de vigilância, e devo dizer que estudei muitos dispositivos embutidos, mas não câmeras, eu queria começar com algo simples, o que certamente me garantiria uma vitória. Eu escolhi a D-Link porque eles nunca decepcionam.

Optei pelo DCS-7410, com preço em torno de US $ 900, esta é uma das câmeras meteorológicas externas mais caras da D-Link, trabalhando nos modos diurno e noturno. Como as outras câmeras, sobre as quais falaremos hoje, ela possui uma interface administrativa e suporta o acesso ao fluxo de vídeo via Internet para um servidor da Web, além de ser alimentada por uma rede (PoE). Isso o torna um alvo muito atraente para um invasor.
Especificamente, esta câmera usa o Lighttpd II, um servidor da Web de código aberto que não é frequentemente usado com dispositivos incorporados. Os desenvolvedores criaram uma configuração e regras sãs que restringem o acesso ao que pode ser alcançado através do servidor web.
No próximo slide, você verá que, se quiser obter algo no diretório administrativo cgi / admin, precisará ter direitos de administrador. Se você deseja obter algo no diretório de vídeo, pode ser qualquer usuário, mas deve estar autorizado. Eles têm entradas e regras de login para cada diretório individual na interface da web, exceto o diretório cgi-bin.


A maioria dos scripts de câmera cgi está localizada no diretório protegido por cgi. Um diretório cgi-bin desprotegido contém apenas um arquivo, rtpd.cgi, que é um script de shell bash usado para iniciar e parar o protocolo de transporte de câmera RTP em tempo real.

No entanto, o script rtpd.cgi tem uma falha séria. Ele analisa os parâmetros da consulta substituindo todos os e comerciais e na string $ QUERY_STRING por espaços e, em seguida, obtém o resultado usando a função eval:

Portanto, se você quiser parar a câmera, envie uma solicitação: rtpd.cgi? Action = stop. Quando usada como pretendido, a seguinte solicitação HTTP alterará o nome? Action, cujo valor será definido para a posição "start":
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?action=start
Mas como os dados em $ query_string são executados às cegas pelo método eval, um invasor pode executar qualquer comando simplesmente especificando-o como parte dos parâmetros http GET:
$ wget http://192.168.1.101/cgi-bin/rtpd.cgi?reboot
Assim, o hacker poderá reiniciar a câmera. Foi realmente difícil para mim categorizar essa vulnerabilidade, porque nem sequer é uma injeção de comandos, não inserimos nada, mas simplesmente permitimos que o programa seja executado com outros parâmetros. Chamei essa vulnerabilidade de "Ron Burgundy", porque ela literalmente fará o que você digitar na cadeia de consulta.

Um invasor pode usar esta vulnerabilidade para obter uma senha de administrador de câmera normal da NVRAM. O comando a seguir é executado pelo script de inicialização da câmera após a reinicialização e envia ao navegador uma resposta desse tipo:

Agora você não tem apenas acesso root, porque depois de receber a senha, você também se torna um administrador, para poder fazer qualquer coisa com a câmera e os vídeos.
Acontece que o D-link, como muitos fabricantes, gosta muito de reutilizar o código instalando o mesmo firmware, e esse é o caso em muitos de seus produtos. Mas isso afeta não apenas os produtos D-link, porque uma prática semelhante é usada pela Trendnet e por alguns outros fabricantes "sem marca" de tais dispositivos. A reutilização de código agora é generalizada, tanto entre fabricantes da mesma marca quanto entre marcas diferentes. Essa vulnerabilidade está contida no firmware de muitos modelos de câmera indexados no recurso de coleções de vulnerabilidades do computador Shodan Dork.

Essa vulnerabilidade pode parecer familiar para algumas pessoas, e provavelmente porque, após minha palestra sobre esse assunto, o Core Security definiu o índice de vulnerabilidade CVE-2013-1599 para esses produtos, indicando que ele está presente apenas em dispositivos D-link, sem mencionar nenhuma de outro fabricante usando o mesmo firmware em seus dispositivos. Mesmo que um dos fabricantes corrija esse erro na nova versão do firmware, a maioria dos dispositivos permanecerá vulnerável por mais 3 anos, porque geralmente ninguém atualiza o firmware a tempo e alguns não sabem o que é. Como eu disse, os produtos D-link são um dos alvos mais acessíveis para ataques, então vamos olhar para câmeras de fabricantes mais conceituados, como a Cisco com o modelo PVC 2300. Esta é uma câmera IP de classe comercial de médio porte no valor de US $ 500.

Atualmente, ele também possui um servidor da web e fornece autenticação usando um arquivo de senha no formato HTTP.

A maioria das pessoas conhece esse sistema - você instala seu arquivo de senha HTTP ou, mais precisamente, um link para um arquivo de senha centralizado em qualquer diretório que você deseja proteger com uma senha. Portanto, se você examinar o firmware, a interface da web de cada diretório continha um arquivo de senha .htpasswd, exceto um diretório, oamp, localizado em / usr / local / www / oamp.

Em vez de um arquivo de senha, ele continha vários arquivos XML que serviam como links para o arquivo binário oamp.cgi. Vamos ver o que esse cgi faz. Acontece que ele implementa um tipo de mini-API, que é completamente separada de tudo o que é executado na interface da web.

Ele espera que você seja solicitado a executar determinadas ações, incluindo o download do arquivo de configuração, a atualização do arquivo de configuração, o download do arquivo de atualização do firmware, a atualização do firmware e muito mais. Os desenvolvedores não foram tão estúpidos; portanto, antes de executar sua solicitação, oamp.cgi verifica se você tem o ID de sessão válido correto.

Se você não possui um identificador de sessão válido, a única coisa que pode fazer é inserir um login.

Isso por si só é interessante porque eles implementaram uma verificação de autenticação que não é usada em nenhum outro lugar da interface. Comecei a entender como eles controlam a entrada, ou seja, o login. Eles contam com seu nome de usuário e senha, e sem mais surpresas.


E então eles fazem duas chamadas para a função PRO_GetStr, e eu não tenho idéia do que elas afetam. Mas eu sei que a primeira chamada para essa função fornece duas linhas - OAMP e o nome de usuário L1_usr, e a segunda chamada - mais duas linhas, OAMP e a senha L1_pwd.


Em seguida, o primeiro valor é retornado para o usuário L1 e comparado com o nome de usuário user, L1_usr especificado durante a autenticação, e o segundo valor da sequência também é retornado - senha senha L1_usr, que é comparada com a senha inserida pelo usuário no login.


Presumivelmente, esse nome de usuário e senha L1, quaisquer que sejam os valores, fornecem o logon correto para essa interface OAMP. O único outro lugar que eu pude encontrar no firmware, e que está realmente associado ao nome de usuário e senha do usuário, está no arquivo de configuração.

E esses valores são codificados em dispositivos que usam o arquivo de configuração da seção OAMP durante a operação. Você vê que o valor de login do usuário L1 está definido na linha L1_admin e o valor da senha do usuário está na linha L1_51.
E esse é um problema real, porque toda essa interface OAMP e essas contas codificadas são completamente indocumentadas, então ninguém sabe que elas estão lá, exceto as pessoas que se preocuparam em examinar o firmware. Obviamente, o administrador nunca fará isso.
Mas, mesmo que ele tenha descoberto, não há como ele alterar esses valores, pois não há interface de administrador nessa câmera. O problema das senhas secretas codificadas é que, graças ao uso de backdoors, elas permanecem em segredo por um curto período de tempo.
Portanto, podemos usar essas contas backdoor para efetuar login e obter um ID de sessão. Agora que podemos enviar esse ID de sessão junto com nossas solicitações, também podemos invocar outras ações suportadas pelo oamp.cgi, incluindo o download do arquivo de configuração.


O problema é que, se você tentar descriptografá-lo usando o Base64, isso não funcionará, você receberá um monte de lixo. Este é o caso quando Base64 não é Base64.

A razão para isso se torna óbvia quando você olha para o código final Base64 no arquivo binário do firmware PVC-2300 - a base da codificação é criada aqui, mas usa uma cadeia de chaves Base64 não padrão, que foi descoberta ao analisar a criptografia e descriptografia do código 64. Felizmente, com Usando o Python, é muito fácil alterar uma string de chave em um módulo Python Base64 para uma string de chave personalizada, conforme mostrado no slide.

Portanto, com algumas seqüências de caracteres Python, podemos descriptografar facilmente o arquivo de configuração e transformá-lo em texto sem formatação, o que nos dá opções de login sob o login do administrador.

Tendo ganho o controle da câmera, podemos ver a sala do servidor. O problema é que a visualização das salas do servidor realmente captura os primeiros 10 segundos, mas se torna uma tarefa bastante chata.

Portanto, voltei ao código e comecei a estudar a possibilidade de baixar o firmware. Isso é realmente muito interessante, porque, em vez de baixar o arquivo de firmware para o dispositivo a partir do site oficial, você pode especificar sua própria URL, o dispositivo irá para esse endereço e fará o download do que ele supostamente considera firmware.

A função system2 simplesmente gera um comando a partir da string de formato e da URL antes de chamar a função libc system, que permite que um invasor insira comandos arbitrários do shell por meio do parâmetro url. O comando do invasor será executado com direitos de superusuário e, como a verificação é realizada pelo valor da URL, é muito fácil ignorá-lo com o seguinte script:
$ wget --header=”sessionID: 57592414” http://192.168.1.101/oamp/System.xml?action=loadFirmware&url=https://127.0.0.1:6 5534/;reboot;
Depois disso, o computador localizado neste URL é reiniciado e você pode executar qualquer comando que desejar.

Essa vulnerabilidade foi testada em todas as versões de firmware de dois modelos de câmeras de vigilância da Cisco - PVC-2300 e WVC-2300, uma câmera semelhante com duas antenas. No momento da redação deste artigo, Shodan mostrava mais de 500 câmeras IP públicas e potencialmente vulneráveis pertencentes a hotéis, salas de servidores e empresas de engenharia que desenvolviam equipamentos para a Estação Espacial Internacional.
Portanto, o D-link e a Cisco não protegem adequadamente as câmeras de vigilância, embora você saiba que essas câmeras não são o produto principal. Portanto, vejamos marcas especializadas especificamente no design e fabricação de câmeras de vigilância. Eu escolhi a IQ Invision, que produz câmeras caras de alta definição, como a IQ 832n, que custa mais de US $ 1000 cada, o que não é nada barato.

O principal motivo de meu interesse é que esses são os caras que fabricam câmeras instaladas no complexo comercial em que trabalho, portanto, havia motivos pessoais para isso. Então, o que você ganha com uma câmera de vigilância profissional por mil dólares?
Por padrão, essas câmeras fornecem uma imagem de vídeo não autenticada e nenhum dos extensos estudos de instalação de câmeras conseguiu alterar essa configuração padrão. Enquanto a interface administrativa é protegida por senha, a interface do usuário fornece acesso a qualquer recurso da câmera sem autenticação, o que cria um amplo campo de ataque.

As configurações de autenticação do administrador podem ser alteradas pelo administrador, mas tente adivinhar quantos administradores conectaram suas câmeras à Internet sem alterar as configurações padrão - quase tudo. No entanto, a maioria dos administradores em nosso complexo era inteligente o suficiente para alterar essas configurações, então comecei a analisar o que mais eu poderia fazer sem autenticação. Descobri que posso acessar livremente a página.

Ele contém várias configurações da câmera, como configurações de foco, que não são tão interessantes quanto nomes de usuário e senhas. Mais interessante foi o código por trás desta página oidtable.cgi. Se você desmontar esse binário, poderá ver que a página aceita apenas um parâmetro, grep, que é usado para filtrar os resultados retornados à página oidtable.cgi.

Depois de verificar se o valor do parâmetro fornecido tem menos de 32 caracteres, oidtable.cgi coloca esse valor na linha de comando e passa para o popen:


O que vi me fez retratar o "facepalm" e me levou a injetar algumas equipes.

Você vê que aqui, assim como no caso da D-Link, eu posso executar o comando PS e obter a saída enviada de volta ao meu navegador. Assim, sem autenticação, posso inserir facilmente comandos arbitrários do shell que serão executados como raiz. As listas de processos mostram que o Netcat já está instalado nessas câmeras com a capacidade de inserir traços-e, portanto, tenho certeza de que a maioria das pessoas aqui pode criar comandos mais interessantes para executar do que a lista de processos. No entanto, meu principal objetivo era entrar no painel de administração e descobri como fazê-lo.
16:30 min
Conferência BLACK HAT USA. Como um hacker de Hollywood usa câmeras de vigilância. Parte 2Obrigado por ficar conosco. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando a seus amigos, um
desconto de 30% para os usuários da Habr em um análogo exclusivo de servidores básicos que inventamos para você: Toda a verdade sobre o VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD 1Gbps da US $ 20 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).
VPS (KVM) E5-2650 v4 (6 núcleos) 10GB DDR4 240GB SSD de 1Gbps até dezembro de graça quando pagar por um período de seis meses, você pode fazer o pedido
aqui .
Dell R730xd 2 vezes mais barato? Somente nós temos
2 TVs Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 a partir de US $ 249 na Holanda e nos EUA! Leia sobre
Como criar um prédio de infraestrutura. classe usando servidores Dell R730xd E5-2650 v4 custando 9.000 euros por um centavo?