Продолжаю обозревать теорию, потому что практика должна иметь базис
Существует два вида аудита: приватный (private) и соревновательный (competitive). В определенных рамках делать придется одно и то же, но по разному будут расставлены акценты.
Для аудита конечная цель - сделать протокол более безопасным, это понятно.
В приватном вы оказываете услуги проекту/фирме/кто-там-вам-заказал-аудит и он, как правило, не публичный, то есть отчет вы если и сможете закинуть себе в портфолио, то с некоторой задержкой.
Соревновательный проходит на платформах типа codehawks, протоколы там выкладываются перед деплоем, а награда делится среди нашедших уязвимости. Сейчас на codehawks нет актуальных соревнований, но есть на code4rena. Там же через 9 дней стартует аудит для Chainlink с призовым пулом в $200k в USDC и продолжительностью в месяц
В случае приватного аудита в процесс включается:
- работа с командой протокола, возможно придется учить людей лучшим практикам, например обращать внимание, что в коде не должно быть магических чисел и для storage переменных хорошо бы использовать префикс s_
- анализ полноты и содержания тестов
- отработка критических ситуаций, буквально команда может позвонить и сказать что-то в духе "нас ломают, помоги выбраться из
Фокус в приватном аудите стоит не сколько на поиске уязвимостей, сколько на повышении качества кодовой базы
Для соревновательного аудита главное - количество уязвимостей, которые вы обнаружили. Рассказать проекту как бы вы их убрали тоже надо, но поскольку обычно есть ограничение по времени (1-4 недели), то фокус стоит на количестве и тяжести найденного
Приватный аудит технически ограничен по времени тоже, но в этом случае работа итеративная, потому что аудит вы проводите на конкретный код, с конкретным хэшем коммита, то есть после того как ваши замечания исправили, ваш аудит по сути не актуален для обновленной версии и это нормально, про стадии аудита детальнее я расскажу позже