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

194 lines
4.6 KiB
Markdown

## 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:
``` 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": "<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":
``` 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 <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:
``` 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
```