Programación y scripting para ciberseguridad: parte 1 – auditando scripts de backup en Bash
- Publicado el
- • 5 min de lectura•--- vistas
Introducción
Cuando un equipo de seguridad necesita automatizar rápidamente, Bash sigue siendo un aliado confiable. Esta lección abre la serie Programación y scripting para ciberseguridad con dos breves scripts de backup tomados de la empresa ficticia Dharma. Analizando el script base y su sucesor mejorado, descubrimos los bloques fundamentales de la automatización con shell, identificamos debilidades y trazamos mejoras concretas que hacen las operaciones diarias más seguras.
Objetivos de aprendizaje
- Reconocer los elementos centrales que conforman un script de Bash (shebang, comandos, variables, códigos de salida, condicionales).
- Explicar por qué el scripting es una solución adecuada para tareas administrativas ligeras y recurrentes.
- Comparar un script mínimo con una variante reforzada y describir cómo cada mejora incrementa la fiabilidad o la seguridad.
- Proponer los siguientes pasos para evolucionar los scripts hacia una automatización de nivel productivo.
Escenario: automatizando salvaguardas en Dharma
El grupo de infraestructura de Dharma está desplegando automatización de procesos. Se pide a los analistas junior que auditen los scripts existentes antes de modificarlos, asegurándose de comprender cada instrucción que protege datos críticos. El equipo empieza con una operación de copia simple que se ejecuta fuera de horario. A partir de ahí, iteran, añadiendo redes de seguridad sin sacrificar la agilidad que Bash ofrece.
Script 1 — Estableciendo la línea base
El primer script es deliberadamente conciso. Refleja lo que muchos equipos programan en cron en las primeras etapas de la automatización.
#!/bin/bash
# Copy file "usuarios" to specified path (create backup)
cp /home/dharma/usuarios.txt /home/dharma/backup/
# If exit code of last command is 0 (which means success), print notification message
if [ $? -eq 0 ]; then
echo "Backup completed successfully."
fi
Cómo funciona el script
- Shebang (
#!/bin/bash) – Fija el intérprete para que el script se ejecute de forma consistente, incluso si se invoca desde otro shell. - Comando de copia (
cp …) – Realiza la operación completa de backup en una línea. Asume que el directorio de destino existe y que la cuenta que lo ejecuta tiene privilegios suficientes. - Comprobación del estado de salida (
$?) – Lee el código de retorno decp. Un estado cero indica éxito; un estado distinto de cero indica fallo. El condicional imprime una confirmación cuando todo funciona.
Por qué Bash encaja con esta tarea
Para una tarea tan puntual, Bash es una elección pragmática:
- El script es fácil de desplegar, versionar y ajustar sin necesidad de recompilación.
- La integración con cron es trivial; la salida de logs puede redirigirse a un sistema de monitoreo centralizado.
- Las dependencias son mínimas—los analistas de Dharma pueden iterar de inmediato mientras construyen conocimiento institucional sobre scripting en shell.
Script 2 — Subiendo el nivel
Después de que la línea base demostrara su valor, Dharma invirtió en una versión más segura que incorpora las lecciones de incidentes en producción.
#!/bin/bash
SOURCE_FILE="some/path/to/file.txt"
DESTINATION="/home/dharma/backup"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
TARGET_FILE="${DESTINATION}/users_backup_${TIMESTAMP}.txt"
mkdir -p "$DESTINATION"
cp "$SOURCE_FILE" "$TARGET_FILE" 2> /dev/stderr
if [ $? -eq 0 ]; then
echo "Backup completed successfully: $TARGET_FILE"
else
echo "Backup failed" >&2
fi
¿Qué mejoró?
- Rutas parametrizadas. Variables explícitas (
SOURCE_FILE,DESTINATION) hacen que el script se autodocumente y sea más simple de ajustar para distintos entornos. - Artefactos con timestamp.
TIMESTAMPevita sobrescribir backups anteriores y respalda las auditorías históricas. - Configuración resiliente.
mkdir -pprepara el destino si falta, permitiendo el éxito en la primera ejecución. - Separación del canal de errores. Redirigir los errores de
cpastderrasegura que los mensajes de fallo lleguen a los sistemas de monitoreo, mientras que los mensajes de éxito permanecen enstdout.
Oportunidades para reforzar aún más
Incluso este script mejorado deja espacio para buenas prácticas que todo ingeniero orientado a la seguridad debería considerar:
- Evaluación de comandos en línea. Reemplazar la comprobación manual de
$?conif cp "$SOURCE_FILE" "$TARGET_FILE"; then … fipara vincular la lógica de éxito directamente al comando de copia y salir temprano en caso de fallo. - Política de retención. Añadir una rutina de rotación (
find+-mtime, ologrotate) para que los archivos de backup no consuman espacio en disco de forma ilimitada. - Protección de concurrencia. Introducir un archivo de bloqueo o usar
flockpara evitar ejecuciones solapadas que puedan corromper los resultados. - Comprobaciones de integridad. Generar hashes SHA-256 para las copias archivadas y almacenarlos en una ubicación resistente a manipulaciones para detectar modificaciones ilícitas.
- Almacenamiento redundante. Sincronizar el backup con al menos un sistema adicional—mejor aún, con múltiples proveedores en distintas jurisdicciones—para mitigar desastres locales.
Puntos clave
- Las funcionalidades fundamentales de Bash—shebangs, códigos de salida y condicionales—forman la columna vertebral de la automatización y deben dominarse antes de abordar flujos de trabajo avanzados.
- Nombres de variables claros y la creación defensiva de directorios mejoran drásticamente la legibilidad y la resiliencia de un script.
- Mejoras simples como la separación de logs, las políticas de rotación y las salvaguardas de exclusión mutua ofrecen beneficios desproporcionados para la estabilidad operativa.
- El scripting no es simplemente un truco rápido; cuando se diseña con cuidado, se convierte en una capa confiable dentro del arsenal de ciberseguridad.
Armados con este análisis, los nuevos miembros del equipo de automatización de Dharma pueden razonar sobre los scripts existentes, comunicar riesgos y planificar mejoras incrementales. La siguiente parte de la serie construirá sobre estos fundamentos para incorporar logging, parsing de argumentos y controles de seguridad más sofisticados.
Disponible para colaboración por contrato
Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.
Agenda una llamada de 30 min