Многочисленные успешные хакерские атаки на криптовалюты уже привели к огромным денежным потерям. Это заставляет программистов усерднее работать над кодом блокчейна, сайта, кошелька или смарт-контракта.
Взлом смарт-контрактов — распространенное явление в криптомире. Причины краха делятся на два вида: технические уязвимости кода и человеческий фактор. Если возможность человеческой ошибки исключить довольно тяжело, технические недочеты должны быть устранены полностью. Помочь в этом может комплексный внешний аудит блокчейн-проекта или специальные программы Bug Bounty. Этот материал поможет разобраться в преимуществах и недостатках данных методов.
Почему важно проводить внешний аудит
Начнем с того, что криптомир характеризуется децентрализацией и открытостью. Практически все криптопроекты обязаны публиковать исходный код на github для того, чтобы доказать чистоту и прозрачность функционирования своей платформы, криптовалюты, токена, ICO. Допустим, качественный блокчейн-проект выходит на ICO, но не предоставляет результаты тестирования кода смарт-контракта и внешнего аудита ICO. Естественно, доверие к такой кампании будет минимальное, так как у инвесторов нет гарантий сохранения вкладов. В результате разработка точно не попадет в топ ICO-проектов и получит плохие рекомендации от экспертов, несмотря на инновационность идеи. Нет гарантий — нет инвестиций.
Почему аудит криптопроекта должен быть внешним? Программист, который писал смарт-контракт, может найти недоработки в коде, но рассмотреть различные варианты логики функционирования своего продукта ему довольно тяжело. Кодер видит свою программу замыленными глазами.
Поиск уязвимостей через Bug Bounty (багхантинг)
Название говорит о концепции метода — за каждую найденную слабость кода выплачивается вознаграждение. Поиск уязвимостей за деньги уже давно успешно применяется различными компаниями, в том числе крупными: Microsoft, Facebook, Google, Reddit. Даже Пентагон проводил внешний аудит с помощью Bug Bounty и выплатил более $70 000 за найденные ошибки.
Программы Bug Bounty делятся на три вида:
1. Ручная программа.
Согласно этому варианту заключается договор, в котором прописаны следующие данные:
- исходный код;
- модель оценки рисков. Обычно выделяют четыре степени тяжести ошибки: низкая, средняя, высокая, критическая. Для этих целей разработана методология OWASP;
- стоимость вознаграждения за каждый тип ошибки.
Также должны быть прописаны условия:
- первый, кто нашел ошибку, получает вознаграждение;
- соблюдение принципов ответственного раскрытия.
Это означает, что человек, раскрывший баг, обязывается не рассказывать о нем третьим лицам до тех пор, пока он не будет устранен.
- Найденные проблемы не вознаграждаются дважды.
- Разработчики кода не имеют права на получение вознаграждения.
- Дата начала и окончания багхантинга. Обычно этот период не закрывается даже после релиза основной версии проекта.
- Криптовалютный багхантер должен четко описать механизм воспроизведения ошибки.
- Исследователь должен использовать свои учетные данные для демонстрации уязвимости.
- Возможность улучшения кода не является ошибкой.
- Фишинг не является ошибкой.
Программа называется ручной, так как материалы с найденными ошибками отсылаются вручную, после чего происходит обсуждение. Сумма и способ оплаты также могут оговариваться. Этот метод предполагает большое количество работы по проверке почты на спам, выявлению и отсеиванию дублированных ошибок. Хорошим примером организации багхантинга в криптовалютной сфере является кампания Bug Bounty MDC, которую проводит Mediacoin. Заработок на уязвимостях Mediacoin соответствует прайсу:
- ошибки интерфейса — $1;
- функциональные ошибки — $5;
- системные ошибки — $50;
- ошибки безопасности — $500.
Как видим, нахождение самых серьезных ошибок неплохо вознаграждается даже в российских Bug Bounty-компаниях.
2. Bug Bounty на базе смарт-контракта.
Этот метод более привлекателен как для криптовалютных хакеров, так и для заказчиков, поскольку они не взаимодействуют между собой. Заказчик просто создает кошелек, где хранится криптовалюта, и оставляет комментарий, в котором указано, что этот кошелек предназначен для тестирования на взлом. Если багхантер отыскивает уязвимость, он легально ворует криптовалюту с кошелька.
Разновидностью этого метода является несоответствие инвариантов, то есть параметров, имеющих неизменяемый характер. Объясним на примере токена.
Допустим, выпущено и находится в обиходе определенное количество токенов. Также указано, что эмиссии больше не будет. Логично, что общее количество токенов в этом случае будет равняться сумме токенов на всех кошельках держателей монеты. Это число является инвариантом.
Организатор проекта создает контракт, который генерирует копию контракта токена и предусматривает выплату вознаграждения за изменение инварианта в копии. Если хакеру удается изменить инвариант, он автоматически получает оплату от родительского контракта. Заказчик видит через блокчейн, где находится слабое место, и может исправить недочет.
3. Платформы для проведения Bug Bounty.
Наиболее известной площадкой багхантинга является HackerOne. Платформа работает еще с 2012 года и на данный момент обладает самым крупным арсеналом исследователей в области информационной безопасности.
Принцип работы HackerOne прост:
- Заказчик отправляет свой проект на платформу.
- Хакеры находят ошибки и отправляют отчеты о них.
- HackerOne обрабатывает все отчеты и выдает заказчику только те варианты, которые необходимо оплачивать. За эту работу платформа берет комиссию.
В 2017 году была объявлена новая версия HackerOne Community Edition, которая обещает публиковать Bug Bounty проектов с открытым исходным кодом бесплатно. Комиссия в размере 20% взимается на этапе проведения оплаты между заказчиком и хакером.
Платформа координирует передачу данных об ошибках, автоматизирует работу с дубликатами заявок, проводит аналитику и создает план для разработки Bug Bounty.
HackerOne работает с Facebook, Twitter, Adobe, Лабораторией Касперского и другими известными компаниями. Один из примеров работы с блокчейном — Bug Bounty кошелька blockchain.info. Заработок на Hackerone для этой кампании следующий:
- ошибка низкого уровня риска — $50;
- среднего уровня — $400;
- высокого уровня — $1600;
- критического уровня — более $1600.
Поиск уязвимостей в безопасности смарт-контрактов с помощью багхантинга характеризуется неограниченным числом заинтересованных исследователей, что является плюсом метода.
Комплексный внешний аудит
В перечень задач комплексного аудита ICO входит тестирование смарт-контрактов токена и смарт-контракта для проведения ICO. Следовательно, нет необходимости заказывать аудит смарт-контракта отдельно. Гораздо удобнее, когда техническая, юридическая и правовая сторона проекта тестируется одной командой. Это уменьшает риски, связанные с нарушением принципов ответственного раскрытия уязвимостей, и снимает с заказчика ряд проблем, включая написание отчета о тестировании.
В отчет аудита смарт-контракта должны входить результаты следующих проверок:
- Наличие явных ошибок кода.
- Тестирование исключительных ситуаций.
- Ошибки, допускающиеся в результате математических операций.
- Логики контракта.
- Стандартов защиты смарт-контракта.
В случае обнаружения уязвимостей указываются способы их устранения.