У швидкозмінному світі DeFi забезпечення стабільності та безпеки протоколу є надзвичайно важливим. Під час останнього перегляду безпеки проекту CDP я помітив, які конкретні вразливості можуть виникнути за певних конфігурацій. Хоча поточні параметри в цьому проекті є надійними, розуміння цих потенційних ризиків є ключовим для збереження цілісності протоколу.
Ця стаття має на меті дослідити критичну роль, яку відіграють одноразові вартості позики та вартості викупу в цьому контексті. Аналізуючи конкретні сценарії використання, які можуть виникнути без цих витрат, я продемонструю, як правильна структура витрат є важливою для запобігання дестабілізуючих атак, тим самим забезпечуючи довгострокову безпеку та життєздатність протоколу.
Натхненням для одного з оригінальних протоколів, Liquity, та його похідних є багато моделей CDP (позицій забезпечених заставою) , що генерують децентралізовані стабільні монети через переколатеризацію. Ці моделі часто включають складний, але вишуканий набір механізмів, призначених для підтримання прив'язки до долара США, забезпечуючи безпеку протоколу в різних умовах, ефективно мінімізуючи ризик поганих боргів. Ці протоколи відрізняються через ключові налаштування, включаючи настроєні економічні стимули, які більш тісно відповідають конкретним цілям протоколу.
Плата за викуп є збором, який застосовується, коли користувач викуповує стабільну монету протоколу за основний заставний актив. Ця плата призначена для стабілізації вартості стабільної монети, роблячи процес викупу більш витратним, коли викупи є частими, тим самим запобігаючи надмірним викупам, які могли б дестабілізувати протокол.
Плата за погашення розраховується на основі базової ставки протоколу, динамічного параметра, який відображає останню активність у системі. Зокрема, базова ставка зростає з кожним погашенням, що робить наступні погашення дорожчими.
Цей приріст пропорційний частці загального обсягу стейблкоїнів, які підлягають викупу. З плином часу, якщо не відбувається жодного викупу, базова ставка поступово знижується до нуля з періодом напіврозпаду приблизно 12 годин.
Плата за погашення обчислюється за формулою:
Наприклад, якщо baseRate становить 1%, а користувач викупляє 100 стабільних монет, коли ціна застави становить $50,000, комісія за викуп складатиме:
Отже, користувач отримав би трохи менше застави після врахування плати за викуп. Цей механізм забезпечує, що викупи залишаються економічно доцільними, захищаючи при цьому протокол від дестабілізуючих арбітражних операцій.
Плата за позику - це ще одна одноразова плата, яка стягується, коли користувач позичає стейблкоїни під заставу. Ця плата також базується на базовій ставці, але застосовується в момент, коли стейблкоїни виводяться з трюби користувача (контракт сховища, що утримує заставу та борг користувача).
Плата за позиковування обчислюється наступним чином:
Наприклад, якщо користувач хоче позичити 4 000 стабільних монет, а базова ставка встановлена на рівні 0,5%, комісія складатиме:
Ця комісія додається до боргу користувача, що означає, що їх загальний борг складатиметься з суми, позиченої плюс комісія (наприклад, 4 000 стейблкоїнів + 20 стейблкоїнів = 4 020 стейблкоїнів).
Ці комісії також виступають як м'які кільця, непрямо впливаючи на ринкову ціну стейблкоїна, роблячи його менш привабливим для позики або викупу за певних умов, тим самим допомагаючи тримати стейблкоїн тісно прив'язаним до $1.
Тепер давайте дослідимо, що може трапитися, якщо ці важливі комісії будуть вилучені або встановлені на нуль.
Без одноразової комісії за викуп протокол може ненавмисно перетворитися на DEX свопу з нульовим прослизанням. За такого сценарію великі власники стейблкоїнів можуть використовувати механізм викупу, щоб обміняти стейблкоїни на заставу без значних витрат, ефективно здійснюючи великомасштабні арбітражні угоди. Це може призвести до кількох негативних наслідків, оскільки в цьому середовищі з нульовим прослизанням великомасштабні погашення не тільки виснажать ліквідність протоколу, але й змусять позичальників продавати свою заставу за поточною ринковою ціною. Хоча їхній борг буде відповідно зменшено, ця примусова ліквідація може збільшити операційні витрати для користувачів, особливо якщо стейблкоїн торгується нижче 1 долара.
Крім того, існує ризик передвиження передорожника оракула: якщо користувач помічає, що транзакція збирається оновити оракул ціни застави, щоб відображати вищу ціну, вони можуть швидко здійснити викуп великої кількості стабілкоїна перед оновленням ціни. Після оновлення ціни застави і її зростання користувач може продати викуплену заставу з прибутком, завершивши арбітражний цикл. Ця практика не тільки експлуатує протокол, але також ставить боржників у невигідне положення, оскільки їм можуть змусити продавати свою заставу по менш вигідних цінах.
Один з найпростіших сценаріїв використання полягає в маніпулюванні комісією за викуп, щоб знизити витрати. У протоколах, де немає одноразової комісії за позику, користувачі можуть позичати великі суми стейблкоїна, штучно збільшуючи загальний борг протоколу. Після збільшення боргу вони можуть викупити свої стейблкоїни за меншу комісію, оскільки комісія за викуп розраховується на основі співвідношення розміру викупу до загального боргу.
Ця маніпуляція підриває заплановану структуру комісій протоколу, що призводить до зниження доходу протоколу та потенційно дестабілізує систему. Наприклад, зловмисники можуть використовувати флеш-позики для запозичення великих сум застави, які потім використовують для карбування значної кількості стейблкоїнів, тим самим збільшуючи загальний борг системи. Потім вони виконують операцію викупу, отримуючи вигоду від зниженої комісії через завищений борг, і, нарешті, погашають флеш-позику, залишаючи протокол з меншим доходом, ніж очікувалося, і це може призвести до подальшої нестабільності для тих користувачів, які, можливо, не очікували, що будуть націлені на викуп.
Інша критична вразливість виникає з можливості примусити протокол у режим відновлення в одному блоку, що дозволяє ліквідувати позиції з раніше здоровими коефіцієнтами забезпеченості. Цей вторгнення ґрунтується на використанні швидких кредитів і вибору моменту атаки навколо оновлення ціни оракула.
Атака розгортається наступним чином:
Атакувальник спочатку використовує швидкий кредит, щоб позичити велику суму застави, яка потім депонується як застава в протоколі. Використовуючи цю заставу, атакувальник позичає стабільні монети за Мінімальним Коефіцієнтом Застави (MCR). Атакувальник може виконувати цю дію, щоб знизити Загальний Коефіцієнт Застави (TCR) до 150%, порогу для тригерування Режиму Відновлення.
Атакувальник чекає на оновлення оракула, яке відображає зниження ціни застави. При оновленні нової нижчої ціни в системі вартість застави знижується, що призводить до падіння TCR нижче 150%.
З TCR тепер нижче 150%, протокол автоматично переходить в режим відновлення. У цьому стані протокол дозволяє ліквідацію Троуз з коефіцієнтами забезпечення (CR) нижче нового TCR. Зловмисник може потім переходити до ліквідації Троуз інших користувачів, які тепер мають CR нижче TCR, завдавши їм збитків та отримуючи прибуток від винагороди за ліквідацію.
Побудовавши на попередньому сценарії атаки, цей вдосконалений експлойт дозволяє зловмиснику примусити протокол у режим відновлення через ретельно розроблений процес викупу. На відміну від попередньої атаки, яка може тимчасово повернути систему до нормального режиму після ліквідації, цей метод забезпечує, що система залишиться в режимі відновлення, дозволяючи зловмиснику повторно експлуатувати вразливість.
Основна проблема, яка виникає, коли система підтримує кілька типів застави, кожен з яких управляється різними менеджерами Trove, полягає в тому, що загальний коефіцієнт застави (TCR) у всій системі може зменшитися після викупу, навіть якщо здоров'я окремих менеджерів Trove покращиться. Цей парадоксальний результат є результатом складної взаємодії між глобальними та локальними коефіцієнтами забезпечення.
Наприклад, розгляньте сценарій, де TCR системи становить 150%.
Якщо користувач викупить скарбницю з коефіцієнтом застави 160%, що призведе до закриття цієї скарбниці, отриманий розрахунок підніме TCR нижче 150%, запустивши режим відновлення.
Атака розгортається наступним чином:
Атакуючий відкриває мінімальну позицію з відношенням застави трохи більше 150% в ретельно вибраному Trove. Ця настройка є ключовою для забезпечення того, що викуп у наступному кроці ефективно знизить TCR нижче критичного порогу.
Атакувальник використовує флеш-кредит, щоб відкрити ще одну позицію з коефіцієнтом застави на мінімальному рівні застави (MCR) 110% в будь-якому менеджері Trove, що знижує Загальний коефіцієнт застави (TCR) системи до точно 150%. Цей крок підготовлює систему до режиму відновлення.
Атакуючий потім оплачує позицію, відкриту на першому кроці. Оскільки ця позиція має CR трохи більше 150%, оплачення її призводить до зниження TCR нижче 150%, тим самим спрацьовує режим відновлення. Оплата впливає не тільки на конкретну Схованку, що підлягає викупу, але й спричиняє системний ефект, що приводить до активації режиму відновлення TCR.
Зараз, коли система перебуває в режимі відновлення, зловмисник може ліквідувати будь-яку позицію з коефіцієнтом забезпеченості нижче 150%. Ці ліквідації можуть відновити TCR до рівня понад 150%.
Атакувальник може повторювати кроки за необхідністю, підтримуючи систему в режимі відновлення, щоб постійно використовувати Трої з коефіцієнтами застави нижче 150%.
Одноразові комісії за викуп та позичання відіграють важливу роль у пом'якшенні ризиків, пов'язаних із описаними векторами атаки. Завдяки введенню вартості позичання та викупу, ці комісії роблять нерентабельними для атакувальників виконання маніпуляцій на велику шкалу у більшості випадків.
Наприклад, в ситуації з маніпулюванням платою за викуп, одноразова плата за позику збільшує вартість надування боргу системи, що робить невигідним для зловмисника експлуатувати плату за викуп. Так само, в сценаріях, де зловмисник намагається спровокувати режим відновлення, плата за позику виступатиме як стримувальний фактор, підвищуючи вартість накопичення великих сум боргу для маніпулювання TCR.
Під час розвитку DeFi протоколи будуть стикатися зі все більш високою складністю атак. Щоб залишатися вперед, важливо розуміти, як взаємодіють різні функції та потенційно створюють вразливості. Ефективна безпека потребує глибокого розуміння того, як взаємодіють різні компоненти системи, а також уважного уваги до налаштувань та параметрів, які регулюють ці взаємодії. Шляхом прогнозування способів, якими функції можуть поєднатися для створення вразливостей, дизайнери можуть створювати протоколи, які не лише безпечні, а й стійкі та пристосовані до майбутніх викликів.
Partager
У швидкозмінному світі DeFi забезпечення стабільності та безпеки протоколу є надзвичайно важливим. Під час останнього перегляду безпеки проекту CDP я помітив, які конкретні вразливості можуть виникнути за певних конфігурацій. Хоча поточні параметри в цьому проекті є надійними, розуміння цих потенційних ризиків є ключовим для збереження цілісності протоколу.
Ця стаття має на меті дослідити критичну роль, яку відіграють одноразові вартості позики та вартості викупу в цьому контексті. Аналізуючи конкретні сценарії використання, які можуть виникнути без цих витрат, я продемонструю, як правильна структура витрат є важливою для запобігання дестабілізуючих атак, тим самим забезпечуючи довгострокову безпеку та життєздатність протоколу.
Натхненням для одного з оригінальних протоколів, Liquity, та його похідних є багато моделей CDP (позицій забезпечених заставою) , що генерують децентралізовані стабільні монети через переколатеризацію. Ці моделі часто включають складний, але вишуканий набір механізмів, призначених для підтримання прив'язки до долара США, забезпечуючи безпеку протоколу в різних умовах, ефективно мінімізуючи ризик поганих боргів. Ці протоколи відрізняються через ключові налаштування, включаючи настроєні економічні стимули, які більш тісно відповідають конкретним цілям протоколу.
Плата за викуп є збором, який застосовується, коли користувач викуповує стабільну монету протоколу за основний заставний актив. Ця плата призначена для стабілізації вартості стабільної монети, роблячи процес викупу більш витратним, коли викупи є частими, тим самим запобігаючи надмірним викупам, які могли б дестабілізувати протокол.
Плата за погашення розраховується на основі базової ставки протоколу, динамічного параметра, який відображає останню активність у системі. Зокрема, базова ставка зростає з кожним погашенням, що робить наступні погашення дорожчими.
Цей приріст пропорційний частці загального обсягу стейблкоїнів, які підлягають викупу. З плином часу, якщо не відбувається жодного викупу, базова ставка поступово знижується до нуля з періодом напіврозпаду приблизно 12 годин.
Плата за погашення обчислюється за формулою:
Наприклад, якщо baseRate становить 1%, а користувач викупляє 100 стабільних монет, коли ціна застави становить $50,000, комісія за викуп складатиме:
Отже, користувач отримав би трохи менше застави після врахування плати за викуп. Цей механізм забезпечує, що викупи залишаються економічно доцільними, захищаючи при цьому протокол від дестабілізуючих арбітражних операцій.
Плата за позику - це ще одна одноразова плата, яка стягується, коли користувач позичає стейблкоїни під заставу. Ця плата також базується на базовій ставці, але застосовується в момент, коли стейблкоїни виводяться з трюби користувача (контракт сховища, що утримує заставу та борг користувача).
Плата за позиковування обчислюється наступним чином:
Наприклад, якщо користувач хоче позичити 4 000 стабільних монет, а базова ставка встановлена на рівні 0,5%, комісія складатиме:
Ця комісія додається до боргу користувача, що означає, що їх загальний борг складатиметься з суми, позиченої плюс комісія (наприклад, 4 000 стейблкоїнів + 20 стейблкоїнів = 4 020 стейблкоїнів).
Ці комісії також виступають як м'які кільця, непрямо впливаючи на ринкову ціну стейблкоїна, роблячи його менш привабливим для позики або викупу за певних умов, тим самим допомагаючи тримати стейблкоїн тісно прив'язаним до $1.
Тепер давайте дослідимо, що може трапитися, якщо ці важливі комісії будуть вилучені або встановлені на нуль.
Без одноразової комісії за викуп протокол може ненавмисно перетворитися на DEX свопу з нульовим прослизанням. За такого сценарію великі власники стейблкоїнів можуть використовувати механізм викупу, щоб обміняти стейблкоїни на заставу без значних витрат, ефективно здійснюючи великомасштабні арбітражні угоди. Це може призвести до кількох негативних наслідків, оскільки в цьому середовищі з нульовим прослизанням великомасштабні погашення не тільки виснажать ліквідність протоколу, але й змусять позичальників продавати свою заставу за поточною ринковою ціною. Хоча їхній борг буде відповідно зменшено, ця примусова ліквідація може збільшити операційні витрати для користувачів, особливо якщо стейблкоїн торгується нижче 1 долара.
Крім того, існує ризик передвиження передорожника оракула: якщо користувач помічає, що транзакція збирається оновити оракул ціни застави, щоб відображати вищу ціну, вони можуть швидко здійснити викуп великої кількості стабілкоїна перед оновленням ціни. Після оновлення ціни застави і її зростання користувач може продати викуплену заставу з прибутком, завершивши арбітражний цикл. Ця практика не тільки експлуатує протокол, але також ставить боржників у невигідне положення, оскільки їм можуть змусити продавати свою заставу по менш вигідних цінах.
Один з найпростіших сценаріїв використання полягає в маніпулюванні комісією за викуп, щоб знизити витрати. У протоколах, де немає одноразової комісії за позику, користувачі можуть позичати великі суми стейблкоїна, штучно збільшуючи загальний борг протоколу. Після збільшення боргу вони можуть викупити свої стейблкоїни за меншу комісію, оскільки комісія за викуп розраховується на основі співвідношення розміру викупу до загального боргу.
Ця маніпуляція підриває заплановану структуру комісій протоколу, що призводить до зниження доходу протоколу та потенційно дестабілізує систему. Наприклад, зловмисники можуть використовувати флеш-позики для запозичення великих сум застави, які потім використовують для карбування значної кількості стейблкоїнів, тим самим збільшуючи загальний борг системи. Потім вони виконують операцію викупу, отримуючи вигоду від зниженої комісії через завищений борг, і, нарешті, погашають флеш-позику, залишаючи протокол з меншим доходом, ніж очікувалося, і це може призвести до подальшої нестабільності для тих користувачів, які, можливо, не очікували, що будуть націлені на викуп.
Інша критична вразливість виникає з можливості примусити протокол у режим відновлення в одному блоку, що дозволяє ліквідувати позиції з раніше здоровими коефіцієнтами забезпеченості. Цей вторгнення ґрунтується на використанні швидких кредитів і вибору моменту атаки навколо оновлення ціни оракула.
Атака розгортається наступним чином:
Атакувальник спочатку використовує швидкий кредит, щоб позичити велику суму застави, яка потім депонується як застава в протоколі. Використовуючи цю заставу, атакувальник позичає стабільні монети за Мінімальним Коефіцієнтом Застави (MCR). Атакувальник може виконувати цю дію, щоб знизити Загальний Коефіцієнт Застави (TCR) до 150%, порогу для тригерування Режиму Відновлення.
Атакувальник чекає на оновлення оракула, яке відображає зниження ціни застави. При оновленні нової нижчої ціни в системі вартість застави знижується, що призводить до падіння TCR нижче 150%.
З TCR тепер нижче 150%, протокол автоматично переходить в режим відновлення. У цьому стані протокол дозволяє ліквідацію Троуз з коефіцієнтами забезпечення (CR) нижче нового TCR. Зловмисник може потім переходити до ліквідації Троуз інших користувачів, які тепер мають CR нижче TCR, завдавши їм збитків та отримуючи прибуток від винагороди за ліквідацію.
Побудовавши на попередньому сценарії атаки, цей вдосконалений експлойт дозволяє зловмиснику примусити протокол у режим відновлення через ретельно розроблений процес викупу. На відміну від попередньої атаки, яка може тимчасово повернути систему до нормального режиму після ліквідації, цей метод забезпечує, що система залишиться в режимі відновлення, дозволяючи зловмиснику повторно експлуатувати вразливість.
Основна проблема, яка виникає, коли система підтримує кілька типів застави, кожен з яких управляється різними менеджерами Trove, полягає в тому, що загальний коефіцієнт застави (TCR) у всій системі може зменшитися після викупу, навіть якщо здоров'я окремих менеджерів Trove покращиться. Цей парадоксальний результат є результатом складної взаємодії між глобальними та локальними коефіцієнтами забезпечення.
Наприклад, розгляньте сценарій, де TCR системи становить 150%.
Якщо користувач викупить скарбницю з коефіцієнтом застави 160%, що призведе до закриття цієї скарбниці, отриманий розрахунок підніме TCR нижче 150%, запустивши режим відновлення.
Атака розгортається наступним чином:
Атакуючий відкриває мінімальну позицію з відношенням застави трохи більше 150% в ретельно вибраному Trove. Ця настройка є ключовою для забезпечення того, що викуп у наступному кроці ефективно знизить TCR нижче критичного порогу.
Атакувальник використовує флеш-кредит, щоб відкрити ще одну позицію з коефіцієнтом застави на мінімальному рівні застави (MCR) 110% в будь-якому менеджері Trove, що знижує Загальний коефіцієнт застави (TCR) системи до точно 150%. Цей крок підготовлює систему до режиму відновлення.
Атакуючий потім оплачує позицію, відкриту на першому кроці. Оскільки ця позиція має CR трохи більше 150%, оплачення її призводить до зниження TCR нижче 150%, тим самим спрацьовує режим відновлення. Оплата впливає не тільки на конкретну Схованку, що підлягає викупу, але й спричиняє системний ефект, що приводить до активації режиму відновлення TCR.
Зараз, коли система перебуває в режимі відновлення, зловмисник може ліквідувати будь-яку позицію з коефіцієнтом забезпеченості нижче 150%. Ці ліквідації можуть відновити TCR до рівня понад 150%.
Атакувальник може повторювати кроки за необхідністю, підтримуючи систему в режимі відновлення, щоб постійно використовувати Трої з коефіцієнтами застави нижче 150%.
Одноразові комісії за викуп та позичання відіграють важливу роль у пом'якшенні ризиків, пов'язаних із описаними векторами атаки. Завдяки введенню вартості позичання та викупу, ці комісії роблять нерентабельними для атакувальників виконання маніпуляцій на велику шкалу у більшості випадків.
Наприклад, в ситуації з маніпулюванням платою за викуп, одноразова плата за позику збільшує вартість надування боргу системи, що робить невигідним для зловмисника експлуатувати плату за викуп. Так само, в сценаріях, де зловмисник намагається спровокувати режим відновлення, плата за позику виступатиме як стримувальний фактор, підвищуючи вартість накопичення великих сум боргу для маніпулювання TCR.
Під час розвитку DeFi протоколи будуть стикатися зі все більш високою складністю атак. Щоб залишатися вперед, важливо розуміти, як взаємодіють різні функції та потенційно створюють вразливості. Ефективна безпека потребує глибокого розуміння того, як взаємодіють різні компоненти системи, а також уважного уваги до налаштувань та параметрів, які регулюють ці взаємодії. Шляхом прогнозування способів, якими функції можуть поєднатися для створення вразливостей, дизайнери можуть створювати протоколи, які не лише безпечні, а й стійкі та пристосовані до майбутніх викликів.