Нещодавно один експерт з безпеки поділився лекцією про безпеку Децентралізованих фінансів, в якій обговорювалися нещодавні серйозні інциденти безпеки в індустрії Web3, аналізувалися причини виникнення цих інцидентів та способи уникнення, а також підсумовувалися поширені вразливості в смарт-контрактах та заходи їх запобігання. У цій статті буде зосереджено увагу на трьох типах поширених вразливостей: миттєвих кредитах, маніпуляціях з цінами та атаках повторного входу.
Швидкий кредит
Швидкі кредити є інновацією в Децентралізованих фінансах, але часто використовуються хакерами для атак:
Зловмисники позичають велику кількість коштів через кредит на вимогу, маніпулюючи ціною або атакуючи бізнес-логіку
Розробники повинні враховувати, чи не стануть функції контракту аномальними через великі суми коштів або можуть бути використані для отримання надмірних винагород в одній угоді.
Загальні питання: Обчислення винагороди на основі кількості токенів або участь у розрахунках на основі кількості токенів у парі DEX.
Протягом останніх двох років виникло багато проблем. Деякі проєкти DeFi здаються високодохідними, але насправді рівень їх розробки дуже різний. Наприклад, є проєкти, які розподіляють винагороди відповідно до обсягу володіння в фіксований час, і зловмисники використовують флеш-кредити, щоб купити велику кількість токенів та отримати більшу частину винагороди.
Маніпуляція цінами
Ціна маніпуляції тісно пов'язана з блискавичними кредитами, основними є дві проблеми:
При розрахунку ціни використовуйте дані третіх сторін, але неправильне використання або відсутність перевірки.
Використання балансу Token певних адрес як змінної для обчислень, при цьому ці залишки можуть тимчасово збільшуватися або зменшуватися.
Атака повторного входу
Основний ризик виклику зовнішніх контрактів полягає в тому, що може бути перехоплено керування потоком і неочікувані зміни даних.
Типовий приклад повторного виклику:
солідність
відображення (address => uint) private userBalances;
функція withdrawBalance() публічна {
uint amountToRemove = userBalances[msg.sender];
(bool успіху ) = msg.sender.call.value(amountToWithdraw)("" );
require(успішно);
userBalances[msg.sender] = 0;
}
Оскільки баланс користувача обнуляється лише наприкінці функції, повторні виклики дозволяють багаторазово виводити.
Щоб вирішити проблему повторного входу, слід звернути увагу на:
Не лише захист від повторного входу одного функції
Дотримуйтесь моделі Checks-Effects-Interactions
Використовуйте перевірений модифікатор для запобігання повторним викликам
Рекомендується використовувати зрілі практики безпеки, уникати повторного винаходу колеса.
Рекомендації щодо безпеки від проєкту
Дотримуйтесь найкращих практик безпеки при розробці контрактів
Реалізація можливості оновлення та призупинки контракту
Використання тайм-локів
Створити досконалу систему безпеки
Підвищення усвідомлення безпеки серед усіх співробітників
Запобігання внутрішньому зловживанню, підвищення ефективності і одночасне посилення ризик-менеджменту
Обережно вводьте третіх осіб, вважаючи їх небезпечними та добре перевіряйте.
Як користувачам оцінити безпеку смарт-контрактів
Чи є контракт відкритим?
Чи використовує власник децентралізовану мультипідпис?
Переглянути вже здійснені угоди за контрактом
Чи може контракт бути оновлений, чи є часовий замок
Чи приймаєте ви аудити від кількох установ, чи не є права власника занадто великими?
Зверніть увагу на надійність оракулів
Отже, у сфері Децентралізовані фінанси безпека має вирішальне значення. Команди проекту повинні всебічно будувати систему безпеки, а користувачі також повинні бути пильними та обережно брати участь.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
17 лайків
Нагородити
17
8
Поділіться
Прокоментувати
0/400
DeFiVeteran
· 22год тому
Гаманець знову зник, нічого дивного.
Переглянути оригіналвідповісти на0
DisillusiionOracle
· 07-23 19:20
Гарно, defi продовжує галасувати, а хакер щодня стрибає на биків.
Переглянути оригіналвідповісти на0
GateUser-bd883c58
· 07-21 12:00
Все ж потрібно залишити задні двері!
Переглянути оригіналвідповісти на0
LayoffMiner
· 07-21 02:24
Ха, знову старий спосіб, різноманітне миття шахт.
Переглянути оригіналвідповісти на0
LiquidationWatcher
· 07-21 02:19
Які ж тут дірки, навіщо грати в Децентралізовані фінанси?
Децентралізовані фінанси три основні загрози безпеці: Термінові позики, маніпуляції з цінами та атаки повторного входу
Децентралізовані фінанси常见安全漏洞及预防措施
Нещодавно один експерт з безпеки поділився лекцією про безпеку Децентралізованих фінансів, в якій обговорювалися нещодавні серйозні інциденти безпеки в індустрії Web3, аналізувалися причини виникнення цих інцидентів та способи уникнення, а також підсумовувалися поширені вразливості в смарт-контрактах та заходи їх запобігання. У цій статті буде зосереджено увагу на трьох типах поширених вразливостей: миттєвих кредитах, маніпуляціях з цінами та атаках повторного входу.
Швидкий кредит
Швидкі кредити є інновацією в Децентралізованих фінансах, але часто використовуються хакерами для атак:
Протягом останніх двох років виникло багато проблем. Деякі проєкти DeFi здаються високодохідними, але насправді рівень їх розробки дуже різний. Наприклад, є проєкти, які розподіляють винагороди відповідно до обсягу володіння в фіксований час, і зловмисники використовують флеш-кредити, щоб купити велику кількість токенів та отримати більшу частину винагороди.
Маніпуляція цінами
Ціна маніпуляції тісно пов'язана з блискавичними кредитами, основними є дві проблеми:
Атака повторного входу
Основний ризик виклику зовнішніх контрактів полягає в тому, що може бути перехоплено керування потоком і неочікувані зміни даних.
Типовий приклад повторного виклику: солідність відображення (address => uint) private userBalances;
функція withdrawBalance() публічна { uint amountToRemove = userBalances[msg.sender]; (bool успіху ) = msg.sender.call.value(amountToWithdraw)("" ); require(успішно); userBalances[msg.sender] = 0; }
Оскільки баланс користувача обнуляється лише наприкінці функції, повторні виклики дозволяють багаторазово виводити.
Щоб вирішити проблему повторного входу, слід звернути увагу на:
Рекомендується використовувати зрілі практики безпеки, уникати повторного винаходу колеса.
Рекомендації щодо безпеки від проєкту
Як користувачам оцінити безпеку смарт-контрактів
Отже, у сфері Децентралізовані фінанси безпека має вирішальне значення. Команди проекту повинні всебічно будувати систему безпеки, а користувачі також повинні бути пильними та обережно брати участь.