Каждая крупная атака оставила после себя одну-две строки кода, которые можно прочитать сегодня. Здесь собраны крупнейшие задокументированные инциденты: пошаговый путь атаки, сама уязвимая функция, исправление и ссылки на постмортемы.
Это не лента новостей. Каждый случай разобран до урока, который можно применить к собственному коду.
От первого шага до вывода денег: что атакующий вызвал, в каком порядке и почему сработал именно этот порядок.
Функция в том виде, в каком она была в момент инцидента. Вы читаете изъян собственными глазами, а не его пересказ.
Что изменилось после инцидента и какой безопасный шаблон предотвратил бы всё с самого начала.
Каждый случай связан со своим классом уязвимости и с записями того же класса в нашей базе уязвимостей.
Ссылки на оригинальные постмортемы и независимые разборы безопасности. Каждое число вы проверяете сами.
Отбирайте по году, сети или типу уязвимости — удобно, когда хочется прочитать подряд все случаи reentrancy.
Сами инструменты (сканер, панели, рабочее пространство SAFI) пока работают на английском языке. Эти страницы объясняют всё по-русски — до того, как вы туда перейдёте.
Инциденты различаются деталями и до неприятного схожи причинами.
Неприятный вывод из этого источника: многие из этих протоколов прошли аудит до того, как их атаковали. Аудит снижает вероятность, но не обнуляет её.
Вероятность сильнее снижает не один отчёт, а слои: аудит, непрерывный мониторинг после запуска, лимиты расходов и способность быстро остановить кровотечение. Меньше всех потеряли те, у кого был последний слой.
Reentrancy и централизованный контроль над полномочиями объясняют бо́льшую часть суммарных потерь. Оба известны годами, и оба до сих пор повторяются.
Один приватный ключ, способный изменить логику контракта, — единственная точка отказа, каким бы хорошим ни был код вокруг него.
Мосты держат огромные балансы и доверяют сообщениям извне; оракулы вносят внутрь цену, которой можно манипулировать. Каждый крупный инцидент в этих двух категориях опирается на одну и ту же идею: данным доверяют больше, чем они заслуживают.
Вставьте адрес контракта и посмотрите полномочия владельца, ликвидность и результат симуляции продажи — прежде чем рисковать. Небольшая плата за разовую проверку показывается до подписи, а в любой подписке проверки безлимитны.