Хабрахабр

Вокруг бейджа за 80 дней: по ту сторону OFFZONE

Привет, Хабр! В прошлый раз мы рассказали, каким вышел бейдж международной конференции по кибербезопасности OFFZONE 2019 и с чем его есть. Сегодня мы поделимся закулисными историями: как пришли к его созданию и чего нам стоило изобрести и произвести серию из 2000 устройств. Хронология событий, подводные камни разработки, закупки, монтажа и прочих радостей из мира электроники под катом. Поехали!

Каждая практическая конференция по кибербезопасности обзаводится интерактивными бейджами. В нашем случае бейдж должен как минимум служить кошельком для внутренней валюты мероприятия — OFFCOIN.

Логичным развитием бейджа-2019 казалась та же карта, только теперь с NFC: тут и преемственность, и эволюция, и море идей для заданий. В прошлом году с этой задачей справилась Java-карта, к которой мы прикрутили немного тасков, игру в танчики и сокобан. А еще для нее есть все наработки — это важно, если в первую смену ты ищешь уязвимости, а во вторую организуешь конференцию.

Фото препарированных плат заполнили рабочие чаты, в коридорах обсуждали типы side-channel, аппаратная тема не захватила разве что наших экономистов. Мы неспешно готовились к производству, когда пришла новость из лаборатории анализа аппаратного обеспечения: коллеги представят на OFFZONE свой обзор атак на встраиваемые системы. И мы поняли, что для OFFZONE 2019 надо запилить собственный девайс.

Вот как выглядела эта эпопея глазами одного из разработчиков. Итак, у нас было 80 дней до начала конференции, цель в 2000 устройств и 2 разработчика электроники.

80 дней

Первое, с чего мы начали, — устроили с коллегами мозговой штурм и нагенерили концепции бейджа. Среди идей были одноплатник с интерпретатором какого-нибудь бейсика на борту, бейдж-визитка с дисплеем E-ink, что-то из мира IoT-девайсов на основе ESP32 или аналогичного модуля и базовая материнская плата, заранее подготовленная к дооснащению дополнительными модулями.

79–65 дней

Ходим, пьем кофе, перевариваем мысли. Взвешиваем за и против. Читаем твитеры и смотрим, что делают другие.

64–60 дней

Провели еще один мозговой штурм.

Выходило слишком дорого из-за обилия компонентов и монтажа: одних кнопок было бы больше 30. Идею с одноплатником откинули. Да и не удивить никого таким устройством — сразу вспоминаются The Supercon Badge и аналогичные поделки.

А ESP32 выглядела как-то несерьезно — еще подумали бы, что мы начинающие ардуинщики! Визитку с дисплеем E-ink тоже отмели: не смогли найти ей интересное применение и решить, как привязать потенциальные таски к бейджу. Осталась идея материнской платы с возможностью доукомплектовать ее модулями для решения тасков. (Хотя к теме Arduino я еще вернусь.).

В итоге выбрали форму дискеты 3,5 дюйма, определились с основной функциональностью и обвесами. Пару-тройку дней шлифовали идею. Управлять этим разношерстным зоопарком назначили микроконтроллер STM32F1, как на популярной плате Blue Pill. В качестве последних взяли DIP Switch на 8 переключателей, OLED-дисплей, ИК-приемник, RFID-приемопередатчик 13,56 МГц и отдельные приемник и передатчик диапазона 433 МГц.

Zone, куда каждый желающий сможет прийти нюхнуть канифоли и собственноручно дооснастить свой бейдж электронными компонентами. В это же время возникла идея сделать на OFFZONE площадку Craft. Во-первых, это интересно и необычно для отраслевой конференции, во-вторых, увлечет даже новичков, а в-третьих, так мы ускорим монтаж финальной партии устройств. Зона пайки — тот еще ход конем! Все стороны в выигрыше!

Дальше начинается самое интересное. В итоге за первые недели мы утвердили концепцию, основную функциональность и компонентную базу будущего устройства.

59–50 дней

Успели сделать схемоту, развести, произвести и вручную замонтировать первую версию платы бейджа. На этом этапе самым мучительным оказался выбор источника питания.

В качестве гаранта этой автономности так и напрашивался литий-полимерный аккумулятор на 0,5 А*ч и соответствующая система контроля заряда на простом контроллере типа TP4096. Очевидно, что бейдж должен быть автономным устройством. Мы пробовали — у нас не получилось. Но пробовали ли вы купить без предварительного заказа пару тысяч аккумуляторов в Москве, да еще и от проверенного производителя? Тут-то мы и вернулись к старым добрым батарейкам. Заказывать из Китая не решились: аккумулятор — слишком ответственный и пожароопасный элемент, а наши гости должны были носить его на шее. Они давали 16–20 часов работы устройства в зависимости от активности использования. Прикинули потребление, провели ряд простых экспериментов и остановились на конфигурации из четырех батареек типоразмера ААА.

В других обстоятельствах мы бы писали ПО при помощи Eclipse (arm-none-eabi-gcc), Keil, IAR и прочих человеческих и не очень IDE. Поломали голову и над написанием прошивки. Неразумно было надеяться, что они на досуге быстренько освоят написание прошивок для встраиваемых систем. Однако наша команда волонтеров-разработчиков по большей части состояла из форензиков и пентестеров.

Я не соврал! Я обещал, что без ардуины не обойдется? Благо есть неплохой проект STM32Duino, который из коробки реализует ардуиновский бутлоадер для нашего целевого камня STM32F1, и Arduino IDE его поддерживает. Для упрощения процесса разработки ПО мы использовали Arduino IDE. Конечно, с библиотеками не все так гладко, но жить можно. В последней есть большая часть необходимых нам библиотек для работы с модулями и прочие радости относительно высокоуровневого программирования. А ведь править библиотечный код — это почти как кавычки вставлять! Для адаптации большинства из них под STM32 достаточно переписать платформозависимые функции — и на этом все.

Интересный факт. Для реализации функциональности бейджа мы использовали следующие библиотеки:

  • Adafruit_SSD1306 для OLED-дисплея,
  • MFRC522 для RFID,
  • RCSwitch для радио 433 МГц,
  • irmp-master для ИК-передатчика.

И вот готова первая версия платы. Она вышла зеленой, без необходимых фрезерованных отверстий и практически не работала.

Интересный факт. Прототипы платы заказывались на «Резоните» по специальной программе «Нам очень нужно это вчера», компоненты закупались в розничных магазинах Москвы, а монтаж провели своими силами.

Большинства проблем первой версии можно было бы избежать, собери мы предварительно основную часть схемы на макетной плате. Мы бы наверняка заметили, что приемник и передатчик требуют разных номиналов входного напряжения питания: 5 В для приемника и 3–12 В для передатчика (в пробной версии оба модуля питались от 3 В). Не прошли бы мимо и спящего USB. Внимательное чтение схем плат типа Blue Pill помогло понять, что USB не будет работать, пока линию USB_P не подтянуть резистором номинала 1,5–10 кОм к питанию 5 В.

Вот так поворот!
Интересный факт. Пытаясь реанимировать USB и тыкая осциллографом в плату, я с удивлением обнаружил: хотя величина напряжения питания на ней составляет 5 В, сами линии данных D+ и D- подтягиваются к 3,3 В.

Из-за сжатых сроков нам пришлось пойти на компромиссы и работать по принципу не «семь раз отмерь», а «делай-тестируй-исправляй». Но он подходит только для стрессоустойчивых энтузиастов — повторять дома не рекомендуем.

Совет. Не пренебрегайте макетированием и внимательно читайте даташиты!

49–40 дней

Пофиксили проблемы и произвели партию бейджей v2.0. Она все еще зеленая, но уже почти работает. Вот что значит рука набита!

Это была неудачная попытка поместить на бейдж ссылку на сайт с информацией о конференции и инструкцией по эксплуатации. Если вы присмотритесь к фото бейджа, то увидите два кривых штрихкода на лицевой стороне (да-да, мы знаем о существовании QR-кодов, но решили, что хотим теплый ламповый штрихкод). В уменьшенном варианте он не считывался приложением на мобильном, а в текущем размере выглядел слишком монструозным. В финальную версию штрихкод не попал: мы не смогли решить, как его расположить, чтобы он лаконично смотрелся на плате.

Желающие могут попытаться его считать. Интересный факт. Правый штрихкод на фото рабочий и содержит пасхалочку.

Во второй версии бейджа мы исправили USB, скорректировали подключение модулей, правильно создали зоны для фрезеровки. Также убрали лишние компоненты и большую часть отладочных перемычек — но не все.

Мы не могли заранее сказать, какая из версий этого дисплея приедет к нам, и пришлось предусмотреть оба варианта.
Интересный факт. Пришлось оставить перемычки 0 Ом для дисплея, так как у I2C OLED-дисплеев с диагональю 0,96 дюйма есть две распиновки, различающиеся расположением контактов питания и земли.

Обратите внимание на расположение контактов питания и земли

Для бейджа требовались только популярные STM32F1, WS2812B и прочий ширпотреб — их дефицита мы не ожидали и потому не спешили. На этом же этапе приступили к закупке основной части компонентов. Купить 10 контроллеров в наличии в Москве — легко, 100 — тоже не вопрос. Но оказалось, все решает масштаб. Нам не удалось найти в столице ни одного продавца, который за вменяемый срок и адекватные деньги поставил бы 2000 МК STM32F1. А вот с 1000 и более начинаются сложности. Пришлось заказывать из Екатеринбурга!

Последние летели к нам с европейского склада и задержались на таможне, чем здорово потрепали наши нервы. Те же трудности возникли и с закупкой 8000 светодиодов WS2812B.

Вот их на складах Москвы было навалом. Единственное, что досталось малой кровью, — это пассивные SMD-компоненты вроде резисторов и конденсаторов типоразмера 0603.

Они приехали из Китая — ближе нужного количества не нашлось.
Интересный факт. Дополнительных модулей заказали по 200 штук каждого вида.

Забегая вперед, скажу, что все компоненты удалось получить за 3-4 недели. Но это везение, мы так больше рисковать не станем.

При таких сериях отведите на закупку месяц и более, особенно если речь о микросхемах.
Совет. Если вам предстоит закупить компоненты на 100, 500 или более устройств, не откладывайте задачу в долгий ящик.

39–30 дней

Партия v3.0. Бейдж уже черный и полностью функционирует! Есть только ма-а-а-аленький нюанс. Каким-то образом с первой версии бейджа дошла ошибка в расположении контактов питания и данных на передатчике 433 МГц.

У него на макетке-ардуино передача уверенно работала метров на 30, а вот на бейдже — хорошо если на полметра от платы. Из-за этой ошибки чуть не поседел наш коллега, который писал таск на радио. Федор, прости нас! Несколько дней, пока не нашли баг в разводке, коллега мучился и не понимал, что происходит. Хотя загадка, почему устройство с перепутанными пинами вообще работало?!

1 на 2000 штук. Итак, баг нашли, пофиксили две дорожки на плате, для удобства поменяли miniUSB-разъем на microUSB, перекрестились, заказали финалочку v3.

29–15 дней

Ходим, волнуемся за поставки компонентов с разных концов света. Попутно ребята допиливают свои таски.

Интересный факт. Во время разработки игры Flappy Quote один из коллег успел напитонячить бота для прохождения примерно за полчаса.

14 дней

Платы пришли, компоненты пришли, отдаем в монтаж! Мы работали с «M-платой», которая замонтировала все 2000 девайсов за неделю.

Учтите это при разработке PCB. Совет. Если у вас 100 и более устройств, забудьте про ручной монтаж и готовьтесь к автоматическому на сборочной линии. Общие рекомендации есть и на сайте «Резонита».)
(Посоветуйтесь с выбранным производителем — они многое могут подсказать.

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

10 дней

Забираем пробные 12 плат с монтажа, проверяем, выдыхаем: все работает как надо.

9–5 дней

Активно допиливаем таски, попутно готовимся к финальному превозмоганию здравого смысла. Ведь все 2000 устройств нам придется прошивать вручную. Для упрощения боевой задачи написали питонячий скрипт с использованием консольной версии утилиты STM32 ST-LINK Utility и подготовили два десятка дешевых ST-Link v2.

ZONE. Совет. Платы можно было прошить на завершающем этапе сборки на заводе и без героических усилий личного состава BI. Мы не воспользовались этой возможностью только потому, что к концу сборки не была готова финальная версия софта.

96 часов до конференции

Забираем платы с монтажа, отключаем мобильники, запираемся в офисе и заливаем все 2000 устройств за вечер.

Процент брака на выходе c монтажа — 0,1.
Интересный факт. Из 2000 устройств признаков жизни не подало лишь 2.

Каким будет бейдж в следующем году? На наших лицах радость, но мысли уже далеко. Вернемся к концепции пластиковых карт или вдохновимся Олимпиадой в Токио и запилим бумажный бейдж-оригами? Докрутим ли идею с E-ink или придумаем что-то совершенно новое? Если у вас есть свежие идеи, го в комменты: возможно, что-то из предложенного через год повесят себе на шеи специалисты по кибербезопасности разных стран мира!

Вместо заключения

OFFZONE 2019 прошел месяц назад, но нам до сих пор задают вопросы «можно ли как-то получить бейдж-плату». Да, можно! 100 бейджей достанутся тем, кто первым успеет написать на почту info@offzone.moscow. Отправляем по России и СНГ. Мероприятие продлится две недели с момента выхода статьи и закроется ровно 2 августа в 13:37 по Москве.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть