19.04.2024

Влияние экономической кибернетики на работу блокчейн-приложений: основные угрозы (Часть 1)

Рынок информационной безопасности, как правило, на шаг отстает от нововведений в мире информационных технологий. Многие компании очень часто вспоминают о безопасности продукта в том случае, когда что-то уже произошло и последующие риски обнаружения и эксплуатации недостатка безопасности превышают стоимость самостоятельного поиска недостатка и его исправления.41340″ />

Представитель компании BugBounty.Center Григорий Васильков — платформы по предоставлению возможности аудита безопасности для сторонних компаний в сфере блокчейн-технологий и умных контрактов — специально для ForkLog проанализировал основные риски для блокчейн-компаний, связанные с безопасностью. Всего будет опубликовано три материала на эту становящуюся все более актуальной тему.

Еще лет 20 назад обнаружение уязвимостей часто сводилось к их поиску в ОС Windows и Linux. Большинство хакеров пыталось эксплуатировать класс атак Buffer Overflow и получить удаленный доступ к компьютеру. Лет 15 назад, с массовым внедрением веб-ресурсов, появился другой класс атак, направленный на эксплуатацию недостатков безопасности в веб-технологиях: XSS, SQL injection и т. п.

Лет семь назад начали распространяться Internet of Things (IoT) технологии для массового использования, вследствии чего появилась классификация атак OWASP Internet of Things Project. Уже в ближайшем будущем нам предстоит увидеть целый класс недостатков безопасности, относящийся к блокчейн-технологиям и даже к искусственному интеллекту.

Началом массового использования программируемых умных контрактов в блокчейн-среде следует считать 2016 год. Именно в этом году произошел резонансный взлом The DAO на блокчейне Ethereum, вследствие чего общественность начала более пристально уделять внимание проблемам безопасности при проектировании умных контрактов.

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

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

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

Какие блокчейны подвержены рискам безопасности сегодня

В данный момент, ввиду популярности проведения ICO, большинство участников блокчейн-сообщества вряд ли смогут назвать более десятка блокчейн-платформ, на которых можно создавать умные контракты. Скорее всего, многие остановятся на Ethereum. Тем не менее уже сейчас количество блокчейн-платформ, на которых можно реализовывать в той или иной степени умные контракты, подходит к 40.

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

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

Для увеличения скорости транзакций в блокчейн-сети и обработки информации различные платформы используют разные алгоритмы консенсуса: POW, POS, DPOS, POI и т. п.

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

Языки программирования умных контрактов

На текущий момент большинство разработчиков для написания умных контрактов используют платформу Ethereum и язык программирования Solidity. Но уже в следующем году новые блокчейн платформы внесут огромное разнообразие в используемые языки программирования. Все чаще будут применяться как общеизвестные языки, такие как: С++, C#, Java, Go, Solidity, Kotlin, Rust, Scala, Javascript, Plutus, так и свои собственные: Michelson, Simvolio и др.

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

Проблемы с точки зрения безопасности в умных контрактах

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

К данным проблемам построения архитектуры безопасности можно отнести следующее:

  • В публичных блокчейн-платформах логика работы и код умного контракта доступны всем участникам платформы;
  • Персональные данные, хранимые в умных контрактах, также доступны всем участникам платформы;
  • При получении данных из внешних централизованных источников, умный контракт не может явно гарантировать достоверность этих данных.

Давайте рассмотрим каждый пункт более детально. Для наглядности будем рассматривать аспекты безопасности на примере блокчейна Ethereum ввиду его популярности.

В блокчейне Ethereum умные контракты чаще всего разрабатываются на высокоуровневом языке программирования Solidity, а затем компилируются в bytecode, обрабатываются и сохраняются в блокчейн-блоке. Если посмотреть со стороны на bytecode любого контракта, то мы сможем увидеть длинную строку в шестнадцатеричной системе 0x6060604052600261010860005055604051611b51380380611b518339810….

На первый взгляд, понять, что делает умный контракт не представляется возможным. Тем не менее уже существует множество бесплатных инструментов, которые позволяют восстановить opcodes (машинные инструкции, имеющий уникальный идентификатор) из bytecode (последовательность байт, выполняемых интерпретатором).

Для примера можно воспользоваться ByteCode To Opcode Disassembler. В результате чего мы можем получить уже более читаемый код:

PUSH1 0x60
PUSH1 0x40
MSTORE
PUSH1 0x02
PUSH2 0x0108
PUSH1 0x00
POP
SSTORE
PUSH1 0x40
MLOAD
PUSH2 0x1b51
CODESIZE

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

В августе 2017 года на конференции Defcon был представлен инструмент Porosity, который является первым декомпилятором умных контрактов на блокчейне Ethereum. Данный инструмент позволяет приводить к высокоуровневому языку программирования Solidity любой bytecode. Теперь нет необходимости анализировать opcodes контракта для понимания его работы. Злоумышленники могут взять любой опубликованный умный контракт и прочитать все доступные в нем методы, даже если разработчики попытались скрыть какую-нибудь логику.

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

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

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

Виды атак

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

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

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

Попытаемся классифицировать этот тип недостатков безопасности и дадим определение, что же он из себя представляет.

Экономико-технические атаки

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

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

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

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

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

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

Для проектирования сложных блокчейн-систем следует учитывать основные элементы экономической кибернетики:

  • Системный анализ компонентов
  • Иерархия взаимодействия сложных элементов
  • Иерархическое управление элементами
  • Согласование целей в иерархических элементах
  • Обработка полученной информации
  • Оптимизация потоков информации в задачах управления
  • Контроль и управление в организационных системах
  • Задачи классификации
  • Комплексная оценка элементов системы
  • Кибернетические модели социальных и экономических систем

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

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

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

forklog.com

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

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