Поиск уязвимостей. Обучение. Первые итоги. Часть 3
Еще раз проверяем наследования и их порядок в контракте.
5. Изучаем переменные, а именно: их порядок, тип данных, константы, видимость. Порядок крайне важен в прокси контракта, так как огромное количество уязвимостей связано с тем, что слоты хранения нарушены в обоих контрактах.
Константы также играют роль в слотах памяти. Их там просто нет.
Тип данных может быть полезен при оптимизации газа.
А через видимость порой можно заметить, что хотят скрыть пароль или другую важную информацию. Этого делать нельзя.
6. Структуры и маппинги. Смотрим, чтобы понимать что-откуда берется ниже в коде.
7. Конструктор. Учитываем, что он исполняет: какие токены подключает, кому дает права owner, создает ли новые контракты и записывает ли что-то в маппинги или массивы. Я не помню какие-либо задачи, где использовались бы уязвимости в конструкторе, однако важно понимать изначальные условия, с которыми придется разбираться дальше.
Далее переходим к функциям.
8. View и pure функции. Реже всего тут встречаются какие-либо ошибки, так как они не могут переводить деньги, минтить токены и делать другие "важные" вещи. При этом нужно обращать внимание на расчеты в этих функциях. Так как они могут использоваться в других функциях.
Вообще я оставляю их всегда на самый последний момент аудита.
Приступаем к самому соку!
#security #audit
Post #548
254
- 👍 3