BrosNet / README.md
brosgor's picture
Upload README.md with huggingface_hub
73dca11 verified
|
Raw History Blame Contribute Delete
5.15 kB
metadata
language:
  - es
license: mit
tags:
  - cybersecurity
  - web-security
  - intrusion-detection
  - text-classification
  - pytorch
  - char-cnn
  - threat-hunting
library_name: pytorch
pipeline_tag: text-classification

BrosNet

Un CNN liviano a nivel de caracteres que clasifica payloads de peticiones HTTP en categorías de ataque web.

J2K Security Group · I+D (Innovation & Development) Department

Working for innovation

Descripción del modelo

BrosNet es un clasificador char-CNN que recibe una línea de petición HTTP o un payload crudo y devuelve la categoría de ataque con su puntaje de confianza. Está pensado para triaje de seguridad: ante una petición que se escapó de los filtros existentes (o que nunca fue bloqueada), te dice qué tipo de ataque es.

Etiquetas (6 clases):

Etiqueta Significado
normal petición benigna
SQLi inyección SQL
XSS cross-site scripting
LFI inclusión local de archivos / path traversal
RCE ejecución remota de comandos / inyección de comandos
SSRF server-side request forgery

Acepta tanto un payload suelto ("<script>alert(1)</script>") como una línea de petición completa ("GET /login?user=admin' OR '1'='1 HTTP/1.1").

Arquitectura

CNN 1D a nivel de caracteres (multi-kernel), ~50k parámetros, checkpoint de 267 KB. Inferencia en microsegundos en CPU.

Componente Valor
Tipo char-CNN 1D (multi-kernel, max-pool adaptativo)
Tamaño de vocabulario 97 (ASCII imprimible)
Longitud máxima de secuencia 512 caracteres
Dimensión de embedding 32
Filtros por kernel 64
Tamaños de kernel (2, 3, 4, 5)
Dimensión oculta 128
Dropout 0.3

Rendimiento

Entrenado con 241.953 muestras, evaluado en un holdout del 20% (48.391 muestras).

  • Exactitud (accuracy) global: 99.90%
  • Macro-F1: 0.9986
Clase Precisión Recall F1
normal 0.9997 1.0000 0.9998
SQLi 0.9994 0.9984 0.9989
XSS 0.9977 0.9963 0.9970
LFI 0.9987 0.9998 0.9993
RCE 0.9933 0.9995 0.9964
SSRF 1.0000 1.0000 1.0000

Datos de entrenamiento

Entrenado desde cero con 241.953 muestras de datasets públicos más un corpus privado de líneas de petición reales (anonimizadas).

Fuente Contenido Licencia / nota
CSIC 2010 (HTTP Dataset) ~74k peticiones web normales (clase normal) Dataset público de investigación (CSIC); uso académico libre
SecLists payloads SQLi, XSS, LFI, RCE MIT
Web Application Payloads (Kaggle) payloads SSRF / inyección de comandos según la página del dataset
SQL Injection Dataset (Kaggle) consultas SQLi según la página del dataset
XSS Dataset for Deep Learning (Kaggle) payloads XSS según la página del dataset
SQL Injection Dataset (Kaggle) consultas SQLi según la página del dataset
Corpus privado de líneas de petición líneas de petición normales diversas (anonimizadas) propietario

Nota de licencias: este repositorio publica solo los pesos entrenados y el código, no los datos crudos de entrenamiento. SecLists es MIT; el dataset CSIC 2010 es un dataset público de investigación. Los datasets de Kaggle tienen sus propias licencias — verifica la página de cada dataset antes de redistribuir los datos en sí. Los pesos derivados de estos datasets públicos se publican aquí bajo MIT.

Uso

El repositorio incluye el paquete brosnet/ con la clase del modelo y el helper de inferencia.

from brosnet.predict import classify

label, confidence = classify("GET /login?user=admin' OR '1'='1 HTTP/1.1")
print(label, confidence)          # SQLi 0.9545

Cargar el checkpoint directamente:

import torch
from brosnet.model import BrosNet

ckpt = torch.load("brosnet.pt", map_location="cpu", weights_only=False)
model = BrosNet(vocab_size=ckpt["vocab_size"], max_len=ckpt["max_len"],
                num_classes=len(ckpt["class_names"]))
model.load_state_dict(ckpt["state_dict"])
model.eval()

Dependencias: torch (CPU), numpy.

Uso previsto y limitaciones

  • Herramienta de triaje / anotación para analistas, no un firewall en tiempo real ni un motor de auto-bloqueo.
  • Opera solo sobre texto del payload; no es un detector de flujo de red ni de DDoS (esos son modelos aparte).
  • SSRF tiene pocas muestras de entrenamiento (~100); trata sus predicciones con menor confianza.
  • Una petición clasificada como normal no descarta ataques indistinguibles de texto benigno (p. ej. CSRF). Se recomienda revisión humana antes de actuar sobre las predicciones.

Licencia

MIT.