commit 97a0a07fa79d26cb704c4460c54727c8f35c0714 Author: Felipe Luis Quezada Valenzuela Date: Wed Nov 6 14:51:53 2024 -0300 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..cfde311 --- /dev/null +++ b/README.md @@ -0,0 +1,194 @@ +## 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 , de forma mensual o anual. +- Proceso de curación diario, esto quiere decir eliminar IoC dentro de MISP que sean falsos positivos y que esten experados. + +## 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: +``` shell +pip install -r requirements.txt +``` + +3. Se recomienda crear archivo .sh y anexarlo como servicio para que inicie con el sistema operativo: +``` shell +#!/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: + +``` shell +# Enter folder +cd /home/user/misptopcontrib/ + +pip3 install -r requirements.txt +``` + +2. Se recomienda crear archivo .sh (ejemplo start_api.sh) y anexarlo como servicio para que inicie con el sistema operativo: + +``` shell +#!/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: + +``` shell +[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 +``` + +2. Luego registramos este archivo para que se ejecute al iniciar el sistema: +``` shell +sudo systemctl enable misptopcontrib + +``` + +3. Ahora podemos iniciar, detener, reiniciar servicio... +``` shell +# 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: +``` python + +# Config MISP +MISP_CONFIG = { + "URL": "", + "AUTHKEY": "" +} +# Seleccioón de WarningLists +CONFIG_WL = { + "filtros_buscar": ["osint", "google", "1000","microsoft","amazon","cloudflare"], + "max_reg": 4000 +} + +KTIP_CONFIG = { + "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": + +``` python +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: + +``` shell +python add_user.py + +``` + +## 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: + +``` shell +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 +```