Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial Internet of Things >> Интернет вещей

Fuzz тестирование: ключевой инструмент для защиты IoT устройств

Fuzz тестирование — проверенная техника, которую инженеры используют для раскрытия скрытых слабостей во встроенных системах, делая её необходимой частью любой IoT стратегии безопасности.

По мере роста числа подключенных устройств растет и поверхность атаки. Серийные порты, радиоинтерфейсы и даже порты программирования/отладки могут быть использованы атакующими. Однако многие встроенные разработчики исторически упускают device-layer безопасность, пропуская критические баги, способные компрометировать весь продукт.

Что такое Fuzz тестирование?

Подумайте о fuzz тестировании как о систематическом, высокообъемном «миллион-обезьянном» эксперименте — за исключением того, что мы инжектируем большое разнообразие случайных байтовых строк, называемых fuzz векторами, в целевой интерфейс и мониторим ответ системы. Если вектор триггерит аномальное поведение — такое как краш, ресет или повреждение памяти — потенциальная уязвимость флагится для ревью.

Существует множество коммерческих и open-source фаззеров. Они генерируют тысячи векторов, подают их с высокой частотой и записывают любые отклонения от ожидаемого поведения. Поскольку пространство возможных входов бесконечно, цель — максимизировать *качество* и *количество* тестов, сохраняя время выполнения практичным.

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

Многие фаззеры изначально проектировались для десктопных приложений, так что простейший путь — скомпилировать встроенную прошивку для запуска как нативный PC бинарник. Это дает огромный буст производительности, но вводит два вызова:

Несмотря на эти компромиссы, выгоды быстрых тестовых циклов и более богатой инструментации часто перевешивают недостатки. Если нативное выполнение неосуществимо, рассмотрите построение выделенного тестового образа с дополнительной RAM, flash или внешним debugging интерфейсом.

Обнаружение багов за пределами крашей

Краши — самые легкие сигналы, но многие эксплуатируемые баги — такие как out-of-bounds записи или dereferences висячих указателей — не проявляются как краш или ресов. Современные компиляторы (GCC, Clang) предоставляют memory sanitization для флагирования нелегальных доступов к памяти, но дополнительные накладные расходы делают это неподходящим для большинства встроенных запусков. Вместо этого, таргетите подмножество критичных путей кода, запускайте фаззеры на resource-rich билде или используйте PC таргет.

Code coverage метрики помогают оценить эффективность тестов. Coverage библиотеки инжектируют «bread-crumb» вызовы в каждую функцию; когда крошка выполняется, счетчик инкрементируется. Однако coverage номера могут быть вводящими для встроенных систем, потому что большие части прошивки — такие как device-driver лупы, никогда не взаимодействующие с фаззеным интерфейсом — остаются нетестированными. На практике только 20–30% кода достижимо через fuzz векторы.

Репорт и триаж

Когда fuzz вектор производит нежелательное поведение, детальная диагностика критична: точное место ошибки, снимок стека (если доступно) и тип бага. Эти детали ускоряют триаж и позволяют инженерам приоритизировать фиксы. Встроенные устройства часто ресетятся молча, стирая состояние, так что воспроизводимые векторы и debugging сессии обязательны для определения коренной причины.

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

Непрерывный фаззинг в релизном жизненном цикле

Учитывая его стохастическую природу, fuzz тестирование выигрывает от расширенного времени запуска. Эффективный рабочий процесс начинает фаззинг на выделенной ветке после основного релиза. Новые баги фиксятся в этой ветке, позволяя фаззинг лупу продолжаться беспрепятственно. На каждом релизе ранее обнаруженные проблемы переоцениваются и, если критичные, мерджатся в следующую версию. Наконец, валидированные векторы включаются в стандартный QA конвейер для защиты от регрессии.

Fuzz тесты должны покрывать все релевантные состояния устройства: тип устройства, сетевая связность, версия прошивки и любая другая конфигурация, способная влиять на логику интерфейса. Пока exhaustive покрытие нереалистично, систематическое варьирование одного измерения за раз дает значимые инсайты.

Архитектуры фаззинга

Существует два доминирующих фаззинг парадигмы:

Когда встроенный код не может запускаться на PC, легковесный симулятор может быть построен, но это добавляет сложность. Следующая таблица суммаризирует четыре практичных подхода:

Fuzz тестирование: ключевой инструмент для защиты IoT устройств

Использование множественных тестеров

После защиты debug интерфейса с lock и secure boot, экспонируйте публичные интерфейсы устройства к разнообразию фаззинг инструментов. Coverage-guided фаззеры идеальны для ongoing тестирования, в то время как directed фаззеры могут быстро валидировать специфические протокол edge cases на реальном железе. Комбинирование множественных testbeds максимизирует code coverage и, следовательно, security resilience.

>> Эта статья изначально публиковалась на нашем партнерском сайте EDN.

Интернет вещей

  1. Как 5G трансформирует промышленный IoT: повышение автоматизации, надежности и связности
  2. Как IoT снижает риски безопасности в нефтегазовой отрасли
  3. Защита промышленного IoT: практическая дорожная карта
  4. Как IoT и 5G трансформируют современные рабочие места
  5. Масштабирование провижининга IoT: безопасные эффективные стратегии для онбординга устройств
  6. IoT-безопасность — кто несет ответственность?
  7. Безопасность IoT: преодоление барьеров внедрения
  8. Закрытие пробелов IoT-безопасности через оптимизацию цепочки поставок
  9. Риски IoT: защита вашего бизнеса от уязвимостей умных устройств
  10. Защитите свое IoT-будущее: ведите цифровую трансформацию, минимизируя риски