VulnerableCode es una saco de datos abierta y gratuita de vulnerabilidades en el paquete de software FOSS y las herramientas para crear y sostener los datos. Fue desarrollado por la comunidad de software franco para mejorar y afianzar el ecosistema de software de código amplio.
¿Por qué?
Las soluciones existentes son bases de datos comerciales de vulnerabilidad propietarias, lo que en sí mismo no tiene sentido ya que los datos son FOSS (software franco y de código amplio).
La saco de datos doméstico de vulnerabilidades, una fuente principal centralizada de datos para vulnerabilidades conocidas, no es particularmente adecuada para solucionar problemas de seguridad de software franco porque:
- Precede a la ataque del software FOSS
- El formato de datos refleja una visión comercial centrada en el proveedor, en parte oportuno al uso de CPE para mapear vulnerabilidades en paquetes existentes.
- Conveniente a su semántica orientada al producto del fabricante, los CPE simplemente no están diseñados para asignar vulnerabilidades al software franco. Esto hace que sea en realidad difícil reponer a las preguntas básicas: «¿Es el paquete foo frágil?» Y «¿Es el paquete foo frágil a las vulnerabilidades de seguridad?»
Cómo?
VulnerableCode agrega de forma independiente muchas fuentes de datos para detectar vulnerabilidades de software y respalda la creación descentralizada de nuevos datos. Estas fuentes de datos (consulte la relación completa aquí) incluyen avisos de seguridad publicados por distribuciones de Linux y BSD, administradores de paquetes de software de aplicación y repositorios de paquetes, proyectos FOSS, GitHub y más. Gracias a este enfoque, los datos se centran en ecosistemas específicos, pero se agrupan en una sola saco de datos para que se pueda consultar un diagrama más completo de las relaciones entre múltiples encarnaciones de un paquete. Ser específico aumenta la precisión y validez de los datos porque la misma lectura de un paquete antecedente en diferentes ecosistemas puede o no ser frágil a la misma vulnerabilidad.
Los paquetes se identifican utilizando la URL del paquete PURL como identificadores principales en extensión de CPE. Esto proporciona respuestas a preguntas como «¿Es el paquete foo frágil a vulnerabilidades?» mucho más preciso y claro de interpretar.
El llegada principal a los datos es a través de una API REST.
Adicionalmente, un nuevo objetivo de la interfaz web es respaldar la exploración y la búsqueda de datos de vulnerabilidad y permitir gradualmente la curación de los datos por parte de la comunidad mediante la complemento de nuevos paquetes y vulnerabilidades y la revisión y puesta al día de sus relaciones.
Todavía planeamos apañarse vulnerabilidades que no se hayan gastado comprometidas por una variedad de razones, como: B. oportuno al complicado proceso de obtener el CVE-ID o no clasificar un error como un compromiso de seguridad.
Presentaciones actuales:
Configurar VulnerableCode
Primero clona el código fuente:
Clon de Git https://github.com/nexB/vulnerablecode.git
CD Vulnercode
Uso de Docker Compose
Una forma sencilla de configurar VulnerableCode es crear Docker Containers y Docker Compose. Para ello, se debe instalar lo subsiguiente.
- Motor Docker. Las instrucciones de instalación se pueden encontrar aquí.
- Docker Compose. Las instrucciones de instalación se pueden encontrar aquí.
Utilice sudo docker-compose up para iniciar VulnerableCode. Luego acceda a VulnerableCode en http: // localhost: 8000 / o en http://127.0.0.1:8000/.
Importante: No olvide ejecutar sudo docker-compose up -d –no-deps –build web para sincronizar su instancia a posteriori de cada cuna de Git.
Utilice sudo docker-compose exec web bash para ingresar al contenedor VulnerableCode. Desde aquí puede ingresar a manage.py y ejecutar comandos administrativos para importar datos como se muestra a continuación.
Sin Docker Compose
Requisitos del sistema
- Python 3.8+
- PostgreSQL 9+
- Prisión de herramientas del compilador y archivos de ampliación para Python y PostgreSQL
En las distribuciones basadas en Debian, estas se pueden instalar con:
sudo apt-get install python3-venv python3-dev postgresql libpq-dev build-essential
Configuración de la saco de datos
- Crea un becario llamado
vulnerablecode
. Usarvulnerablecode
como contraseña cuando se le solicite:
sudo -u postgres createuser –no-createrole –no-superuser –login
–Eerben –createdb –pwprompt código frágil «
- Crea una saco de datos citación
vulnerablecode
::
createdb –encoding = utf-8 –owner = frágil code –user = frágil code
–Password –host = localhost –port = 5432 código frágil
Dependencias de la aplicación
- Cree un entorno aparente, instale dependencias, genere archivos estáticos y ejecute las migraciones de la saco de datos:
python3 -m venv venv
Activar fuente venv / bin /
pip install -r requirements.txt
DJANGO_DEV = 1 python manage.py collectstatic
DJANGO_DEV = 1 python manage.py portar
La variable de entorno DJANGO_DEV
se utiliza para cargar configuraciones apropiadas para el ampliación que se definen en vulnerablecode/dev.py
. Si no quiere escribirlo todo el tiempo, use export DJANGO_DEV=1
en extensión de. No utilice DJANGO_DEV en un entorno de producción.
Para un modo de producción, una variable de entorno con el nombre SECRET_KEY
se debe establecer. La forma recomendada de gestar esta secreto es usar el código que Django tiene para este propósito:
SECRET_KEY = $ (python -c «de las utilidades de importación de django.core.management; print (utils.get_random_secret_key ())»)
Todavía debe configurar la variable de entorno VC_ALLOWED_HOSTS para que coincida con el nombre de host en el que se implementa la aplicación:
VC_ALLOWED_HOSTS = código frágil.tu.dominio.example.com
Puede especificar varios hosts separándolos con dos puntos:
Sin carencia
Puede instalar VulnerableCode con Nix (se requiere compatibilidad con Flake):
cd etc / carencia
nix-shell -p nixFlakes –run “nix –print-build-logs flake check” # Construir y ejecutar pruebas
Hay varias formas de utilizar la lectura de Nix:
# Ingrese a un entorno interactivo con todas las dependencias configuradas.
cd etc / carencia
no desarrollar carencia
> ../../manage.py… # Tachar a la caja registradora nave
> Pasivo Code-manage.py… # Llame a manage.py como está instalado en la tienda nix
# Pruebe el procedimiento de importación con la lectura Nix.
etc / nix / test-import-using-nix.sh –all # importar todo
# Pruebe la importación en la caja nave.
INSTALL_DIR =. etc / nix / test-import-using-nix.sh ruby # solo importar ruby
Mantenga la configuración de Nix sincronizada
La instalación de nix usa nix-n-a-thing para manejar las dependencias de Python, ya que algunas dependencias no están disponibles actualmente como paquetes nix. Todas las dependencias de Python se recuperan automáticamente de ./requirements.txt. Si la instalación basada en no hacer carencia falta, es posible que deba desempolvar no hacer carencia usted mismo y la lectura de pypi-deps-db que está utilizando (consulte etc / nix / flake.nix: inputs.machnix y machnixFor.pypiDataRev).
Las dependencias que no son de Python están seleccionadas en:
etc / nix / flake.nix: Vulnercode.propagatedBuildInputs
Ejecutar pruebas
Utilice estos comandos para ejecutar comprobaciones de estilo de código y el conjunto de pruebas:
infausto -l 100 -check.
DJANGO_DEV = 1 prueba de Python-m
Importación de datos
Algunos importadores de datos usan las API de GitHub. Para hacer esto, exporte el GH_TOKEN
Variable de entorno con:
exportar GH_TOKEN = yourgithubtoken
Para obtener instrucciones sobre cómo obtener su token de GitHub, consulte los documentos de GitHub.
Para ejecutar todos los importadores de datos, utilice:
DJANGO_DEV = 1 importación de python manage.py –todos
Para enumerar los importadores disponibles, utilice:
DJANGO_DEV = 1 python manage.py import –list
Para ejecutar importadores específicos:
DJANGO_DEV = 1 python manage.py importa rust npm
Comunicación a la API REST
Inicie el servidor web:
DJANGO_DEV = 1 python manage.py runserver
Para obtener la documentación completa sobre los puntos finales de la API, utilice esta URL:
http://127.0.0.1:8000/api/docs
Importación de datos periódica continua
Si desea ejecutar la importación con regularidad, puede usar un temporizador systemd:
$ cat ~ / .config / systemd / user / vulnerablecode.service
[Unit]
Descripción = Modernizar la saco de datos de vulnerabilidades
[Service]
Tipo = OneShot
Entorno = «DJANGO_DEV = 1»
ExecStart = / ruta / a / venv / bin / python /path/to/vulnerablecode/manage.py importar –todos
$ cat ~ / .config / systemd / user / vulnerablecode.timer
[Unit]
Descripción = Actualice la saco de datos de vulnerabilidades con regularidad
[Timer]
OnCalendar = diario
[Install]
WantedBy = multi-user.target
Inicie este «temporizador» con:
systemctl –user daemon-reload
systemctl –becario inicia vulnerablecode.timer