🛡️ DLP Extension

Notmining AI Shield

Documentación técnica oficial. Aprende a instalar, configurar y conectar la extensión con tu SIEM corporativo.

1. Introducción

Notmining AI Shield es una extensión de navegador diseñada para actuar como un Data Loss Prevention (DLP) en entornos corporativos. Monitoriza de forma pasiva la interacción de los empleados con plataformas de Inteligencia Artificial (como ChatGPT, Claude, Copilot, etc.) y bloquea la filtración de datos sensibles como DNI, IBAN, contraseñas o expresiones regulares personalizadas.

2. Características Clave de Bloqueo

La extensión opera en la capa del navegador y aplica múltiples restricciones para asegurar que la información no salga del endpoint:

  • Análisis de Portapapeles (Paste): Bloquea instantáneamente el copiado y pegado de datos sensibles, impidiendo que el usuario pueda introducir masivamente información protegida en el chat de la IA.
  • Anti-Copia de PowerShell / Terminal: Detecta y bloquea el copiado y pegado de comandos de terminal, scripts o trazas de ejecución que podrían revelar la estructura de la red o configuraciones internas.
  • Bloqueo de Subida de Ficheros: Impide la lectura de archivos confidenciales que el usuario intente arrastrar (Drag & Drop) o adjuntar haciendo clic en el chat de la IA.
  • Monitorización Multipestaña: Protege de forma continua todas las pestañas activas que coincidan con los dominios objetivo configurados por el administrador.

Panel de usuario de Notmining AI Shield Panel de configuración visible para el usuario final de la extensión.

Alerta de bloqueo de Notmining AI Shield Alerta mostrada al usuario cuando se bloquea un intento de filtración de datos.

3. Instalación en Modo Desarrollador (ZIP)

Para probar la extensión de forma local o en entornos controlados antes de su despliegue por GPO, puedes instalarla manualmente cargando el archivo ZIP:

  • Descarga el archivo notmining-ai-shield.zip proporcionado por nuestro equipo.
  • Descomprime el archivo en una carpeta segura de tu equipo.
  • Abre Google Chrome y navega a chrome://extensions/.
  • Activa el Modo de desarrollador (interruptor en la esquina superior derecha).
  • Haz clic en Cargar descomprimida (Load unpacked) y selecciona la carpeta donde extrajiste los archivos.
  • La extensión aparecerá instalada y lista para usarse.

4. Configuración y Despliegue por GPO

Para entornos Enterprise, la extensión se gestiona de forma centralizada mediante Políticas de Grupo (GPO) de Windows, utilizando el archivo schema.json.

⚠️

Atención: Actualmente se recomienda NO distribuir la extensión vía GPO instalándola desde un archivo .crx o .zip local. Recomendamos esperar a que la extensión esté publicada y aprobada en la Chrome Web Store. Distribuir el ID oficial de la tienda por GPO garantizará que todos los endpoints reciban las actualizaciones automáticas de seguridad de Notmining de forma transparente.

Disclaimer de Responsabilidad: La configuración e implementación de las Políticas de Grupo (GPO) descritas en esta documentación tienen un impacto directo en el comportamiento de los navegadores y endpoints corporativos. Es responsabilidad exclusiva del administrador de sistemas revisar exhaustivamente las políticas y realizar pruebas en entornos de pre-producción antes de su despliegue general. Notmining no se hace responsable de posibles pérdidas de datos, interrupciones de servicio, bloqueos accidentales ni de cualquier otra consecuencia derivada de una mala configuración de estas políticas en entornos de producción.

Los administradores pueden forzar la configuración de:

  • Dominios objetivo (customDomains): URLs donde la extensión estará activa. El administrador puede añadir o quitar dominios libremente (ej. chatgpt.com, claude.ai). También permite establecer restricciones de rutas específicas (ej. m365.cloud.microsoft/chat) para limitar la actuación solo a esas áreas y dejar el resto del dominio como excepción.
  • SIEM Webhook (siemWebhookUrl): La URL del endpoint (Collector) donde se enviarán los logs.
  • Formato de Log (logFormat): El estándar en el que el SIEM espera recibir los datos (CEF, LEEF, Syslog, CSV, JSON).
  • Identificador de Usuario (endpointIdentifier): Nombre de usuario, email o hostname (ej. jdoe-laptop) para saber quién generó la alerta. La extensión también autogenera un UUID único por dispositivo (device_id) para trazabilidad.
  • Clave de Cifrado (siemEncryptionKey): Contraseña o clave secreta utilizada para el cifrado AES-256-GCM del payload antes de enviarlo al SIEM.
  • Bypass de Justificación (allowBypass): Permite a ciertos grupos de usuarios saltarse un bloqueo de DLP temporalmente (60 segundos) aportando una justificación escrita, la cual será auditada.
  • Expresiones Regulares (customRegexes): Permite inyectar reglas de detección personalizadas (ej. números de expediente médico, formatos de facturas internos).

Ejemplo de Configuración GPO (Registro de Windows)

Para distribuir estas políticas a los equipos del dominio, puedes importar la configuración directamente al Registro de Windows bajo la ruta de políticas de Chrome:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\3rdparty\extensions\ID_DE_LA_EXTENSION\policy]
"customDomains"="[\"chatgpt.com\", \"claude.ai\", \"m365.cloud.microsoft/chat\"]"
"siemWebhookUrl"="https://siem.midominio.local:8088/services/collector"
"logFormat"="JSON"
"siemEncryptionKey"="M1_Cl4v3_S3cr3t4_S0C"
"allowBypass"=dword:00000001
"endpointIdentifier"="LAPTOP-%USERNAME%"
"customRegexes"="[{\"name\": \"Expediente Médico\", \"pattern\": \"EXP-\\\\d{6}\", \"active\": true}]"
i

Nota: Toda esta configuración también puede realizarse manualmente desde el Panel de Administrador dentro de la propia extensión (protegido por contraseña), aunque en entornos corporativos se recomienda forzar los valores mediante GPO.

Nota de seguridad: Se recomienda a los administradores deshabilitar el modo Incógnito/InPrivate mediante GPO para evitar la evasión del DLP por parte de los usuarios.

Panel de administrador de Notmining AI Shield Panel de configuración manual para administradores.

5. Integración y Envío de Logs a SIEM

Notmining AI Shield está diseñado para integrarse de forma nativa con los principales SIEMs del mercado (Splunk, QRadar, ArcSight, Microsoft Sentinel, etc.). La integración se realiza mediante envíos HTTP/HTTPS directos desde el navegador del usuario al colector del SIEM, sin necesidad de servidores intermedios.

Pasos para la integración:

  1. Habilitar un Colector HTTP en el SIEM: Configura tu SIEM para recibir eventos a través de HTTP/HTTPS. Por ejemplo, en Splunk habilita un HTTP Event Collector (HEC), o en QRadar un HTTP Receiver. Asegúrate de obtener la URL del endpoint y, si es necesario, el token de autenticación (que puedes incluir en la propia URL).
  2. Configurar la Extensión vía GPO: En el archivo schema.json o en el panel de administrador, establece la política webhookUrl con la dirección de tu colector (ej. https://siem.midominio.local:8088/services/collector).
  3. Seleccionar el Formato de Log: Configura la política logFormat según lo que espere tu SIEM (JSON, CEF, LEEF, Syslog o CSV).
  4. Recepción de Datos: Cada vez que la extensión bloquee o audite un intento de filtración de datos, enviará automáticamente una petición POST a la URL configurada con el log formateado.

Formatos Soportados y Ejemplos de Payload

Dependiendo del formato elegido, el payload de la petición POST variará para adaptarse a los estándares de ingesta de tu SIEM. Aquí tienes un ejemplo de cómo se vería un evento de bloqueo por detectar un DNI en formato JSON:

{
  "timestamp": "2026-04-23T10:30:00Z",
  "action": "blocked",
  "url": "chatgpt.com",
  "matchedRule": "National ID (DNI/NIE/SSN)",
  "matchedContent": "[ENCRYPTED_PAYLOAD]",
  "userJustification": ""
}

Y el mismo evento estructurado en formato CEF (ArcSight):

CEF:0|Notmining|AI Shield|1.2.0|DLP_BLOCK|DLP Policy Violation|7|act=blocked request=chatgpt.com msg=National ID (DNI/NIE/SSN) cs1Label=EncryptedContent cs1={"encrypted":true,"algorithm":"AES-256-GCM","iv":"...","ciphertext":"..."}

Integración con Wazuh (Descifrado con Python)

Wazuh recolecta logs habitualmente leyendo ficheros locales a través de su agente. Como la extensión envía los datos por HTTP POST y además puede enviarlos cifrados (AES-256-GCM) si se configuró una siemEncryptionKey, puedes desplegar un sencillo script en Python que actúe como servidor intermedio: recibirá el webhook, descifrará el contenido usando la contraseña compartida y lo escribirá en un fichero local que el agente de Wazuh podrá ingerir.

1. Script Receptor (Python):

from flask import Flask, request
import json
import logging
import base64
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.primitives import hashes

app = Flask(__name__)

# Configurar el log local que leerá Wazuh
logging.basicConfig(filename='/var/log/notmining_dlp.log', level=logging.INFO, format='%(message)s')

# Reemplaza 'TU_CLAVE_AQUI' por la misma contraseña configurada en la GPO/Extensión
SHARED_SECRET = "TU_CLAVE_AQUI"

def derive_key(secret: str) -> bytes:
    digest = hashes.Hash(hashes.SHA256())
    digest.update(secret.encode('utf-8'))
    return digest.finalize()

def decrypt_payload(encrypted_obj: dict, secret: str) -> str:
    try:
        if not encrypted_obj.get('encrypted'):
            return str(encrypted_obj)
            
        key = derive_key(secret)
        aesgcm = AESGCM(key)
        iv = base64.b64decode(encrypted_obj['iv'])
        ciphertext = base64.b64decode(encrypted_obj['ciphertext'])
        
        decrypted_data = aesgcm.decrypt(iv, ciphertext, None)
        return decrypted_data.decode('utf-8')
    except Exception as e:
        return f"[DECRYPTION_FAILED] {str(e)}"

@app.route('/webhook', methods=['POST'])
def siem_webhook():
    data = request.json
    
    # Si la extensión envió todo el payload cifrado (application/json)
    if data and isinstance(data, dict) and data.get('encrypted'):
        decrypted_str = decrypt_payload(data, SHARED_SECRET)
        try:
            data = json.loads(decrypted_str)
        except:
            data = {"error": "Invalid JSON after decryption", "raw": decrypted_str}
            
    # Escribir el evento en el fichero local para Wazuh
    logging.info(json.dumps(data))
    return {"status": "success"}, 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8088)

2. Configuración del Agente Wazuh (ossec.conf):

Añade el siguiente bloque a la configuración del agente que se está ejecutando en el mismo servidor que el script de Python:

<localfile>
  <log_format>json</log_format>
  <location>/var/log/notmining_dlp.log</location>
</localfile>

Cifrado End-to-End (E2E) y Redes Internas

La seguridad de los logs en tránsito es una prioridad:

  • Cifrado E2E: El contenido interceptado (el texto que el usuario intentó enviar a la IA) viaja cifrado en el payload. Incluso si el tráfico es interceptado, el dato sensible real permanece ofuscado.
  • Flexibilidad de Transporte: Aunque se recomienda encarecidamente el uso de HTTPS para el Webhook del SIEM, la extensión permite el uso de HTTP plano. Esto está diseñado específicamente para entornos corporativos donde el tráfico se enruta a través de una VPN interna o redes segmentadas de confianza, reduciendo la sobrecarga de gestión de certificados SSL en colectores internos sin comprometer la seguridad del dato (gracias al cifrado E2E del payload).

6. Auditoría de Bypass ("Justification Mode")

Cuando la política allowBypass está activa, los usuarios que sean bloqueados verán un botón de "Justificar envío" en la alerta principal.

Botón de Bypass en Notmining AI Shield El usuario puede solicitar una excepción temporal si su caso de uso es legítimo.

Si deciden utilizarlo, se les obligará a explicar por qué necesitan enviar el dato (ej. "Es un código fuente open-source").

Formulario de justificación de Bypass Formulario donde el empleado redacta la justificación para el equipo de ciberseguridad.

Al confirmar, la extensión pausa el bloqueo durante 60 segundos. Inmediatamente, se envía un evento al SIEM con action: "bypassed" y el campo justification relleno, permitiendo al equipo del SOC auditar la acción a posteriori y detectar posibles abusos de confianza.