Python para Seguridad: La Navaja Suiza
Objetivo del Módulo
Entender por qué nadie en Ciberseguridad pierde el tiempo escribiendo programas de 1,000 líneas en C++ o Java cuando están en medio de una respuesta a incidentes.
Cuando un servidor está bajo ataque, cada segundo cuenta. Necesitas una herramienta que te permita escribir un script en 3 minutos, correrlo y apagar el incendio. Python es famoso por ser un lenguaje de "pegamento": te permite conectar el Sistema Operativo, Internet y bases de datos usando un par de comandos simples gracias a sus Librerías.
1. La Analogía: El Taller y las Librerías
Imagina que Python es un Taller de Herramientas vacío. Tienes la mesa de trabajo (Variables) y el motor eléctrico (Bucles), pero no tienes destornilladores ni martillos.
Para no tener que inventar el martillo desde cero, Python te permite Importar Librerías. Una librería es una caja de herramientas pre-fabricada que alguien más inteligente que tú ya programó, y que tú puedes descargar gratis.
Si quieres controlar tu computadora, importas la librería de Sistema Operativo (os).
Si quieres conectarte a Internet y descargar páginas web, importas la librería requests.
Importante: En ciberseguridad, NUNCA escribas desde cero algo que ya existe en una librería. Un buen hacker no inventa algoritmos de criptografía nuevos; simplemente importa la librería
hashliby la usa.
2. La Librería os (Controlando la Máquina)
La librería os (Operating System) le da a tu script de Python el poder de interactuar con el sistema operativo (Linux o Windows) como si estuvieras tecleando en la consola.
¿Por qué es letal? Porque si un atacante sube un script de Python a tu servidor, puede usar la librería os para ejecutar comandos directamente en tu máquina.
Ejemplo Defensivo (Blue Team):
Imagina que quieres escribir un script que borre todos los archivos basura de la carpeta temporal /tmp de Linux automáticamente.
import os # Traemos la caja de herramientas del sistema operativo # Le decimos a Python que ejecute el comando clásico de borrar en Linux (rm) os.system("rm -rf /tmp/*") print("Carpeta temporal limpiada con éxito.")
Ejemplo Ofensivo (Red Team): Un atacante usa la misma librería para pedirle a tu máquina que se conecte a su servidor para enviarle una consola inversa (Reverse Shell). Python es agnóstico: no le importa si la orden es buena o mala, solo la ejecuta.
3. La Librería requests (Robando la Web)
Esta es la librería más famosa del mundo para conectarse a Internet. En lugar de abrir Google Chrome, escribir una URL y darle "Enter", le dices a Python que haga exactamente lo mismo por debajo del capó.
import requests # Traemos la caja de herramientas de Internet # Le decimos a Python que simule ser un navegador y visite la página respuesta = requests.get("https://banco.com") # Python nos dirá qué le respondió el servidor (El Código HTTP) print(respuesta.status_code)
¿Por qué lo usan los atacantes?
Si un atacante quiere hacer un ataque de "Fuerza Bruta" para adivinar tu contraseña, no va a sentarse frente al teclado a escribir contraseñas 5,000 veces en la pantalla de Login. Va a escribir un script con un bucle for, y usará requests.post() para inyectar 5,000 contraseñas por segundo directamente en las tuberías ocultas del sitio web.
¿Por qué lo usan los defensores?
Si tienes un archivo de texto con 500 correos electrónicos sospechosos, no vas a copiar y pegar uno por uno en una página web de seguridad para ver si son virus. Escribes un script que usa requests para enviarle los 500 correos a la base de datos de Microsoft, y te devuelve la respuesta en milisegundos.
4. Laboratorio Mental: El Analista Automatizado
Juntemos todo lo que hemos aprendido (Variables, Condicionales, Bucles y Librerías). Lee este script en inglés básico e intenta entender qué está decidiendo el robot:
import requests lista_urls_sospechosas = ["http://malware.com", "http://google.com", "http://phishing-banco.com"] for sitio in lista_urls_sospechosas: respuesta = requests.get(sitio) # El código HTTP 200 significa "Página Viva y Funcionando" if respuesta.status_code == 200: print("¡ALERTA! El sitio " + sitio + " sigue vivo y activo en internet.") else: print("El sitio " + sitio + " parece estar caído.")
¿Qué acaba de pasar? En 10 líneas de código, construiste un escáner automatizado de Threat Intelligence que revisa si los servidores de los hackers siguen vivos en internet, sin necesidad de que tú abras Google Chrome y te arriesgues a infectar tu propia computadora.
5. Criterio de Dominio (Autoevaluación)
Revisa si dominas las herramientas tácticas:
- ¿Por qué es un error terrible intentar escribir todo el código matemático de un escáner de red desde cero en lugar de usar un comando como
import nmap? - Si un malware de Python tiene la línea
os.system("whoami"), ¿Qué está intentando averiguar el atacante sobre tu servidor Linux? - En la librería
requests, si elstatus_codeque te devuelve la página es404, ¿Qué significa eso en el estándar de internet y por qué sería una buena noticia para un analista de seguridad que está cazando una URL maliciosa? - El jefe te pide crear 50 carpetas nuevas en Windows, una para cada empleado. ¿Usarías la librería
requestso la libreríaospara automatizar este trabajo?