Децентралізовані фінанси: поширені вразливості безпеки та заходи запобігання
Нещодавно експерт з безпеки поділився з членами спільноти уроком з безпеки в Децентралізованих фінансах. Він оглянув великі інциденти безпеки, з якими стикнулася індустрія Web3 за останній рік, обговорив причини їх виникнення та способи уникнення, підсумував поширені вразливості смарт-контрактів та запобіжні заходи, а також надав кілька порад щодо безпеки для проектів та звичайних користувачів.
Звичні типи вразливостей DeFi включають в себе闪电贷, маніпуляції з цінами, проблеми з функціональними правами, випадкові зовнішні виклики, проблеми з функцією fallback, вразливості бізнес-логіки, витоки приватних ключів та атаки повторного входу. У цій статті основну увагу буде приділено трьом типам:闪电贷, маніпуляціям з цінами та атакам повторного входу.
Швидкі позики
Швидкі кредити є інновацією в Децентралізованих фінансах, але їх також часто використовують хакери:
Зловмисник бере в борг велику суму коштів через швидкі позики, щоб маніпулювати цінами або атакувати бізнес-логіку
Розробники повинні враховувати, чи може функціональність контракту призвести до аномалій через величезні кошти або бути використаною для отримання неналежних винагород.
Деякі проекти при розробці не врахували впливу миттєвих позик, що призвело до крадіжки коштів
Протягом останніх двох років, швидкі кредити викликали чимало проблем. Деякі високоприбуткові Децентралізовані фінанси проекти через нерівний рівень розробки мають багато вразливостей. Наприклад, деякі проекти надають винагороди відповідно до утримуваних активів у фіксований час, що було використано зловмисниками через швидкі кредити для покупки великої кількості токенів і отримання більшості винагород. Також деякі проекти, які розраховують ціну за допомогою токенів, можуть бути під впливом швидких кредитів. Команди проектів повинні бути обережними щодо цих проблем.
Маніпуляція цінами
Проблема маніпуляцій з цінами тісно пов'язана з миттєвими кредитами, основні типи:
Використання сторонніх даних для розрахунку ціни, але неналежне використання або відсутність перевірки призводить до маніпуляцій з ціною.
Використання балансу токенів певних адрес як обчислювальної змінної, причому ці залишки можуть тимчасово збільшуватися або зменшуватися.
Атака повторного входу
Основний ризик виклику зовнішніх контрактів полягає в тому, що вони можуть захопити контрольний потік і внести непередбачувані зміни в дані. Наприклад:
солідність
відображення (address => uint) private userBalances;
function withdrawBalance() public {
uint amountToRemove = userBalances[msg.sender];
(bool успіху ) = msg.sender.call.value(amountToWithdraw)("" );
require(успіх);
userBalances[msg.sender] = 0;
}
Оскільки баланс користувача обнуляється лише в кінці функції, повторні виклики все ще можуть успішно витягувати баланс.
Форми атаки повторного входу різноманітні, можуть залучати кілька функцій або контрактів. Для вирішення проблеми повторного входу слід звернути увагу на:
Не лише запобігає повторному входу одного функції
Дотримуйтесь моделі Checks-Effects-Interactions
Використовуйте перевірений модифікатор для захисту від повторного входу
Найкраще використовувати вже наявні найкращі практики безпеки, а не повторно винаходити колесо. Дозволені рішення є більш безпечними та надійними, ніж нові рішення, розроблені самостійно.
Рекомендації з безпеки для проекту
Дотримуйтесь найкращих практик безпеки під час розробки контрактів
Реалізація можливості оновлення та призупинення контракту
Використання механізму тайм-локів
Збільшення інвестицій в безпеку, створення досконалої системи безпеки
Підвищення обізнаності всіх співробітників про безпеку
Запобігання внутрішньому зловживанню, одночасно підвищуючи ефективність, зміцнювати управління ризиками
Обережно залучайте третіх осіб, забезпечте належну перевірку безпеки
Як користувачам оцінити безпеку смарт-контрактів
Підтвердьте, чи є контракт з відкритим вихідним кодом
Перевірте, чи власник використовує децентралізоване мультипідписання
Переглянути наявні торгові операції за контрактом
Визначте, чи можна оновити контракт, чи є таймлок.
Підтвердіть, чи контракт був перевірений кількома агентствами, чи не є права Owner надто великими.
Слідкуйте за використанням оракулів
Загалом, у екосистемі Децентралізовані фінанси, проєкти та користувачі повинні підтримувати високий рівень обізнаності про безпеку, вживати необхідних заходів для запобігання ризикам і спільно підтримувати здоровий розвиток екосистеми.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
16 лайків
Нагородити
16
3
Поділіться
Прокоментувати
0/400
ImpermanentPhobia
· 12год тому
Ще й Хакер, ще й Термінові позики, справжня стимуляція
Переглянути оригіналвідповісти на0
SnapshotBot
· 12год тому
вечірка проєкту ще й досі щодня обдурює людей, як лохів
Безпека DeFi: Посібник з запобігання терміновим позикам, маніпуляціям з цінами та атакам повторного входу
Децентралізовані фінанси: поширені вразливості безпеки та заходи запобігання
Нещодавно експерт з безпеки поділився з членами спільноти уроком з безпеки в Децентралізованих фінансах. Він оглянув великі інциденти безпеки, з якими стикнулася індустрія Web3 за останній рік, обговорив причини їх виникнення та способи уникнення, підсумував поширені вразливості смарт-контрактів та запобіжні заходи, а також надав кілька порад щодо безпеки для проектів та звичайних користувачів.
Звичні типи вразливостей DeFi включають в себе闪电贷, маніпуляції з цінами, проблеми з функціональними правами, випадкові зовнішні виклики, проблеми з функцією fallback, вразливості бізнес-логіки, витоки приватних ключів та атаки повторного входу. У цій статті основну увагу буде приділено трьом типам:闪电贷, маніпуляціям з цінами та атакам повторного входу.
Швидкі позики
Швидкі кредити є інновацією в Децентралізованих фінансах, але їх також часто використовують хакери:
Протягом останніх двох років, швидкі кредити викликали чимало проблем. Деякі високоприбуткові Децентралізовані фінанси проекти через нерівний рівень розробки мають багато вразливостей. Наприклад, деякі проекти надають винагороди відповідно до утримуваних активів у фіксований час, що було використано зловмисниками через швидкі кредити для покупки великої кількості токенів і отримання більшості винагород. Також деякі проекти, які розраховують ціну за допомогою токенів, можуть бути під впливом швидких кредитів. Команди проектів повинні бути обережними щодо цих проблем.
Маніпуляція цінами
Проблема маніпуляцій з цінами тісно пов'язана з миттєвими кредитами, основні типи:
Використання сторонніх даних для розрахунку ціни, але неналежне використання або відсутність перевірки призводить до маніпуляцій з ціною.
Використання балансу токенів певних адрес як обчислювальної змінної, причому ці залишки можуть тимчасово збільшуватися або зменшуватися.
Атака повторного входу
Основний ризик виклику зовнішніх контрактів полягає в тому, що вони можуть захопити контрольний потік і внести непередбачувані зміни в дані. Наприклад:
солідність відображення (address => uint) private userBalances;
function withdrawBalance() public { uint amountToRemove = userBalances[msg.sender]; (bool успіху ) = msg.sender.call.value(amountToWithdraw)("" ); require(успіх); userBalances[msg.sender] = 0; }
Оскільки баланс користувача обнуляється лише в кінці функції, повторні виклики все ще можуть успішно витягувати баланс.
Форми атаки повторного входу різноманітні, можуть залучати кілька функцій або контрактів. Для вирішення проблеми повторного входу слід звернути увагу на:
Найкраще використовувати вже наявні найкращі практики безпеки, а не повторно винаходити колесо. Дозволені рішення є більш безпечними та надійними, ніж нові рішення, розроблені самостійно.
Рекомендації з безпеки для проекту
Як користувачам оцінити безпеку смарт-контрактів
Загалом, у екосистемі Децентралізовані фінанси, проєкти та користувачі повинні підтримувати високий рівень обізнаності про безпеку, вживати необхідних заходів для запобігання ризикам і спільно підтримувати здоровий розвиток екосистеми.