NoNameBadge: Як ми творили бейдж для конференції

NoNameBadge: Як ми творили бейдж для конференції

30 May 2019
Embedded, AppSec, BadgeLife

“Ми домовилися і TechMaker буде робити бейдж для нашої конференції” — такими словами Володя розповів на черговій зустрічі оргкомітету NoNameCon про події, які ми опишемо далі.


Бюджет українських конференцій із кібербезпеки не дозволяв виділити на розробку хардварного бейджу кошти співмірні із іноземними конференціями. Для порівняння, розробка та виробництво 500 бейджів для однієї європейської конференції у 2018 році коштували $13000.

Ми мали бюджет в 4 рази менший.

Усі наші кошти спрямували на виробництво та компоненти. Створити пристрій, що міститиме лише дешевий мікроконтролер без будь-яких інтерфейсів взаємодії з іншими пристроями — не наш варіант. Він повинен стати квитком не лише на конференцію, а у світ IoT та вразливостей таких пристроїв, бути доречним як на конференції, так і корисним після її завершення. Тепер ми вже спокійні і радіємо, що зважилися на такий крок та обрали платформу з WiFi та Bluetooth ледь умістившись у бюджет.

Форма бейджу була знайдена майже одразу — медаль з логотипом конференції. Намальований в кафе на серветці макет бейджа був відправлений на узгодження.

Перші ескізи та пропозиції щодо форми та функціоналу
Перші ескізи та пропозиції щодо форми та функціоналу

8 листопада 2018 року — ескіз надіслано та затверджено.

З цього моменту робота була розділена на два потоки:

  • створення прошивки і завдань для CTF;
  • розробка плати, що включає роботу з постачальниками компонентів та виробничими цехами в Китаї.

#define HARDWARE #

Перші прототипи плати — червоні бейджі — були розроблені та замовлені одразу після новорічних свят. Замовили десяток плат з монтажем у SeeedStudio. На ці плати запаяли девборди з ESP32. Така комбінація дозволила нам знизити ризики проектування та відлагодження домену живлення мікроконтролера за рахунок необхідності ручного монтажу двох плат.

28 лютого ми тримали в руках перші червоні бейджі
28 лютого ми тримали в руках перші червоні бейджі

Перша версія містила декілька недоліків, а саме:

  1. ми задіяли 12й пін для I2C. Цей пін під час бутстрапу мікроконтроллера вказує на напругу живлення внутрішньої flash пам’яті (pin12 high — 1.8V, pin12 low — 3.3V) і тому він не запускався. Пофіксили у наступній версії, а для червоненьких просто задіяли сусідній 14й пін.
  2. відсутня ємнісна кнопка. Просто сама ідея з’явилася пізніше, а для червоного просто задіяли один з роз’ємів під ADC у якості ємнісної кнопки.
  3. зробили вирізи у шарах міді під антеною ESP32. Незважаючи на наявність металізації, червоненький працює справно, але “пацани нє паймут”, тому допрацювали.

Наступна партія в 10 плат без монтажу була замовлена у PCBWay. Трохи змінили розташування елементів та доріжок, забрали металізацію, додали QR код. Результат — без недоліків)

В них замовляли і production batch. Виявилося на $600 дешевше, ніж у SeeedStudio. Шукали також варіанти в межах України, але ціна та якість все ж виявилися кращими в Піднебесній. Для контролю якості виконання замовлення китайці запросили паттерн сигналу, яким вони б змогли перевірити працездатність плати.

18 квітня ми отримали фотографії з виробництва, все за планом
18 квітня ми отримали фотографії з виробництва, все за планом

На жаль, інженер на виробництві так і не зміг відтворити тестовий сигнал і ми просто втратили 3 тижні в очікуванні. В якості компенсації нам надали додаткові плати та компоненти. Тим не менш, як виявилося пізніше, брак у їхніх платах був відсутній, усі 400 штук запрацювали без нарікань.

Бейджі прийшли двома посилками. За однією з них довелося поїхати на митницю, на що також сумарно втратили декілька днів.

Волонтери та плати прибули до нашого офісу в середу, 8-го травня. Ми організували наступну послідовність конвеєра та контролю якості:

  1. У плату з ESP32 заливається factory прошивка (було відбраковано близько 20 плат)
  2. ESP32 потрапляє на монтаж ніжок
  3. ESP32 з ніжками монтується у спеціальний стенд з плат бейджів для тестування функціоналу роботи ємнісної кнопки та світлодіодів. (відбраковано 2–3 плати)
  4. Ніжки вкорочуються до потрібної довжини, ESP32 надходять на фінальний монтаж на плату бейджа.
  5. Пайка ESP32 до плати бейджа.
  6. Готові бейджі потрапляють на стенд з 12 кабелів, де перевіряється робота кнопки, світлодіодів та проходить OTA оновлення, в якому додано механізм self test. (відбраковано до 5 плат, їх було досить просто перепрошити для відновлення працездатності).
  7. Краї бейджів шліфуємо дремелем. Щоб приємно і не дряпалось :)
  8. Пакуємо в коробки по 100 штук в кожній.

індивідуальні фікси бейджів
індивідуальні фікси бейджів

Відбраковані плати ESP32 індивідуально перевірялися на наявний брак, фіксилися та запаювались у бейдж. Якщо ви побачите на своєму екземплярі подібні фікси, то знайте, що над ними працювали довше всього :)

Основний об’єм робіт був виконаний лише двома волонтерами. Цей героїзм не був запланований. На жаль, серед волонтерів не знайшлося більше тих, хто вміє паяти. Тим не менш, працювали в робочі години. В п’ятницю, 10 числа, 380 бейджів були готові. Ми розуміли, що конференція точно буде з бейджами.

Вечір п’ятниці ми зустріли споглядаючи результати своєї праці.

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

    Черт, мы словно собирали девайсы для собственного дома.

Suds on the Roof
Suds on the Roof

В середу, 15 травня, ми привезли на preparty 4 коробки по 100 бейджів у кожній, з логотипом якості TechMaker :)

Бейджі чекають на своїх володарів в прохолодному кутку Old Bar
Бейджі чекають на своїх володарів в прохолодному кутку Old Bar

#define FIRMWARE #

Доки ми чекали на плати йшла розробка прошивки.

10 січня презентувався концепт і завдання CTF

В грудні була продумана історія завдань:

  • кожен відвідувач отримує бейдж, але він обмежений у функціоналі: відсутній “рут” доступ, пропрієтарні оновлення, “шпигунський” сервер, з яким він спілкується. Хакери повинні виправити цю ситуацію та по крихтам відновити повноцінне володіння бейджем — r00t, w00t, pwn 2 0wn this $h17!
  • отримай root доступ. Підгледь його у розробників бейджа через відео трейлер :)
  • розробники ліниві і залишили функціонал логування роботи (відсилочка на LD_DEBUG, прівєт QNX!). Це розкриває трохи деталей про існування Spynet — серверу слідкування за активністю бейджів. Він містить декілька вразливостей із OWASP Top 10, що дозволяють отримати інформацію про лихі задуми розробників. Там знаходиться йадмінка з вразливістю у функціоналі перевірки прапорців CTF.
  • механізм ОТА оновлення прошивки використовує цифровий підпис для верифікації та перевірки цілісності оновлень. І цей ключ розробники втратили (насправді, ні). Про це вони повідомили на сторінці Spynet та попросили відновити його використовуючи інформацію з бейджа. Отримавши ключ власник бейджа може писати та власноруч підписувати свої прошивки. Як виявилося вже після конференції, переможець CTF скористався цією можливістю, обійшов certificate pinning та перехопив запити до API Spynet. Молодчина! Справжня хакерська робота.
  • також в механізмі оновлень горе-розробники припустилися організаційної помилки і злили elf файл поруч з самим оновленням. Це дало змогу знайти один з найважчих прапорців — Binary Hero. Саме над ним учасники працювали найдовше і під кінець конференції був лише один відвідувач, що захопив усі шість прапорів.

Унікальний паттерн світлодіодів і відповідні завдання
Унікальний паттерн світлодіодів і відповідні завдання

На момент публікації цього матеріалу 127 власників бейджів виконали хоча б одне завдання. З них 12 людей виконали усі шість.

Вже після закінчення конференції через ОТА оновлення ми додали можливість робити factory reset зі зміною унікального ідентифікатора, щоб була можливість передати бейдж друзям та колегам і ті мали змогу спробувати свої сили у вирішенні завдань.

А поки готується до публікації рішення завдань, можливо, варто попитати в кого бейдж лежить без діла? ;)


Подібні матеріали ми також пишемо на нашій сторінці TechMaker в Facebook та розповідаємо на наших курсах