Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Kilka tygodni temu spędziliśmy misja online dla hakerów: zbudowali pokój, który wypełnili inteligentnymi urządzeniami i uruchomili z niego transmisję na YouTube. Gracze mogli sterować urządzeniami IoT ze strony internetowej gry; Celem było odnalezienie ukrytej w pomieszczeniu broni (potężny wskaźnik laserowy), zhakowanie jej i spowodowanie zwarcia w pomieszczeniu.

Dla urozmaicenia akcji umieściliśmy w pomieszczeniu niszczarkę, do której załadowaliśmy 200 000 rubli: niszczarka zjadała jeden banknot na godzinę. Po wygranej grze możesz zatrzymać niszczarkę i zabrać wszystkie pozostałe pieniądze.

Już powiedzieliśmy solucjaa także jak powstał backend projekt. Czas porozmawiać o sprzęcie i sposobie jego montażu.


Było wiele próśb o pokazanie momentu sprzątania pokoju - pokazujemy jak go rozbieramy

Architektura sprzętu: Sterowanie pomieszczeniem

Projektowanie rozwiązania sprzętowego rozpoczęliśmy, gdy scenariusz był już z grubsza zrozumiały, backend był gotowy i mieliśmy wolne pomieszczenie gotowe do zainstalowania sprzętu.

Pamiętając stary dowcip „S w IoT oznacza Bezpieczeństwo” („Litera S w skrócie IoT oznacza Bezpieczeństwo”), zdecydowaliśmy, że tym razem gracze w scenariuszu gry wchodzą w interakcję wyłącznie z front-endem i back-endem strony, ale nie masz możliwości dotarcia bezpośrednio do żelazka.

Zrobiono to ze względu na bezpieczeństwo i widowiskowość tego, co dzieje się na ekranie: przy bezpośrednim dostępie graczy do sprzętu znacznie trudniej byłoby wyodrębnić bezpieczne i potencjalnie niebezpieczne działania, np. szybkie przewijanie niszczarki czy kontrolowanie pirotechnika.

Przed przystąpieniem do projektowania sformułowaliśmy kilka zasad sterowania urządzeniami do gier, które stały się podstawą projektu:

Nie korzystaj z rozwiązań bezprzewodowych

Cała przestrzeń gry ujęta jest w jedną ramę, której każdy zakątek jest dostępny. Połączenia bezprzewodowe nie były tak naprawdę potrzebne i stałyby się po prostu kolejnym punktem awarii.

Nie używaj żadnych specjalnych inteligentnych urządzeń domowych

Głównie ze względu na elastyczność dostosowywania. Oczywiste jest, że wiele pudełkowych wersji systemów inteligentnego domu możemy dostosować do naszego zadania z gotowym administratorem i sterowaniem, ale koszty pracy byłyby porównywalne ze stworzeniem własnego prostego rozwiązania.

Poza tym trzeba było wymyślić urządzenia, które wyraźnie pokazywałyby, że to gracze zmienili jego stan: włączali/wyłączali go lub rzucali specyficzne światło na litery FALCON.

Zebraliśmy wszystkie elementy z ogólnodostępnego sprzętu, który można kupić w zwykłych sklepach z częściami do radia: pomiędzy dostawą pizzy a dietetyczną colą, na miejsce stale przyjeżdżali kurierzy Chip and Dip i Leroy.

Decyzja o samodzielnym montażu wszystkiego ułatwiła debugowanie, skalowalność wymagała jednak większej staranności podczas instalacji.

Wszystkie przekaźniki i arudin nie powinny być widoczne w ramce

Postanowiliśmy zebrać wszystkie sterowane elementy w jednym miejscu i ukryć je za kulisami, aby móc monitorować ich działanie i w razie potrzeby ostrożnie przeczołgać się poza pole widzenia kamery i wymienić niesprawną jednostkę.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Ostatecznie wszystko schowano pod stołem, a kamerę zamontowano tak, żeby pod stołem nic nie było widać. To był nasz „martwy punkt”, w którym inżynier mógł się skradać

W efekcie otrzymaliśmy właściwie jedno inteligentne urządzenie: odbierało ono stan każdej ze swoich części z backendu i zmieniało je za pomocą odpowiedniego polecenia.

Z punktu widzenia implementacji sprzętowej urządzenie to kontrolowało 6 elementów:

  1. Kilka lamp stołowych, mają stan włączenia/wyłączenia i są sterowane przez graczy
  2. Litery na ścianie mogą zmieniać kolor na polecenie graczy
  3. Wentylatory obracające i otwierające flipchart, gdy serwer jest obciążony
  4. Sterowanie laserem poprzez PWM
  5. Shredder, który jadł pieniądze zgodnie z harmonogramem
  6. Maszyna do dymu, która wybuchała przed każdym strzałem lasera


Testowanie wytwornicy dymu za pomocą lasera

Później dodano światło sceniczne, które znajdowało się za ramą i było sterowane dokładnie tak samo, jak lampy z punktu 1. Światło sceniczne działało w dwóch przypadkach: oświetlało laser po włączeniu zasilania oraz oświetlało ciężar przed Laser został uruchomiony w trybie bojowym.

Co to było za inteligentne urządzenie?

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera

Przez cały czas Yura, nasz specjalista od sprzętu, starał się nie komplikować rzeczy i zaproponować możliwie najprostsze, minimalistyczne rozwiązanie.

Założono, że VPS po prostu uruchomi skrypt, który odbierze json ze stanem urządzeń i prześle go do Arduino podłączonego przez USB.

Podłączony do portów:

  • 16 zwykłych przekaźników (to one wydawały dźwięk kliknięcia, który było słychać na filmie. Wybraliśmy je głównie ze względu na ten dźwięk)
  • 4 przekaźniki półprzewodnikowe do sterowania kanałami PWM, np. wentylatorami,
  • oddzielne wyjście PWM dla lasera
  • wyjście generujące sygnał do paska LED

Oto przykład polecenia json, które przyszło do przekaźnika z serwera

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

A to przykład funkcji, za pomocą której polecenie trafiło do Arudino

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

Aby śledzić moment, w którym laser w końcu przepala linę i ciężarek leci na akwarium, wykonaliśmy mały przycisk, który uruchamiał się w momencie opadnięcia ciężarka i dawał sygnał do systemu.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Przycisk monitorowania ruchu ciężarka

Na ten sygnał miały zapalić się bomby dymne wykonane z piłek pingpongowych. Bezpośrednio do obudowy serwera włożyliśmy 4 flary dymne i połączyliśmy je nitką nichromową, która miała się nagrzewać i działać jak zapalarka.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Obudowa z bombami dymnymi i chińską girlandą

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera

Arduino

Według pierwotnego planu na Arduino miały miejsce dwie akcje.

Po pierwsze, gdy otrzymano nowe żądanie, żądanie zostało przeanalizowane przy użyciu biblioteki ArduinoJson. Następnie każde zarządzane urządzenie zostało porównane pod kątem jego dwóch właściwości:

  • stan zasilania „włączony” lub „wyłączony” (stan standardowy)
  • okres na jaki urządzenie jest włączone - czas w mikrosekundach od startu płytki, kiedy należy je wyłączyć, czyli doprowadzić stan do normy

Ostatnim razem, gdy został ustawiony podczas odbierania odpowiedniego parametru w JSON, ale nie można było go przesłać, wówczas wartość została ustawiona na 0 i nie nastąpił reset.

Drugą czynnością, którą Arduino wykonywał w każdym cyklu, była aktualizacja stanów, czyli sprawdzenie, czy nie było potrzeby czegoś włączyć lub czy nie nadszedł czas, aby wyłączyć jakieś urządzenie.

Wskaźnik laserowy - ten sam Megatron 3000

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera

Jest to zwykły moduł do cięcia i znakowania laserowego LSMVR450-3000MF 3000 mW 450 nm z ręcznym ustawianiem ostrości.

Litery Sokół

Wykonano je bardzo prosto – po prostu skopiowaliśmy litery z logo, wycięliśmy je z tektury, a następnie okleiliśmy taśmą LED. W tym przypadku musiałem zlutować kawałki taśmy, po 4 styki na każdym szwie, ale wynik był tego wart. Nasz backender Pasha pokazał cuda umiejętności, robiąc to w mniej niż kilka godzin.

Pierwsze testy urządzenia iot i wykończenie

Zrobiliśmy pierwsze testy, a jednocześnie przybyły do ​​nas nowe zadania. Faktem jest, że w połowie procesu do zespołu dołączył prawdziwy producent filmowy i operator z VGIK, Ilya Serov - zbudował kadr, dodał dodatkowe oświetlenie kinowe i nieznacznie zmienił scenariusz gry, aby fabuła była bardziej emocjonalna i obraz bardziej dramatyczny i teatralny.

To znacznie podniosło jakość, ale pojawiły się elementy, które również wymagały podłączenia do przekaźnika i przepisanego algorytmu działania.

Kolejnym problemem był laser: przeprowadziliśmy kilka eksperymentów z różnymi rodzajami lin i laserami o różnej mocy. Na potrzeby testu po prostu zawiesiliśmy ciężarek pionowo na linie.

Podczas jazdy z tokenem testowym moc regulowana przez PWM była mniejsza niż 10% i nawet przy długim naświetleniu nie uszkodziła liny.

W trybie bojowym laser został rozogniskowany w przybliżeniu na plamkę o średnicy 10 mm i pewnie przepalił linę z ładunkiem z odległości około metra.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Zatem laser w testach spisał się znakomicie

Kiedy zaczęliśmy testować wszystko w pomieszczeniu na zawieszonym ciężarze, okazało się, że pewne zabezpieczenie lasera nie jest takie proste. Następnie, gdy lina się pali, topi się, rozciąga i traci swoje pierwotne skupienie.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Ale to już nie działało w ten sposób: lina się przesunęła

Ilya przesunął laser na koniec sali naprzeciw liny, tak aby wiązka lasera przeszła przez całą scenę i pięknie wyglądała w kadrze, co podwoiło odległość.

Po przeprowadzeniu jeszcze kilku eksperymentów ze spalaniem liny już w bitwie, postanowiliśmy nie torturować losu i zabezpieczyć przecięcie liny drutem nichromowym. Zniszczył nić 120 sekund po włączeniu lasera w trybie bojowym. Postanowiliśmy zakodować to na stałe, a także odłączenie przewodu i zapłon bomb dymnych po uruchomieniu styku separującego, bezpośrednio w sprzęcie mikrokontrolera.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Nić, która ostatecznie przepaliła linę poza ekranem

Tym samym pojawiło się trzecie zadanie, które Arduino rozwiązało – wypracowanie sekwencji związanych z wykonaniem tych poleceń.

Postanowiliśmy także dać Arduino możliwość liczenia pieniędzy na telewizorze i uruchomienia niszczarki. Początkowo zakładano, że zrobi to backend i aktualny stan będzie widoczny na stronie internetowej, a w telewizji pokażemy komentarze z YouTube jako dodatkowy element interaktywny, informujący widza, że ​​wydarzenia w pokoju dzieją się w rzeczywistości czas.

Ale podczas testu Ilya spojrzał na scenę i zasugerował pokazanie salda gry na największym ekranie: ile jeszcze pieniędzy zostało, ile zostało zjedzone i odliczanie do następnego uruchomienia niszczarki.

Powiązaliśmy Arduino z aktualnym czasem: co pełną godzinę uruchamiana była niszczarka. Obraz był wyświetlany na telewizorze za pomocą rasberry, który w tym momencie otrzymywał już żądania z serwera i wysyłał je do arduino w celu wykonania. Zdjęcia ze wskaźnikami pieniężnymi zostały narysowane, wywołując narzędzie konsoli fim w podobny sposób

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

I został utworzony na podstawie wymaganej ilości lub czasu.

Zdjęcia wygenerowaliśmy z wyprzedzeniem: po prostu nakręciliśmy gotowy film z timerem i wyeksportowaliśmy 200 zdjęć.

To jest mechanika zaprogramowana w krzyżu. Zanim rozpoczęło się końcowe odliczanie, wszyscy udaliśmy się na miejsce, uzbroiliśmy się w gaśnice i usiedliśmy, aby poczekać na ogień (który na discordzie dopiero się rozkręcał).

Jak zrobić transmisję, która będzie działać przez tydzień: wybór kamery

Do wykonania zadania potrzebowaliśmy ciągłej transmisji na YouTube przez 7 dni – dokładnie tyle ustaliliśmy jako maksymalny czas trwania gry. Były dwie rzeczy, które mogły nas powstrzymać:

  1. Przegrzanie aparatu na skutek ciągłej pracy
  2. Awaria Internetu

Kamera musiała zapewniać obraz co najmniej Full HD, aby gra i oglądanie pokoju było komfortowe.

Początkowo skupialiśmy się na kamerach internetowych przeznaczonych dla streamerów. Obcinaliśmy budżet, więc nie chcieliśmy kupować aparatu, ale jak się okazało, nie wypożyczali go. W tym samym momencie jakimś cudem znaleźliśmy w moim domu kamerę Xbox Kinect, zainstalowaliśmy ją w moim pokoju i rozpoczęliśmy tygodniową transmisję testową.

Aparat działał dobrze i nie przegrzewał się, ale Ilya niemal natychmiast zauważył, że brakuje mu ustawień, w szczególności nie można było ustawić ekspozycji.

Ilya starała się zbliżyć rodzaj transmisji do standardów produkcji filmowej i wideo: przekazać dynamicznie zmieniającą się scenę świetlną z jasnymi źródłami światła, przyciemnionym tłem i obiektami w kadrze. Jednocześnie chciałem zachować szczegółowość obrazu zarówno w światłach, jak i w cieniach, przy minimalnym szumie cyfrowym.

Dlatego też, choć Kinect okazał się niezawodny w testach i nie wymagał karty przechwytującej wideo (kolejny punkt awarii), zdecydowaliśmy się z niego zrezygnować. Po trzech dniach testowania różnych aparatów Ilya wybrała Sony FDR-AX53 - małą, niezawodną kamerę, która jest niedroga w wypożyczeniu, ale jednocześnie ma wystarczającą niezawodność i właściwości wizualne.

Wypożyczyliśmy kamerę, włączyliśmy ją na tydzień w połączeniu z kartą przechwytywania wideo i zdaliśmy sobie sprawę, że dzięki niej możemy liczyć na ciągłą transmisję przez całą wyprawę.

Realizacja filmu: inscenizacja sceny i oświetlenie

Praca nad oświetleniem wymagała pewnego wdzięku, musieliśmy zbudować partyturę świetlną przy minimalnych środkach:

1. Oświetlenie obiektów w momencie ich odnalezienia przez gracza (laser, waga), a także stałe oświetlenie niszczarki. Zastosowaliśmy tutaj dedolight 150 - niezawodne i kompaktowe urządzenia do oświetlania folii z niskonapięciowymi lampami halogenowymi, które pozwalają skupić wiązkę światła na konkretnym obiekcie bez wpływu na tło i inne obiekty.

2. Praktyczna lampka do zabawy - lampa stołowa, lampa podłogowa, gwiazda, girlanda. Całe praktyczne światło zostało harmonijnie rozłożone w ramce, aby doświetlić obszar obrazu, wewnątrz umieszczono lampy LED o temperaturze barwowej 3200K, lampa w lampie podłogowej została pokryta czerwonym filtrem foliowym Rosco, aby stworzyć niezwykły akcent kolorystyczny.

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Jestem inżynierem u mojej mamy albo premiera jest jutro

Jak zarezerwowaliśmy internet i prąd

Do kwestii odporności na awarie podeszli niemal jak w centrum danych: postanowili nie odchodzić od podstawowych zasad i rezerwować według zwyczajowego schematu N+1.

Jeśli transmisja na YouTube zostanie zatrzymana, oznacza to, że nie będzie możliwe ponowne połączenie się przy użyciu tego samego linku i kontynuowanie transmisji. To był krytyczny moment, a pokój znajdował się w zwykłym biurze.

W tym celu użyliśmy routera opartego na OpenWRT i pakietu mwan3. Automatycznie co 5 sekund testował dostępność kanału i w przypadku przerwy przełączał się na modem zapasowy z Yotą. Dzięki temu przełączenie na kanał zapasowy nastąpiło w czasie krótszym niż minuta.
Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera
Równie ważne było także wyeliminowanie przerw w dostawie prądu, gdyż nawet krótkotrwały skok napięcia powodowałby restart wszystkich komputerów.

Dlatego wybraliśmy zasilacz bezprzerwowy ippon innova g2 3000, który będzie wspierał wszystkie urządzenia do gier: całkowity pobór mocy naszego systemu wyniósł około 300 W. Trwałoby to 75 minut, co było dla naszych celów wystarczające.

Zdecydowaliśmy się poświęcić dodatkowe oświetlenie na wypadek, gdyby w pomieszczeniu zabrakło prądu – nie był on podłączony do źródła zasilania awaryjnego.

Podziękowanie

  • Do całego zespołu RUVDS, który wymyślił i wdrożył grę.
  • Oddzielnie dla administratorów RUVDS w celu monitorowania pracy serwerów obciążenie było akceptowalne i wszystko działało jak zwykle.
  • Do najlepszego szefa ntsaplin za to, że w odpowiedzi na wezwanie: „Mam pomysł: weźmiemy serwer, postawimy na nim akwarium i zawiesimy nad nim ciężarek, bum, bum, wszystko zalane wodą, zwarcie, pożar !” zawsze z przekonaniem mówi „zrób to!”
  • Dzięki Wydawnictwo Tylda i osobno Michaiłowi Karpowowi za nie tylko spotkanie w połowie drogi i umożliwienie nam naruszenia Regulaminu, ale nawet udostępnienie nam konta firmowego na rok, kiedy rozmawialiśmy o projekcie.
  • Ilia Serow S_ILya za przyłączenie się i zostanie koproducentem projektu, gotowym przepełzać pół nocy, sklejać taśmy LED, szukać rozwiązań technicznych i robić wszystko, żeby powstał prawdziwy film.
  • Żowner za to, że zawsze jesteście gotowi ratować sytuację, gdy inni rozkładają ręce, barszcz, wsparcie moralne i rozmowy do białego rana.
  • samat za połączenie nas z najlepszym pentesterem w kraju, który nam doradzał i pomagał w zadaniach.
  • daniemilk za fajną produkcję wideo wszystkich filmów.
  • delfa za silną rękę i chęć pracy do ostatniej chwili.
  • No cóż Inżynieria pizzy Dodo na prawie zawsze ciepłą pizzę.

A największą wdzięczność kieruję do graczy za wszystkie emocje, których doświadczyliśmy, gdy przez dwa dni szturmowaliście wyprawę bez snu, a nawet odkładania pracy.

Inne artykuły o dążeniu do zniszczenia serwera

Sprzęt projektowy: jak zbudowaliśmy pokój z zadaniem hakera

Źródło: www.habr.com

Dodaj komentarz