Guía: Automatización de Tareas de Ciberseguridad con Python

Optimiza tu flujo de trabajo y potencia tus capacidades de seguridad con scripts Python.

Python para Ciberseguridad

Python se ha convertido en una herramienta indispensable para los profesionales de la ciberseguridad gracias a su simplicidad, versatilidad y la enorme cantidad de librerías disponibles. Desde la automatización de escaneos hasta el análisis de logs y la creación de herramientas personalizadas, Python puede mejorar significativamente tu eficiencia y capacidad de respuesta.

¿Por qué Python en Ciberseguridad?

  • **Facilidad de Aprendizaje:** Su sintaxis clara y legible lo hace accesible incluso para principiantes.
  • **Versatilidad:** Puede ser utilizado para una amplia gama de tareas, desde scripting simple hasta desarrollo de aplicaciones complejas.
  • **Amplia Comunidad y Librerías:** Existe un ecosistema robusto de módulos y frameworks diseñados específicamente para tareas de seguridad, como `Scapy`, `Requests`, `Nmap` (a través de `python-nmap`), etc.
  • **Portabilidad:** Los scripts de Python funcionan en diferentes sistemas operativos (Windows, Linux, macOS).

Configuración del Entorno

Asegúrate de tener Python instalado en tu sistema. Se recomienda usar Python 3.x. Puedes verificarlo con:

python3 --version

Es buena práctica utilizar entornos virtuales para gestionar las dependencias de tus proyectos:

python3 -m venv venv_cyber
source venv_cyber/bin/activate  # En Linux/macOS
.\venv_cyber\Scripts\activate   # En Windows CMD

Instala las librerías necesarias:

pip install requests python-nmap scapy

Ejemplos Prácticos de Automatización

1. Escaneo de Puertos Básico con `python-nmap`

Automatiza el escaneo de puertos de una IP o rango para identificar servicios abiertos rápidamente.

import nmap

def scan_ports(target_ip, ports='1-1024'):
    nm = nmap.PortScanner()
    print(f"Escaneando puertos de {target_ip}...")
    nm.scan(target_ip, ports)

    for host in nm.all_hosts():
        print(f"Host: {host} ({nm[host].hostname()})")
        print(f"Estado: {nm[host].state()}")
        for proto in nm[host].all_protocols():
            print(f"  Protocolo: {proto}")
            lport = nm[host][proto].keys()
            for port in sorted(lport):
                print(f"    Puerto: {port}\tEstado: {nm[host][proto][port]['state']}")

if __name__ == "__main__":
    target = input("Introduce la IP o rango a escanear (ej. 192.168.1.1 o 192.168.1.0/24): ")
    scan_ports(target)

2. Comprobación de Vulnerabilidades Web Sencillas (`XSS`)

Un script simple para probar si un parámetro URL es vulnerable a Cross-Site Scripting (XSS).

import requests

def check_xss(url, param, payload="<script>alert('XSS')</script>"):
    test_url = f"{url}?{param}={payload}"
    print(f"Probando URL: {test_url}")
    response = requests.get(test_url)

    if payload in response.text:
        print(f"[+] POSIBLE VULNERABILIDAD XSS ENCONTRADA en el parámetro '{param}'")
    else:
        print(f"[-] No se detectó XSS en el parámetro '{param}'")

if __name__ == "__main__":
    target_url = input("Introduce la URL base (ej. http://ejemplo.com/search): ")
    target_param = input("Introduce el parámetro a probar (ej. q): ")
    check_xss(target_url, target_param)

3. Análisis Básico de Logs de Acceso Web

Un script para parsear logs de un servidor web y detectar posibles anomalías o ataques comunes.

def analyze_web_logs(log_file_path):
    suspicious_keywords = ["union select", "etc/passwd", "wp-admin", "eval(", "phpinfo()"]
    ip_counts = {}
    suspicious_requests = []

    print(f"Analizando logs de {log_file_path}...")

    with open(log_file_path, 'r') as f:
        for line_num, line in enumerate(f, 1):
            parts = line.split(" ")
            if len(parts) > 1:
                ip = parts[0]
                ip_counts[ip] = ip_counts.get(ip, 0) + 1

                for keyword in suspicious_keywords:
                    if keyword in line.lower():
                        suspicious_requests.append(f"Línea {line_num}: {line.strip()} (Keyword: {keyword})")
                        break
    
    print("\n--- IPs con más peticiones ---")
    sorted_ips = sorted(ip_counts.items(), key=lambda item: item[1], reverse=True)
    for ip, count in sorted_ips[:10]: # Mostrar top 10
        print(f"IP: {ip}, Peticiones: {count}")

    print("\n--- Peticiones Sospechosas Encontradas ---")
    if suspicious_requests:
        for req in suspicious_requests:
            print(req)
    else:
        print("No se encontraron peticiones sospechosas con las keywords definidas.")

if __name__ == "__main__":
    log_path = input("Introduce la ruta del archivo de log (ej. /var/log/apache2/access.log): ")
    analyze_web_logs(log_path)

Conclusión

La automatización con Python es una habilidad fundamental en ciberseguridad. Te permite realizar tareas repetitivas de forma eficiente, escalar tus operaciones y centrarte en aspectos más complejos de la seguridad. Estos ejemplos son solo un punto de partida; las posibilidades son casi ilimitadas, solo dependen de tu creatividad y las librerías que elijas.

¡Te animamos a experimentar con estos scripts y a adaptarlos a tus propias necesidades de seguridad!