В чем разница между багом и уязвимостью и как от них защититься

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

Почему это важно

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

Стоит признать, что баги и уязвимости могут иметь немало общего. Но нас интересуют, в первую очередь, различия между ними.

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

Проблемы безопасности

Проблема безопасности — это такая особенность системы, которая может привести к нежелательным последствиям. Она может быть как багом, так и уязвимостью. Логичнее всего показать разницу так:

  • Если из-за проблемы безопасности запланированный сценарий поведения системы не отрабатывается, то это баг.
  • Если, напротив, проблема безопасности приводит к выполнению незапланированного сценария, то это уязвимость.

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

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

Причины появления

Давайте вернемся к определению бага. Если следовать ему, то становится понятно, что баги в системе возникают из-за проблем с задуманным сценарием. Причин может быть несколько: к примеру, разработчик случайно допустил ошибку или опечатку в коде смарт-контракта, не продумал логику системы или плохо её реализовал.

Уязвимости чаще возникают из-за того, что разработчик недостаточно хорошо понимает отдельные аспекты технологии. К примеру, он не до конца разобрался в особенностях языков смарт-контрактов Solidity, принципах исполнения кода на виртуальной машине Ethereum или методах работы компиляторов.

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

Почему баги и уязвимости опасны

И уязвимости, и баги могут нарушать критически важные свойства программы. Кроме того, они могут обеспечивать потерю проектом функциональности. К примеру, из-за уязвимости может не получаться снять токен с паузы.

Кроме того, злоумышленники могут эксплуатировать проблемы безопасности для проведения атак. В отдельных случаях у хакеров получалось увеличивать стоимость исполнения кода в сети Ethereum, не говоря уже о краже криптоактивов с кошельков или платформ.

Предотвращение угроз

Эксперты выделяют несколько классов средств, которые помогут предотвратить появление и эксплуатацию багов и уязвимостей в криптовалютных проектах.

  • Инструменты безопасности: позволяют находить и закрывать известные (классифицированные) уязвимости.
  • Автоматические тесты: обеспечивают всестороннюю оценку систему и отслеживание сохранения её состояния после проведения обновлений и внесения изменений.
  • Оценка покрытия тестами: позволяет определить, какая часть кода тестируется, и постепенно увеличивать эту долю до 100%.
  • Code review: оценка чужого кода опытными участниками проекта, его совершенствование.
  • Bug bounty: программа поиска багов и уязвимостей в коде за вознаграждение. Как правило, количество токенов, которые предоставляет проект, пропорционально сложности и опасности бага или уязвимости.

Отметим, что опытные разработчики и тестировщики могут зарабатывать на bug bounty. Это полезно как в финансовом плане, так и для повышения собственного уровня.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.