Документация
ОС Аврора 5.1.5

Анализатор Svace

Svace — это статический анализатор, разработанный компанией ИСП РАН (Институт системного программирования им. В. П. Иванникова Российской академии наук). Он представляет собой инструмент для обнаружения ошибок и аномалий, включая:

  • Ошибки работы с памятью:
    • разыменование нулевых указателей (null pointer dereferences);
    • утечки памяти (memory leaks);
    • двойное освобождение памяти (double free);
    • использование освобожденной памяти (use-after-free);
    • выход за границы массива/буфера (buffer overflows/underflows).
  • Ошибки конкурентности:
    • гонки данных (data races);
    • взаимные блокировки (deadlocks).
  • Ошибки безопасности:
    • целочисленные переполнения (integer overflows);
    • проблемы с форматированием строк (format string vulnerabilities);
    • небезопасное использование криптографических примитивов.
  • Логические ошибки:
    • недостижимый код (unreachable code);
    • неиспользуемые переменные (unused variables);
    • неверные условия в циклах и ветвлениях.
  • Ошибки API:
    • неправильное использование функций стандартных библиотек и сторонних API.

Svace работает на следующих платформах:

  • macOS/x64 (версия 10.10+, язык C# не поддерживается);
  • архитектура x86 (только перехват сборки);
  • Linux/x64 (версия ядра 3.10+, версия glibc 2.17+);
  • Linux/ARM 64 (Ubuntu 18.04);
  • Windows (начиная с Windows 7 SP 1 с обновлением KB2533623);
  • WSL (версий 1 и 2).

Существует два варианта использования Svace:

  • Приобретение лицензии у ИСП РАН.
  • Использование имеющейся лицензии Svace. Для этого потребуется установить драйвер Sentinel Runtime Environment и подключиться к серверу Svace в организации.

Без использования лицензии доступен только перехват сборки проекта.

Содержание:

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

Для работы Svace необходимо предварительно установить следующие компоненты:

  • Аврора SDK или Platform SDK;
  • Sentinel Runtime Environment (haslpm) — драйвер для анализа.

Установка Аврора SDK или Platform SDK

Установить Аврора SDK или Platform SDK можно по следующим инструкциям:

Установка Sentinel Runtime Environment (haslpm)

Примечание. Без данного драйвера доступен только перехват сборки, а анализ кода производится на другом сервере.

Для запуска анализа кода на дистрибутивах Linux необходимо установить драйвер haslpm от Sentinel.

  1. Скачать архив с драйвером по ссылке.

  2. Распаковать архив и запустить данную команду внутри директории, куда архив был распакован:

    sudo dpkg -i aksusbd_8.52-1_amd64.deb
    
  3. Перезагрузить компьютер после установки.

  4. Проверить статус загрузки драйвера и работу сервиса с помощью команды:

    sudo systemctl status hasplmd
    
  5. После успешного запуска сервера необходимо создать конфигурационный .ini-файл для драйвера. Требуется предварительно узнать имя сервера от своего администратора для переменной $SERVER_NAME (используется в параметре serveraddr = $SERVER_NAME). Имя сервера необходимо для проверки лицензии. Итоговая команда выглядит следующим образом:

    sudo mkdir -p /etc/hasplm
    sudo touch /etc/hasplm/hasplm.ini
    sudo bash -c 'echo "accremote = 1" > /etc/hasplm/hasplm.ini && echo "serveraddr = $SERVER_NAME" >> /etc/hasplm/hasplm.ini'
    

    Параметр accremote = 1 говорит драйверу, что для лицензии нужен удаленный доступ.

    Примечание. В дальнейших инструкциях все действия также происходят на локальном компьютере. Каких либо действий на сервере организации, помимо подключения к нему, производить не требуется.

После установки драйвера Sentinel Runtime Environment можно проверить его состояние в Sentinel Admin Control Center. Для этого необходимо перейти по адресу http://localhost:1947. В открывшейся панели справа перейти на вкладку "Sentinel Keys" и проверить наличие ключа.

Установка Svace и Svacer

Svace — инструмент разработчика на рабочем месте.

Svacer — сервер для хранения и обработки результатов статического анализа.

В данной инструкции рассмотрен процесс установки Svace на Ubuntu, поставляемого в качестве архива.

Для дистрибутивов, построенных на базе Ubuntu, можно установить Svace из apt-репозитория. По данной ссылке можно найти актуальную версию Svace для Windows и других дистрибутивов Linux, а также ознакомиться с описаниями релизов.

Svacer устанавливается и разворачивается внутри docker-контейнера PostgreSQL. С другими вариантами установки, в том числе для Windows, можно ознакомиться по ссылке.

  1. Cкачать необходимые компоненты по ссылкам:

  2. Выполнить команды распаковки для архивов внутри директории, куда были скачаны данные архивы:

    mkdir ~/svace ~/svacer
    tar -xf svace-4.0.250624-x64-linux.tar.bz2 -C ~/svace --strip-components=1
    tar -xf svacer-11-0-0-linux.tar.gz -C ~/svacer --strip-components=1
    
  3. Добавить пути для Svace и Svacer в переменную $PATH. Можно добавить их временно, только для текущего окна терминала:

    export PATH="$PATH:$HOME/svace/bin"
    export PATH="$PATH:$HOME/svacer/bin"
    

    Или же добавить их на постоянной основе, записав в файл ~/.bashrc:

    echo 'export PATH="$PATH:$HOME/svace/bin"' >> ~/.bashrc
    echo 'export PATH="$PATH:$HOME/svacer/bin"' >> ~/.bashrc
    

    В последнем случае нужно будет перезагрузить файл ~/.bashrc:

    source ~/.bashrc
    

Сборка и её перехват через Svace

Перед запуском Svace нужно настроить его для перехвата сборки конкретного проекта из рабочей директории Аврора SDK.

Для удобства предварительно рекомендуется определить в терминале следующие переменные:

export WORKSPACE_PATH=<путь до рабочей директории Аврора SDK>
export PROJECT_PATH=<путь до проекта из рабочей директории>

Например, если рабочая директория располагается на рабочем столе, то пути будут выглядеть следующим образом:

export WORKSPACE_PATH=/home/<имя пользователя>/Desktop
export PROJECT_PATH=/<имя проекта>
  1. Перейти в рабочую директорию Аврора SDK:

    cd $WORKSPACE_PATH
    
  2. Создать в ней директорию для Svace, а затем распаковать его туда:

    mkdir $WORKSPACE_PATH/svace-aurora 
    tar xf ~/Downloads/svace-4.0.250624-x64-linux-sb2.tar.bz2 -C $WORKSPACE_PATH/svace-aurora --strip-components=1
    
  3. Создать файл с .env-переменными для окружения sb2:

    echo "export WORKSPACE_PATH=$(pwd)" > sb2_env.sh
    echo "export PROJECT_PATH=$(pwd)/$PROJECT_PATH" >> sb2_env.sh
    echo "export SVACE_PATH=$(pwd)/svace-aurora" >> sb2_env.sh
    

    $SVACE_PATH — путь до svace-aurora, который должен находиться в $WORKSPACE_PATH.

  4. При использовании Аврора SDK предварительно нужно запустить виртуальную машину Аврора SDK. Затем необходимо авторизоваться в среде сборки и скопировать туда ранее созданный файл:

    scp -P 2222 -i ~/AuroraOS/vmshare/ssh/private_keys/sdk sb2_env.sh mersdk@localhost:~ 
    ssh -p 2222 -i ~/AuroraOS/vmshare/ssh/private_keys/sdk mersdk@localhost
    

    Для Platform SDK файл не нужно копировать, он будет находиться в той же директории после запуска скрипта с помощью данной команды:

    ./aurora_psdk
    
  5. Создать переменные среды для окружения:

    source sb2_env.sh
    
  6. Перейти в директорию проекта и создать внутри неё директорию build:

    cd $PROJECT_PATH
    mkdir build && cd build
    
  7. Проверить, установлены ли все зависимости для проекта:

    mb2 -t $TARGET build-init ..
    mb2 -t $TARGET prepare ..
    

    $TARGET — переменная, содержащая необходимый таргет. Полный список доступных таргетов можно получить с помощью команды sdk-assistant list.

  8. Сконфигурировать проект перед сборкой.

    Проект с системой сборки qmake:

    mb2 -t $TARGET qmake ..
    

    Проект с системой сборки cmake:

    mb2 -t $TARGET cmake ..
    
  9. Экспортировать путь для Svace под sb2, ранее определённый в переменной $SVACE_PATH:

    export PATH="$PATH:$SVACE_PATH/bin"
    
  10. Зайти в окружении sb2 в нужный таргет $TARGET с суффиксом .default:

    sb2 -t $TARGET.default -m sdk-build
    

    Если все шаги выполнены верно, то следующая команда вернёт версию Svace:

    svace --version
    
  11. Создать директорию для Svace, где будут храниться необходимые для анализа файлы:

    svace init
    

    По умолчанию создаваемая директория имеет название .svace-dir. Данная директория будет использоваться далее в инструкции. Задать другое название для директории можно с помощью аргумента --svace-dir $DIR_NAME:

    svace init --svace-dir $DIR_NAME
    

    $DIR_NAME — переменная, содержащая имя директории.

  12. Собрать проект вместе со Svace.

    Проект с системой сборки qmake:

    svace build make
    

    Проект с системой сборки cmake:

    svace build ninja
    

Теперь можно перейти к анализу кода.

Анализ кода

Предварительно необходимо установить драйвер haslpm из архива Sentinel по инструкции выше.

Для проведения анализа необходимо запустить данную команду на целевой машине:

svace analyze --svace-dir .svace-dir

Результаты анализа можно просмотреть на сервере Svacer.

Запуск сервера Svacer

Для просмотра проведенного анализа кода необходимо запустить сервер Svacer из docker-контейнера. Для этого нужно убедиться, что установлены:

  • docker;
  • docker-compose.

Установка docker описана в данной инструкции.

  1. Перейти в директорию ~/svacer/extra:

    cd ~/svacer/extra
    
  2. Запустить сервер Svacer:

    docker-compose up -d
    

    В дальнейшем его можно остановить с помощью команды:

    docker-compose down
    
  3. Авторизоваться в веб-интерфейсе. Для этого нужно перейти по адресу http://localhost:8080. По умолчанию используется логин/пароль: admin/admin:

    Авторизация в Svace

  4. Далее нужно загрузить snapshot c анализом кода на сервер. Для этого нужно вернуться в директорию, где находится директория .svace-dir:

    cd /home/$USER/$PROJECT_PATH/build
    

    Импортировать анализ кода для Svacer с помощью данной команды:

    svacer import --svace ~/svace/bin/svace .
    

    После чего загрузить snapshot на Svacer:

    svacer upload
    
  5. Выбрать проект, чтобы просмотреть результаты его анализа. После импорта проект можно будет выбрать его из списка Select project:

    Выбор проекта

    В результате анализ кода станет доступным для экспорта из веб-интерфейса:

    Экспорт анализа кода

Подробная информация о работе с интерфейсом Svacer доступна по ссылке.

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.