Обзор работы с репозиторием 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/
: