Анализ смарт контрактов через логические паттерны
В процессе построения своего проекта, я постоянно ищу новые методы и механизмы поиска уязвимостей с помощью ИИ. И вот на днях наткнулся на опубликованную в Arxiv работу китайских разработчиков, кратким содержанием которой я хочу сейчас поделиться.
Авторы исследования начинают с жёсткой констатации факта: «Смарт-контракты управляют миллиардами долларов в DeFi, однако автоматизированное обнаружение уязвимостей остаётся сложной задачей, потому что многие уязвимости тесно связаны с проектно-специфичной бизнес-логикой». Ключевая проблема в том, что традиционные методы вроде фаззинга или статического анализа не справляются, так как не понимают высокоуровневых экономических механизмов. Учёные выдвигают гипотезу: «повторяющиеся уязвимости в разных бизнес-моделях DeFi часто разделяют одни и те же базовые экономические механизмы, которые мы называем DeFi семантикой». Идея в том, что если научить систему распознавать эти абстрактные механизмы, она сможет находить уязвимости даже в совершенно разном коде.
В качестве примера авторы приводят два проекта — InsureDAO (2022) и Salty.IO (2024). Цитата: «хотя эти уязвимости появляются в совершенно разных протоколах — один сосредоточен на андеррайтинге страхования, а другой на автоматическом маркет-мейкинге и управлении ликвидностью — обе они проистекают из одного и того же паттерна DeFi семантики, пропорционального учёта токенов, и разделяют общий сценарий атаки, известный как атака первого депозитора». Этот пример показывает, что за внешними различиями скрывается общая уязвимая конструкция.
Система KnowDIT строится в два этапа. Сначала создаётся граф знаний на основе исторических отчётов аудита. Цитата: «граф построен инкрементально с помощью LLM-пайплайна, который абстрагирует, классифицирует и дедуплицирует знания». В итоге, «граф содержит 475 дедуплицированных DeFi семантик, объединённых из 1429 кандидатов, 579 паттернов уязвимостей, полученных из 3904 аудиторских находок, и 2096 подтверждённых связей между семантиками и паттернами». Это позволяет системе не просто искать по ключевым словам, а понимать причинно-следственные связи между экономическим механизмом и возможной атакой.
Второй этап — мультиагентный аудит нового проекта. Работа строится вокруг «разделяемой рабочей памяти, которая отслеживает выполнение, покрытие и обратную связь». Процесс итеративный: агенты по очереди генерируют спецификацию, синтезируют обвязку для фаззинга, выполняют её и рефлексируют над результатами. Цитата: «ошибки выполнения или проблемы со спецификацией записываются в рабочую память, чтобы направлять регенерацию, в то время как подтверждённые уязвимости сообщаются и интегрируются обратно в граф знаний, обеспечивая автоматизированный, подобный человеческому аудит с непрерывным уточнением и накоплением знаний».
Результаты впечатляют. На датасете AuditEval, состоящем из 12 свежих проектов Code4rena, система показала следующее: «KnowDIT обнаруживает все 14 High severity и 77% Med severity уязвимостей всего с 2 ложными срабатываниями, значительно превосходя все базовые методы». Для сравнения, другие инструменты вроде GPTScan и PropertyGPT нашли лишь от 4 до 22 уязвимостей. Цитата про статические методы: «GPTScan находит только 4 средних уязвимости и не обнаруживает ни одной высокой, потому что GPTScan полагается на фиксированные модели сценариев атаки». А про инвариантные методы: «PromFuzz не даёт никаких результатов, а PropertyGPT идентифицирует только 6 средних уязвимостей с 3 ложными срабатываниями».
Post #1586
678
- ❤ 2