214 lines
5.6 KiB
Markdown
214 lines
5.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.
|
|
|
|
Estos datos son accesibles mediante una API REST.
|
|
|
|
### 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.
|
|
|
|
## Requisitos
|
|
- Se requiere una cuenta en la plataforma Kaspersky© Threat Intelligence Portal. La cuenta es gratuita. ([https://opentip.kaspersky.com])
|
|
|
|
## Componentes
|
|
|
|
Este proyecto utiliza un BD local (SQLite en modo WALL) y FastAPI.
|
|
|
|
## 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. Se debe solo configurar "api_key".
|
|
- 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
|
|
|
|
```
|
|
|
|
## Instalación en entorno virtual
|
|
|
|
1. Se crea entorno virtual de Python
|
|
2. Instalar librerias de Python:
|
|
``` shell
|
|
pip install -r requirements.txt
|
|
```
|
|
3. 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>
|
|
|
|
```
|
|
4. 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. 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>
|
|
|
|
```
|
|
|
|
3. 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
|
|
|
|
```
|
|
|
|
## Servicios (Endpoints) de API
|
|
|
|
- /api/stats/ --> Cantidad de contribuciones (IoC) de cada organización.
|
|
- /api/stats/cantidad_por_organizacion/ --> Cantidad total de contribuciones (IoC) de cada organización (Año).
|
|
- /api/stats/por_periodo/ --> Cantidad de contribuciones (IoC) de cada organización de un período específico.
|
|
|
|
## Consulta de API
|
|
|
|
- Se puede utilizar Chart.js para mostrar los datos consultados de manera más ordenada.
|
|
|
|
- Ejemplo en producción: https://csirt.gob.cl/servicios/intercambio-de-indicadores-de-compromiso/estad%C3%ADsticas-de-colaboraci%C3%B3n-misp/
|
|
|
|
|
|
## 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
|
|
```
|