Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Un paio di settimane fa abbiamo trascorso ricerca online di hacker: hanno costruito una stanza, l'hanno riempita di dispositivi intelligenti e da lì hanno lanciato una trasmissione su YouTube. I giocatori possono controllare i dispositivi IoT dal sito web del gioco; L'obiettivo era trovare un'arma nascosta nella stanza (un potente puntatore laser), hackerarla e provocare un cortocircuito nella stanza.

Per aumentare l'azione, abbiamo posizionato un distruggidocumenti nella stanza, nel quale abbiamo caricato 200 rubli: il distruggidocumenti mangiava una banconota all'ora. Dopo aver vinto la partita, potresti fermare il distruggidocumenti e prendere tutti i soldi rimanenti.

Lo abbiamo già detto Procedura dettagliatae come è stato realizzato il backend progetto. È tempo di parlare dell'hardware e di come è stato assemblato.


Ci sono state molte richieste per mostrare il momento della pulizia di una stanza: mostriamo come la smontiamo

Architettura hardware: controllo della stanza

Abbiamo iniziato a progettare una soluzione hardware quando lo scenario era già approssimativamente compreso, il backend era pronto e avevamo una stanza vuota pronta per installare l'attrezzatura.

Ricordando la vecchia battuta “La S in IoT sta per Security” (“La lettera S nell'abbreviazione IoT sta per Security”), abbiamo deciso che questa volta i giocatori nello scenario di gioco interagiscono solo con il front-end e il back-end del sito, ma non ho l'opportunità di arrivare direttamente al ferro.

Ciò è stato fatto per ragioni di sicurezza e spettacolarità di ciò che accadeva sullo schermo: con l'accesso diretto all'hardware da parte dei giocatori, sarebbe molto più difficile isolare azioni sicure e potenzialmente pericolose, ad esempio lo scorrimento veloce di un distruggidocumenti o il controllo pirotecnica.

Prima di iniziare la progettazione, abbiamo formulato diversi principi per il controllo dei dispositivi di gioco, che sono diventati la base del progetto:

Non utilizzare soluzioni wireless

L'intero spazio di gioco è racchiuso in un unico fotogramma, di cui è possibile raggiungere ogni angolo. Non c'era una reale necessità di connessioni wireless e sarebbero semplicemente diventate un altro punto di fallimento.

Non utilizzare dispositivi speciali per la casa intelligente

Principalmente per motivi di flessibilità di personalizzazione. È chiaro che possiamo personalizzare molte versioni in scatola di sistemi di casa intelligente con amministrazione e controlli già pronti per il nostro compito, ma i costi di manodopera sarebbero paragonabili alla creazione di una semplice soluzione personalizzata.

Inoltre, era necessario inventare dispositivi che mostrassero chiaramente che erano i giocatori a cambiarne lo stato: lo accendevano/spegnevano o mettevano una luce specifica sulle lettere FALCON.

Abbiamo raccolto tutti gli elementi dall'hardware disponibile al pubblico che può essere acquistato nei normali negozi di ricambi per radio: tra la consegna della pizza e quella della Diet Cola, i corrieri Chip and Dip e Leroy venivano costantemente sul posto.

La scelta di assemblare tutto da soli ha semplificato il debugging, la scalabilità ha però richiesto una maggiore cura in fase di installazione.

Tutti i relè e l'Arudin non dovrebbero essere visibili nell'inquadratura

Abbiamo deciso di riunire tutti gli elementi controllabili in un unico posto e nasconderli dietro le quinte per poter monitorare le loro prestazioni e, se necessario, strisciare con cautela fuori dalla vista della telecamera e sostituire l'unità guasta.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Alla fine, tutto è stato nascosto sotto il tavolo e la telecamera è stata installata in modo che sotto il tavolo non fosse visibile nulla. Questo era il nostro "punto cieco" in cui l'ingegnere poteva insinuarsi

Di conseguenza, abbiamo effettivamente ottenuto un dispositivo intelligente: ha ricevuto lo stato di ciascuna delle sue parti dal backend e lo ha modificato con il comando appropriato.

Dal punto di vista dell'implementazione hardware, questo dispositivo controllava 6 elementi:

  1. Diverse lampade da tavolo, hanno uno stato on/off e sono controllate dai giocatori
  2. Lettere sul muro, possono cambiare colore al comando dei giocatori
  3. Ventole che girano e aprono la lavagna a fogli mobili quando il server è sotto carico
  4. Laser controllato tramite PWM
  5. Trituratore che ha mangiato soldi nei tempi previsti
  6. Una macchina del fumo che si spegneva prima di ogni sparo laser


Testare una macchina del fumo con un laser

Successivamente fu aggiunta una luce da palco, che stava dietro il telaio e veniva controllata esattamente come le lampade del punto 1. La luce da palco funzionava in due casi: illuminava il laser quando gli veniva applicata l'alimentazione, e illuminava il peso prima del il laser è stato lanciato in modalità combattimento.

Cos'era questo dispositivo intelligente?

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker

Durante tutto il percorso, Yura, il nostro responsabile dell'hardware, ha cercato di non complicare le cose e di trovare la soluzione più semplice e minimalista possibile.

Si è ipotizzato che il VPS eseguisse semplicemente uno script che riceve json con lo stato dei dispositivi e lo invia all'Arduino collegato tramite USB.

Collegato alle porte:

  • 16 relè normali (erano quelli che facevano il rumore del clic che si sentiva nel video. Li abbiamo scelti principalmente per questo suono)
  • 4 relè a stato solido per il controllo dei canali PWM, come ventole,
  • uscita PWM separata per laser
  • uscita che genera un segnale alla striscia LED

Ecco un esempio di un comando json arrivato al relè dal server

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

E questo è un esempio di funzione con cui il comando è arrivato ad Arudino

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

Per tracciare il momento in cui il laser finalmente brucia la corda e il peso vola sull'acquario, abbiamo realizzato un piccolo pulsante che si attivava quando il peso cadeva e dava un segnale al sistema.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Pulsante per il monitoraggio del movimento del peso

A questo segnale avrebbero dovuto accendersi dei fumogeni realizzati con palline da ping-pong. Abbiamo inserito 4 fumogeni direttamente nel case del server e li abbiamo collegati con un filo di nicromo, che avrebbe dovuto riscaldarsi e funzionare come un accenditore.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Alloggiamento con bombe fumogene e ghirlanda cinese

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker

Arduino

Secondo il piano originale, su Arduino hanno avuto luogo due azioni.

Innanzitutto, quando veniva ricevuta una nuova richiesta, la richiesta veniva analizzata utilizzando la libreria ArduinoJson. Successivamente, ciascun dispositivo gestito è stato confrontato con le sue due proprietà:

  • stato di alimentazione "acceso" o "spento" (stato standard)
  • il periodo per il quale il dispositivo è acceso - il tempo in microsecondi dall'avvio della scheda, quando è il momento di spegnerlo, ovvero riportare lo stato allo standard

L'ultima volta è stato impostato durante la ricezione del parametro corrispondente in JSON, ma non è stato possibile trasmetterlo, quindi il valore è stato impostato su 0 e non si è verificato alcun ripristino.

La seconda azione che Arduino eseguiva ad ogni ciclo era l'aggiornamento degli stati, cioè verificare se c'era bisogno di accendere qualcosa o se era il momento di spegnere qualche dispositivo.

Puntatore laser: lo stesso Megatron 3000

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker

Questo è un normale modulo di taglio e marcatura laser con messa a fuoco manuale LSMVR450-3000MF 3000 mW 450 nm.

Lettere Falco

Sono stati realizzati in modo molto semplice: abbiamo semplicemente copiato le lettere del logo, le abbiamo ritagliate dal cartone e poi le abbiamo coperte con nastro LED. In questo caso ho dovuto saldare insieme i pezzi di nastro adesivo, 4 contatti per cucitura, ma ne è valsa la pena. Il nostro backender Pasha ha mostrato miracoli di abilità, facendolo in meno di poche ore.

Primi test del dispositivo iot e rifiniture

Abbiamo fatto i primi test e allo stesso tempo ci sono arrivati ​​nuovi compiti. Il fatto è che nel bel mezzo del processo, un vero produttore cinematografico e cameraman della VGIK, Ilya Serov, si è unito al team: ha costruito l'inquadratura, ha aggiunto un'illuminazione cinematografica aggiuntiva e ha leggermente modificato la sceneggiatura del gioco per rendere la trama più emozionante, e l'immagine più drammatica e teatrale.

Ciò ha aumentato significativamente la qualità, ma sono comparsi elementi che dovevano anche essere collegati al relè e all'algoritmo operativo prescritto.

Un altro problema era il laser: abbiamo fatto diversi esperimenti con diversi tipi di corda e laser di diversa potenza. Per il test abbiamo semplicemente appeso un peso verticalmente su una corda.

Durante il funzionamento con un gettone di prova, la potenza regolata tramite PWM era inferiore al 10% e non ha danneggiato la corda anche con una lunga esposizione.

Per la modalità di combattimento, il laser è stato sfocato approssimativamente su un punto con un diametro di 10 mm e ha bruciato con sicurezza una corda con un carico da una distanza di circa un metro.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Quindi il laser ha funzionato perfettamente nei test

Quando abbiamo iniziato a testare tutto nella stanza su un peso sospeso, si è scoperto che fissare saldamente il laser non era così facile. Poi, quando la corda brucia, si scioglie, si allunga e si allontana dal suo focus originario.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Ma non funzionava più così: la corda si spostava

Ilya ha spostato il laser all'estremità della stanza di fronte alla corda in modo che il raggio laser attraversasse l'intero palco e apparisse bello nell'inquadratura, raddoppiando la distanza.

Dopo aver condotto numerosi altri esperimenti con la combustione della corda già in battaglia, abbiamo deciso di non torturare il destino e di assicurare il taglio della corda utilizzando filo di nicromo. Ha distrutto il filo 120 secondi dopo aver acceso il laser in modalità combattimento. Abbiamo deciso di codificare questo, così come la disconnessione del filo e l'accensione delle bombe fumogene quando viene attivato il contatto di separazione, direttamente nell'hardware del microcontrollore.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Il filo che alla fine ha bruciato la corda fuori dallo schermo

Pertanto, è apparso un terzo compito risolto da Arduino: elaborare le sequenze associate all'esecuzione di questi comandi.

Abbiamo anche deciso di dare ad Arduino la necessità di contare i soldi sulla TV e di far funzionare il distruggidocumenti. Inizialmente, si presumeva che il backend avrebbe fatto questo e che il saldo attuale sarebbe stato visibile sul sito web, e sulla TV avremmo mostrato i commenti di YouTube come ulteriore elemento interattivo, dicendo agli spettatori che gli eventi nella stanza stavano accadendo in tempo reale. tempo.

Ma durante la prova, Ilya ha guardato la scena e ha suggerito di mostrare il saldo del gioco sullo schermo più grande: quanti soldi sono rimasti, quanto è stato mangiato e il conto alla rovescia fino al prossimo avvio del distruggidocumenti.

Abbiamo legato Arduino all'ora corrente: ogni ora intera il distruggidocumenti veniva avviato. L'immagine è stata visualizzata sulla TV utilizzando rasberry, che in quel momento stava già ricevendo richieste dal server e inviandole ad arduino per l'esecuzione. Le immagini con gli indicatori monetari sono state disegnate chiamando l'utilità della console fim in qualcosa del genere

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

Ed è stato formato in base alla quantità o al tempo richiesti.

Abbiamo generato le immagini in anticipo: abbiamo semplicemente realizzato un video già pronto con un timer ed esportato 200 immagini.

Questa è la meccanica che è stata programmata nella croce. Quando è iniziato il conto alla rovescia finale, siamo andati tutti sul posto, ci siamo armati di estintori e ci siamo seduti ad aspettare l'incendio (che era in pieno svolgimento solo durante la discordia)

Come realizzare una trasmissione che funzioni per una settimana: scegliere una telecamera

Per la missione avevamo bisogno di una trasmissione continua su YouTube per 7 giorni: è esattamente la durata massima che abbiamo stabilito per il gioco. C’erano due cose che potevano fermarci:

  1. Surriscaldamento della fotocamera a causa del funzionamento continuo
  2. Interruzione di Internet

La telecamera doveva fornire almeno un'immagine Full HD per rendere confortevole la riproduzione e la visione della stanza.

Inizialmente, abbiamo guardato alle webcam prodotte per gli streamer. Stavamo tagliando il budget, quindi non volevamo comprare una macchina fotografica, ma, a quanto pare, non la noleggiano. Nello stesso momento, abbiamo miracolosamente trovato una videocamera Xbox Kinect a casa mia, l'abbiamo installata nella mia stanza e abbiamo avviato una trasmissione di prova per una settimana.

La fotocamera funzionava bene e non si surriscaldava, ma Ilya notò quasi subito che mancavano le impostazioni, in particolare era impossibile impostare l'esposizione.

Ilya ha cercato di avvicinare il tipo di trasmissione agli standard della produzione cinematografica e video: trasmettere una scena luminosa che cambia dinamicamente con fonti di luce intensa, uno sfondo oscurato e oggetti nell'inquadratura. Allo stesso tempo, volevo preservare l'elaborazione dell'immagine sia nelle luci che nelle ombre, con un rumore digitale minimo.

Pertanto, nonostante il Kinect si sia dimostrato affidabile nei test e non richiedesse una scheda di acquisizione video (altro punto debole), abbiamo deciso di abbandonarlo. Dopo tre giorni di test su diverse fotocamere, Ilya ha scelto la Sony FDR-AX53: una videocamera piccola e affidabile, poco costosa da noleggiare, ma allo stesso tempo dotata di affidabilità e caratteristiche visive sufficienti.

Abbiamo noleggiato una fotocamera, l'abbiamo accesa per una settimana insieme a una scheda di acquisizione video e ci siamo resi conto che con essa potevamo contare su una trasmissione continua durante l'intera ricerca.

Realizzare un film: allestimento della scena e illuminazione

Lavorare sull’illuminazione ha richiesto una certa grazia; dovevamo costruire una partitura illuminotecnica con mezzi minimi:

1. Illuminazione degli oggetti quando i giocatori li trovano (laser, peso), nonché luce costante sul distruggidocumenti. Qui abbiamo utilizzato dedolight 150: dispositivi di illuminazione cinematografica affidabili e compatti con lampade alogene a bassa tensione, che consentono di focalizzare il raggio su un oggetto specifico senza influenzare lo sfondo e altri oggetti.

2. Pratica luce da gioco: lampada da tavolo, lampada da terra, stella, ghirlanda. Tutta la luce pratica è stata distribuita armoniosamente nella cornice per illuminare l'area dell'immagine, all'interno c'erano lampade a LED con una temperatura di colore di 3200K, la lampada nella lampada da terra era coperta con un filtro in lamina rossa Rosco per creare un insolito accento cromatico.

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Sono un ingegnere presso mia madre o il lancio è domani

Come abbiamo prenotato internet ed elettricità

Hanno affrontato la questione della tolleranza agli errori quasi come in un data center: hanno deciso di non discostarsi dai principi di base e hanno prenotato secondo il consueto schema N+1.

Se la trasmissione su YouTube si interrompe significa che sarà impossibile riconnettersi utilizzando lo stesso collegamento e continuare lo streaming. Era un momento critico e la stanza si trovava in un normale ufficio.

Per questo abbiamo utilizzato un router basato su OpenWRT e il pacchetto mwan3. Ha testato automaticamente la disponibilità del canale ogni 5 secondi e, in caso di interruzione, è passato al modem di backup con Yota. Di conseguenza, il passaggio al canale di backup è avvenuto in meno di un minuto.
Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker
Era altrettanto importante eliminare le interruzioni di corrente, perché anche un picco di corrente a breve termine avrebbe causato il riavvio di tutti i computer.

Pertanto, abbiamo preso un gruppo di continuità ippon innova g2 3000, che avrebbe supportato tutti i dispositivi di gioco: il consumo energetico totale del nostro sistema è stato di circa 300 Watt. Durerebbe 75 minuti, abbastanza per i nostri scopi.

Abbiamo deciso di sacrificare un'illuminazione aggiuntiva nel caso in cui venisse a mancare l'elettricità nella stanza: non era collegata a un gruppo di continuità.

Ringraziamenti

  • A tutta la squadra RUVDS, che ha inventato e implementato il gioco.
  • Separatamente, per gli amministratori RUVDS, per monitorare il lavoro dei server, il carico era accettabile e tutto funzionava come al solito.
  • Al miglior capo ntsaplin per il fatto che in risposta alla chiamata: “Ho un'idea: prendiamo un server, ci mettiamo sopra un acquario e ci appendiamo sopra un peso, boom, bang, tutto è inondato d'acqua, corto circuito, fuoco !” dice sempre con sicurezza "fallo!"
  • Grazie Tilda Editoria e separatamente a Mikhail Karpov non solo per essersi incontrato a metà strada e averci permesso di violare i Termini di utilizzo, ma anche per averci fornito un account aziendale per un anno quando abbiamo parlato del progetto.
  • Ilya Serov S_ILya per aver aderito e diventare coproduttore del progetto, pronto a gattonare mezza notte, incollando strisce LED, cercando soluzioni tecniche e facendo di tutto per ottenere un vero film.
  • zhovner per essere sempre pronto a salvare la situazione quando gli altri hanno alzato le mani, borscht, sostegno morale e conversazioni fino al mattino.
  • lo stesso per averci messo in contatto con il miglior pentester del paese, che ci ha consigliato e aiutato con i compiti.
  • daniemilk per la fantastica produzione video di tutti i video.
  • delphe per la mano ferma e la volontà di lavorare fino all'ultimo.
  • Bene Dodo Pizza Ingegneria per una pizza quasi sempre calda.

E la più grande gratitudine va ai giocatori per tutte le emozioni che abbiamo provato mentre per due giorni prendevate d'assalto la ricerca senza dormire e persino rimandando il lavoro.

Altri articoli sulla missione per distruggere il server

Hardware di progetto: come abbiamo costruito una stanza con una ricerca hacker

Fonte: habr.com

Aggiungi un commento