Vanguard for Aleo

klaploper
2 min readJan 30, 2024

--

Обзор работы с репозиторием Vanguard

В этом репозитории размещена ветка Python с открытым исходным кодом инструмента статического анализатора Vanguard, разработанного Veridise. Эта версия оптимизирована для анализа программ Leo/Aleo.

Предварительные условия

Для запуска инструмента (различных компонентов) необходимы следующие библиотеки:

  • Rust (1.73+) для запускаaleo2json
  • Python (3.10+) для запуска Vanguard и его детекторов Aleo.
  • NetworkX (2.8.4+) для ускорения доступности графов в детекторах
  • Leo ( 7ac50d8 ) за компиляцию и запуск всех прилагаемых тестов.

Компилятор Aleo в JSON

Запуск Vanguard для Aleo зависит от компилятора, который преобразует программы Aleo в JSON, что позволяет дополнительно анализировать программу с помощью различных инструментов и расширений. Он адаптирован из snarkVM Алео . Чтобы позволить Vanguard напрямую обрабатывать программы Aleo, мы рекомендуем установить компилятор во время тестирования инструмента с помощью:

git clone https://github.com/Veridise/aleo2json.git
cd aleo2json/
cargo install --path . --bin aleo2json

Чтобы удалить его в будущем, просто выполните:

cargo uninstall -p snarkvm --bin aleo2json

Применение

Инструмент aleo2jsonпринимает в качестве входных данных путь к *.aleoфайлу и напрямую выводит скомпилированный JSON, который включает расширенную информацию о программе и результаты базового анализа (например, типы переменных, видимость и т. д.):

aleo2json <path-to-aleo-file>

Авангард Алео

Библиотека Vanguard для Aleo предоставляет как интеграцию с aleo2jsonинструментом, так и базовые утилиты для написания детекторов на основе статического анализа. Мы также включили детекторы нескольких распространенных уязвимостей.

Использование библиотеки

Анализатор можно установить с помощью pipинструментов настройки, запустив:

pip install .

и если вы хотите удалить его:

pip uninstall vanguard

Вы можете написать детекторы, просто используя некоторые функции анализатора. Вот пример, который анализирует и получает все общедоступные выходные данные/сигналы из данной программы Aleo:

from vanguard.aleo.common import aleo2json
from vanguard.aleo.detectors.divz import detector_divz

aleo_path = ...
aleo_json = aleo2json(aleo_path)

out, info = detector_divz(ap, "main")

Доступные детекторы

from vanguard.aleo.detectors.infoleak import detector_infoleak
from vanguard.aleo.detectors.rtcnst import detector_rtcnst
from vanguard.aleo.detectors.unused import detector_unused
from vanguard.aleo.detectors.divz import detector_divz

...

Примеры уязвимостей Leo/Aleo

Вы можете найти примеры, демонстрирующие уязвимости Leo/Aleo с комментариями и аннотациями в проектах tests/:

--

--