Хардуер на проекта: как изградихме стая с хакерски мисия

Хардуер на проекта: как изградихме стая с хакерски мисия
Преди няколко седмици прекарахме онлайн мисия за хакери: построиха стая, която напълниха със смарт устройства и пуснаха YouTube излъчване от нея. Играчите могат да управляват IoT устройства от уебсайта на играта; Целта беше да се намери скрито в стаята оръжие (мощна лазерна показалка), да се хакне и да се предизвика късо съединение в стаята.

За да увеличим действието, поставихме шредер в стаята, в който заредихме 200 000 рубли: шредерът изяждаше една банкнота на час. След като спечелите играта, можете да спрете шредера и да вземете всички останали пари.

Вече казахме разходкаИ как бе направен бекенда проект. Време е да поговорим за хардуера и как е сглобен.


Имаше много заявки да покажем момента на почистване на стая - показваме как я разглобяваме

Хардуерна архитектура: Стаен контрол

Започнахме да проектираме хардуерно решение, когато сценарият вече беше грубо разбран, бекендът беше готов и имахме празна стая, готова за инсталиране на оборудването.

Спомняйки си старата шега „S в IoT означава Security“ („Буквата S в съкращението IoT означава Security“), решихме, че този път играчите в сценария на играта взаимодействат само с предния и задния край на сайта, но не получават възможност да стигнат директно до ютията.

Това беше направено от съображения за безопасност и зрелищност на случващото се на екрана: с директен достъп до хардуера от страна на играчите би било много по-трудно да се изолират безопасни и потенциално опасни действия, например бързо превъртане на шредер или контролиране пиротехника.

Преди да започнем дизайна, формулирахме няколко принципа за управление на игрални устройства, които станаха основа на дизайна:

Не използвайте безжични решения

Цялото пространство за игра е в една рамка, всеки ъгъл на която може да бъде достигнат. Нямаше реална нужда от безжични връзки и те просто щяха да се превърнат в още една точка на провал.

Не използвайте никакви специални интелигентни домашни устройства

Основно в името на гъвкавостта при персонализиране. Ясно е, че можем да персонализираме много кутийни версии на интелигентни домашни системи с готови административни и контролни елементи за нашата задача, но разходите за труд биха били сравними със създаването на ваше собствено просто решение.

Освен това беше необходимо да се измислят устройства, които ясно да показват, че играчите са променили състоянието му: те го включват / изключват или поставят специфична светлина върху буквите FALCON.

Събрахме всички елементи от публично достъпен хардуер, който може да се купи в обикновените магазини за радиочасти: между доставката на пица и диетична кола, куриерите Chip и Dip и Leroy постоянно идваха на сайта.

Изборът да сглобим всичко сами опрости отстраняването на грешки, мащабируемостта обаче изискваше по-голямо внимание по време на инсталирането.

Всички релета и арудин не трябва да се виждат в рамката

Решихме да съберем всички контролируеми елементи на едно място и да ги скрием зад кулисите, за да можем да наблюдаваме работата им и, ако е необходимо, внимателно да изпълзим извън обхвата на видимост на камерата и да заменим повреденото устройство.

Хардуер на проекта: как изградихме стая с хакерски мисия
В крайна сметка всичко беше скрито под масата, а камерата беше монтирана така, че нищо не се виждаше под масата. Това беше нашата „сляпа точка“, за да може инженерът да се промъкне

В резултат всъщност получихме едно умно устройство: то получи състоянието на всяка своя част от бекенда и го промени със съответната команда.

От гледна точка на хардуерното внедряване, това устройство контролира 6 елемента:

  1. Няколко настолни лампи, имат включено/изключено състояние и се управляват от играчи
  2. Букви на стената, те могат да променят цвета си по команда на играчите
  3. Вентилатори, които се въртят и отварят флипчарта, когато сървърът е под натоварване
  4. Лазерно управление чрез ШИМ
  5. Шредер, който изяде пари по график
  6. Димна машина, която се включваше преди всеки лазерен изстрел


Тестване на димна машина с лазер

По-късно беше добавена сценична светлина, която стоеше зад рамката и се управляваше точно като лампите от точка 1. Сценичната светлина работеше в два случая: осветяваше лазера, когато към него беше подадено захранване, и осветяваше тежестта преди лазерът е пуснат в боен режим.

Какво беше това умно устройство?

Хардуер на проекта: как изградихме стая с хакерски мисия

През целия път Юра, нашият хардуер, се опитваше да не усложнява нещата и да измисли възможно най-простото, минималистично решение.

Предполагаше се, че VPS просто ще стартира скрипт, който получава json със състоянието на устройствата и го изпраща към Arduino, свързан чрез USB.

Свързан към портовете:

  • 16 обикновени релета (те са тези, които издават щракащия шум, който се чу във видеото. Избрахме ги главно заради този звук)
  • 4 полупроводникови релета за управление на PWM канали, като вентилатори,
  • отделен PWM изход за лазер
  • изход, който генерира сигнал към LED лентата

Ето пример за json команда, която дойде на релето от сървъра

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

И това е пример за функция, с която командата стигна до Арудино

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

За да проследим момента, в който лазерът най-накрая прогаря въжето и тежестта лети върху аквариума, направихме малък бутон, който се задейства при падане на тежестта и дава сигнал на системата.

Хардуер на проекта: как изградихме стая с хакерски мисия
Бутон за следене движението на тежестта

При този сигнал трябваше да светнат димни бомби, направени от топки за пинг-понг. Поставихме 4 димни факли директно в кутията на сървъра и ги свързахме с нихромова нишка, която трябваше да се нагрява и да работи като запалка.

Хардуер на проекта: как изградихме стая с хакерски мисия
Корпус с димни бомби и китайски гирлянд

Хардуер на проекта: как изградихме стая с хакерски мисия

Ардуино

Според първоначалния план на Arduino са се състояли две действия.

Първо, когато беше получена нова заявка, тя беше анализирана с помощта на библиотеката ArduinoJson. След това всяко управлявано устройство беше сравнено с неговите две свойства:

  • състояние на захранване "включено" или "изключено" (стандартно състояние)
  • периодът, за който устройството е включено - времето в микросекунди от началото на платката, когато е време да го изключите, тоест да доведете състоянието до стандарт

Последният път беше зададено при получаване на съответния параметър в JSON, но не можа да бъде предаден, тогава стойността беше зададена на 0 и не се появи нулиране.

Второто действие, което Arduino изпълняваше всеки цикъл, беше актуализиране на състоянията, тоест проверка дали има нужда да се включи нещо или дали е време да се изключи някое устройство.

Лазерна показалка - същият Megatron 3000

Хардуер на проекта: как изградихме стая с хакерски мисия

Това е обикновен LSMVR450-3000MF 3000mW 450nm модул за лазерно рязане и маркиране с ръчен фокус.

Писма Сокол

Те бяха направени много просто - просто копирахме буквите от логото, изрязахме ги от картон и след това ги покрихме с LED лента. В този случай трябваше да запоя парчетата лента заедно, по 4 контакта на всеки шев, но резултатът си заслужаваше. Нашият бекендър Паша показа чудеса от майсторство, като го направи за по-малко от няколко часа.

Първи тестове на iot устройството и довършване

Направихме първите тестове и в същото време пристигнаха нови задачи. Факт е, че в средата на процеса към екипа се присъедини истински филмов продуцент и оператор от ВГИК Иля Серов - той изгради рамката, добави допълнително кино осветление и леко промени сценария на играта, за да направи сюжета по-емоционален, и картината по-драматична и театрална.

Това значително повиши качеството, но се появиха елементи, които също трябва да бъдат свързани към релето и предписан алгоритъм на работа.

Друг проблем беше лазерът: направихме няколко експеримента с различни видове въжета и лазери с различна мощност. За теста просто окачихме тежест вертикално на въже.

При работа с тестов жетон мощността, регулирана чрез ШИМ, беше под 10% и не повреди въжето дори при продължителна експозиция.

За боен режим лазерът беше дефокусиран приблизително до петно ​​с диаметър 10 mm и уверено прогоря през въже с товар от разстояние около метър.

Хардуер на проекта: как изградихме стая с хакерски мисия
Така че лазерът работи перфектно при тестове

Когато започнахме да тестваме всичко в стаята върху окачена тежест, се оказа, че здравото закрепване на лазера не е толкова лесно. След това, когато въжето изгори, то се стопява, разтяга и излиза от първоначалния си фокус.

Хардуер на проекта: как изградихме стая с хакерски мисия
Но вече не работеше така: въжето се измести

Иля премести лазера в края на стаята срещу въжето, така че лазерният лъч да премине през цялата сцена и да изглежда красиво в рамката, което удвои разстоянието.

След като проведохме още няколко експеримента с изгаряне на въжето вече в битка, решихме да не измъчваме съдбата и да осигурим срязването на въжето с помощта на нихромова тел. Той унищожи нишката 120 секунди след включване на лазера в боен режим. Решихме да кодираме това, както и изключването на проводника и запалването на димни бомби, когато се задейства разделителният контакт, директно в хардуера на микроконтролера.

Хардуер на проекта: как изградихме стая с хакерски мисия
Нишката, която в крайна сметка прогори през въжето извън екрана

Така се появи трета задача, която Arduino реши - да изработи последователностите, свързани с изпълнението на тези команди.

Решихме също да дадем на Arduino необходимостта да брои пари на телевизора и да стартира шредера. Първоначално се предполагаше, че бекендът ще прави това и текущото салдо ще се вижда на уебсайта, а на телевизора ще показваме коментари от YouTube като допълнителен интерактивен елемент, казвайки на зрителите, че събитията в стаята се случват реално време.

Но по време на теста Иля погледна сцената и предложи да се покаже балансът на играта на най-големия екран: колко пари са останали, колко са изядени и обратното броене до следващото стартиране на шредера.

Свързахме Arduino с текущото време: на всеки пълен час шредерът се стартираше. Картината се показваше на телевизора с помощта на rasberry, който в този момент вече получаваше заявки от сървъра и ги изпращаше на arduino за изпълнение. Картини с парични индикатори бяха нарисувани чрез извикване на конзолната помощна програма fim нещо подобно

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

И се формира въз основа на необходимото количество или време.

Ние генерирахме снимките предварително: просто направихме готово видео с таймер и експортирахме 200 снимки.

Това е механиката, която е била програмирана в кръста. Докато започна последното броене, всички отидохме на мястото, въоръжихме се с пожарогасители и седнахме да изчакаме пожара (който беше в разгара си само в раздора)

Как да направите излъчване, което работи за една седмица: избор на камера

За мисията се нуждаехме от непрекъснато излъчване в YouTube в продължение на 7 дни - точно това зададохме като максимална продължителност на играта. Имаше две неща, които можеха да ни спрат:

  1. Прегряване на камерата поради продължителна работа
  2. прекъсване на интернет

Камерата трябваше да осигурява поне Full HD картина, за да направи играта и гледането в стаята удобна.

Първоначално погледнахме към уеб камери, които се произвеждат за стриймъри. Съкращавахме бюджета си, така че не искахме да купуваме камера, но, както се оказа, те не ги наемат. В същия момент като по чудо намерихме камера Xbox Kinect, която лежеше в къщата ми, инсталирахме я в стаята ми и започнахме тестово излъчване за една седмица.

Камерата работи добре и не прегрява, но Иля почти веднага забеляза, че липсват настройки, по-специално беше невъзможно да се настрои експозицията.

Иля се стреми да доближи вида на излъчването до стандартите на филмовата и видео продукцията: да предаде динамично променяща се светлинна сцена с ярки източници на светлина, затъмнен фон и обекти в рамката. В същото време исках да запазя изработването на изображението както в светлините, така и в сенките, с минимален цифров шум.

Ето защо, въпреки че Kinect се оказа надежден в тестовете и не изискваше карта за заснемане на видео (още един проблем), ние решихме да го изоставим. След три дни тестване на различни камери, Иля избра Sony FDR-AX53 - малка, надеждна видеокамера, която е евтина за наемане, но в същото време има достатъчна надеждност и визуални характеристики.

Наехме камера, включихме я за една седмица заедно с карта за заснемане на видео и разбрахме, че с нея можем да разчитаме на непрекъснато излъчване през целия мисия.

Създаване на филм: постановка на сцена и осветление

Работата по осветлението изискваше известна изящност; трябваше да изградим резултат за осветление с минимални средства:

1. Осветяване на обекти, когато играчите ги намерят (лазер, тежест), както и постоянна светлина на шредера. Тук използвахме dedolight 150 - надеждни и компактни филмови осветителни устройства с халогенни лампи с ниско напрежение, които ви позволяват да фокусирате лъча върху конкретен обект, без да засягате фона и други обекти.

2. Практична светлина за игра - настолна лампа, подова лампа, звезда, гирлянд. Цялата практична светлина беше хармонично разпределена в рамката, за да осветява зоната на изображението, вътре имаше LED лампи с цветна температура 3200K, лампата в подовата лампа беше покрита с червен филтър от фолио Rosco, за да създаде необичаен цветен акцент.

Хардуер на проекта: как изградихме стая с хакерски мисия
Аз съм инженер при майка ми или стартът е утре

Как запазихме интернет и ток

Те подходиха към въпроса за устойчивостта на грешки почти като в център за данни: решиха да не се отклоняват от основните принципи и резервираха според обичайната схема N+1.

Ако излъчването в YouTube спре, това означава, че ще бъде невъзможно да се свържете отново със същата връзка и да продължите потока. Беше критичен момент, а стаята се намираше в обикновен офис.

За целта използвахме базиран на OpenWRT рутер и пакета mwan3. Той автоматично тества наличността на канала на всеки 5 секунди и в случай на прекъсване превключва към резервния модем с Yota. В резултат на това превключването към резервния канал стана за по-малко от минута.
Хардуер на проекта: как изградихме стая с хакерски мисия
Освен това беше също толкова важно да се премахнат прекъсванията на електрозахранването, защото дори краткотраен скок на захранването би довел до рестартиране на всички компютри.

Затова взехме непрекъсваемо захранване ippon innova g2 3000, което да поддържа всички игрови устройства: общата консумация на енергия на нашата система беше около 300 вата. Ще продължи 75 минути, напълно достатъчно за нашите цели.

Решихме да жертваме допълнително осветление в случай, че токът в помещението спре - не беше свързано към непрекъсваемо захранване.

Признания

  • На целия екип РУВДС, който измисли и внедри играта.
  • Отделно на администраторите на RUVDS, за следене на работата на сървърите, натоварването беше приемливо и всичко работеше както обикновено.
  • На най-добрия шеф нцаплин за факта, че в отговор на обаждането: „Имам идея: ще вземем сървър, ще поставим аквариум върху него и ще окачим тежест над него, бум, трясък, всичко е залято с вода, късо съединение, пожар !“ той винаги уверено казва "направи го!"
  • Благодаря Издателство Тилда и отделно на Михаил Карпов за това, че не само се събра и ни позволи да нарушим Условията за ползване, но дори ни даде бизнес акаунт за една година, когато говорихме за проекта.
  • Иля Серов S_ILya за това, че се присъедини и стана копродуцент на проекта, готов да пълзи половин нощ, да лепи LED лента, да търси технически решения и да прави всичко, за да получим истински филм.
  • жовнер за това, че винаги сте готови да спасите ситуацията, когато другите вдигнат ръце, борш, морална подкрепа и разговори до сутринта.
  • самат за това, че ни свърза с най-добрия пентестър в страната, който ни съветваше и ни помагаше със задачи.
  • daniemilk за страхотната видео продукция на всички видеоклипове.
  • делфе за твърда ръка и желание за работа до последно.
  • Добре Dodo Pizza Engineering за почти винаги топла пица.

И най-голямата благодарност отива на играчите за всички емоции, които изпитахме, докато щурмувахте търсенето два дни без сън и дори отлагане на работа.

Други статии за мисията за унищожаване на сървъра

Хардуер на проекта: как изградихме стая с хакерски мисия

Източник: www.habr.com

Добавяне на нов коментар