• Qué son los módulos y las audiencias en CTFd

    Al entrar al panel de administración de las versiones actuales de CTFd podemos encontrarnos con dos opciones que no son necesarias para montar un CTF tradicional, pero que resultan especialmente interesantes cuando utilizamos CTFd como plataforma de formación en ciberseguridad: Modules y Audiences. Estas dos funciones trabajan conjuntamente:

    • Los Modules nos permiten agrupar challenges dentro de una unidad temática.
    • Las Audiences nos permiten decidir qué usuarios pueden acceder a esos módulos.

    Esto nos permite convertir una instalación de CTFd en algo bastante más parecido a una plataforma de entrenamiento, pudiendo disponer en una misma instancia de contenidos de Linux, Windows, DFIR, pentesting web, Active Directory, OSINT, reversing, explotación binaria, etc., y controlar qué grupos de alumnos tienen acceso a cada conjunto de retos.

    Qué es un Module en CTFd

    Un Module es una agrupación lógica de challenges. Podemos entenderlo como una unidad temática dentro de nuestra plataforma. Por ejemplo, si estamos creando una plataforma de entrenamiento DFIR podemos crear los siguientes módulos:

    • Linux DFIR
    • Windows DFIR
    • Network Forensics
    • Memory Forensics

    Dentro del módulo Linux DFIR podríamos colocar challenges como:

    • Análisis de /var/log/auth.log.
    • Investigación de procesos sospechosos.
    • Recuperación de archivos eliminados.
    • Análisis de tareas cron.
    • Análisis de persistencia mediante systemd.
    • Análisis de una imagen de disco EXT4.

    Mientras que dentro de Windows DFIR podríamos tener:

    • Análisis de Windows Event Logs.
    • Análisis del Registry.
    • Investigación de Prefetch.
    • Análisis de Amcache.
    • Análisis de Shimcache.
    • Análisis de una imagen NTFS.

    Internamente, CTFd permite que un challenge tenga asociado un identificador de módulo. Por tanto, un challenge puede pertenecer como máximo a un Module.

    Module no es lo mismo que Category

    Es fácil confundir los Modules con el campo Category que ya existe en los challenges, pero cumplen funciones diferentes. Una categoría sirve fundamentalmente para clasificar los retos. Podemos tener categorías como:

    • Web
    • Forensics
    • Crypto
    • Pwn
    • Reversing
    • OSINT

    Un Module va un paso más allá porque forma parte del sistema de control de acceso. Podemos verlo de esta forma:

    Elemento Función
    Category Clasificar challenges.
    Module Agrupar challenges y someterlos a control de acceso.
    Audience Determinar quién puede acceder a determinados Modules.

    Qué es una Audience en CTFd

    Una Audience representa un grupo de cuentas al que podemos conceder acceso a determinados módulos.

    Por ejemplo, podemos crear las siguientes Audiences:

    • Alumnos DFIR Linux
    • Alumnos DFIR Windows
    • Alumnos DFIR Completo

    Después podemos relacionarlas con nuestros módulos de esta forma:

    • Alumnos DFIR Linux → Linux DFIR.
    • Alumnos DFIR Windows → Windows DFIR.
    • Alumnos DFIR Completo → Linux DFIR + Windows DFIR.

    De esta manera podemos mantener todos los retos dentro de una misma instalación de CTFd sin que todos los participantes tengan necesariamente acceso a todo el contenido. Además, la relación entre Modules y Audiences es flexible: una Audience puede acceder a varios Modules y un mismo Module puede estar autorizado para varias Audiences.

    El detalle importante: añadir un challenge a un Module restringe su acceso

    Este es probablemente el detalle más importante que debemos conocer antes de empezar a utilizar esta funcionalidad. Un challenge que no pertenece a ningún Module no necesita superar esta comprobación de acceso por Audiences. Sin embargo, cuando asignamos ese challenge a un Module, CTFd comprueba si la cuenta que intenta acceder al reto tiene acceso a dicho módulo.

    La lógica aplicada por CTFd es, simplificándola conceptualmente:

    • Challenge sin Module → acceso normal.
    • Challenge con Module → necesitamos acceso al Module.
    • Para acceder al Module → debemos pertenecer a una Audience autorizada.

    Esto implica una consecuencia importante: si creamos un Module, introducimos challenges dentro de él y no concedemos acceso al módulo mediante ninguna Audience, los participantes normales no podrán acceder a esos challenges. Los administradores están fuera de esta comprobación cuando CTFd realiza el correspondiente bypass administrativo, por lo que debemos tener cuidado al probar nuestra configuración desde una cuenta de administrador: nosotros podemos ver un challenge que posteriormente un participante normal no podrá abrir.

    Ejemplo de estructura para una plataforma de formación

    Supongamos que queremos utilizar CTFd para construir una plataforma de entrenamiento de ciberseguridad. Podemos organizarla de la siguiente forma:

    • Module: Linux DFIR
      • Logs de autenticación.
      • Procesos.
      • Persistencia.
      • Sistema de archivos EXT4.
    • Module: Windows DFIR
      • Event Logs.
      • Registry.
      • Prefetch.
      • Amcache.
    • Module: Web Pentesting
      • SQL Injection.
      • XSS.
      • SSTI.
      • SSRF.
    • Module: Active Directory
      • Kerberoasting.
      • AS-REP Roasting.
      • ACL abuse.
      • Lateral movement.

    Después podemos crear Audiences en función de los cursos que impartamos:

    • Curso DFIR Básico → Linux DFIR + Windows DFIR.
    • Curso Pentesting Web → Web Pentesting.
    • Curso Red Team → Web Pentesting + Active Directory.
    • Formación Completa → acceso a todos los módulos.

    Así podemos reutilizar los mismos challenges en diferentes formaciones sin tener que mantener varias instalaciones independientes de CTFd.

    Cuándo merece la pena utilizar Modules y Audiences

    Si utilizamos CTFd para organizar un CTF clásico en el que todos los participantes deben poder enfrentarse a todos los retos, probablemente no necesitemos utilizar ninguna de estas dos funciones. En cambio, Modules y Audiences resultan especialmente útiles cuando usamos CTFd como plataforma educativa, cuando tenemos diferentes cursos dentro de una misma instalación o cuando necesitamos entregar diferentes conjuntos de ejercicios a diferentes grupos de alumnos.

    En ese escenario podemos pensar en la estructura de CTFd de esta manera:

    • Challenge: el ejercicio concreto que debe resolver el alumno.
    • Category: el tipo o clasificación del ejercicio.
    • Module: la unidad temática a la que pertenece el ejercicio.
    • Audience: el grupo que tiene permiso para acceder a esa unidad temática.

    Por ejemplo, Linux DFIR y Windows DFIR encajan perfectamente como Modules, mientras que las diferentes promociones, cursos o grupos de alumnos encajan como Audiences.


    Deja una respuesta