Alex HerreraDesarrollador de software · Enfoque en ciberseguridad
EN
← Volver a proyectos

Académico

Detector de cifrado masivo | Contención sin firmas

Detiene un programa desconocido que cifra archivos en masa, combinando tres señales del sistema operativo.

  • Seguridad
  • Infraestructura
Rol
Desarrollo y análisis de seguridad
Periodo
2026-07 – 2026-08

Stack

  • Python
  • Linux
  • Terraform
  • AWS

Contexto

Es el proyecto final individual de Seguridad de TI I, el mismo curso del análisis de spyware. La consigna pedía una herramienta que detectara y contuviera por su cuenta un cifrado masivo, y un banco de pruebas donde ejercitarla.

El escenario es una organización atacada por un programa que nadie ha visto antes. No hay firma que reconocer, así que la contención se decide con lo que el sistema operativo observa mientras ocurre.

El ejercicio se ejecuta en una instancia efímera de AWS creada para él, sin acceso a ningún sistema en uso.

Problema

Un antivirus por firmas solo reconoce lo que ya vio. Ante un binario nuevo no genera ninguna alerta, así que el cifrado avanza mientras alguien lo identifica.

Esperar a que una persona lo note tampoco sirve. Cuando alguien abre un archivo y lo encuentra ilegible, el cifrado ya alcanzó el resto del disco.

El proyecto parte de qué observa el sistema operativo cuando un programa cifra archivos en masa, y de cuánto de eso se puede medir sin identificarlo.

Decisiones técnicas

El detector usa tres señales independientes: la actividad en el sistema de archivos, la entropía de lo que se escribe y el volumen que escribe cada proceso. Ninguna es concluyente por sí sola.

Un componente aparte las combina en una puntuación, que es lo único que ordena la contención. Como los sensores no contienen nada, los umbrales se ajustan sin tocarlos.

Arquitectura

Un observador del sistema de archivos guarda los eventos en un búfer con bloqueo. Un hilo de muestreo mide cada 500 ms cuánto escribe cada proceso y conserva la medición más reciente. El hilo principal consulta la puntuación cada segundo y decide si actúa.

Sistema de archivosSeñalesPuntuaciónContención

Un observador registra creaciones, escrituras y renombrados en un búfer con bloqueo. Indica que hay actividad, pero no qué proceso la produce.

Se mide la entropía de lo que se escribe. Un contenido cercano al azar indica que el archivo dejó de parecerse a un documento, sin necesidad de abrirlo ni de identificarlo.

Un muestreo de write_bytes por proceso cada 500 ms atribuye el volumen escrito a un proceso concreto. Es la única de las tres señales que identifica al responsable.

Ninguna señal contiene por sí sola. Solo el componente que las combina puede ordenar la contención.

Las tres señales solo observan; la decisión de contener está en un único punto.

La contención mata el árbol de procesos y mueve el binario a un directorio de cuarentena sin permisos de ejecución.

La infraestructura del banco de pruebas está descrita en Terraform. El laboratorio se crea y se destruye con una orden, y cada ejecución parte de la misma máquina. El estado de Terraform y el archivo de variables quedan fuera del control de versiones, porque el archivo de estado guarda valores sensibles en claro.

Resultado

El detector contiene un cifrado masivo de un binario que nunca había visto, sin que nadie intervenga, porque reacciona a lo que hace el proceso.

Cada ajuste de umbral se midió sobre la misma máquina de partida, así que los resultados se pueden comparar entre ejecuciones.

Lo que aprendí

El umbral fue la parte difícil. Una copia de seguridad legítima produce un patrón muy parecido al de un cifrado masivo: muchos archivos escritos rápido, con contenido de entropía alta.

Con las tres señales disponibles no encontré un valor que separara los dos casos. La versión entregada prioriza no dejar pasar un caso real y acepta falsos positivos. El umbral quedó documentado con esa justificación.

Aquí el umbral dejó de ser una decisión técnica, porque fijarlo era elegir qué error cuesta más: detener una copia de seguridad legítima o dejar pasar un cifrado.