Volver a la wiki

Servicio MibAssistant (análisis Gemma 4 con sanitización de prompt injection)

Propósito

MibAssistant (en network/services/mib_assistant.py) integra Gemma 4 (google_genai) para analizar OIDs extraídos de MIBs subidos y proponer categorías:

Acepta OIDs de MIBs subidos (input no confiable) y los envía al LLM con sanitización de prompt injection (s114).

Funciones principales

analyze_mib_oids(extracted_oids, vendor_name, device_type, sys_descr) → dict

Analiza OIDs extraídos de un MIB custom y propone categorías.

Entrada:

Salida: dict con:

{
    "monitoring_oids": [
        {"name": "sysUpTime", "oid": "1.3.6.1.2.1.1.3", "category": "uptime"},
        ...
    ],
    "deep_discovery_oids": {
        "interfaces": [
            {"name": "ifInOctets", "oid": "1.3.6.1.2.1.2.2.1.10.1"},
            ...
        ],
        ...
    },
    "analysis": "Explicación texto (para UI)"
}

_format_oid_list(oids) → str

Formatea la lista de OIDs para el prompt de Gemma 4 (limita a 200 OIDs para caber en contexto).

s114 change: Los nombres/sintaxis se encapsulan con wrap_untrusted() (reutiliza sanitize.py de CNS) antes de pasar a la IA:

from monitoring.services.ai_providers.sanitize import wrap_untrusted

oid_list = wrap_untrusted("mib_oids", _format_oid_list(extracted_oids))

wrap_untrusted() marca los datos como “datos, no instrucciones” para que un OID malicioso no pueda inyectar prompts o comandos.

apply_proposal(vendor_slug, proposal) → dict

Aplica la propuesta de análisis al VendorProfile (merge sin sobrescribir OIDs existentes).

s114 robustness: Ahora omite entries sin oid en vez de lanzar KeyError:

for entry in oids:
    oid_value = entry.get("oid") if isinstance(entry, dict) else None
    if oid_value and oid_value not in existing_set:
        existing.append(entry)
        existing_set.add(oid_value)

_fallback_classify(oids, device_type) → dict

Clasificación rule-based cuando Gemma 4 no está disponible (fallback).

Endpoints

Ambos endpoints requieren admin only (s114):

Docstrings

s114 corrige la documentación (decía “Gemini Flash”, usa “Gemma 4 (google_genai)”):

Error handling

Previo: except Exception as e: return 400, {"message": f"Analysis failed: {str(e)}"}

Ahora: return 400, {"message": "MIB analysis failed. See server logs for details."}

Evita filtrar detalles internos que podrían ser sensibles.

Véase también

Subir