Assista cães na vida real ou vulnerabilidades graves no ACS

Parece-me que muitos caras, especialmente em tenra idade, queriam ser hackers legais. Sites de hackers, telefones, sistemas de acesso. Então, eu tenho um pouco desse entusiasmo juvenil. Portanto, periodicamente bisbilhotando em vários softwares e não encontrou nada que valha a pena. Mas um dia, a sorte apareceu para mim, e até o que! ACS, cheio de vulnerabilidades que permitem acesso para controlar todo o sistema (abrir / fechar portas, adicionar seu cartão de acesso, etc.).


Interessante? Então seja bem-vindo ao kat!


Tudo o que foi descrito abaixo foi realizado em um banco de ensaio. O artigo foi escrito apenas para fins educacionais e, em geral, tudo isso é uma invenção do autor.


SKUD - sistema de controle e gerenciamento de acesso


Aconteceu que certa vez trabalhei em uma empresa de construção e estradas, onde escrevi um conjunto de programas para emissão de passes, emissão de alimentos para esses passes e relatórios. Eu precisava integrar tudo isso a um ACS bastante popular. Os desenvolvedores responderam a solicitações de documentação por um longo tempo e os prazos terminaram. Eu mesmo tive que entender o software deles.


imagem
Esquema de operação aproximado do ACS


Comecei a aprender com o banco de dados. O servidor ACS trabalha com o banco de dados firebird 2.5. O login e a senha dele acabaram sendo padrão, o que já é muito alarmante, mas a senha pode ser definida nas configurações do programa. As senhas no banco de dados para as contas são divididas em hash, mas sem sal, o que é ruim, mas novamente não é crítico. Ele armazena todas as zonas de passagem, usuários, seus números de cartão, acessos e endereços do controlador.


imagem
Db


Em seguida, pegamos um programa para detectar o tráfego (peguei o “SmatrSniff”, o primeiro que pode analisar o tráfego do host local) e ver o que o cliente envia ao servidor. Todos os dados passam por TCP e alguns por UDP em forma não criptografada. E aqui começa a diversão. O servidor primeiro envia a senha limpa do banco de dados, sua localização e somente depois verifica o nome de usuário e a senha!


imagem
Senha do banco de dados masterkey


Acontece que, sem saber o nome de usuário e a senha, podemos obter acesso total ao banco de dados, o que nos dá possibilidades quase ilimitadas. Podemos nos dar um cartão com acesso a qualquer objeto. Prescreva seu cartão para outro usuário e coloque o nome dele. Mas, para que esses dados sejam carregados nos controladores, você precisa dar um comando ao servidor a partir do cliente. Embora possamos levar a senha para o cliente a partir do banco de dados, use os bancos de dados MD5 abertos e tente encontrar a senha para o hash (lembrarei que as senhas no banco de dados são livres de sal), mas se a senha for complicada, provavelmente nada funcionará. Teremos que esperar alguém clicar no botão de upload completo.


Então olhei e a autorização afeta qualquer coisa. Para fazer isso, tentei repetir solicitações ao servidor usando o “TCP / IP Builder”. E sim, solicitações subsequentes ao servidor não funcionam sem autorização (envia uma recusa em resposta). Aqui estou um pouco deprimido, porque para integração terei que implementar uma repetição de toda a cadeia de autorização e só então enviar um pacote para carregar dados no controlador.


Finalmente, decidi repetir o pedido para transferir a porta para o modo aberto. O servidor respondeu "ok" e a porta estava apitando. Sem qualquer autorização. Repeti o mesmo de outro computador na rede local e também funcionou.


imagem
Tipo aproximado de embalagem


Isso significa que podemos abrir / fechar qualquer porta de qualquer computador na rede local. Prescreva um cartão para você e faça o download imediato desses dados para os controladores. Depois, calmamente, percorra os objetos e exclua todos os registros de nossa visita.


Matei algumas horas para aprender o protocolo de comunicação entre o controlador e o servidor para finalmente quebrá-lo, mas não conseguia entender completamente o formato dos dados. Mas tenho certeza de que não há proteção. Os pacotes definitivamente têm os endereços mac do controlador e do servidor / gateway (a ligação ao servidor vai para o endereço mac, não há chaves de criptografia e similares no banco de dados, então você provavelmente pode fingir ser o servidor do controlador que conhece o servidor mac). Infelizmente, não há lixões ou acesso ao equipamento, então não posso mostrá-lo.


Como resultado, temos vulnerabilidades completas de controle de acesso, que nos dão acesso ilimitado a passagens para objetos. Devido ao baixo custo de componentes e software livre, esse ACS é muito comum. Ela está em muitas escolas em Moscou e eu a vi em outros locais. A empresa se orgulha de prêmios em vários eventos. Não nomeio especificamente a organização nem escrevi sobre eles. Porque acredito que essas vulnerabilidades no nível da arquitetura não podem ser corrigidas sem reescrever todo o software do zero e atualizar todos os equipamentos das pessoas que compraram esse sistema (existem vários buracos mais sérios no nível da arquitetura, mas sua descrição teria triplicado o artigo). Para aqueles que aprenderam com a tela do ACS e ela está instalada em você, aconselho a isolar completamente a rede (que é considerada “melhores práticas”), na qual todos os componentes do sistema estão localizados, e o acesso ao banco de dados para adicionar funcionários é feito apenas através de uma VPN. A configuração de roteamento adequada também pode ajudar.

Source: https://habr.com/ru/post/pt452458/


All Articles