misp-topcontrib/README.md
Felipe Luis Quezada Valenzuela dfbd835d52 #content
2024-11-12 14:45:22 -03:00

4.6 KiB

Descripción

Este proyecto permite obtener la cantidad de IoC de calidad entregados por comunidades conectadas dentro de una instancia de MISP. Esto quiere decir IoC que no son falsos positivos.

Esto se realiza a través de la base de datos que utiliza MISP de forma interna denominada "Warninglist" en contraste con el servicio gratuito de lookup de IP's, dominios y hashes que ofrece Kaspersky Threat Intelligence Portal.

Características:

  • Conteo de IoC válidos por cada organización conectada (diariamente).
  • Proceso de curación diario, esto quiere decir eliminar IoC dentro de MISP que sean falsos positivos.

Componentes

Este proyecto utiliza un BD local (SQLite en modo WALL) y FastAPI.

Instalación en entorno virtual

  1. Se crea entorno virtual de Python
  2. Instalar librerias de Python:
pip install -r requirements.txt
  1. Se recomienda crear archivo .sh y anexarlo como servicio para que inicie con el sistema operativo:
#!/bin/bash

# Ejemplo
# Activate 
source /home/user/misptopcontrib/misp_top_contrib_env/bin/activate

# Enter folder
cd /home/user/misptopcontrib/

# Actualizar librerias si aplica
pip install --upgrade -r requirements.txt > /dev/null 2>&1

# Llamar al script Python
uvicorn main:app --host 0.0.0.0 --port 8000

Instalación sin entorno virtual

  1. Instalar librerias de Python:
# Enter folder
cd /home/user/misptopcontrib/

pip3 install -r requirements.txt
  1. Se recomienda crear archivo .sh (ejemplo start_api.sh) y anexarlo como servicio para que inicie con el sistema operativo:
#!/bin/bash

# Ejemplo
# Enter folder
cd /home/user/misptopcontrib/

# Actualizar librerias si aplica
pip install --upgrade -r requirements.txt > /dev/null 2>&1

# Llamar al script Python
uvicorn main:app --host 0.0.0.0 --port 8000

Agregar como servicio

  1. Para agregar como servicio necesita crear dentro del directorio /etc/systemd/system (En caso de Ubuntu) un archivo .service (misptopcontrib.service). Podemos crearlo con nano (sudo) usando el siguiente formato:
[Unit]
Description=MISP TOP Contrib Service
After=network.target

[Service]
Type=simple
ExecStart=/home/user/misptopcontrib/start_api.sh
Restart=always

[Install]
WantedBy=multi-user.target
  1. Luego registramos este archivo para que se ejecute al iniciar el sistema:
sudo systemctl enable misptopcontrib

  1. Ahora podemos iniciar, detener, reiniciar servicio...
# Iniciar
sudo systemctl start misptopcontrib

# Detener
sudo systemctl stop misptopcontrib

# Reiniciar
sudo systemctl restart misptopcontrib

Configuración inicial

  1. En el archivo config.py se debe definir los datos de conexión a MISP, como también la API KEY asociada a Kaspersky TIP:

# Config MISP
MISP_CONFIG = {
    "URL": "<URL_MISP>",
    "AUTHKEY": "<APIKEY_MISP>"
}
# Seleccioón de WarningLists
CONFIG_WL = {
    "filtros_buscar": ["osint", "google", "1000","microsoft","amazon","cloudflare"],
    "max_reg": 4000
}

KTIP_CONFIG = { 
    "api_key": "<API KEY>",
    "url_base": "https://opentip.kaspersky.com/api/v1/search/"
}
# Tipos de IoC a Omitir en el conteo
IOC_TIPOS_OMITIR = [
    'comment',
    'text',
    'other',
    'datetime',
    'attachment',
    'port',
    'size-in-bytes',
    'counter',
    'integer',
    'cpe',
    'float',
    'hex',
    'phone-number',
    'boolean',
    'anonymised',
    'pgp-public-key',
    'pgp-private-key'
]

config.py se divide en :

  • MISP_CONFIG: Configuración asociada a MISP
  • CONFIG_WL: Configuración asociada a Warninglist a utilizar en app.
  • KTIP_CONFIG: Configuración de conexión a servicio de Lookup de Kaspersky.
  • IOC_TIPOS_OMITIR: Tipos de Atributos que se omiten en el conteo, generalmente metadata.

En el archivo run_daily.py se puede configurar por ejemplo, el maximo de ioc a comtemplar por evento en la variable "max_ioc":

max_ioc = 5000

Usuarios

Inicialmente se requiere cargar los usuarios sync asociados a cada comunidad conectada a MISP (Sync Users entregados en cada caso). Para agregar un usuario se puede usuario el siguiente script:

python add_user.py <usuario@usuario.xx> <alias_organizacion>

Ejecución

El ideal es la recolección diaria de Ioc dentro de MISP. El archivo run_daily.py debe agendarlo de forma diaria para recolectar por dia (dia anterior completo)

Un ejemplo de agendamiento en crontab:

0 0 * * * bash ./misptopcontrib/run_daily.py

Documentación

Puedes acceder a la documentación:

SwaggerUI

http://URL_PROYECTO:8000/docs

Redocly

http://URL_PROYECTO:8000/redoc