Мы все знаем о том, что безопасность важна. А особенно важна она в крипто-программировании. Мы ведь там программируем работу с цифровыми активами и ресурсами, а следовательно, нужно очень хорошо понимать о проблемах и регулярно прогонять свою работу через всякого рода анализаторы.
Очевидно, что на все 100% полагаться на тулзы хоть какого-то анализа нельзя. Но вот иметь перед глазами какой-то алерт про ошибки было бы здорово.
Самый простой способ, который мы смогли придумать — это баджик в ридмишке вашего открытого репозитория на Гитхабе, куда вы пушите ваши смарт-контракты.
Пощупать можно вот тут: https://heimdall.maddevs.io/
Система простая: вы один раз регистрируете ваш репозиторий на Хеймдалле и он делает первичный скан, а потом запускает повторные сканирования, если вы что-то запушили.
Сейчас для анализа мы используем крутой инструмент от компании ConsenSYS под названием Mythrill. На данный момент кажется, что это самый зрелый тул для анализа смарт-контрактов на Эфириуме. Mythrill работает с байткодом контракта, следовательно язык написания не имеет значения.
Чтобы подробно понять как работает Mythrill можно перечитать врайтап Бернарда Мюллера, который он презентовал на конфе HITBSecConf 2018.
Вкратце:
- Mythrill работает за счет символьного анализа (symbolic analysis). Это когда на вход программе подаются разного рода строки и анализируется выполнение. В классических программах это достаточно сложный процесс, ведь подавать на вход можно много чего. Однако смарт-контракты в Эфириуме проще классических программ и там может быть законченный список строк, которые могут подаваться на смарт-контракт.
- Для обеспечения контроля состояний и анализа контроля управления Mythrill использует специальную символьную виртуальную машину Эфириума, которая может генерить из контракта на Солидити или из байткода контракта EVM специальный объект, который прогоняет через себя и получает данные, готовые для анализа. Называется она LASER-ethereum: https://github.com/b-mueller/laser-ethereum
- После чего этот объект прогоняется через список модулей, каждый из которых детектит ту или иную известную уязвимость. Список модулей пополняется и лежит тут: https://github.com/ConsenSys/mythril/tree/master/mythril/analysis/modules (описание: https://github.com/ConsenSys/mythril/wiki/Mythril-Detection-Capabilities)
В будущем мы планируем добавить другие чеки. Сейчас рассматриваем oyente, manticore.
Вообще, “экономика баджей” клевая штука. Если анализатор под баджем не врет, то почему бы не поставить? Однако очень много репозитариев в паблике, которые не имеют вообще ни одного баджа. Нам кажется, что смелый разработчик пойдет навстречу и поставит все, что полезно. А баджи для безопасности полезные. Их необходимо ставить. Не только для себя, но и для тех, кто хочет ваш контракт реюзать.
Вот пример того, как выглядит бадж Heimdall на репозитории с кучей уязвимых смарт-контрактов:
Репозитарий проекта находится по этому адресу https://github.com/maddevsio/heimdall.
Проектом активно занимаются Саша https://github.com/s0b0lev и Эрик https://github.com/ersul4ik
В бэклоге много задач: https://github.com/maddevsio/heimdall/issues. Если кто-то желает присоединиться, то большое вам велком!
Ранее статья была опубликована тут.