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