Este repositorio documenta el análisis técnico en curso sobre el apagón masivo ocurrido en la Península Ibérica el 28 de abril de 2025.
Puedes leer directamente resultados y conclusiones en Medium
ACTUALIZACIÓN (29-04-2025):
Ha transcurrido un día desde el incidente. Si bien las investigaciones oficiales están en curso y aún no hay conclusiones definitivas, la hipótesis central que guía este análisis, basada en los datos públicos disponibles hasta ahora, sugiere la posibilidad de un evento coordinado y complejo, que va más allá de una simple cascada de fallos técnicos. Se explora la consistencia de los eventos observados con TTPs (Tácticas, Técnicas y Procedimientos) de actores avanzados, como el grupo conocido como Sandworm.
- España:
- El gobierno indica que "no descarta ninguna hipótesis" y menciona que las centrales nucleares (que realizaron paradas de seguridad automáticas) fueron "un problema".
- La Audiencia Nacional ha iniciado una investigación por posible sabotaje (incluyendo ciberataque).
- Red Eléctrica de España (REE) ha comunicado no haber sufrido ciberataques en sus sistemas y sitúa el inicio del evento principal a las 12:33 CEST (10:33 UTC), con una pérdida de 15 GW en segundos.
- Portugal:
- Reportes iniciales y datos de REN sugieren que la perturbación eléctrica pudo originarse en la red portuguesa minutos antes del evento principal en España.
- El gobierno portugués ha solicitado una investigación a nivel de la UE.
La narrativa inicial más difundida apuntaba a una cascada de fallos técnicos. Sin embargo, el análisis detallado de datos públicos de energía y conectividad revela patrones y anomalías significativas que merecen una investigación más profunda:
-
Degradación Temprana de Conectividad: Datos de IODA muestran una disminución notable en la conectividad a internet (active probing) en ambas redes, española y portuguesa, antes (~10:20-10:25 UTC) del colapso eléctrico principal registrado en España (10:33 UTC).
-
Origen Portugués del Evento Eléctrico: Datos del operador portugués (REN) indican un colapso significativo en la generación eléctrica portuguesa alrededor de las 10:30 UTC, precediendo al evento español.
-
Colapso Sincronizado en España: Datos de REE confirman una caída casi vertical y simultánea (~10:33 UTC) de diversas fuentes de generación (Nuclear, Solar PV, Eólica, Ciclo Combinado) en España.
Estos hallazgos preliminares, especialmente la desconexión temporal entre los problemas de conectividad y el fallo eléctrico principal en España, junto con el origen portugués de la perturbación eléctrica, justifican la exploración de hipótesis más complejas, incluyendo la posibilidad de un ataque coordinado multi-vector (Telecom + Energía).
Este análisis sigue un enfoque estructurado para garantizar la claridad y reproducibilidad:
- Recolección de Datos Crudos: Se utilizan scripts (
scripts/scraper*.py
) para obtener datos de Downdetector y se recopilan datos públicos de REE, REN, IODA y otras FUENTES. Estos datos se almacenan sin modificar enresources/raw/
. - Preprocesamiento: Scripts (
scripts/preprocess_raw_csvs.py
) y funciones auxiliares (utils.py
) limpian y estandarizan los datos crudos, generando los datasets procesados ubicados fuera de la carpetaraw/
(e.g., enresources/energy/spain/
,resources/ioda/
). - Análisis Exploratorio de Datos (EDA): Se realizan análisis individuales por fuente de datos en notebooks Jupyter (
notebooks/
):energia_es.ipynb
: Análisis de datos de generación, demanda y almacenamiento en España (REE).ioda.ipynb
: Análisis de datos de conectividad a Internet (IODA) para España y Portugal.downdetector.ipynb
: Análisis de reportes de usuarios sobre caídas de servicios (Downdetector España).- (Nota: Análisis de datos de REN Portugal integrado donde es relevante, basado en datos de
resources/raw/energy/portugal
)
- Correlación y Síntesis: Se trabaja en la integración y comparación temporal de los hallazgos de los diferentes EDAs para construir una línea de tiempo detallada del incidente, identificando correlaciones y discrepancias. (El notebook
combined_sources.ipynb
puede contener trabajo en progreso para esta síntesis). - Investigación Contextual: Se recopila información adicional en
docs/
sobre la infraestructura energética y de telecomunicaciones ibérica, TTPs de actores relevantes (Sandworm), informes técnicos (e.g.,Industroyer_Report.pdf
) y el estado del arte (SOTA.md
) para contextualizar los hallazgos técnicos. - Visualización: Se utilizan bibliotecas como Plotly y Matplotlib para generar gráficos interactivos y estáticos que ilustran patrones, anomalías y comparaciones temporales. Los plots generados se almacenan en las subcarpetas
plots/
dentro deresources/
.
.
├── docs/ # Documentación, Investigación Contextual, Resúmenes
│ ├── Industroyer_Report.pdf # Ejemplo de informe técnico relevante
│ ├── SOTA.md # Estado del arte, TTPs relevantes
│ ├── sources.md # Lista detallada de fuentes de datos e información
│ └── summary.md # Resumen ejecutivo de hallazgos y análisis - Redactado por Gemini
├── notebooks/ # Jupyter Notebooks para análisis exploratorio y síntesis
│ ├── downdetector.ipynb
│ ├── energia_es.ipynb
│ └── ioda.ipynb
├── resources/ # Datos procesados, visualizaciones y datos crudos
│ ├── downdetector/ # Datos procesados y plots de Downdetector
│ │ ├── es-28-04-2025.json
│ │ └── plots/
│ ├── energy/ # Datos procesados y plots de Energía (España y Portugal)
│ │ ├── portugal/
│ │ │ └── ren_eletricity_28_04.png # Plot procesado REN
│ │ └── spain/
│ │ ├── almacenamiento.csv # Ejemplo dato procesado REE
│ │ ├── demanda.csv
│ │ ├── generacion.csv
│ │ ├── energy.html # Ejemplo visualización interactiva
│ │ └── plots/ # Plots estáticos REE
│ ├── ioda/ # Datos procesados y plots de IODA
│ │ ├── ioda_portugal.csv
│ │ ├── ioda_spain.csv
│ │ └── plots/
│ └── raw/ # Datos CRUDOS originales, sin modificar
│ ├── downdetector/
│ ├── energy/
│ ├── ioda/
│ └── nuclear_prod.txt # Ejemplo otros datos relevantes
├── scripts/ # Scripts Python reutilizables para tareas específicas
│ ├── preprocess_raw_csvs.py # Limpieza y preparación de datos crudos
│ ├── scraper_pt.py # Scraper específico (si aplica)
│ └── scraper.py # Scraper principal (e.g., Downdetector)
├── .gitignore # Archivos y carpetas a ignorar por Git
├── README.md # Este archivo (versión en Español)
├── README_en.md # Versión en Inglés del README
├── requirements.txt # Dependencias del proyecto Python
└── utils.py # Funciones auxiliares compartidas
- Clonar el repositorio:
git clone https://github.com/MrCabss69/Sandworm-Spain-04-2025 cd Sandworm-Spain-04-2025
- Crear un entorno virtual (recomendado):
python -m venv .venv source .venv/bin/activate # En Windows: .venv\Scripts\activate
- Instalar dependencias:
pip install -r requirements.txt
- Ejecutar los análisis:
- Puedes ejecutar los notebooks Jupyter (
notebooks/*.ipynb
) utilizando Jupyter Lab o Jupyter Notebook para explorar los análisis paso a paso. - Los scripts en
scripts/
pueden ejecutarse directamente si es necesario (e.g., para actualizar datos o reprocesar). Consulta el código para detalles específicos.
- Puedes ejecutar los notebooks Jupyter (
Este es un análisis independiente y en curso. Si tienes información adicional, encuentras errores o deseas discutir los hallazgos, puedes abrir un "Issue" en este repositorio o contactar directamente conmigo. ¡Contribuciones y puntos de vista constructivos son bienvenidos!
Disclaimer: Este análisis se basa exclusivamente en datos disponibles públicamente y representa una interpretación independiente. Las hipótesis presentadas, particularmente en relación con un posible ciberataque y actores específicos, son especulativas y requerirían confirmación a través de investigaciones forenses oficiales.