Divulgación de información sensible
Descripción
Los LLM pueden revelar datos sensibles de forma inadvertida, incluyendo PII, credenciales o información propietaria, a través de sus salidas. Los riesgos incluyen la memorización de datos de entrenamiento y la extracción mediante prompts.
Riesgo
Los LLM pueden filtrar información sensible a través de múltiples vectores, incluyendo datos de entrenamiento memorizados, inferencia a partir del contexto o manipulación mediante inyección de prompts. Esto incluye PII, claves de API, datos comerciales confidenciales o información interna del sistema. La información divulgada puede habilitar ataques adicionales, infringir regulaciones de privacidad o causar daño competitivo.
Escenarios de ataque
Un atacante utiliza prompts cuidadosamente diseñados para extraer claves de API o contraseñas memorizadas que aparecieron en los datos de entrenamiento, obteniendo acceso no autorizado a los sistemas.
Un usuario formula preguntas a un chatbot basado en LLM diseñadas para inferir información comercial confidencial a partir de las respuestas, como listas de clientes o estrategias de precios no disponibles públicamente.
Mitigaciones
Sanitización de datos
Eliminar la PII, las credenciales y la información sensible de los datos de entrenamiento antes de usarlos. Implementar procesos automatizados de escaneo y revisión manual.
Filtrado de salidas
Monitorear las salidas del LLM en busca de patrones de datos sensibles, incluyendo expresiones regulares para tarjetas de crédito, números de seguro social (SSN) y claves de API. Redactar la información sensible detectada antes de la entrega.
Controles de acceso
Implementar una autorización estricta para las funciones del LLM. Asegurar que los usuarios solo puedan acceder a la información adecuada a su nivel de privilegio.
Privacidad diferencial
Aplicar técnicas de preservación de la privacidad durante el entrenamiento para reducir la memorización de puntos de datos específicos. Utilizar técnicas como DP-SGD cuando sea apropiado.
Ejemplos de código
# Correcto: Filtrado de salidas para datos sensibles
import re
from typing import Optional
class FiltroDatosSensibles:
PATRONES = {
'tarjeta_credito': re.compile(r'\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b'),
'ssn': re.compile(r'\b\d{3}-\d{2}-\d{4}\b'),
'clave_api': re.compile(r'\b[A-Za-z0-9]{32,}\b'),
'correo_electronico': re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b')
}
def filtrar_salida(self, texto: str, rol_usuario: str) -> str:
filtrado = texto
for nombre_patron, patron in self.PATRONES.items():
if self._deberia_redactar(nombre_patron, rol_usuario):
filtrado = patron.sub('[REDACTADO]', filtrado)
return filtrado
def _deberia_redactar(self, nombre_patron: str, rol_usuario: str) -> bool:
# Lógica de redacción basada en roles
if rol_usuario == 'administrador':
return nombre_patron in ['tarjeta_credito', 'ssn']
return True # Redactar todo para usuarios que no son administradores
Requisitos de evidencia
- Registros de sanitización de datos de entrenamiento e informes de eliminación de PII
- Reglas de filtrado de salidas y patrones de detección
- Políticas de control de acceso para las funciones del LLM
- Alertas de monitoreo de prevención de pérdida de datos (DLP)
- Evaluaciones de impacto en la privacidad