Projeto de ferro: como construímos uma sala com uma missão hacker

Projeto de ferro: como construímos uma sala com uma missão hacker
Há algumas semanas, passamos busca online por hackers: construiu uma sala cheia de dispositivos inteligentes e lançou uma transmissão do YouTube a partir dela. Os jogadores podem controlar dispositivos IoT no site do jogo; o objetivo era encontrar uma arma escondida na sala (um poderoso apontador laser), hackeá-la e causar um curto-circuito na sala.

Para adicionar ação, colocamos um triturador na sala, no qual carregamos 200 rublos: o triturador comia uma nota por hora. Depois de vencer o jogo, era possível parar o triturador e pegar todo o dinheiro restante.

Nós já contamos passo a passoE como o back-end foi feito projeto. É hora de falar sobre hardware e como ele estava indo.


Houve muitos pedidos para mostrar o momento da limpeza do quarto - mostramos como o desmontamos

Arquitetura de hardware: controle de sala

Começamos a projetar uma solução de hardware quando o cenário já estava aproximadamente claro, o back-end estava pronto e tínhamos uma sala vazia pronta para a instalação do equipamento.

Lembrando a velha anedota “O S em IoT significa Segurança” (“A letra S em IoT significa Segurança”), decidimos que desta vez os jogadores do cenário do jogo interagem apenas com o front-end e back-end do site, mas não tenha a oportunidade de chegar diretamente ao ferro.

Isso foi feito por motivos de segurança e entretenimento: com os jogadores acessando diretamente o hardware, seria muito mais difícil isolar ações seguras e potencialmente perigosas, como acelerar um triturador ou controlar pirotecnia.

Antes de iniciar o design, formulamos vários princípios para controlar dispositivos de jogos, que se tornaram a base do design:

Não use soluções sem fio

Todo o espaço de jogo está em um quadro, cada canto do qual pode ser alcançado. Não havia necessidade real de conexões sem fio e elas se tornariam apenas outro ponto de falha.

Não use nenhum dispositivo doméstico inteligente especial

Basicamente, por uma questão de flexibilidade de personalização. É claro que muitas versões em caixa de sistemas domésticos inteligentes com um painel de administração e controle prontos podem ser configuradas para nossa tarefa, mas os custos de mão-de-obra seriam comparáveis ​​à criação de nossa própria solução simples.

Além disso, era necessário inventar dispositivos que mostrassem claramente que foram os jogadores que mudaram seu estado: ligaram / desligaram ou colocaram uma luz específica nas letras FALCON.

Coletamos todos os elementos do ferro disponível ao público, que pode ser comprado em lojas comuns de peças de rádio: entre a entrega de pizza e Coca-Cola Diet, os correios Chip e Deep e Leroy iam constantemente ao local.

A escolha de montar tudo nós mesmos simplificou a depuração, a escalabilidade, porém, exigia mais precisão durante a instalação.

Todos os relés e arudino não devem estar visíveis no quadro

Decidimos trazer todos os elementos controlados para um só lugar e escondê-los nos bastidores para poder controlar a performance e, se necessário, rastejar cuidadosamente para fora do campo de visão da câmera e substituir a unidade com falha.

Projeto de ferro: como construímos uma sala com uma missão hacker
Com isso, todos ficaram escondidos embaixo da mesa e a câmera foi instalada de forma que nada pudesse ser visto embaixo da mesa. Este foi o nosso "ponto cego" para o engenheiro de rastreamento

Como resultado, na verdade, obtivemos um dispositivo inteligente: ele recebeu o estado de cada uma de suas partes do back-end e o alterou com o comando apropriado.

Em termos de implementação de hardware, este dispositivo controlava 6 elementos:

  1. Vários candeeiros de mesa, têm estado ligado/desligado e são controlados pelos jogadores
  2. Letras na parede, podem mudar de cor ao comando dos jogadores
  3. Ventiladores que giram e abrem o flipchart quando o servidor está sobrecarregado
  4. Laser controlado via PWM
  5. Schroeder que comeu dinheiro no horário
  6. Uma máquina de fumaça que disparava antes de cada disparo de laser


Testando uma máquina de fumaça com um laser

Mais tarde, outra luz de palco foi adicionada, posicionada nos bastidores e controlada exatamente como as lâmpadas do ponto 1. A luz de palco funcionou em dois casos: iluminava o laser quando a energia era aplicada a ele e iluminava o peso antes do lançamento do laser em modo de combate.

O que era este dispositivo inteligente

Projeto de ferro: como construímos uma sala com uma missão hacker

Durante todo o caminho, Yura, nosso especialista em hardware, tentou não complicar as coisas e apresentou a solução mais simples e minimalista possível.

Supunha-se que rodaria apenas um script no VPS, que recebe o json com o estado dos dispositivos e envia para o arduino conectado via usb.

Portas conectadas a:

  • 16 relés comuns (foram eles que fizeram o clique que se ouviu no vídeo. Nós os escolhemos principalmente por causa desse som)
  • 4 relés de estado sólido para controlar canais PWM, como ventiladores,
  • saída PWM separada para laser
  • saída que gera um sinal para a faixa de LED

Aqui está um exemplo de um comando json que veio do servidor para o relé

{"power":false,"speed":0,"period":null,"deviceIdentifier":"FAN"}

E esse é um exemplo de função com que o comando chegou ao arudino

def callback(ch, method, properties, body):    
request = json.loads(body.decode("utf-8"))    
print(request, end="n")     
send_to_serial(body)

Para acompanhar o momento em que o laser finalmente queima a corda e o peso voa para o aquário, fizemos um pequeno botão que respondia à queda do peso e dava um sinal ao sistema.

Projeto de ferro: como construímos uma sala com uma missão hacker
Botão de monitoramento de movimento Kettlebell

A esse sinal, bombas de fumaça feitas de bolas de pingue-pongue deveriam acender. Colocamos 4 chaminés diretamente na caixa do servidor e trouxemos um fio de nicromo para elas, que deveria esquentar e funcionar como um fusível.

Projeto de ferro: como construímos uma sala com uma missão hacker
Estojo com bombas de fumaça e guirlanda chinesa

Projeto de ferro: como construímos uma sala com uma missão hacker

arduino

No arduino, de acordo com o plano original, ocorreram duas ações.

Primeiro, quando uma nova solicitação era recebida, ela era analisada usando a biblioteca ArduinoJson. Em seguida, cada dispositivo gerenciado foi associado a duas de suas propriedades:

  • estado de energia "ligado" ou "desligado" (estado padrão)
  • o período em que o dispositivo está ligado — o tempo em microssegundos desde o início da placa, quando é hora de desligá-lo, ou seja, trazer o estado para o padrão

O último horário foi definido quando o parâmetro correspondente foi recebido em JSON, porém, não foi possível passar, então o valor foi definido como 0 e não ocorreu o zeramento.

A segunda ação que o arduino realizava a cada ciclo era a atualização dos estados, ou seja, verificar se há necessidade de ligar algo ou se é hora de desligar algum aparelho.

Ponteiro laser - o mesmo Megatron 3000

Projeto de ferro: como construímos uma sala com uma missão hacker

Este é um módulo convencional de corte e marcação a laser LSMVR450-3000MF 3000mW 450nm com foco manual.

letras do falcão

Feito de forma muito simples - apenas copiamos as letras do logotipo, recortamos em papelão e colamos com fita led. Ao mesmo tempo, tive que soldar pedaços de fita, 4 contatos em cada costura, mas o resultado valeu a pena. Nosso backender Pasha mostrou milagres de habilidade, fazendo isso em menos de algumas horas.

Os primeiros testes do dispositivo iot e acabamento

Fizemos os primeiros testes e ao mesmo tempo novas tarefas nos aproximaram. O fato é que, no meio do processo, um verdadeiro produtor de cinema e cinegrafista da VGIK, Ilya Serov, se juntou à equipe - ele alinhou o quadro, adicionou iluminação cinematográfica adicional e mudou ligeiramente o roteiro do jogo para tornar o enredo mais emocional, e a imagem mais dramática e teatral.

Isso aumentou significativamente a qualidade, mas havia elementos que também precisavam ser conectados ao relé e prescrever o algoritmo de operação.

Outro problema era o laser: fizemos vários experimentos com diferentes tipos de corda e lasers de diferentes potências. Para o teste, simplesmente penduramos a carga verticalmente em uma corda.

Ao rodar com o token de teste, a potência regulada pelo PWM foi inferior a 10% e a corda não danificou mesmo com longa exposição.

Para o modo de combate, o laser foi desfocado para cerca de um ponto com diâmetro de 10 mm e queimou com segurança a corda com uma carga a uma distância de cerca de um metro.

Projeto de ferro: como construímos uma sala com uma missão hacker
Então o laser funcionou perfeitamente nos testes

Quando começamos a testar tudo na sala em um peso suspenso, descobrimos que não era tão fácil consertar o laser com segurança. Então, quando a corda queima, ela derrete, estica e sai do foco original.

Projeto de ferro: como construímos uma sala com uma missão hacker
E assim não funcionou mais: a corda mudou

Ilya moveu o laser para a extremidade oposta da sala da corda, de modo que o feixe de laser atravessou toda a cena e ficou lindo no quadro, que dobrou a distância.

Depois de realizar mais alguns experimentos com a queima da corda já em batalha, decidimos não tentar o destino e garantir o corte da corda com a ajuda de um fio de nicromo. Ela destruiu o fio 120 segundos depois de ligar o laser no modo de combate. Isso, assim como a desconexão do fio e do fusível das bombas de fumaça quando o contato de corte é acionado, decidimos codificá-lo diretamente no hardware do microcontrolador.

Projeto de ferro: como construímos uma sala com uma missão hacker
O fio que acabou queimando a corda nos bastidores

Assim, surgiu a terceira tarefa que o arduino resolveu - descobrir as sequências associadas à execução desses comandos.

Também decidimos dar ao arduino a necessidade de contar dinheiro na TV e executar o triturador. Inicialmente, assumiu-se que o back-end cuidaria disso e o saldo atual ficaria visível no site, e na TV mostraríamos os comentários do YouTube como um elemento interativo adicional que avisa aos espectadores que os eventos na sala estão acontecendo em tempo real.

Mas durante o teste, Ilya assistiu à cena e sugeriu mostrar o saldo do jogo na tela maior: quanto dinheiro sobrou, quanto foi comido e a contagem regressiva até o próximo lançamento do triturador.

Vinculamos o Arduino ao horário atual: a cada hora completa, o triturador iniciava. A imagem na TV foi emitida com a ajuda de um framboesa, que naquele momento já recebia solicitações do servidor e as enviava ao arduino para execução. Imagens com indicadores monetários foram desenhadas chamando o utilitário de console fim assim

image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str

E foi formado com base na quantidade ou tempo necessário.

Geramos as fotos com antecedência: apenas pegamos o vídeo finalizado com um cronômetro e exportamos 200 fotos.

Este é o tipo de mecânica que foi programada na cruz. Quando começou a contagem regressiva, todos fomos ao local, nos armamos com extintores e sentamos para esperar o fogo (que ardia com força e força apenas na discórdia)

Como fazer uma transmissão que dura uma semana: escolhendo uma câmera

Para a missão, precisávamos de uma transmissão contínua no YouTube por 7 dias - é quanto estabelecemos como duração máxima do jogo. Havia duas coisas que poderiam interferir conosco:

  1. Superaquecimento da câmera por operação contínua
  2. pausa na internet

A câmera tinha que dar uma imagem de pelo menos Full HD para reproduzir e assistir a sala confortavelmente.

Inicialmente, procuramos webcams lançadas para streamers. Cortamos o orçamento, então não queríamos comprar uma câmera, mas descobrimos que eles não alugam. No mesmo momento, encontramos milagrosamente uma câmera Xbox Kinect em minha casa, colocamos na sala e lançamos uma transmissão de teste por uma semana.

A câmera funcionou bem e não superaqueceu, mas Ilya quase imediatamente percebeu que faltavam configurações, em particular, era impossível definir a exposição.

Ilya tentou aproximar a aparência da transmissão dos padrões de produção de filmes e vídeos: transmitir uma cena de luz que muda dinamicamente com fontes de luz brilhantes, fundo escuro e objetos no quadro. Ao mesmo tempo, quis manter a elaboração da imagem tanto nos destaques quanto nas sombras, com o mínimo de ruído digital.

Portanto, embora o kinect tenha se mostrado confiável durante os testes e não exigisse placa de captura de vídeo (outro ponto de falha), decidimos abandoná-lo. Após três dias testando câmeras diferentes, Ilya escolheu a Sony FDR-AX53 - uma filmadora pequena e confiável, acessível para aluguel, mas ao mesmo tempo com confiabilidade suficiente e bom desempenho.

Alugamos uma câmera, ligamos por uma semana em conjunto com uma placa de captura de vídeo e percebemos que com ela poderíamos contar com transmissão contínua durante toda a busca.

Fazendo um Filme: Palco e Iluminação

Trabalhar a iluminação exigia uma certa elegância, precisávamos construir uma partitura de luz com o mínimo de meios:

1. Iluminação dos objetos quando são encontrados pelos jogadores (laser, peso), bem como uma luz constante no triturador. Aqui usamos dedolight 150 - luminárias confiáveis ​​e compactas com lâmpadas halógenas de baixa tensão que permitem focar o feixe em um assunto específico sem tocar no fundo e em outros objetos.

2. Luz de jogo prática - candeeiro de mesa, candeeiro de chão, estrela, guirlanda. Toda a luz prática foi distribuída harmoniosamente no quadro para iluminar sua área de imagem, dentro havia lâmpadas led com temperatura de cor de 3200K, a lâmpada na luminária de chão foi coberta com um filtro vermelho Rosco para criar uma ponta de destaque de cor incomum.

Projeto de ferro: como construímos uma sala com uma missão hacker
Eu sou o engenheiro da minha mãe ou lanço amanhã

Como reservamos internet e eletricidade

A questão da tolerância a falhas foi abordada quase como em um data center: eles decidiram não se desviar dos princípios básicos e reservaram de acordo com o esquema N + 1 usual.

Se a transmissão parar no YouTube, significa que não será mais possível reconectar usando o mesmo link e continuar transmitindo. Era um momento crítico e, além disso, a sala era um escritório comum.

Para fazer isso, usamos um roteador baseado em OpenWRT e o pacote mwan3. Ele testou automaticamente a disponibilidade do canal a cada 5 segundos e, em caso de interrupção, mudou para um modem de backup da Yota. Como resultado, a mudança para o canal de backup levou menos de um minuto.
Projeto de ferro: como construímos uma sala com uma missão hacker
Também era igualmente importante excluir interrupções de energia, porque mesmo uma pequena oscilação de energia faria com que todos os computadores fossem reinicializados.

Portanto, pegamos a fonte de alimentação ininterrupta ippon innova g2 3000, que daria suporte a todos os dispositivos de jogos: o consumo total de energia do nosso sistema era de cerca de 300 watts. Seria o suficiente para 75 minutos, o suficiente para nossos propósitos.

Decidimos sacrificar a iluminação adicional no caso de falta de eletricidade na sala - ela não estava conectada à fonte de alimentação ininterrupta.

Agradecimentos

  • equipe inteira RUVDSque projetou e desenvolveu o jogo.
  • Separadamente, para os administradores do RUVDS, para monitorar o trabalho dos servidores, a carga foi aceitável e tudo funcionou normalmente no modo normal.
  • melhor chefe ntsaplin pelo fato de que em resposta ao chamado “há uma ideia: vamos pegar um servidor, colocar um aquário nele e pendurar um peso sobre ele, boom, bang, tudo foi inundado com água, curto-circuito, fogo!” ele sempre diz com confiança "faça!"
  • Obrigado Publicação Tilda e separadamente a Mikhail Karpov por não apenas seguir em frente e nos permitir violar os Termos de Uso, mas também nos dar uma conta comercial por um ano quando conversamos sobre o projeto.
  • Ilya Serov S_ILya por entrar e se tornar co-produtor do projeto, pronto para engatinhar meia noite, colar fita de LED, buscar soluções técnicas e fazer de tudo para que tenhamos um filme de verdade.
  • Jovner por estar sempre pronto para salvar a situação quando os outros davam de ombros, lutadores, apoio moral e conversas até de manhã.
  • Samat por nos colocar em contato com o melhor pentester do país que nos aconselhou e nos ajudou com os quebra-cabeças.
  • daniemilk para a produção de vídeo legal de todos os vídeos.
  • Delfos para uma mão firme e prontidão para trabalhar até o fim.
  • Ну Dodo Pizza Engenharia para pizza quase sempre quente.

E o agradecimento maior é aos jogadores por todas as emoções que vivemos enquanto vocês invadiam a busca por dois dias sem dormir e até adiando o trabalho.

Outros artigos sobre a missão com a destruição do servidor

Projeto de ferro: como construímos uma sala com uma missão hacker

Fonte: habr.com

Adicionar um comentário