
Próbálja ki a legújabb dimenziós elemzési Claude bővítményünket.
FORRÁS
The Trail of Bits Blog
DATE
READ
4 perc olvasás
Új Claude Code-szintű bővítménytocsátottak elérhetővé, amely a dimenziós elemzésre összpontosít, hogy javítsák a kódellenőrzést és a fejlesztést. A hagyományos LLM-alapú biztonsági eszközökkel ellentétben, ez a bővítmény …
Мы выпускаем новый плагин Claude для разработки и аудита кода, который реализует анализ размерности, технику, которую мы исследовали в нашей последней статье в блоге. Большинство навыков, основанных на LLM, просят модель найти ошибки. Наш новый плагин анализа размерности для Claude Code использует другой подход: он использует LLM для аннотирования вашего кода с использованием типов размерности, затем автоматически обнаруживает несоответствия. При тестировании против реальных результатов аудита он показал 93% точности по сравнению с 50% для базовых запросов. Вы можете загрузить и использовать наш новый плагин анализа размерности, выполнив следующие команды: claude plugin marketplace add trailofbits/skills claude plugin install dimensional-analysis@trailofbits claude /dimensional-analysis Как наш плагин отличается от большинства навыков Этот выпуск плагина существенно отличается от волны навыков анализа безопасности, выпущенных в течение последних нескольких недель. Наблюдаемые навыки обычно используют относительно простой подход, при котором LLM инициализируется набором классов уязвимостей, инструкциями по исследованию и примерами результатов, а затем просят его попытаться выявить ошибки в рамках данного навыка. К сожалению, эти подходы обычно приводят к низкокачественным результатам, с точностью, точностью и детерминированностью, которые часто намного хуже, чем просто просьба к LLM “найти ошибки в этом проекте”. То, что отличает анализ размерности, заключается в том, что вместо того, чтобы полагаться на суждения LLM для поиска, идентификации и ранжирования уязвимостей, он использует LLM в качестве машины для построения словарного запаса/категоризации, которая напрямую аннотирует код. Если аннотации верны и присутствует ошибка размерности, эта ошибка отображается как несоответствие аннотаций, а не требуется полагаться на суждения LLM для определения, насколько приемлемым является результат. Таким образом, это изменяет способ использования возможности рассуждения LLM, и дает гораздо лучшие результаты, чем базовые запросы, которые чрезмерно полагаются на возможности рассуждения LLM. Тестирование Мы протестировали анализ размерности против набора проблем, связанных с несоответствием размерности, обнаруженных во время нескольких непротоколируемых аудитов, и сравнили его с базовым запросом, используя 10 образцов на код. Для этой оценки плагин анализа размерности имел коэффициент точности 93% со стандартным отклонением 12%, по сравнению с базовым запросом, который имел коэффициент точности 50% со стандартным отклонением 20%. Это означает, что анализ размерности выполнялся лучше и более последовательно, чем базовый запрос. Как это работает Если вы еще не сделали этого, прочитайте нашу первую статью в блоге о технике анализа размерности. Плагин работает над четырьмя основными этапами: обнаружение размерности, аннотирование размерности, распространение размерности и проверка размерности. На первом этапе суб-агент выполняет обнаружение размерности, с целью выявления словарного запаса основных базовых единиц, из которых состоит каждое числовое выражение в системе. В ходе этого процесса также идентифицируется набор общих производных единиц для быстрого использования другими агентами. Рисунок 1: Пример словарного запаса размерности для протокола Uniswap v4. Словарный запас размерности сохраняется в DIMENSIONAL_UNITS.md, где его могут прочитать другие агенты или использовать во время разработки, если вы решите сделать аннотации постоянной частью жизненного цикла разработки вашего программного обеспечения. На втором этапе запускается группа суб-агентов для непосредственной аннотации кода с использованием словарного запаса размерности. Каждому суб-агенту предоставляется файл DIMENSIONAL_UNITS.md, набор файлов для аннотирования и инструкции по аннотированию переменных состояния, аргументов функций, объявлений переменных и любых частей сложных арифметических выражений. Эти первоначальные аннотации называются “анкорными” аннотациями. } else if (currentPrice < peakPrice) { // D18{1} = (D18{price} - D18{price}) * D18{1} / (D18{price} - D18{price}) imbalance = ((peakPrice - currentPrice) * imbalanceSlopeData.imbalanceSlopeBelowPeak) / (peakPrice - eclpParams.alpha.toUint256()); } else { // D18{1} = (D18{price} - D18{price}) * D18{1} / (D18{price} - D18{price}) imbalance = ((currentPrice - peakPrice) * imbalanceSlopeData.imbalanceSlopeAbovePeak) / (eclpParams.beta.toUint256() - peakPrice); } Рисунок 2: Пример аннотированной арифметики из Balancer v3. На третьем этапе “распространяются” размеры по каждому файлу на вызывающие и вызываемые функции. Этот этап добавляет дополнительные аннотации к файлам с низкой приоритизацией, которые не получили аннотаций на первом этапе, и выполняет первую серию проверок, чтобы убедиться, что размеры согласуются в одном и том же контексте кода и между файлами. Важно отметить, что несоответствие размерности на этом этапе не обязательно означает наличие уязвимости; иногда невозможно точно определить размер вызванной функции без чтения реализации функции, и система будет чрезмерно обобщать или делать плохой предположение. На третьем этапе пытается “исправить” эти чрезмерно обобщенные аннотации, и, если это невозможно, они отмечаются для triage в последнем шаге. На четвертом и последнем этапе плагин пытается обнаружить несоответствия и провести triage. Несоответствие размерности проверяется при присваивании, при арифметических операциях, между границами функций, между путями возврата и между внешними вызовами. Несоответствия размерности сравниваются с классификацией серьезности в зависимости от характера несоответствия, и возвращается окончательный отчет пользователю. Что дальше? Если вы разработчик, работающий над проектом, основанным на арифметике, таком как смарт-контракт или блокчейн-нода, мы настоятельно рекомендуем использовать этот плагин, а затем коммитить DIMENSIONAL_UNITS.md вместе со всеми аннотациями, созданными плагином. Кроме поиска ошибок, эти аннотации могут значительно улучшить время, необходимое для получения глубокого понимания сложного кода, и помочь как людям, так и LLM, понять семантическое значение арифметических выражений вашего проекта. Хотя новые инструменты интересны, в настоящее время мы не считаем, что этот инструмент сможет найти все источники ошибок. LLM являются вероятностными, что означает, что всегда будет некоторый уровень ошибок. Мы заинтересованы в улучшении этого плагина, поэтому, если вы его используете и он пропускает ошибку размерности, пожалуйста, откройте проблему в нашем GitHub.