Открытая база уязвимостей

Открытая база уязвимостей

Этичный Хакер

VulnerableCode - это бесплатная и открытая база данных уязвимостей программного пакета FOSS и инструментов для создания и сохранения текущих данных. Он сделан сообществом FOSS для улучшения и защиты экосистемы программного обеспечения с открытым исходным кодом.

Почему?

Существующие решения представляют собой коммерческие проприетарные базы данных уязвимостей, что само по себе не имеет смысла, поскольку данные относятся к FOSS (Свободному и открытому программному обеспечению).

Национальная база данных уязвимостей, которая является основным централизованным источником данных для известных уязвимостей, не особенно хорошо подходит для решения проблем безопасности FOSS, потому что:

  1. Он предшествует взрыву использования программного обеспечения FOSS
  2. Этот формат данных отражает коммерческую точку зрения, ориентированную на поставщика, отчасти из-за использования CPE для сопоставления уязвимостей с существующими пакетами.
  3. CPE просто не предназначены для сопоставления FOSS с уязвимостями из-за их семантики, ориентированной на поставщика и продукт. Это действительно затрудняет ответ на фундаментальные вопросы “Уязвим ли пакет foo” и “Уязвим ли пакет foo для панели уязвимостей?”

Как?

VulnerableCode независимо агрегирует множество источников данных об уязвимостях программного обеспечения и поддерживает воссоздание данных децентрализованным способом. Эти источники данных (см. полный список здесь) включают рекомендации по безопасности, опубликованные дистрибутивами Linux и BSD, менеджерами пакетов прикладного программного обеспечения и репозиториями пакетов, проектами FOSS, GitHub и другими. Благодаря такому подходу данные фокусируются на конкретных экосистемах, но агрегируются в единую базу данных, что позволяет получить более богатый график взаимосвязей между несколькими воплощениями пакета. Специфичность повышает точность и достоверность данных, поскольку одна и та же версия восходящего пакета в разных экосистемах может быть уязвима или не быть уязвимой для одной и той же уязвимости.

Пакеты идентифицируются с помощью Package URL PURL в качестве первичных идентификаторов, а не CPE. Это делает ответы на такие вопросы, как “Уязвим ли пакет foo для панели уязвимостей?”, гораздо более точными и простыми для интерпретации.

Основной доступ к данным осуществляется через REST API.

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

Мы также планируем добывать уязвимости, которые не получили никакого воздействия из-за различных причин, таких как, но не ограничиваясь этим, сложная процедура получения CVE ID или неспособность классифицировать ошибку как компрометацию безопасности.

Настройка уязвимого кода

Сначала клонируйте исходный код:

git clone https://github.com/nexB/vulnerablecode.git
cd vulnerablecode

Использование Docker Compose

Простой способ настроить уязвимый код-это использовать контейнеры docker и docker compose. Для этого вам необходимо установить следующее.

  • Двигатель Докера. Найдите инструкции по его установке здесь
  • Докер Сочиняет. Найдите инструкции по его установке здесь

Используйте sudo docker-compose up для запуска уязвимого кода. Затем получите доступ к уязвимостям http://localhost:8000/ или на http://127.0.0.1:8000/

Важно: Не забудьте запустить sudo docker-compose up-d –no-deps –build web для синхронизации вашего экземпляра после каждого git pull.

Используйте sudo docker-compose exec web bash для доступа к контейнеру уязвимого кода. Отсюда вы можете получить доступ к управлению.py и выполните команды управления для импорта данных, как указано ниже.

Без Docker Compose

Системные требования

  • Python 3.8+
  • PostgreSQL 9+
  • Набор инструментов компилятора и файлы разработки для Python и PostgreSQL

В дистрибутивах на базе Debian они могут быть установлены с помощью:

sudo apt-get install python3-venv python3-dev postgresql libpq-dev build-essential

Конфигурация базы данных

  • Создайте пользователя с именем vulnerablecode. Использовать vulnerablecodeв качестве пароля при запросе:
sudo -u postgres createuser –no-createrole –no-superuser –login \
–inherit –createdb –pwprompt vulnerablecode“
  • Создание базы данных с именемvulnerablecode:
createdb –encoding=utf-8 –owner=vulnerablecode –user=vulnerablecode \
–password –host=localhost –port=5432 vulnerableecode

Зависимости приложений

  • Создайте virtualenv, установите зависимости, создайте статические файлы и запустите миграции базы данных:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
DJANGO_DEV=1 python manage.py collectstatic
DJANGO_DEV=1 python manage.py migration

Переменная окружения DJANGO_DEVиспользуется для загрузки параметров, подходящих для разработки, определенных в vulnerablecode/dev.py. Если вы не хотите вводить его каждый раз, используйте export DJANGO_DEV=1вместо этого. Не используйте DJANGO_DEV в производственной среде.

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

SECRET_KEY=$(python -c “from django.core.management import utils; print(utils.get_random_secret_key())”)

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

VC_ALLOWED_HOSTS=vulnerablecode.your.domain.example.com

Вы можете указать несколько хостов разделив их двоеточием :

Использование Nix

Вы можете установить VulnerableCode с помощью Nix ( необходима поддержка Flake):

cd etc/nix
nix-shell -p nixFlakes –run “nix –print-build-logs flake check ” # build & run tests

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

#Enter an interactive environment with all dependencies set up.
cd etc/nix
nix develop
> ../../manage.py … # invoke the local checkout
> vulnerablecode-manage.py … # invoke manage.py as installed in the nix store

#Test the import prodecure using the Nix version.
etc/nix/test-import-using-nix.sh –all # import everything
#Test the import using the local checkout.
INSTALL_DIR=. etc/nix/test-import-using-nix.sh ruby # import ruby only

Синхронизация настройки Nix

Установка Nix использует mach-nix для обработки зависимостей Python, поскольку некоторые зависимости в настоящее время недоступны в виде пакетов Nix. Все зависимости Python автоматически извлекаются из ./requirements.txt Если установка на основе mach-nix завершится неудачно, вам может потребоваться обновить саму mach-nix и используемую версию pypi-deps-db (см. etc/nix/flake. nix:inputs.machnix и machnixFor.pypiDataRev).

Не-Python зависимости курируются в:

etc/nix/flake.nix:vulnerablecode.prospectedBuildInputs

Запуск тестов

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

black -l 100 –check .
DJANGO_DEV=1 python -m pytest

Импорт данных

Некоторые импортеры данных используют API GitHub. Для этого экспортируйте переменную GH_TOKENсреды с:

export GH_TOKEN=yourgithubtoken

Инструкции о том, как получить ваш токен GitHub, см. в документах GitHub docs.

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

DJANGO_DEV=1 python manage.py import –all

Чтобы перечислить доступных импортеров, используйте:

DJANGO_DEV=1 python manage.py import –list

Для запуска конкретных импортеров:

DJANGO_DEV=1 python manage.py import rust npm

Доступ к REST API

Запустите веб-сервер:

DJANGO_DEV=1 python manage.py runserver

Для получения полной документации о конечных точках API используйте этот URL-адрес:

http://127.0.0.1:8000/api/docs

Непрерывный периодический импорт данных

Если вы хотите периодически запускать импорт, вы можете использовать таймер systemd:

$ cat ~/.config/systemd/user/vulnerablecode.service

[Unit]
Description=Update vulnerability database

[Service]
Type=oneshot
Environment=”DJANGO_DEV=1″
ExecStart=/path/to/venv/bin/python /path/to/vulnerablecode/manage.py import –all

$ cat ~/.config/systemd/user/vulnerablecode.timer

[Unit]
Description=Periodically update vulnerability database

[Timer]
OnCalendar=daily

[Install]
WantedBy=multi-user.target

Запустите этот “таймер” с:

systemctl –user daemon-reload
systemctl –user start vulnerablecode.timer

Report Page