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

Почему?
Существующие решения представляют собой коммерческие проприетарные базы данных уязвимостей, что само по себе не имеет смысла, поскольку данные относятся к FOSS (Свободному и открытому программному обеспечению).
Национальная база данных уязвимостей, которая является основным централизованным источником данных для известных уязвимостей, не особенно хорошо подходит для решения проблем безопасности FOSS, потому что:
- Он предшествует взрыву использования программного обеспечения FOSS
- Этот формат данных отражает коммерческую точку зрения, ориентированную на поставщика, отчасти из-за использования CPE для сопоставления уязвимостей с существующими пакетами.
- 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