Minería de criptomonedas en una cuenta AWS comprometida
Instancias GPU, una factura disparada, una región sin uso: confirme la criptominería en AWS con CloudTrail y Flow Logs, contenga y averigüe cómo entraron.
En resumen. La minería de criptomonedas suele ser el último paso de una intrusión, no el primero. Confírmela con eventos RunInstances de tipos de instancia GPU o de gran tamaño en regiones que no utiliza, a menudo precedidos de RequestServiceQuotaIncrease, CreateKeyPair y un grupo de seguridad abierto a 0.0.0.0/0; y después con VPC Flow Logs que muestren conexiones salientes de larga duración hacia puertos de pools de minería. Contenga en todas las regiones (instantánea y después terminación), desactive la credencial que lanzó las instancias y retroceda hasta el punto de entrada: es probable que la misma clave también creara un usuario de puerta trasera.
Una alerta de costes un domingo por la mañana es la forma en que se descubren muchos compromisos de AWS. La minería es ruidosa por naturaleza: necesita capacidad de cómputo, mucha, durante el mayor tiempo posible. MITRE ATT&CK la clasifica como T1496 Resource Hijacking, con T1496.001 Compute Hijacking como subtécnica.
Cómo se ve la minería en CloudTrail
La secuencia de lanzamiento es corta y repetitiva:
| Orden | Evento | Qué revisar |
|---|---|---|
| 1 | ec2:DescribeRegions, DescribeInstances en varias regiones | El atacante busca regiones sin uso |
| 2 | servicequotas:RequestServiceQuotaIncrease | quotaCode de las familias de vCPU / GPU, desiredValue |
| 3 | ec2:CreateKeyPair o ImportKeyPair | Acceso SSH a lo que viene después |
| 4 | ec2:CreateSecurityGroup, AuthorizeSecurityGroupIngress | Puerto 22 abierto a 0.0.0.0/0 |
| 5 | ec2:RunInstances | instanceType (familias p*, g* o, sencillamente, la más grande disponible), minCount, userData |
| 6 | A veces ec2:RequestSpotInstances, CreateLaunchTemplate, CreateAutoScalingGroup | Escala y resiliencia |
Hay variantes (tareas de ECS o Fargate, Lambda, SageMaker, Batch), pero EC2 en una región sin uso sigue siendo el clásico.
Dos detalles que conviene conocer:
RunInstancesregistrauserDatacomo<sensitiveDataRemoved>en CloudTrail, así que ahí no verá el script de instalación del minero. Recupérelo de la instancia (DescribeInstanceAttribute --attribute userData) antes de terminarla.- Las regiones lanzadas después del 20 de marzo de 2019 requieren activación expresa y están desactivadas de forma predeterminada (documentación de AWS); una llamada
EnableRegiondel atacante es en sí misma una señal.
Cómo se ve la minería en la red
Con VPC Flow Logs en la VPC del atacante (a menudo la VPC predeterminada de la región sin uso, donde nadie activó los registros de flujo, así que compruébelo), la minería aparece como:
- conexiones salientes estables y de larga duración desde cada nueva instancia hacia las mismas pocas direcciones públicas;
- hacia puertos de pools habituales en el software de minería (3333, 4444, 5555, 7777, 14444 y similares), aunque también existen pools en el 443;
- volúmenes de bytes pequeños y regulares en ambos sentidos (envío de shares), no transferencias masivas;
- una conexión SSH entrante desde la dirección del atacante poco después del arranque.
GuardDuty tiene tipos de hallazgo específicos cuando está activado en esa región, como CryptoCurrency:EC2/BitcoinTool.B y CryptoCurrency:EC2/BitcoinTool.B!DNS (tipos de hallazgos de EC2). Los atacantes lo saben, y por eso la eliminación de detectores suele preceder al lanzamiento.
Contención, por orden
- Desactive la credencial que llamó a
RunInstances(clave o sesión de rol). De lo contrario, el atacante relanzará instancias tan rápido como usted las termine. - Haga inventario de todas las regiones.
aws ec2 describe-instancesregión por región, o EC2 Global View en la consola. Incluya las solicitudes de Spot, las plantillas de lanzamiento, los grupos de Auto Scaling, los servicios de ECS y las funciones Lambda creados durante la ventana del incidente. - Preserve y después termine. Cree una instantánea del volumen de una instancia representativa y guarde sus datos de usuario para el expediente del caso; termine el resto.
- Elimine el andamiaje. Pares de claves, grupos de seguridad, plantillas de lanzamiento; retire las solicitudes de cuota pendientes que no haya hecho usted.
- Contacte con AWS Support por el uso y los cargos no autorizados. La guía de re:Post sobre actividad no autorizada describe lo que AWS espera que haya hecho antes de solicitar ayuda.
- Deniegue las regiones sin uso con una política de control de servicios si utiliza AWS Organizations.
Estimar los daños
El departamento financiero le pedirá una cifra antes de que haya terminado la contención. Calcúlela a partir de los registros en lugar de esperar a la factura:
- Horas de instancia. Para cada instancia, el evento
RunInstancesaporta la hora de lanzamiento y el tipo; el eventoTerminateInstances(el suyo) aporta el final. Multiplique por el precio bajo demanda de ese tipo en esa región. - Todo lo demás. Transferencia de datos saliente, volúmenes de EBS, direcciones IP elásticas y cualquier recurso creado durante la ventana. Cost Explorer agrupado por región y servicio, y filtrado a los días del incidente, muestra lo que los registros pueden haber pasado por alto.
- Solicitudes pendientes. Un aumento de cuota aprobado después de la contención puede volver a explotarse si la credencial no se ha revocado en todas partes.
Guarde estas cifras con sus fuentes en el expediente del caso; AWS Support le pedirá los ID de recurso y las horas cuando reclame los cargos no autorizados.
Retroceda hasta el punto de entrada
Las instancias son el síntoma. Pivote sobre el principal de los eventos RunInstances:
- ¿Era un usuario creado por el atacante? Entonces busque su
CreateUsery la credencial que lo creó; consulte persistencia en IAM y escalada de privilegios. - ¿Era una clave de larga duración usada desde una dirección nueva? Entonces se trata de una investigación de clave de acceso filtrada.
- ¿Era un rol de instancia? Entonces la entrada fue una carga de trabajo, y la investigación continúa en el host (y, en el caso de EKS, en el registro de auditoría de Kubernetes: kubernetesforensics.com).
Compruebe también qué más hizo el mismo principal antes de lanzar las instancias: la minería suele ir acompañada de robo de datos, porque el atacante ya ha pagado el coste de entrar.
En el analizador
AWS Forensics señala los lanzamientos de instancias GPU (familias p y g) por región, las solicitudes de aumento de cuota, la actividad en una región sin actividad durante el primer día de los registros, los grupos de seguridad abiertos a internet, los pares de claves creados y, a partir de los registros de flujo, las conexiones salientes aceptadas hacia puertos conocidos de pools. La lista de Remediación enumera los ID de instancia y las regiones que hay que terminar. El recorrido por un incidente ficticio termina exactamente con este patrón.