Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/yingtaoren/d-scan
Herramientas DefensivasAprendizaje AutomáticoSeguridad de IADetección de Anomalías
GitHubyingtaoren/d-scan

D-Scan

Analiza los estados internos de los LLM y más de 100 características de atención/probabilidad para entrenar clasificadores que detecten ataques de envenenamiento de documentos en sistemas RAG.

Ver Repositorio
12hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Cuando el contexto muerde: Detección de envenenamiento de RAG mediante el colapso de atención a nivel de documento

D-SCAN es un marco de análisis para detectar ataques de envenenamiento de documentos en sistemas RAG (Retrieval-Augmented Generation). Recopila los estados internos del LLM durante la generación (probabilidades de tokens y pesos de atención), extrae características multidimensionales y entrena clasificadores para distinguir entre documentos recuperados limpios y envenenados.

1. Instalación y requisitos

Requisitos previos

  • Python >= 3.9
  • GPU compatible con CUDA (se recomiendan >= 24 GB de VRAM para la inferencia de modelos de 8B parámetros)

Preparación del modelo

Este proyecto usa Llama-3.1-8B-Instruct por defecto. Descarga el modelo a una ruta local y actualiza la variable MODEL_ID en collect_inner_state.py:

root@kitploit:~
MODEL_ID = "/your/path/to/Llama-3.1-8B-Instruct"

2. Inicio rápido

El flujo de trabajo completo consta de tres pasos: Recopilar estados internos → Calcular características → Entrenar el clasificador. Las preguntas y los documentos recuperados correspondientes se proporcionan en https://huggingface.co/datasets/An998/D-SCAN.

Paso 1: Recopilar los estados internos del modelo

root@kitploit:~
# Update configuration parameters in collect_inner_state.py, then run
python collect_inner_state.py

Paso 2: Calcular las métricas de características

root@kitploit:~
# Analyze both attack and clean data, compute all features, and save results
python compute_feature.py \
    --attack_dir ./saved_reppl_weights_serial_query1_attack2_2wiki \
    --clean_dir ./saved_reppl_weights_serial_query1_pure1_5_2wiki \
    --output_dir ./analysis_results/2wiki_all \
    --max_attack_samples 3000 \
    --max_clean_samples 3000

Paso 3: Entrenar el clasificador y evaluar

Abre fit_D-SCAN.ipynb y ejecuta las celdas en orden para:

  1. Cargar los datos de características generados en el Paso 2
  2. Entrenar clasificadores de Regresión Logística / Bosque Aleatorio (validación cruzada de 5 pliegues)
  3. Evaluar el rendimiento de transferencia en el conjunto de prueba

3. Detalles del pipeline

3.1 Recopilación de datos (collect_inner_state.py)

Para cada entrada de pregunta-documento, el LLM realiza una generación de múltiples muestras (por defecto: 10 muestras, temperature=1.0) y recopila los siguientes estados internos:

Parámetros de configuración clave

root@kitploit:~
MODEL_ID = "/path/to/model"     # Model path
NUM_SAMPLES = 10                # Number of samples per question
MAX_NEW_TOKENS = 50             # Maximum generated tokens
TEMPERATURE = 1.0               # Sampling temperature
data_type = 'pure1_5'           # Data type: 'pure1_5' (clean) or 'attack2' (attack)
dataset_name = 'hotpotqa'       # Dataset: 'hotpotqa', '2wiki', 'musique'

Las salidas se guardan como archivos data_{batch_id}_reppl.pt y archivos de estadísticas results_stats_*.jsonl.


3.2 Cálculo de características (compute_feature.py)

Extrae 10 categorías con más de 100 características dimensionales de los estados internos recopilados. El clasificador usa estas características para determinar si existen documentos envenenados entre los documentos recuperados para una consulta determinada.

Resumen de métricas

Descripciones detalladas de las métricas

1. PerplexityMetrics (Estadísticas de probabilidad de generación)

Calculadas a partir de outer_ppl_probs (probabilidad de cada token generado):

  • ppl_mean_prob: Probabilidad media de todos los tokens generados
  • ppl_std_prob: Desviación estándar de la probabilidad
  • ppl_min_prob: Probabilidad mínima (incertidumbre extrema)
  • ppl_low_prob_ratio: Proporción de tokens de baja probabilidad (<0.1)
  • ppl_cross_sample_var: Varianza de las probabilidades medias entre muestras
  • ppl_coef_variation: Coeficiente de variación (CV = std/mean)
  • ppl_skewness: Asimetría de la distribución de probabilidad
  • ppl_kurtosis: Curtosis de la distribución de probabilidad

2. AttentionEntropyMetrics (Entropía de atención)

Calculadas a partir de inner_ppl_matrix (pesos de atención en cada paso):

  • attn_entropy_mean/std/max: Media, desviación estándar y máximo de la entropía de la distribución de atención
  • attn_entropy_cv: Coeficiente de variación de la entropía de atención

3. AttentionConcentrationMetrics (Concentración de atención)

  • attn_top5/10/20_ratio_mean/std: Proporción de atención capturada por los tokens del Top-K%
  • attn_gini_mean/std: Coeficiente de Gini de la distribución de atención (medida de desigualdad)

4. DocumentAttentionDensityMetrics (Densidad de atención por documento)

  • doc_attn_dens_std/range/max/min: Desviación estándar, rango, máximo y mínimo de la densidad de atención entre documentos
  • doc_attn_dens_entropy: Entropía de la distribución de densidad de atención por documento
  • doc_attn_dens_temporal_var_mean: Varianza temporal media de la densidad de atención por documento

5. SampleConsistencyMetrics (Consistencia entre muestras)

  • sample_attn_consistency/std: Similitud coseno entre muestras de la atención a nivel de token
  • sample_doc_consistency: Similitud coseno entre muestras de la atención a nivel de documento
  • sample_doc_js_divergence: Divergencia JS entre muestras de la atención a nivel de documento

6. AttentionDynamicsMetrics (Dinámica de atención)

  • attn_doc_switch_mean/max: Número de cambios de documento dominante
  • attn_entropy_change_mean/std: Cambio de entropía de atención paso a paso

7. TokenLevelAttentionMetrics (Fluctuación de atención a nivel de token)

  • tla_std_mean/std/max/median/p90/p99/high_ratio/cv: Estadísticos de la desviación estándar de atención por token a lo largo de los pasos de generación
  • tla_ent_mean/std/max/median/p90/p99/high_ratio/cv: Estadísticos de la entropía de atención por token a lo largo de los pasos de generación

8. AnswerProbabilityMetrics (Estadísticas profundas de probabilidad de respuesta)

  • aprob_p10/p25/p50/p75/p90/iqr: Cuantiles de probabilidad
  • aprob_high_ratio_05/08: Proporción de tokens de alta probabilidad
  • aprob_low_ratio_01/001: Proporción de tokens de baja probabilidad
  • aprob_log_mean/std/min: Estadísticos de log-probabilidad
  • aprob_ppl_mean/std/max: Perplejidad a nivel de secuencia
  • aprob_geometric_mean: Media geométrica de las probabilidades
  • aprob_distribution_entropy: Entropía de la información del histograma de probabilidad

9. ProbabilityDynamicsMetrics (Dinámica de probabilidad)

  • pdyn_diff_mean/abs_diff_mean/abs_diff_std/abs_diff_max: Estadísticos de diferencias de probabilidad
  • pdyn_max_drop/max_jump: Caída/salto máximo en un solo paso
  • pdyn_volatility_mean/std: Volatilidad
  • pdyn_trend_slope_mean/std: Pendiente de tendencia lineal
  • pdyn_autocorr_mean/std: Coeficiente de autocorrelación
  • pdyn_spike_ratio_01/03: Proporción de picos (puntos de mutación)

10. CrossSampleProbabilityConsistencyMetrics (Consistencia de probabilidad entre muestras)

  • cspc_mean_prob_std/cv/range: Consistencia de las probabilidades medias entre muestras
  • cspc_ppl_std/cv/range: Consistencia de la perplejidad entre muestras
  • cspc_min_prob_std/range: Consistencia de las probabilidades mínimas
  • cspc_seq_cosine_mean/std: Similitud coseno entre muestras de las secuencias de probabilidad
  • cspc_seq_pearson_mean: Correlación de Pearson entre muestras de las secuencias de probabilidad
  • cspc_seq_mse_mean: MSE entre muestras de las secuencias de probabilidad
  • cspc_divergence_index: Índice de divergencia entre muestras

Argumentos de línea de comandos de compute_feature.py

root@kitploit:~
python compute_feature.py \
    --attack_dir <attack_data_directory> \
    --clean_dir <clean_data_directory> \
    --output_dir <output_directory> \
    --max_attack_samples 3000 \
    --max_clean_samples 3000 \
    --min_correct_count 0 \
    --min_attack_target_count 0 \
    --num_use_samples 10 \
    --model_path /path/to/model    # Optional: load tokenizer for accuracy calculation

Archivos de salida

Nombre de archivoDescripción
single_metric_analysis.json

3.3 Entrenamiento del clasificador (fit_D-SCAN.ipynb)

Flujo de trabajo del notebook:

  1. Cargar datos: Leer la salida full_analysis_results.json de compute_feature.py
  2. Selección de características: Usar todas las características o filtrar por categoría (p. ej., solo características de atención)
  3. Entrenar clasificadores:
    • Regresión Logística (regularización L2): clasificador lineal, adecuado para menos características
    • Bosque Aleatorio (100 árboles, max_depth=5): clasificador no lineal, captura interacciones entre características
  4. Validación cruzada de 5 pliegues: Reporta AUC, Accuracy, Precision, Recall, F1
  5. Análisis de importancia de características: Muestra las 10 características más importantes
  6. Evaluación en conjunto de prueba: Usa el escalador y el clasificador entrenados para evaluar el rendimiento de transferencia en un conjunto de prueba independiente
  7. Visualización: Curvas ROC, gráficos de barras de importancia de características, comparación Entrenamiento vs Prueba

Selección de características para los clasificadores

La variable use_features del notebook proporciona un control flexible sobre el subconjunto de características utilizado por los clasificadores:

root@kitploit:~
# Use all features
use_features = [f for f in feature_names if f not in exclude_cols]

# Use only attention-related features
use_features = [f for f in use_features if 'attn' in f]

# Combine by metric category (example)
use_features = [f for f in feature_names if f.startswith(('ppl_', 'doc_', 'sample_'))]

El rendimiento del clasificador por categoría también se imprime durante la ejecución de compute_feature.py:

Descargar herramienta
CampoTipoDescripción
outer_ppl_probsList[Tensor]Probabilidad de generación de tokens para cada muestra
inner_ppl_matrixList[List[Tensor]]Pesos de atención sobre la secuencia de entrada en cada paso de generación (promediados por capa)
doc_rangesDict[str, List[int]]Rango de posiciones de tokens para cada documento en la secuencia de entrada
generated_sequencesList[List[int]]Secuencias de IDs de tokens generados para cada muestra
#CategoríaNombre de clase# CaracterísticasIdea central
1Estadísticas de probabilidad de generaciónPerplexityMetrics8Los documentos envenenados pueden aumentar la incertidumbre del modelo durante la generación, lo que se refleja en cambios en la distribución de probabilidad
2Entropía de atenciónAttentionEntropyMetrics4Entropía alta = atención dispersa = posible información conflictiva; entropía baja = atención concentrada
3Concentración de atenciónAttentionConcentrationMetrics8Mide si la atención se concentra en unos pocos tokens mediante el ratio Top-K y el coeficiente de Gini
4Densidad de atención por documentoDocumentAttentionDensityMetrics6Suma de atención dividida por la longitud del documento, eliminando el sesgo de longitud en la distribución de atención
5Consistencia entre muestrasSampleConsistencyMetrics4Bajo envenenamiento, los patrones de atención entre muestras pueden ser inconsistentes (similitud coseno, divergencia JS)
6Dinámica de atenciónAttentionDynamicsMetrics4Frecuencia de cambios de documento dominante y magnitud del cambio de entropía durante la generación
7Fluctuación de atención a nivel de tokenTokenLevelAttentionMetrics16Estabilidad de la atención en cada posición de token de entrada a lo largo de los pasos de generación (std, entropía)
8Estadísticas profundas de probabilidad de respuestaAnswerProbabilityMetrics18Cuantiles de probabilidad, ratios de tokens de alta/baja probabilidad, log-probabilidad, perplejidad, etc.
9Dinámica de probabilidadProbabilityDynamicsMetrics14Pendiente de tendencia, autocorrelación, volatilidad, ratio de picos en la secuencia de generación
10Consistencia de probabilidad entre muestrasCrossSampleProbabilityConsistencyMetrics13Similitud coseno, correlación de Pearson, MSE e índice de divergencia entre muestras
ArgumentoPor defectoDescripción
--attack_dir-Directorio de datos de ataque (que contiene archivos data_*_reppl.pt)
--clean_dir-Directorio de datos limpios
--output_dir-Directorio de salida
--max_attack_samples3000Número máximo de muestras de ataque
--max_clean_samples3000Número máximo de muestras limpias
--min_correct_count0Número mínimo de respuestas correctas en los datos limpios (para filtrado)
--min_attack_target_count0Número mínimo de aciertos de la respuesta objetivo en los datos de ataque
--num_use_samplesNoneNúmero de muestras por pregunta para el cálculo de métricas (por defecto: todas)
--model_pathNoneRuta del modelo (para cargar el tokenizador y decodificar las secuencias generadas)
AUC, valor p, d de Cohen, etc. para cada métrica
full_analysis_results.jsonMatriz de características completa + etiquetas
document_detailed_metrics.jsonMétricas detalladas por documento (resumen JSON)
document_detailed_metrics_full.pklMétricas completas a nivel de documento (incluye atención paso a paso)
Grupo de característicasPrefijo / Palabra clave
perplexityppl_*
attention_entropy*entropy* (excl. doc y aprob)
attention_concentration*top*, *gini*
document_attentiondoc_*
sample_consistency*sample*, *consistency*
attention_dynamics*switch*, *change*
token_level_attentiontla_*
answer_probabilityaprob_*
probability_dynamicspdyn_*
cross_sample_prob_consistencycspc_*