15 mayo 2024

Cargos locos en AWS

¿Sabías que si haces "aws s3 cp archivo s3://el-bucket-de-alguien/archivo" te va a dar acceso denegado porque estás intentando escribir en un bucket ajeno?

Ok, esa era fácil. Pero...

¿Sabías que por cada 1000 accesos denegados ese alguien paga U$D 0.005?



Con un VPS de 3€ de OVH puedo lanzar, por lo bajo, 5req/s o 10.800.000req/mes. O lo que es lo mismo, $54 en gastos para ese alguien. Con 1vCPU de 3€

Oh aws... te quiero, pero usarte se antoja cada vez mas arriesgado

Link a la historia de donde saco esta información: https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1

Cómo un depósito S3 vacío puede hacer explotar su factura de AWS

Imagine que crea un depósito de AWS S3 privado y vacío en una región de su preferencia. ¿Cuál será su factura de AWS a la mañana siguiente?

Hace unas semanas, comencé a trabajar en la PoC de un sistema de indexación de documentos para mi cliente. Creé un único depósito S3 en la región eu-west-1 y cargué algunos archivos allí para probarlos. Dos días después, revisé mi página de facturación de AWS, principalmente para asegurarme de que lo que estaba haciendo estaba dentro de los límites del nivel gratuito. Al parecer, no lo fue. Mi factura superó los $1300 y la consola de facturación mostró casi 100 000 000 de solicitudes PUT de S3 ejecutadas en tan solo un día. AWS00 Mi uso facturado de S3 por día, por región

¿De dónde vinieron estas solicitudes?
De forma predeterminada, AWS no registra las solicitudes ejecutadas en sus depósitos de S3. Sin embargo, dichos registros se pueden habilitar mediante AWS CloudTrail (https://docs.aws.amazon.com/AmazonS3/latest/userguide/cloudtrail-logging.html) o S3 Server Access Logging (https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerLogs.html). Después de habilitar los registros de CloudTrail, inmediatamente observé miles de solicitudes de escritura que se originaban en varias cuentas o completamente fuera de AWS.

Pero, ¿por qué algunos terceros bombardearían mi depósito S3 con solicitudes no autorizadas?
¿Fue algún tipo de ataque tipo DDoS contra mi cuenta? ¿Contra AWS? Resulta que una de las herramientas populares de código abierto tenía una configuración predeterminada para almacenar sus copias de seguridad en S3. Y, como marcador de posición para el nombre de un depósito, usaron... el mismo nombre que yo usé para mi depósito. ¡Esto significó que cada implementación de esta herramienta con valores de configuración predeterminados intentó almacenar sus copias de seguridad en mi depósito S3!

Nota: No puedo revelar el nombre de la herramienta a la que me refiero, ya que eso pondría a las empresas afectadas en riesgo de fuga de datos (como se explica más adelante).

Entonces, una horda de sistemas mal configurados está intentando almacenar sus datos en mi depósito S3 privado. Pero ¿por qué debería ser yo quien pague por este error? Este es el por qué:

S3 le cobra por solicitudes entrantes no autorizadas Esto fue confirmado en mi intercambio con el soporte de AWS. Como escribieron:
Sí, S3 también cobra por solicitudes no autorizadas (4xx)[1]. Ese es el comportamiento esperado.

Entonces, si abriera mi terminal ahora y escribiera:

aws s3 cp ./file.txt s3://su-nombre-de-bucket/clave_aleatoria

Recibiría un error de Acceso denegado , pero usted sería quien pagaría esa solicitud. Y ni siquiera necesito una cuenta de AWS para hacerlo.

Otra pregunta me molestaba: ¿por qué más de la mitad de mi factura provenía de la región us-east-1 ? ¡No tenía ni un solo cubo allí! La respuesta a esto es que las solicitudes de S3 sin una región especificada tienen como valor predeterminado us-east-1 y se redirigen según sea necesario. Y el propietario del depósito paga más por esa solicitud redirigida.

El aspecto de seguridad
Ahora entendemos por qué mi depósito de S3 fue bombardeado con millones de solicitudes y por qué terminé con una enorme factura de S3. En ese momento, tuve una idea más que quería explorar. Si todos esos sistemas mal configurados intentaban hacer una copia de seguridad de sus datos en mi depósito S3, ¿por qué no dejarles hacerlo? Abrí mi depósito para escrituras públicas y recopilé más de 10 GB de datos en menos de 30 segundos . Por supuesto, no puedo revelar de quién eran los datos. ¡Pero me dejó asombrado de cómo un descuido inocente de la configuración podría provocar una fuga de datos peligrosa!

¿Qué aprendí de todo esto?
Lección 1: Cualquiera que conozca el nombre de cualquiera de sus depósitos de S3 puede aumentar su factura de AWS como quiera.
Aparte de eliminar el depósito, no hay nada que puedas hacer para evitarlo. No puede proteger su depósito con servicios como CloudFront o WAF cuando se accede a él directamente a través de la API de S3. Las solicitudes PUT estándar de S3 tienen un precio de solo $0,005 por cada 1000 solicitudes (https://aws.amazon.com/s3/pricing/), pero una sola máquina puede ejecutar fácilmente miles de dichas solicitudes por segundo.

Lección 2: Agregar un sufijo aleatorio a los nombres de sus depósitos puede mejorar la seguridad.
Esta práctica reduce la vulnerabilidad a sistemas mal configurados o ataques intencionales. Al menos evite el uso de nombres cortos y comunes para sus depósitos de S3.

Lección 3: Al ejecutar muchas solicitudes a S3, asegúrese de especificar explícitamente la región de AWS.
De esta manera evitará costos adicionales de redirecciones de API de S3.

Secuelas:
Informé mis hallazgos a los mantenedores de la vulnerable herramienta de código abierto. Rápidamente arreglaron la configuración predeterminada, aunque no pueden arreglar las implementaciones existentes.
Notifiqué al equipo de seguridad de AWS. Les sugerí que restringieran el desafortunado nombre del depósito S3 para proteger a sus clientes de cargos inesperados y proteger a las empresas afectadas de fugas de datos. Pero no estaban dispuestos a abordar las configuraciones erróneas de productos de terceros.
Informé el problema a dos empresas cuyos datos encontré en mi depósito. No respondieron a mis correos electrónicos, posiblemente considerándolos spam.
AWS tuvo la amabilidad de cancelar mi factura S3. Sin embargo, enfatizaron que esto se hizo como una excepción.

Gracias por tomarse el tiempo de leer mi publicación. ¡Espero que le ayude a evitar cargos inesperados de AWS!

Via Diario de un picateclas

Que te diviertas!

No hay comentarios:

Publicar un comentario