Qualche giorno fa, abbiamo concluso uno degli eventi più carichi di emozioni che abbiamo avuto la fortuna di organizzare per il blog: un gioco online di hackeraggio con distruzione del server.
I risultati hanno superato tutte le nostre aspettative: i partecipanti non si sono limitati a partecipare, ma si sono rapidamente organizzati in una comunità coesa di 620 persone su Discord, che ha praticamente attaccato la missione in due giorni senza pause per dormire.
Ecco come è finita:

Come è iniziato tutto e di cosa si tratta?
Il gioco è iniziato il 12 agosto, quando abbiamo pubblicato sul blog un video in cui un hacker nei panni di un teschio propone di giocare, distruggere il server, creare un corto circuito nella stanza (o almeno un mini incendio) e portare via i soldi rimasti nello shredder.
Si è trattato di un'escape room online: abbiamo avviato una diretta su YouTube da una stanza che abbiamo riempito di dispositivi IoT, con un server sotto il letto (che doveva essere distrutto), mentre sopra il server abbiamo appeso un acquario e una pesante ghisa. Per rendere il gioco più avvincente, abbiamo deciso di mettere in palio un montepremi di 200.000 rubli, caricato in un distruttore di documenti impostato per attivarsi ogni 60 minuti. Ogni ora, il distruttore mangiava 1.000 rubli: prima i giocatori lo fermavano, maggiore sarebbe stata la vincita.

Costruire questo quest è stato di per sé una sfida — abbiamo dovuto nutrirci solo con servizi di consegna e dormire poche ore a notte direttamente nella stessa stanza. Ma ciò che ci ha sorpreso di più è stato osservare il volo delle idee dei giocatori e la loro risposta emotiva durante il processo.
A essere sinceri, l'inventiva dei giocatori nel risolvere gli enigmi ha superato di gran lunga la nostra umile idea: ogni minuto libero leggevamo il chat di Discord e in alcuni casi ci siamo letteralmente messi a ridere fino alle lacrime, scoprendo cosa facessero i giocatori e come scherzassero nel processo.
Il progetto è stato portato avanti da 7 persone: un backend developer, uno specialist di hardware, un vero produttore cinematografico, un designer CG e due ispiratori e co-produttori.
In post successivi, racconteremo come il quest è stato realizzato dal punto di vista tecnico, ma per ora vi svelerò la sua soluzione: come hackare questa stanza durante la diretta. Ripercorreremo anche la cronologia degli eventi e tutte le folli teorie illuminatiste dal chat di Discord.
Cosa avevano i giocatori all'inizio del gioco
Tutti gli oggetti nella stanza erano divisi in tre categorie:
- Dispositivi IoT semplici da gestire, non da gioco
- Dispositivi di gioco per completare il quest
- Atmosfera

Abbiamo posizionato 8 elementi molto semplici da gestire: due lampade, una decorazione luminosa, cinque lettere SOKOL, ognuna delle quali poteva cambiare colore. Tutto questo poteva essere acceso/spento direttamente dal sito e i giocatori potevano vedere immediatamente il risultato nella diretta — li abbiamo resi disponibili a tutti i giocatori, indipendentemente dal livello di competenza tecnica.

Tutto ciò che si accendeva facilmente dal sito
Tra gli elementi di gioco essenziali per completare la missione, l'accesso ai quali non era così semplice da ottenere:
- Un server con il coperchio aperto e un acquario sopra di esso
- Un kettlebell appeso in modo da rompere l'acquario
- Megatron 3000 — un potente puntatore laser diretto alla corda che sostiene il kettlebell
- Un potente ventilatore che si attivava sotto carico sul server
- Un flipchart con scritto il login e la password per Megatron
- Un telefono su cui si poteva chiamare e vedere la propria chiamata in diretta
- Un distruttore di documenti che mangiava 1000 rubli all'ora
Come è stato risolto il mistero
Posso dire subito: il congegno si apriva piuttosto facilmente.
L'obiettivo del gioco era fermare il distruttore creando un corto circuito nella stanza. Per farlo, era necessario rompere l'acquario, lanciando il kettlebell e inondando il server. Il kettlebell era sostenuto da un cordino, che era il bersaglio di Megatron. Una volta preso il controllo di Megatron, si poteva tagliare la corda. Questo si faceva in 5 semplici passaggi:
Passo 1. Caricare il server presente nella stanza
Ad esempio, inviando pacchetti con il comando.
ab -r -n 10000 -c 100 -s 280 -l https://ws.ooosokol.ru/captchaL'indizio era un captcha molto impegnativo con .

Quella captcha che doveva essere attaccata

Con il carico del server, la sua temperatura aumentava e ciò poteva essere monitorato su un monitor aperto proprio davanti alla telecamera. Successivamente veniva attivata una ventola che apriva una leggera tendina sulla lavagna. Allora veniva rivelato il login e la password per accedere alla pagina di Megatron scritti sulla lavagna.
La pagina di gestione di Megatron si poteva trovare controllando tutti i certificati emessi per il dominio ooosokol.ru.
Sottodominio era presente la pagina di gestione di Megatron. Ma non si apriva finché Megatron non riceveva alimentazione primaria.
Tutti questi passaggi sono stati affrontati quasi immediatamente nei commenti della trasmissione su YouTube. Successivamente, le sfide sono diventate più complesse e i giocatori hanno creato un server Discord chiamato RUVDS Hack Room e hanno continuato la discussione lì.
Passo 2. Fornire alimentazione primaria a Megatron
Tutti i dispositivi intelligenti gestiti dal sito (quegli stessi lampioni che i giocatori accendevano e spegnevano in continuazione) avevano i loro identificativi.
Per accendere il Megatron e illuminarlo, è stato necessario trovare e attivare un dispositivo nascosto nella pagina di gestione dell'ufficio.

Per farlo, dovevamo controllare gli identificatori dei dispositivi e notare che ci sono solo 4 dispositivi, mentre sul sito sono disponibili solo 3.

La pagina del Megatron diventava accessibile solo accendendo il 4° dispositivo e il laser si illuminava. Tuttavia, non era possibile sparare con il laser, e sullo schermo compariva un messaggio che avvisava che il laser non era disponibile e un suggerimento: la corrente era saltata nell'ufficio, bisognava contattare la società di gestione e richiedere l'alimentazione.

Suggerimento sulla società di gestione
3. Contattare la società di gestione e richiedere l'accensione del Megatron
Il Megatron non poteva sparare a causa del guasto nell'ufficio. Solo la società di gestione poteva riattivare l'alimentazione, e bisognava contattarla e identificarsi come proprietario della società.
Trovare il numero della società di gestione è stato semplice: lo abbiamo inserito direttamente nel footer.

Ma passare l'identificazione è stato molto più complicato.
Chiamando il numero +74991130688, una ragazza operatrice ha risposto con voce annoiata chiedendo di fornire il codice fiscale dell'azienda e il nome completo del proprietario. Senza queste informazioni, si rifiutava di attivare il servizio, spiegando che era semplicemente un centro di assistenza esternalizzato, con 2000 clienti e uffici, e senza tali informazioni non riuscivano a trovare il contatto desiderato.
Per i giocatori, questa si è rivelata la fase più difficile. Hanno cercato il codice fiscale corretto e il nome completo del proprietario per quasi due giorni, mentre io (nelle vesti di operatrice del centro di assistenza) ho ricevuto oltre 400 chiamate in quel lasso di tempo. Il telefono squillava ogni 2-3 minuti.
I ragazzi scavavano come meglio potevano. Usavano ogni mezzo: frugavano nei codici sorgente del sito, cercavano il proprietario del sito, Sokolo, su Google e controllavano sui social media.
Cercavano il codice fiscale di diverse aziende.

Schema di ricerca quasi completo.
A un certo punto hanno persino chiamato utilizzando un numero sostitutivo, come se stessero chiamando dall'ufficio dell'azienda Sokolo, citata nel footer.
Così abbiamo scoperto che un numero enorme di aziende porta il nome Sokolo. Praticamente ogni azienda è stata contattata dai giocatori, ma nulla a che fare con quello che ha vissuto il sito. , che abbiamo effettivamente acquistato il famoso Megatron circa un mese fa.
Inizialmente, Discord ha attaccato il supporto di Laser Masters.

Poi sono riusciti a trovare lì l'account di qualcuno! Mentre il supporto di Laser Masters aveva già smesso di minimizzare le frasi.
Attenzione, tenete i bambini lontani dallo schermo


Alla fine, hanno deciso di far cadere Laser Masters e il loro sito è crollato. Allo stesso modo, sono riusciti a far cadere anche il sito di Sokòl, anche se noi lo abbiamo rapidamente ripristinato.
Durante le indagini, i ragazzi di Discord hanno persino trovato l'attore, la cui foto abbiamo acquistato da uno stock, per interpretare il ruolo del principale antagonista, il proprietario della LLC Andrei Sokòl. Si è scoperto che si chiama Yuri ed è completamente all'oscuro del trambusto in cui è finito.

Andrei Sokòl, personaggio del gioco

Yuri, modello
Se solo sapesse come ha costretto 600 persone a non dormire per due notti...)
Dopo hanno iniziato a scavare concretamente sotto di me, come organizzatore del quest (il che avrebbe potuto finire con successo, se solo i ragazzi si fossero ricordati di hackerare i miei canali di lavoro).

Mi sono anche un po' preoccupata quando hanno menzionato il mio patronimico e persino il mio codice fiscale. Ma mi sono rasserenata quando, nel gioco del telefono rotto, è emerso improvvisamente un fratello maggiore che si è rivelato essere il direttore tecnico di Habr.
Mio caro fratello, a cui è toccato anche lui

Nel frattempo, le ipotesi diventavano sempre più incredibili

Fino a giungere a teorie illuminati.

Le teorie del complotto più succulente riguardavano SpongeBob, Harry Potter e il lampeggiare della catena di diodi cinesi che avevamo inserito nel case del computer.
Da dove vengono SpongeBob e Harry Potter, direte? Abbiamo inserito i loro indirizzi nella pagina dei contatti di Sokol e questo ha generato un sacco di congetture nella comunità Discord. Anche se volevamo semplicemente rendere omaggio alle nostre opere infantili preferite.

Quella stessa citazione nella pagina ""
E il risultato è stato





Si è scoperto che nel cartone animato ci sono davvero dei documenti di SpongeBob. Venivano chiamati come il codice fiscale

Una delle teorie più complesse era che nel lampeggiare della catena cinese fosse nascosto un messaggio in codice Morse.
Hanno registrato il lampeggio e hanno cercato di decifrarlo



Tra le teorie più semplici, i ragazzi cercavano di capire se ci fosse un indizio nascosto nelle mappe.

Lungo il percorso ci hanno paragonato a — un giudizio ingiustificato ma comunque gradevole.


I giocatori hanno provato a utilizzare la social engineering. Ho ricevuto chiamate fingendo di essere dell'FSB, dei pompieri, lo stesso Sokolov, la sua ex moglie e un guardiano che si presume fosse giù da noi. Dicevano che era scoppiato un incendio, che qualcuno era rimasto bloccato nell'ascensore, e la storia più straziante era quella in cui si diceva che un cagnolino del chiamante fosse intrappolato nell'ufficio avvolto dalle fiamme.

Ci sono stati anche tentativi di corruzione.
Piano piano nel chat sono iniziate a comparire le nostre meme.
Ecco un paio.



Nel frattempo, le fabbriche erano ferme.





Suggerimento
I soldi nello shredder stavano diminuendo. Per far sì che il vincitore potesse ottenere qualcosa, abbiamo deciso di fornire un suggerimento. Inoltre, seguendo le regole del game design, proprio prima della finale, abbiamo deciso di aumentare la tensione.
In un sul blog abbiamo pubblicato un video. All'inizio abbiamo inserito un estratto di Fight Club — come riferimento a Tyler Durden, che pensava di inserire il 25° fotogramma nei film mentre lavorava nei cinema.
Abbiamo deciso di applicare la stessa meccanica e abbiamo inserito un suggerimento come 25° fotogramma, il corretto codice fiscale e nome e cognome del proprietario.


Dopo questo, i ragazzi si sono messi a capire in fretta.
Passo 4. Sparare con il laser in modalità non bellica.
Quando l'alimentazione veniva fornita dalla società di gestione e dopo l'attivazione dei fusibili, Megatron si accendeva e poteva sparare in modalità di prova. Nel modulo di inserimento era già stato inserito un token per il colpo di prova.

Ogni 25 secondi veniva generato un nuovo token, che poteva essere utilizzato per accendere il laser per 10 secondi a una potenza di 10/255.
Dopodiché, il laser si raffreddava per 1 minuto e in quel minuto non era disponibile, non accettava nuove richieste di sparo.
Questa potenza non era assolutamente sufficiente per bruciare la corda, ma qualsiasi giocatore poteva sparare da Megatron e vedere il raggio laser in azione.
La reazione della comunità è stata più che entusiasta.

Ma tutti si sono rapidamente calmati e hanno capito che non era ancora la fine del gioco.

Successivamente, la comunità ha iniziato a scoprire come attivare la modalità bellica.
Brainstorming.


Sono comparsi dei fake su Discord.
Non sapevamo che c'era qualcosa scritto sul piede del tavolo nella trasmissione.
La comunità è arrivata al passo 4. Scoprire come vengono generati i token: trovare il gist e generare un token che accende il laser in modalità bellica.
La modalità di combattimento di Megatron è il 100% della potenza del laser a 3 W. Questo è più che sufficiente per 2 minuti, per tagliare la corda che teneva il peso, rompere l'acquario e allagare il server.
Abbiamo lasciato alcuni suggerimenti su : ovvero il codice per la generazione del token, grazie al quale si poteva capire che i token di test e di produzione venivano generati sulla base di un singolo contatore. Nel caso del token di produzione, oltre al valore del contatore, viene utilizzato anche un sale, che è stato quasi completamente mantenuto nella cronologia delle modifiche di questo gist, ad eccezione degli ultimi due caratteri.

Come tutti hanno rapidamente indovinato, era 42
Nei commenti del gist c'era una corrispondenza tra Andrei Sokolov e lo sviluppatore (il 'saggio sviluppatore', come lo hanno definito i ragazzi su Discord).
Nella corrispondenza, Andrei aveva inviato uno dei token di produzione, e lo sviluppatore aveva risposto che quel token era stato inizializzato con il valore del contatore 42.

Sapendo queste informazioni, era possibile provare gli ultimi 2 caratteri del sale e scoprire che per esso erano stati utilizzati numeri di Lost, convertiti nel sistema esadecimale.
Dopo, i giocatori dovevano catturare il valore del contatore (analizzando il token di prova) e generare un token di combattimento utilizzando il valore del contatore successivo e il sale scelto nel passaggio precedente.
Il contatore si incrementava semplicemente ad ogni colpo di prova e ogni 25 secondi. Di questo non abbiamo scritto da nessuna parte, doveva essere una piccola sorpresa di gioco. I ragazzi ci hanno capito molto rapidamente e hanno lanciato il Megatron in modalità di combattimento.
Passo 5. Bruciare la corda con il laser

Com'era
Qui tutto è semplice. L'invio del token di combattimento attivava il laser in modalità di combattimento, e la stanza cambiava entrando nella «modalità catastrofe», come la chiamavamo nel copione generale:
- Si spegneva tutta la luce nella stanza
- I pulsanti degli dispositivi IoT sul sito diventavano inaccessibili
- Si attivava la luce lampeggiante e il suono della sirena
- Il peso rosso si illuminava
- Sullo schermo della TV iniziava il conto alla rovescia per l'attivazione del laser in modalità di combattimento
Abbiamo dato un conto alla rovescia di un'ora e mezza, affinché tutti coloro che stavano giocando potessero attivare la trasmissione e vedere la finale. E non a caso: mentre attendevo con il cuore in gola il suono dell'impatto e del vetro che si rompeva dalla stanza accanto, tutta la squadra che ha costruito il quest, senza parlarsi, ha iniziato a tornare alla base per vedere la finale con i propri occhi. Entravano semplicemente nella stanza e iniziavano ad abbracciarsi.
Nel frattempo su Discord


Dopo il conto alla rovescia, il laser si è attivato in modalità combattimento e in due minuti ha bruciato la corda — il peso è volato dritto nell'acquario. Prima dell'impatto, sullo schermo ha urlato un'iroica capibara, alzando in preda al panico le sue piccole zampe.
Poiché tutta la squadra era là, abbiamo registrato un breve messaggio per tutti coloro che hanno combattuto per due giorni per la finale su Discord e siamo andati ad aprire lo champagne:

Come abbiamo calcolato il tempo di avvio dei video pubblicitari e il volo del peso?
Dopo una dozzina di test per bruciare la corda con il laser, abbiamo capito che si trattava di una costruzione molto inaffidabile: la corda parzialmente bruciata diventava più sottile, si tendeva sotto il peso del peso, cambiava posizione e il laser non riusciva più a tagliarla completamente.
Pertanto, abbiamo preso un'altra strada: abbiamo duplicato la bruciatura avvolgendo la corda con un filo di nichromo. Una corrente passava attraverso il filo, che si scaldava fino a diventare rosso e bruciava la corda in circa 2 secondi — questo ci dava una chiara comprensione di quando accendere il capibara urlante, fermare il timer di avvio e avviare il video promozionale.

Cosa non ha funzionato?
Alla fine, doveva uscire dal case un denso fumo, come in un incendio — abbiamo preparato delle bombe fumogene e le abbiamo accese in modo simile, ma non hanno funzionato (probabilmente a causa dell'acqua).
Chi è il vincitore?
Il vincitore è Arkadij Alekseev di San Pietroburgo — è stato lui il primo a generare un token di prova e ha vinto i restanti soldi nello shredder per un totale di 134.000 rubli.
Una breve intervista con Arkadij.
Raccontaci di te, cosa fai per lavoro?
Per formazione sono un esperto di sicurezza, ho concluso il BIT all'ITMO. Lavoro come sviluppatore web full stack in outsourcing. A scuola ero un olimpionico, anche in programmazione e matematica.
Come hai scoperto il gioco?
Sono entrato su Habr solo per leggere, ho visto un articolo e mi sono interessato.
Quante ore hai giocato quando ti sei unito?
Mi sono unito la sera del giorno in cui è stato pubblicato l'articolo (cioè un giorno prima della scadenza). Ho passato la serata e gran parte della giornata successiva.
Cosa ti è piaciuto e cosa no?
In generale, mi è piaciuto tutto (del resto, ho vinto)), ma il fatto di dover effettuare chiamate mi ha un po' stressato. Insomma, dover chiamare e controllare ogni versione è stato un po' scomodo — capivo che anche altre decine di persone stavano chiamando, metà di loro scherzando e cercando di fare ingegneria sociale.
Come hai capito come trovare il token operativo per il Megatron?
Quando sono entrato, avevano già spammato il server, premuto i pulsanti, trovato la password per l'admin del laser, vari sottodomini e pagine.
È stato anche facile trovare il profilo su GitHub e il gist con i commenti. Da lì, il processo per generare il token e il segreto è evidente. In questi tipi di quest non è necessario inventare molto secondo me, poiché si può rimanere sopraffatti da un sacco di possibili sviluppi; e quindi bisogna seguire la direzione in cui ti spinge il creatore della quest.
Considerando gli altri sottodomini e il sito di test su Tilda, era chiaro che dopo aver alimentato il laser, sarebbe stato necessario selezionare un token. Pertanto, già quella sera ho redatto una richiesta approssimativa per accendere il laser (basata su 4 moduli disponibili: 1 sul sito di lavoro e 3 su quello di test/vecchio) e ho tentato di forzare i token di lavoro partendo dal 42 (giusto per tentare, chissà, magari era tutto già attivato e la pagina per l'invio del token si sarebbe aperta solo dopo il codice fiscale e il nome completo).
Non sono certo che la richiesta fosse corretta, poiché non avevo tempo per verificarla (dato che si poteva controllare solo l'accensione del laser), ma mi ero preparato in anticipo per il tentativo di selezione del token.
C'era anche una logica evidente con i websocket e il controllo dei dispositivi nel file app.js. C'era un chiaro suggerimento riguardo al dispositivo a9, che crashava il socket quando inviavo power: true. Ho provato a inviare vari comandi ma senza successo, chissà, forse c'era un dispositivo aggiuntivo per decifrare il codice fiscale.
Poi ho continuato a esaminare gli altri ID accanto a quei dieci, ma ovunque era unknown device. Ho anche provato a cercare informazioni, sono entrato in chsokolow@gmail.com, ho inviato varie informazioni nel modulo della pagina dei prezzi e ho esplorato con lasermasters, ma nulla ha avuto successo. Il giorno dopo, sono stato in chat, ho cercato altre informazioni, poi è emerso un tema steganografico e ho consultato qualcuno di stegosolv per immagini e gif (ma razionalmente capivo che nel 99% dei casi non c'era nulla, poiché sarebbe stato troppo + in contraddizione con la trama principale della quest).
Ma alla fine ho passato diverse ore a esaminare tutte le immagini e le gif. Inoltre, ho chiamato alcune volte con vari numeri di identificazione fiscale, ma è stato vano. Poi ho deciso di lasciar perdere, ma hanno pubblicato un indizio — ed è diventato chiaro che nel prossimo futuro avrebbero trovato il numero di identificazione fiscale, cosa che poi è effettivamente accaduta. Poi, o io o qualcun altro (non è chiaro) abbiamo inviato power: true al dispositivo a9 e il laser ha iniziato a funzionare, anche se potrebbe non esserci collegamento e ha funzionato semplicemente dopo l'INN. In generale, sono entrato nel pannello di amministrazione del laser e sono rimasto piuttosto sorpreso, poiché il server inviava automaticamente il token (e io ero già pronto a fare brute force). È diventato evidente che il token era di prova, poiché la trasmissione + il buon senso + l'ho verificato.
Nel codice c'era la logica per inviare un token di lavoro da qualche parte tramite notifica, ma evidentemente o era un codice errato, o serviva per altre parti del sistema. Ho abbozzato uno script per ottenere l'attuale token di lavoro dal test attuale e mi sono messo a premere F5, cercando di inviarli — avevo problemi a farlo, poiché tutti continuavano a premere il pulsante di invio, cambiando così il token. Poi il sito è andato giù, il contatore è stato azzerato, ma non fa niente — dopo un po' ho inviato il token di lavoro. L'idea era che il contatore fosse 58 e il token fosse 449a776938f7ce4cf19f8603045dca0f al momento dell'attivazione, se non sbaglio. In effetti, è tutto qui.
Poi mi sono un po' infastidito per commenti come «sì, tutto questo è triviale, sì, è solo fortuna». Beh, se si entra nella pagina, si pensa un minuto, si scrive uno script in un paio di minuti, si verifica — allora sì, è triviale. Ma io l'ho fatto in 10-20 secondi e poi semplicemente non sono riuscito a inviare il token per diversi minuti.
Certo, si sarebbe potuto provare a scrivere la logica per l'acquisizione e l'invio automatico, ma ciò richiederebbe più tempo e presenterebbe un grande rischio; inoltre, probabilmente il cloud comincerebbe a lamentarsi. La vera fortuna è stata l'ultimo passaggio: un po' di algoritmi sulla velocità e sulla reattività, proprio il mio forte. Se ci fosse stato un compito direttamente dal pentesting, probabilmente non sarei stato il primo.
Ma questo non è ancora la fine
Non vedo l'ora di parlarvi di tutta la fantastica squadra che ha costruito questa sfida e delle soluzioni ingegneristiche che ha trovato. Ma questo post è già troppo lungo, quindi ci saranno articoli separati su questo, quindi rimanete sintonizzati e iscrivetevi al nostro blog su Habr.
Fonte: habr.com
