Buscar

20 octubre 2025

"Consumo" de APIS

 Con este título pareciese que os voy a hablar de una riquísima merienda de los 80 y 90, pero no, en este caso, Una API (Interfaz de Programación de Aplicaciones) es un conjunto de reglas y protocolos que permite a las aplicaciones de software comunicarse entre sí, compartir datos y funcionalidades.

Para intentar explicar esto, para la gente a la que le suena más a la merienda, precisamente voy a usar una analogía de un restaurante.

Imagina que entras en un restaurante.

  1. Tú (El Cliente): Eres la aplicación que quiere algo (por ejemplo, un programa de Python, una app móvil, o incluso una página web con JavaScript).
  2. La Cocina (El Servidor): Es donde está todo lo bueno: los datos, la lógica de negocio, la base de datos. Es el "cerebro" que tiene la información que tú quieres. No puedes entrar directamente a la cocina a coger cosas.
  3. El Menú (La Documentación de la API): Es una carta donde se explica qué platos (datos o servicios) puedes pedir. Te dice el nombre de cada plato, los ingredientes (los parámetros que necesitas especificar) y cómo viene presentado (el formato de la respuesta).
  4. El Camarero (La API REST): Este es el personaje clave. El camarero es la API. Es el intermediario que toma tu pedido, se lo lleva a la cocina, y te trae la respuesta.

Vale, y ahora, ¿qué es lo de REST?

REST (Representational State Transfer) es simplemente un conjunto de reglas de etiqueta o un protocolo de buenas maneras que sigue el camarero para que la comunicación sea eficiente y todo el mundo se entienda. Define cómo debes hacer el pedido para que la cocina te entienda perfectamente.

Resumen de la analogía: Tú (el cliente) le haces un pedido (una solicitud HTTP) al camarero (API REST) según lo que pone en el menú (documentación), el camarero se lo lleva a la cocina (servidor), que prepara tu plato (los datos), y el camarero te lo sirve en la mesa (la respuesta).

La Solicitud HTTP (Los Ingredientes de un Pedido)

Para que tu pedido al camarero (la solicitud a la API) sea perfecto, debe estar bien formada. Se componen de lo que llamamos un verbo HTTP y un Endpoint.

1. El Endpoint (la dirección del restaurante y la mesa): Es la dirección única a la que tienes que enviar tu solicitud. Normalmente, es una URL como las siguientes:

  • https://api.mitienda.com/v1/productos
  • https://api.twitter.com/2/tweets/search/recent

2. El Verbo HTTP (la acción que quieres hacer): Esto le dice al camarero qué quieres hacer exactamente. Los verbos son como las palabras mágicas.

  • GET (Coger/Obtener): El más común. Es como decir "Tráeme...". Se usa para solicitar y recuperar datos, sin modificar nada en el servidor.

Ejemplo: GET https://api.mitienda.com/v1/productos -> "Tráeme la lista de productos."

  • POST (Enviar/Crear): Es como decir "Toma, guarda esto". Se usa para crear un nuevo recurso. Lleva un "cuerpo" (body) con la información del nuevo elemento.

Ejemplo: POST https://api.mitienda.com/v1/productos -> "Aquí tienes los datos de un producto nuevo, guárdalo en la cocina (base de datos)." (El cuerpo llevaría el nombre, precio, etc.).

  • PUT/PATCH (Actualizar): Es como decir "Quiero modificar este plato que ya pedí". Se usa para actualizar un recurso existente. PUT suele ser para reemplazarlo completamente y PATCH para modificar solo una parte.

Ejemplo: PATCH https://api.mitienda.com/v1/productos/123 -> Con esto le decimos: "Cambia el precio del producto con ID 123 a 29.99€"

  • DELETE (Borrar): Muy claro. "Borra este plato de la cuenta". Se usa para eliminar un recurso.

Ejemplo: DELETE https://api.mitienda.com/v1/productos/123 -> En este caso le pedimos que borre algo: "Elimina el producto con ID 123."

3. Los Headers (son las instrucciones especiales para el camarero): Son metadatos o información adicional sobre tu solicitud. Van "por detrás", no son el pedido en sí, sino instrucciones sobre cómo hacerlo.

  • Authorization: La más importante. Es como mostrar tu carnet de socio o tu reserva. Lleva una credencial (normalmente un "API Key" o un token) que le dice al servidor "Oye, soy yo, tengo permiso para estar aquí".

Ejemplo: Authorization: Bearer TU_TOKEN_SECRETO_AQUI.

  • Content-Type: Le dice al camarero en qué formato le estás entregando la información si estás haciendo un POST o PUT. Lo más común es application/json (hablaremos de JSON luego).

4. El Body (este es el cuerpo, el pedido en sí mismo): Solo se usa con POST, PUT y PATCH. Es donde metemos los datos que quieres enviar para crear o actualizar. Si en GET le dices "tráeme una pizza", en POST le dices "quiero crear una pizza con estos ingredientes: masa fina, extra de queso, jamón...".

La Respuesta HTTP (La Respuesta del Camarero)

El camarero siempre vuelve con una respuesta. Esta respuesta tiene dos partes fundamentales:

1. El Código de Estado HTTP (es el estado de tu pedido): Un número de 3 dígitos que te indica claramente si todo fue bien o si hubo un problema. Es crucial saber leerlos.

  • Todo bien (2xx): 200 OK: Tu pedido llegó y tienes lo que querías. 201 Created: ¡Creado! Se ha creado un nuevo recurso con tu petición POST.
  • Errores del Cliente (4xx): 400 Bad Request: Has hecho un pedido mal formado (falta un parámetro, el body está mal, etc.). 401 Unauthorized: No tienes permiso. Tu API Key o token es inválido. 403 Forbidden: Tienes credenciales, pero no suficientes permisos para hacer esa acción concreta. 404 Not Found: El recurso que pides (el endpoint o el ID del producto) no existe.
  • Errores del Servidor (5xx): 500 Internal Server Error: El problema está en la cocina (el servidor). No es culpa tuya.

2. El Body de la Respuesta (Los Datos - El Plato): Aquí es donde vienen los datos que pediste. El formato más común (con diferencia), es JSON (JavaScript Object Notation). Es un formato muy fácil de leer tanto para humanos como para máquinas. Se parece a los objetos en JavaScript o los diccionarios en Python.

Ejemplo de respuesta a una petición GET a: https://api.mitienda.com/v1/productos/123:

json
{
  "id": 123,
  "nombre": "Zapatillas Running Ultra",
  "precio": 89.99,
  "enStock": true,
  "categorias": ["deporte", "running"]
}

¿CÓMO se Hace Este Consumo? (Programas y Código)

Aquí viene la parte práctica. "Consumir una API" significa, a nivel técnico, escribir código que envíe estas solicitudes HTTP y procese las respuestas.

1. Herramientas para Probar y Jugar (Fundamentales):

  • Postman: Es el rey. Es una aplicación de escritorio que te permite construir solicitudes HTTP (GET, POST, etc.) de forma muy visual. Puedes poner los endpoints, los headers, el body, etc., y ver la respuesta. Es IMPRESCINDIBLE para probar APIs antes de escribir código.
  • Thunder Client (una extensión de VSCode) es una alternativa similar.
  • cURL: Es un comando que viene en la terminal (Linux y Mac) o en el Prompt de Windows. Es la forma más "pura" y universal de hacer una petición HTTP.

Ejemplo en bash:

curl -X GET "https://api.mitienda.com/v1/productos" -H "Authorization: Bearer TU_TOKEN"

2. Lenguajes de Programación para Automatizar (donde se usa de verdad):

En un trabajo real, no vas a estar haciendo peticiones a mano con Postman todo el día. Integrarás el consumo de la API en tu aplicación. Casi cualquier lenguaje moderno puede hacerlo.

  • Python (El Más Amigable): Con la librería requests es absurdamente fácil.

python
import requests

url = "https://api.mitienda.com/v1/productos"
headers = {"Authorization": "Bearer TU_TOKEN"}

respuesta = requests.get(url, headers=headers) # Hace la solicitud GET

datos = respuesta.json() # Convierte la respuesta JSON en un diccionario de Python

for producto in datos['productos']:

    print(producto['nombre'], producto['precio'])

  • JavaScript (para web y Node.js): Se usa la función fetch() (nativa) o librerías como axios.

javascript

// Con fetch (en un navegador o Node.js moderno)
fetch('https://api.mitienda.com/v1/productos', {
  headers: { 'Authorization': 'Bearer TU_TOKEN' }
})
.then(response => response.json())
.then(data => console.log(data));

Java, C#, PHP, Go, etc.: Todos tienen sus librerías (como HttpClient en Java, RestSharp en C#...) para hacer exactamente lo mismo.

Recapitulando, necesitamos que sepas:

  1. Leer y entender una documentación técnica (el menú del restaurante).
  2. Obtener datos de un servicio externo (usando GET).
  3. Enviar datos para crear nuevos registros (usando POST).
  4. Actualizar y borrar información existente (usando PUT/PATCH y DELETE).
  5. Manejar la autenticación (usando API Keys o Tokens en los Headers).
  6. Interpretar los códigos de respuesta para manejar errores correctamente.
  7. Procesar los datos que vienen en formato JSON.
  8. Usar herramientas como Postman para pruebas y un lenguaje de programación (como Python con requests) para integrar todo esto en una aplicación real.

Y hasta aquí el símil de hoy de las APIs con un restaurante. Espero que haya sido fácil de seguir.

13 octubre 2025

Automatización de detección de Ramsomware eficiente

 Ayer leí el post de Alvaro Morales y me pareció sublime, la verdad. Así que, quería dar un poco mi opinión, salvando las distancias, ya que su post ya está perfecto. Si no lo has leído, te animo a ello y a que sigas a Álvaro.

https://www.linkedin.com/posts/alvaro-morales-ab6480194_ciberseguridad-ransomware-soar-activity-7383765216255270913-GAF1?utm_source=share&utm_medium=member_desktop&rcm=ACoAABBPUK8BGGJ_n8W3R_3hgpK018vKWNTgSMg

El CEO preguntó: "¿Por qué no detectaron la amenaza durante tres días?" La respuesta que duele admitir: "Porque seguimos luchando contra incendios con extintores mientras los atacantes usan lanzallamas".

Este caso que todos hemos visto en LinkedIn (y que alguno igual hasta ha vivido) refleja una situación que se repite en muchas empresas: cientos de señales de alarma perdidas entre montañas de falsas alertas, días de actividad sospechosa sin detectar, y el descubrimiento “tarde, mal y nunca", cuando el daño ya es irreversible.

Pero lo más alarmante no es el ataque en sí. Es seguir haciendo las mismas preguntas equivocadas de siempre, después de cada incidente.

No deberíamos preguntarnos "¿por qué no bloquearon el ransomware?"

La pregunta que realmente importa es: ¿qué falló en nuestro sistema de detección para que pasaran desapercibidas actividades claramente maliciosas durante X tiempo?

La respuesta, aunque incómoda, es evidente... porque nuestras defensas están diseñadas para amenazas que ya no existen, mientras los atacantes evolucionan a velocidad de vértigo.

Cambiando el juego: De la detección tardía a la prevención temprana

La solución que plantea Álvaro, no es ciencia ficción. Es aplicar lógica básica a la ciberseguridad moderna. Se basa en un principio tan simple como poderoso:

Todo ciberataque sigue un patrón reconocible mucho antes de causar daño. Si identificas el patrón a tiempo, ganas. Si esperas a ver el daño, pierdes.

Los seis pilares que sostienen este sistema:

1. Monitorización de comportamientos sospechosos

Dejemos de buscar "virus conocidos" para centrarnos en "comportamientos sospechosos". Unos ejemplos:

  • Un usuario de contabilidad que de repente ejecuta comandos de red típicos de administradores.
  • Intentos de acceso a sistemas de backup desde equipos que nunca antes lo habían hecho.
  • Servicios críticos de seguridad que se detienen misteriosamente fuera del horario de mantenimiento.
  • Patrones de lectura masiva de archivos en servidores que no corresponden con la actividad normal del usuario.

2. Conectar los puntos entre eventos relacionados

Una alerta aislada puede ser un falso positivo. Pero cuando ves varias relacionadas en pocos minutos, estás ante un incidente real.

Pensemos esta secuencia: a las 3:14 PM, un usuario abre un archivo PDF aparentemente legítimo. A las 3:16 PM, ese mismo equipo intenta conectarse a múltiples servidores internos. A las 3:18 PM, aparecen comandos de administración de shadows copies. Por separado, cada evento podría ser inocente. Juntos, cuentan una historia muy diferente.

3. Sistema de puntuación que aprende del contexto

No funciona como un semáforo (verde/rojo) sino como un termómetro de riesgo. Cada actividad sospechosa suma puntos:

  • Intentar desactivar el antivirus: 30 puntos.
  • Ejecutar herramientas de administración desde equipos de usuarios: 25 puntos.
  • Acceder a carpetas de backup sin justificación: 35 puntos.
  • Cuando la suma supera los 90 puntos, el sistema actúa automáticamente.

4. Respuesta inmediata, sin burocracia

Cuando el sistema detecta peligro real, no espera aprobaciones. Actúa en segundos:

  • Aislamiento inteligente: El equipo comprometido pierde conexión con el resto de la red, pero mantiene acceso a sistemas críticos de gestión. Es como ponerlo en cuarentena sin dejarlo incomunicado.
  • Contención de procesos: Se terminan los procesos maliciosos y se bloquea su ejecución futura. No es solo "matar" el proceso actual, sino impedir que vuelva a arrancar.
  • Cortar el hilo de comunicación: Se bloquean las conexiones a servidores externos de control, impidiendo que el atacante reciba órdenes o envíe información.
  • Guardar las pruebas: Se captura una "foto" del sistema en ese momento exacto (memoria, procesos activos, conexiones de red) para que los forenses puedan analizar lo ocurrido después (y aprender de ello).

5. Defensa distribuida que no depende de un centro único

Cada endpoint tiene capacidad de decidir por sí mismo. Si el servidor central está comprometido, los equipos siguen protegiéndose solos.

6. Aprendizaje continuo de cada incidente

Cada falso positivo ayuda a afinar el sistema. Cada ataque real enseña algo nuevo sobre cómo operan los adversarios.

Por qué este enfoque marca la diferencia:

Las herramientas tradicionales te dicen "aquí ha pasado algo malo". Este sistema te avisa "aquí está pasando algo malo en este momento".

La diferencia es abismal. Pasas de días a segundos. De ser reactivo a ser preventivo. De preguntarte "cuánto hemos perdido" a "cuánto hemos evitado perder".

Implementación realista: Más accesible de lo que parece

Muchos os preguntaréis: ¿necesito un equipo de ingenieros de Silicon Valley y un presupuesto ilimitado? (Spoiler: no).

La verdad es que la mayoría de empresas ya tienen lo básico:

  • Los logs de Windows contienen toda la información necesaria.
  • PowerShell puede monitorizar casi cualquier actividad del sistema.
  • Los firewalls modernos permiten automatizar reglas vía API.
  • Python y Go tienen librerías maduras para todo esto.

Los retos de verdad están en otro lado:

  • Confianza: Aprender a delegar decisiones críticas en sistemas automatizados.
  • Procesos: Tener protocolos claros para cuando el sistema se equivoca (que ocurrirá).
  • Prioridades: Entender que esto es más importante que parchear la última vulnerabilidad del día.

Casos donde esta aproximación demuestra su valor:

  • Ataques a la cadena de suministro: Software legítimo comprometido que se comporta de forma anormal.
  • Ransomware como servicio (RaAS): Cada variante es nueva, pero los pasos que siguen son “los mismos”.
  • Amenazas internas: Empleados que comienzan a realizar actividades fuera de lo normal.

¿Por qué no lo tiene todo el mundo?

Porque requiere cambiar formas de trabajar muy consolidadas:

  • De "quiero cero falsas alertas" a "quiero detectar todo lo importante".
  • De "necesito evidencia perfecta" a "actúo con indicios suficientes".
  • De "un humano debe aprobar cada acción" a "la máquina ejecuta, el humano supervisa".

El futuro es claro: O te automatizas o te vuelves irrelevante

Los números hablan por sí solos:

  • Detección tradicional: 3 días
  • Con este enfoque: 80 segundos
  • Coste medio de un ransomware: 1.85M€
  • Coste de implementación: una fracción mínima

Para los técnicos que leen esto:

¿Python o Go? Depende de tu escala. Python para empezar, Go para crecer. ¿Reglas simples o machine learning? Empieza con reglas, el ML llegará después. ¿Procesamiento local o central? Decide local, correlaciona central.

Una reflexión para terminar:

Si tu equipo de seguridad sigue obsesionado con "reducir falsos positivos" en lugar de "detectar ataques reales a tiempo", estás perdiendo la guerra antes de empezar.

El ransomware no espera a que tus analistas terminen su café mientras correlacionan manualmente eventos. Por lo tanto, tus sistemas defensivos tampoco deberían hacerlo.

La pregunta ya no es "¿cómo detectamos mejor?" La pregunta que define el éxito actual es: "¿cómo respondemos más rápido de lo que el atacante puede actuar?"

Cuando encuentres la respuesta a eso, habrás cambiado las reglas del juego para siempre.