В този блог Artem Kovalchuk, Vincent Alessi, и Vyacheslav Trushkov представят начина, по който често срещаните блокчейн събития могат да се превърнат в начин за откриване на аномалии чрез анализ на времеви серии. И двата бота за откриване, представени тук, са разработени от разработчиците на ботове от общността на Forta Артем и Вячеслав по време на състезанието във Forta. Целта на този блог е разширяване на набора с инструменти на общността на разработчиците на ботове, за създаване на по-напреднали ботове, които помагат за защитата на web3.
Мисията на Forta е да проследява всички транзакции и да защитава всички активи в Web3. Това е ръководен от общността протокол, в който разпределен набор от сканиращи ноди предават блокове и транзакции към разработени от общността ботове, които задействат констатации, подчертававащи свързани с работата и сигурността събития в блокчейна. Има над 600 разработчици на ботове за анализ във Forta като всеки може да създаде бот за откриване, за да се пробвате, започнете тук!
Ботовете за откриване могат да бъдат heuristic/евристични, които като цяло служат добре. За да проследите, например, дали даден акаунт се финансира от протокол за поверителност, като Tornado Cash и след това взаимодейства с вашия протокол, вие наблюдавате транзакциите за финансиране, поддържате състоянието на тези финансирани сметки и изпращате констатация, когато този акаунт взаимодейства с протокол (взаимодействие на сметка, финансирана от Tornado Cash).
Подходът обаче не работи добре, когато самото събитие е често или постоянно присъства, като например цената на газа на сделката? Какъв е добър праг да изберете? Добра стойност ли е приоритетната такса от 2? 5? 50? Освен това, какво ще стане, ако се промени с течение на времето и зависи от модела на използване на основния протокол? Това може да е само естеството на протокола (при някакво конкурентно събитие, като актуален NFT проект, при който хората често са нетърпеливи да видят, че транзакцията им е потвърдена бързо и затова са готови да платят по-висок газ). В тези случаи виждаме чести скокове в цените на газа, които дори могат да се отнесат към сезонните (например NFT се минтват всеки понеделник), така че бихме очаквали скокове в понеделник като част от нормалния ход на бизнеса. Ако обаче имаме протокол, при който такива сезонни модели не съществуват, скокове в цената на газа биха били рядкост и скок в бъдеще може да означава нещо наистина необичайно, като например някакъв вид атака.
Неотдавнашната атака на Ronin илюстрира това: Виждаме много скокове в приоритетните такси с течение на времето, но транзакцията на атакуващия определено се отличава и стърчи. Подходът с твърд праг вероятно ще доведе до много ненужни констатации. Това е мястото, където идва откриването на аномалии от времеви серии. Времевият ред събира числови стойности (напр. брои или абсолютни стойности) във времето.
Подходът за откриване на времеви серии отразява историческата променливост, както и сезонността, които могат да бъдат представени в данните (например таксите за приоритет на газа може да са по-високи през делничните дни, отколкото през уикендите). Той отразява също така лентата или диапазона и предупреждава, когато стойността излезе извън очаквания диапазон:
В тази публикация ще разгледаме подробно два бота, прилагащи подхода за откриване на анализ на времеви серии: ботът за откриване на високи газове, разработен в JavaScript, и ботът за откриване на ценови аномалии в Python.
Бот за откриване на висок газ в JavaScript
Артем разработи бот за откриване на висок газ в JavaScript, за да идентифицира атаката на Ronin, използвайки подход за анализ на времеви серии, идентифициране на въпросната транзакция за атака с възможно най-малко шум.
Първо, нека прегледаме каква стойност на данните за газа ще бъде анализирана от бота. След лондонския хард форк на Ethereum, EIP-1559 въведе базова такса за газ, която се определя от мрежата, като се вземе предвид претоварването на мрежата. Потребителят може да плати допълнителна такса за приоритет върху основната такса, за да получи приоритет на транзакциите си. Тази приоритетна такса ще се използва в бота.
За този бот — тъй като е написан на JavaScript, в който липсват пакетите за машинно обучение и научните данни, беше избран подход за анализ на статистически времеви серии. Могат да се използват променливите средни, но им е трудно да включат циклични модели, които може да съществуват в данните, така че аномалиите може да не бъдат правилно идентифицирани.
За да се реши този проблем, времевите серии се разлагат на няколко компонента, които улавят тенденцията, сезонността и остатъците.
JavaScript библиотеката zodiac-ts прилага този подход. Библиотеката поддържа метода на Holt Winters, който се основава на модел, състоящ се от три аспекта: типична стойност (средна стойност), наклон (тенденция) във времето и цикличен повтарящ се модел (сезонност).
Забележима особеност на тази библиотека е автоматичният избор на най-оптималните параметри на модела, при които отклонението на прогнозата от данните за обучение има най-малка грешка. Това ви позволява да адаптирате модела в зависимост от данните динамично, докато агентът работи. Всеки протокол ще има свои собствени параметри, които най-добре отговарят на неговите времеви серии.
За да се нормализират данните, беше решено да се използва бъкет размера от един час, като се вземе максималната бъкет стойност за период от 7 дни. Транзакциите обаче нямат ясна последователност във времето и често могат да имат пропуски между стойностите. Например, при някои не особено популярни смарт контракти може да се получава транзакция веднъж на всеки няколко часа или дори повече. В такива случаи можем да ги интерполираме, тоест сами да отгатнем стойностите. За целта е използван обикновен библиотечен диапазон-интерполатор. За да се намали шума във времевия ред, беше приложен филтър на Калман.
След като моделът на времевия ред беше създаден, той ни позволи да предвидим диапазона на очакваните стойности в следващата времева стъпка. Ако те се отклонят извън даден праг, е идентифицирана аномалия и се инициира предупреждение.
При тестването на бота по време на атаката Ronin (от блок14342885
до14442835
) се инициира съответното предупреждение.
Определяне на аномалии в цените с помощта на Бот в Python
Vyacheslav разработи бот за откриване, който открива необичайни промени в цените, наблюдавани при атаката на Saddle Finance и Inverse Finance. Този бот е разработен в Python, който разполага с богат набор от библиотеки за извършване на анализ на времеви серии.
Ботът за откриване на ценови аномалии е създаден като универсален инструмент за откриване на аномалии в промените в цените. Целта е да се покрият възможно най-много ценови емисии в възможно най-много мрежи.
Подобно на бота за откриване на високите цени за газ, задаване на определени прагове в случая не е подходящо, тъй като цените се държат съвсем различно в зависимост от актива: например някои токени с малка ликвидност са по-нестабилни, докато други имат ясна низходяща или възходяща тенденция; стейблкойните трябва да поддържат съотношение 1:1 спрямо базовия. Следователно, адаптивният праг за всяка отделна ценова двойка трябва да се поддържа. Подходът на времевите редове изглежда подходящ за идентифициране на статистически значими движения на цените, които могат да бъдат показателни за атака.
Моделирането на няколко ценови емисии във времеви серии ни поставя пред изчислителни предизвикателства и такива свързани с паметта, за да поддържаме серия от актуални модели на времеви серии. За да реши този проблем, ботът използва асинхронна база данни, предоставена от библиотеката SQLAlchemy, SQL инструментариум с отворен код с ORM технология, заедно с разширение asyncio, което е бързо и стабилно.
Манипулирането на цените, както се вижда в атаката Saddle Finance и Inverse Finance, които се получават он-чейн чрез манипулиране на определени ликвидни пулове, на които протоколите могат да разчитат като оракул, за да получат своите данни за цените.
Python
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount0",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "amount1",
"type": "int256"
},
{
"indexed": false,
"internalType": "uint160",
"name": "sqrtPriceX96",
"type": "uint160"
},
{
"indexed": false,
"internalType": "uint128",
"name": "liquidity",
"type": "uint128"
},
{
"indexed": false,
"internalType": "int24",
"name": "tick",
"type": "int24"
}
],
"name": "Swap",
"type": "event"
}
Amount0
иamount1
стойности са такива наtoken0
заменени от сумата наtoken1
. Следователно, като разделим едно на второ, цена, която можем да поддържаме в гореспоменатата база данни, като събитията се представят на бота.
Отново се обръщаме към анализа на времевите редове, за да разберем дали е настъпило аномално движение. Prophet, разработена от Meta, е библиотеката, използвана в този бот. Върши отлична работа с такива параметри като сезонност и тенденция. Стартирането на бота на блокове от14502359
до14507132
(моментът, в който се случва атака на Inverse Finance) показва следните времеви серии за ценовите данни на пула WETH-INV:
Черните точки на тази диаграма са действителната суап цена (групирана по минути с функцията средна ()), синята линия показва прогнозите, а светлосинята област показва очаквания диапазон (ширината се конфигурира според конфигурационните стойности на библиотека Prophet). Вдясно продължавате да виждате диапазон без никакви точки, който представлява прогнозите на Prophet, които ботът използва, за да повдигне сигнала за предупреждение, ако цените варират извън тези прогнози.
Отново, ботът е валидиран за редица атаки и представлява чудесно допълнение за идентифициране на атаки при манипулиране на цените/атаки към оракули към стотиците ботове на Forta, които помагат за защитата на Web3 днес.
Ботовете за откриване позволяват широк спектър от свобода на разработчиците. В тази публикация в блога ние илюстрирахме как проблем с данните може да бъде решен с откриване на аномалии във времеви серии, за да се идентифицират важните събития, свързани със сигурността, чрез Forta сигнали. Ако разработвате ботове за откриване във Forta и се занимавате с данни от времеви серии, помислете за прилагане на един от тези подходи. Това ще помогне за по-доброто отделяне на сигнала от шума и ще помогне за получаване на по-полезни сигнали. Започнете тук и се присъединете към Forta Discord, за да обсъдите разработването на ботове и за откриване на идеи за разработване на ботове.
Оригинална статия: линк