commit 80a5fba9c3f04533979d32d6b1f60843a70b1cc3 Author: Felipe Luis Quezada Valenzuela Date: Thu Jan 30 16:02:58 2025 -0300 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..833e536 --- /dev/null +++ b/README.md @@ -0,0 +1,161 @@ +## Descripción + +Este proyecto corrige de manera automatizada y programada las correlaciones de atributos dentro de MISP, activando únicamente las necesarias y deshabilitando las que no deben ser correladas. + + +### Características: + +- Desactiva/Activa la correlación según un lista de atributos definida por usuario. +- Desactiva/Activa la opción "IDS" según un lista de atributos definida por usuario. +- Configuración de umbral de tiempo. Se puede definir una búsqueda de los últimos eventos a contemplar en la corrección (Por defecto. 7 días) +## Componentes + +- Libreria PyMISP (pymisp): https://pypi.org/project/pymisp/ +- Libreria SQLAlchemy: https://pypi.org/project/SQLAlchemy/ + +## Descarga + +1. Descargar ZIP del repositorio (https://git.csirt.gob.cl/public/misp-fixcor/archive/main.zip) + +2. Al descomprimir el archivo, mover carpeta "misp-jobfixer" dentro de carpeta "home" de usuario u otra ubicación definida. + +## Configuración inicial + +1. En el archivo config.py se debe definir los parametros según caso: + +``` python +MISP_CONFIG = { + "misp_url":"URL_MISP", + "misp_authkey":"AUTHKEY_MISP" +} + +# Se si quiere agregar a exclusion de MISP cada atributo al deshabilitar correlacion +NO_CORRELATIVOS_EXCLUSION = False + +# Maximo de atributosa a procesar por evento +MAX_ATTRS = 25000 + +#Workers (Max = 4) +NUM_WORKERS = 4 + +# Rango de Busqueda de Eventos (ultimos días) (Default. 7 dias) +RANGO_DIAS = "7d" + +NO_CORRELATIVOS = [ + "comment", # Comentarios descriptivos + "email-subject", # Asuntos de correos electrónicos + "email-dst", # Emails de destinatarios + "email-src", # Emails de remitentes + "hostname", # Nombres de host + "port", # Puertos + "link", # Enlaces + "phone-number", # Números de teléfono + "user-agent", # Agentes de usuario + "size-in-bytes", # Tamaños en bytes + "vulnerability", # Vulnerabilidades (CVE) + "whois-registrant-email", # Correos de registrantes WHOIS + "whois-registrant-name", # Nombres de registrantes WHOIS + "regkey", # Claves de registro de Windows + "regkey|value", # Claves de registro con valores + "text", # Texto libre + "datetime", # Fechas y horas + "campaign-name", # Nombres de campaña + "attachment", # Archivos adjuntos + "email" # Emails de remitentes +] + + +IDS_CORRELATIVOS = [ + "ip-src", # IP de origen + "ip-dst", # IP de destino + "domain", # Dominio + "domain|ip", # Dominio con IP asociada + "url", # URL completas + "uri", # URI (fragmentos de rutas) + "http-method", # Métodos HTTP (GET, POST, etc.) + "email-attachment", # Nombres de archivos adjuntos en correos + "filename", # Nombres de archivo + "filename|md5", # Nombre de archivo con su hash MD5 + "filename|sha1", # Nombre de archivo con su hash SHA1 + "filename|sha256", # Nombre de archivo con su hash SHA256 + "md5", # Hash MD5 + "sha1", # Hash SHA1 + "sha256", # Hash SHA256 + "authentihash", # Hash Authentihash + "impfuzzy", # Hash ImpHash (ejecutable PE) + "tlsh", # Hash TLSH + "ssdeep", # Hash SSDEEP (fuzzy hash) + "mutex", # Nombres de mutex + "registry-key", # Claves de registro (si son relevantes) + "registry-key|value", # Claves de registro con valores + "ip-src|port", # IP de origen con puerto + "ip-dst|port", # IP de destino con puerto + "asn", # ASN (Autonomous System Number) + "cidr", # Rango CIDR (IPs) + "mac-address", # Dirección MAC + "x509-fingerprint-md5", # Huella de certificados X509 (MD5) + "x509-fingerprint-sha1", # Huella de certificados X509 (SHA1) + "x509-fingerprint-sha256", # Huella de certificados X509 (SHA256) + "ja3-fingerprint-md5", # Huella JA3 (TLS handshake) + "btc", # Dirección de Bitcoin + "iban", # Número de cuenta bancaria (IBAN) + "bank-account-nr", # Número de cuenta bancaria + "payment-card-number" # Número de tarjeta de pago +] + +``` +En config.py podemos definir los siguientes valores: + +- MISP_CONFIG: Se definen valores de conexión a MISP +- NO_CORRELATIVOS_EXCLUSION: Por defecto (False), no agrega atributo a exclusiones de MISP (correlation exclusions) cuando es corregido. +- MAX_ATTRS: Eventos con menor o igual cantidad de atributos a este valor serán procesados. +- NUM_WORKERS: Cantidad de Hilos utilizados de CPU al ejecutar script. +- RANGO_DIAS: Ultimos días de eventos en MISP al momento de ejecutar el script (Por defecto - 7 días) (Eventos a procesar) +- NO_CORRELATIVOS: Lista de tipos de atributos que se debe desactivar la opción de "correlación" junto con la opción "IDS. (Correlate Off) + (IDS Off) +- IDS_CORRELATIVOS: Lista de tipos de atributos que se debe activar la opción de "correlación" junto con la opción "IDS. (Correlate On) + (IDS On) + + +## Instalación en entorno virtual + +Una vez configurado "config.py" procedemos con la instalación + +1. Se crea entorno virtual de Python +``` shell +cd ./misp-fixcor +python3 -m venv venv +``` +2. Se activa entorno virtual: +``` shell +source venv/bin/activate +``` +3. Instalar librerias de Python: +``` shell +pip install -r requirements.txt +``` + +## Agengar + +Preparamos el archivo "run.sh" ajustando las rutas en "source" y "cd" para la ejecución correcta del archivo: + +```shell +#!/bin/bash + +# Activate +source /home/user/misp-fixcor/venv/bin/activate + +# Enter folder +cd /home/user/misp-fixcor/ + +# Llamar al script Python +python main.py + +# Deactivate +deactivate +``` + +Debemos crear en crontab una entrada con la ejecución programada (Como usuario root o sudo), por ejemplo para que realice la revisión cada dia a las 00:00 (recomendado) : + +``` shell +@daily bash ./misp-fixcor/run.sh +``` +