
BlockChain Security Construction
В этой статье мы в основном расскажем о нескольких аспектах аудита публичных блокчейнов, заслуживающих внимания. Для аудиторов безопасности и разработчиков публичных блокчейнов это проект, достойный изучения и размышлений.
Прежде чем знакомиться с построением системы публичного блокчейна, давайте рассмотрим архитектуру блокчейна:
Эра блокчейна 1.0:
Архитектура: как показано на рисунке ниже
Представители: bitcoin, reborn coin, dogcoin, Leyte coin, MasterCard coin и т.д.

Эра блокчейна 2.0:
Архитектура: как показано на рисунке ниже
Представители: Ethereum, lisk, hyperledger и т.д.
Основные изменения:

Эра блокчейна 2.0
Архитектура: как показано на рисунке ниже
Представители: EOS, VaR, AE, ash, ELA, dfinity
Основные изменения: сценарии применения блокчейна во всех сферах жизни за пределами финансовой отрасли могут удовлетворять более сложную бизнес-логику

Далее мы кратко рассмотрим проблемы, заслуживающие внимания при построении безопасности публичного блокчейна, в соответствии с архитектурой блокчейна. Около 75% из них привели к проблемам безопасности публичных блокчейнов, что также является моментами, достойными внимания при аудите безопасности публичного блокчейна. Здесь мы приводим их в форме вопросов, чтобы стимулировать размышления. Если вы хотите обсудить что-то подробнее, вы можете сделать это непосредственно в issue:
Уровень данных — это технология нижнего уровня, основные функции которой — хранение данных, реализация учётных записей и транзакций, а также безопасность. Хранение данных в основном основано на дереве Меркла, которое реализуется структурой блоков и цепочек. Большинство из них хранится в базе данных kV, например, bitcoin и leveldb, используемые Ethereum.
На уровне данных стоит задуматься о следующем:
Основная цель сетевого уровня — обеспечить информационное взаимодействие между узлами сети блокчейна. Суть блокчейна — это одноранговая (P2P) сеть. Каждый узел может получать информацию, а также создавать её. Узлы поддерживают связь друг с другом за счёт ведения общего блокчейна. В сети блокчейна каждый узел может создать новый блок. После создания нового блока другие узлы уведомляются через широковещательную рассылку. В свою очередь, другие узлы проверяют этот узел. Когда более 51% пользователей сети блокчейна проходят проверку, новый блок добавляется в основную цепочку.
На сетевом уровне стоит задуматься о нескольких моментах
Разумен ли алгоритм обнаружения узлов публичного блокчейна?
Разумна ли конструкция узлов публичного блокчейна?
Разумна ли конструкция механизма наказания?
Разумен ли протокол связи?
Разумна ли схема обработки запросов узла публичного блокчейна?
Есть ли ограничение на размер пакета обработки запросов?
Разумен ли механизм коммуникации транзакций публичного блокчейна?
Разумен ли механизм синхронизации данных блоков?
Разумна ли логика обработки транзакций?
Уровень консенсуса позволяет сильно распределённым узлам достигать консенсуса относительно достоверности данных блоков в децентрализованной системе. Каждый работающий блокчейн нуждается в алгоритме консенсуса, чтобы гарантировать достоверность и порядок выдачи блоков. Распространённые алгоритмы консенсуса включают pow, POS, dpos, Poa, POC и т.д.
На уровне консенсуса следует учесть следующие моменты:
Безопасен ли алгоритм консенсуса публичного блокчейна?
Разумна ли схема проверки консенсуса публичного блокчейна?
Разумна ли схема конфискации при консенсусе публичного блокчейна?
Разумна ли схема комиссии за обслуживание в публичном блокчейне?
Разумна ли схема майнинга публичного блокчейна?
Разумна ли схема динамической регулировки сложности блока?
Разумна ли логика проверки сложности блока?
Разумна ли схема реорганизации цепочки, сброса цепочки, форка цепочки и т.д.?
Цель уровня стимулирования публичного блокчейна — предоставить определённые меры поощрения, чтобы побудить узлы участвовать в проверке безопасности блокчейна, а также обеспечить сбалансированное и здоровое развитие экосистемы блокчейна. В децентрализованном публичном блокчейне необходимо настроить соответствующий механизм стимулирования для поощрения участвующих в учёте узлов, соблюдающих правила, и создать механизм наказания для узлов, нарушающих правила. Уровень стимулирования блокчейна вносит экономические факторы в технологическую систему блокчейна, что повышает эффективность организационного сотрудничества и обмена ценностями в рамках экосистемы. Механизм стимулирования публичного блокчейна — важный механизм, обеспечивающий здоровое развитие блокчейна.
На уровне стимулирования есть несколько моментов, заслуживающих нашего внимания
Разумна ли схема механизма эмиссии публичного блокчейна?
Разумна ли схема механизма наказания публичного блокчейна?
Уровень контрактов инкапсулирует различные скриптовые коды и алгоритмы системы блокчейна, а также более сложные смарт-контракты, создаваемые на их основе. Если три уровня — данных, сети и консенсуса — выступают в роли базовой "виртуальной машины" блокчейна и выполняют соответственно функции представления данных, распространения данных и проверки данных, то уровень контрактов — это бизнес-логика и алгоритмы на основе виртуальной машины блокчейна, являющиеся основой для реализации гибкого программирования и операций с данными в системе блокчейна. Большинство цифровых криптовалют, включая bitcoin, используют простой скриптовый код, не являющийся полным по Тьюрингу, для программирования и управления процессом транзакций; это также зачаток смарт-контракта. С развитием технологий появились полные по Тьюрингу скриптовые языки, такие как Ethereum, которые позволяют реализовать более сложные и гибкие смарт-контракты. Блокчейн может поддерживать множество приложений макрофинансовых и социальных систем.
На уровне контрактов следует учесть следующие моменты:
Безопасность виртуальной машины контрактов?
Развёртывание / выполнение / интерфейс контрактов?
Безопасность, связанная со смарт-контрактами?
Уровень приложений инкапсулирует различные сценарии и варианты применения блокчейна, что аналогично различным программным продуктам на компьютерах. Это продукт, которым обычные пользователи могут действительно пользоваться напрямую; его также можно понимать как браузер продуктов с архитектурой B / S.
На уровне приложений следует учесть следующие моменты (только публичный блокчейн, не кошельки App/Exchange/DEFI и т.д.):
Логика CRUD для учётной записи кошелька?
Проверка прав на импорт и экспорт кошелька?
Сложность пароля кошелька?
Проверка корректности адреса учётной записи кошелька?
Нужна ли публичному интерфейсу RPC внешняя публичная сеть?
Чётко ли разделены права доступа к интерфейсу RPC публичного блокчейна?
Есть ли у публичного интерфейса RPC операции чувствительного класса?
Корректно ли публичный интерфейс RPC обрабатывает исключения?
Каков максимальный предел объёма обрабатываемых данных интерфейса RPC публичного блокчейна?
Кодирование и декодирование данных запросов интерфейса RPC публичного блокчейна?
Включён ли SSL при обработке запросов к RPC публичного блокчейна?
Схема обработки запросов при высокой конкурентности в публичном блокчейне?
Установлено ли максимальное количество соединений?
Разрешает ли интерфейс Web UI публичного блокчейна удалённый доступ?
Есть ли уязвимости веб-класса в интерфейсе webui публичного блокчейна?
Разрешает ли интерфейс webui публичного блокчейна локальное хранение паролей?
Действительно, в публичном блокчейне нет "уровня кода". Здесь автор предлагает его в основном для классификации проблем, которые могут потребовать внимания в процессе разработки публичного блокчейна:
Особенности языка разработки публичного блокчейна, например, readall (), возможности append при чтении данных на языке go
Версия языка разработки публичного блокчейна, например, в некоторых версиях языка go есть удалённое выполнение команд
Соблюдение стандартов кодирования при разработке публичного блокчейна, например, нулевые указатели, срезы, обработка исключений и другие операции
Обработка шифрования и дешифрования в публичном блокчейне, например, высокосложное кодирование и декодирование без проверки длины
Преобразование типов данных, например, hextobyte, integer. Parseint() и т.д.
Базовая бизнес-логика, например
Помимо перечисленных выше вопросов, заслуживающих внимания на уровне архитектуры блокчейна, нам также необходимо учитывать следующие проблемы безопасности:
Зашифровано ли хранилище данных?
Разумны ли права доступа к файлам?
Безопасна ли среда выполнения?
Запускается ли узел не от root?
Есть ли на стороне узла уязвимый веб-сервис?
Есть ли на серверной стороне узла небезопасные настройки?
Есть ли на серверной стороне узла уязвимость неавторизованного доступа?
Не утёк ли пароль учётной записи SSH на серверной стороне узла?
Атака 51%
Жёсткий форк публичного блокчейна
Угон вычислительных мощностей (заражение майнинг-машин червями)
Используются ли сторонние библиотеки с уязвимостями, например, Jackson databind, fastjson и т.д.
Использование уязвимого промежуточного ПО, например, более старых версий tendermint
Надёжна ли и уместна ли схема кросс-чейна?
Схема реализации изоморфного кросс-чейна и гетерогенного кросс-чейна?
Повторение проблем безопасности из раздела выше
Принимайте непосредственное участие в обсуждении соответствующих вопросов в issue