Laboratorio en AWS para análisis de malware
Después de finalizar el curso Practical Malware Analysis & Triage (PMAT), el cual recomiendo, me di cuenta de que necesitaba un laboratorio que pudiera crear y destruir según necesitara. Por esto decidí automatizar la creación y destrucción del laboratorio mediante Terraform.
En esta entrada vamos a ver como crear nuestro propio laboratorio en AWS para analizar malware utilizando FlareVM, Apache Guacamole y Terraform.
Para poder crear el laboratorio es imprescindible tener una cuenta de AWS.
Los pasos que vamos a seguir para configurar el laboratorio son los siguientes:
- Crear, de forma manual, una instancia Windows en AWS.
- Configuraremos esta instancia con FlareVM.
- Generaremos una AMI basada en esta instancia, esta será la imagen que usaremos para probar nuestro malware.
- Eliminaremos la instancia y configuraremos Terraform.
- Utilizaremos Terraform para crear, destruir el laboratorio y regenerar nuestra FlareVM tantas veces como necesitemos.
El laboratorio tendrá dos posibles configuraciones:
Configuración con Internet: Se creará solo una instancia Windows con FlareVM que tendrá acceso a Internet y a la cual se podrá acceder por RDP también desde Internet. En esta configuración tendremos que tener en cuenta que las muestras de malware serán capaces de conectarse a Internet.
Configuración sin Internet: Se crearán dos instancias, la instancia Windows con FlareVM que no tendrá acceso a Internet, y una instancia con Apache Guacamole que será accesible desde Internet. Para poder conectarnos a FlareVM utilizaremos Apache Guacamole. Para esta configuración será necesario que configuremos un servidor SFTP en la máquina FlareVM que nos permitirá subir las muestras de malware que queramos analizar.
## Creación de la imagen base de Windows con FlareVM Al final de este apartado tendremos una imagen AMI personalizada y la contraseña de administrador de la máquina.
Primero, accedemos vía web a la consola de AWS, vamos a instancias y creamos una nueva instancia.
Seleccionaremos una AMI de Windows, en mi caso seleccioné Microsoft Windows Server 2022 Base.
Seleccionamos el tipo de instancia, una instancia de tipo t2.medium debería ser suficiente, y escogemos una de nuestras claves. Si no tenemos ninguna clave generada generamos una.
En la configuración de red nos debemos asegurar que la instancia está en una VPC pública, que tiene habilitado el auto-assign public IP y que el grupo de seguridad permite el acceso mediante RDP.
Por último, en el apartado de configuración de almacenamiento, subimos la capacidad a 60 GB para no tener problemas de espacio en el futuro.
Tras esto creamos la instancia.
En el apartado instancias esperamos hasta que la instancia esté inicializada y una vez lista accederemos a ella. Hacemos clic en Connect, descargamos el fichero para conectarnos por RDP y obtenemos la contraseña. Importante, debemos guardar esta contraseña en un lugar seguro, ya que es la que utilizaremos para acceder a nuestra máquina Windows ahora y en el futuro. Una vez creemos la AMI no será posible obtener la contraseña mediante este procedimiento.
Con el fichero de configuración y la contraseña accedemos a esta mediante RDP.
Ahora deberemos instalar todas las herramientas que queramos tener en nuestro laboratorio, esta máquina es la que usaremos para detonar el malware.
Instalaremos en primer lugar FlareVM
Descargamos el fichero de instalación: https://github.com/mandiant/flare-vm/blob/master/install.ps1
Abrimos una consola de PowerShell como Administrador
Desbloqueamos el instalador: Unblock-File .\install.ps1
Habilitamos la ejecución de scripts: Set-ExecutionPolicy Unrestricted
Ejecutamos el instalador (este nos pedirá la contraseña de adminsitrador): .\install.ps1
La instalación de FlareVM es lenta, este será el momento de ir a tomar un café.
Si nuestro objetivo es tener FlareVM en una entorno sin acceso a Internet, será necesario instalar también un servidor SFTP que nos permita mover ficheros desde el Apache Guacamole a FlareVM. Una opción rápida es descargar Rebex Tiny SFTP Server.
Además de esto, este es el momento para instalar cualquier otra herramienta que creamos necesaria.
Una vez nos sintamos cómodos con la configuración, procederemos a crear la imagen base.
Volvemos a la consola de AWS, instancias y apagamos nuestra instancia Windows recién configurada.
Una vez apagada, seleccionamos la instancia de nuevo y en acciones vamos a Image - Create Image
Especificamos un nombre único para la imagen y si lo deseamos una descripción. Con esto hacemos clic en Create Image
Aquí podremos encontrar más información sobre como crear la AMI desde nuestra instancia si tenemos problemas.
Vamos a AMIs y ahí veremos como nuestra imagen se está creando. Apuntamos el AMI ID que junto con la contraseña obtenida anteriormente serán los valores que necesitaremos para el próximo paso.
Procedemos a borrar la instancia creada, lo único que necesitaremos en nuestra cuenta (y por lo que pagaremos) será la AMI generada.
## Creación del laboratorio Para poder crear en laboratorio necesitaremos:
- El AMI ID y la contraseña de administrador de la máquina creada en el paso anterior.
- Claves de acceso a AWS con permisos para gestionar la red y las instancias.
- Una terminal con las claves de AWS configuradas.
- Tener instalado Terraform, jq y git
- (Opcional) si queremos utilizar la opción sin Internet y con acceso mediante Apache Guacamole, aceptar la licencia de Apache Guacamole https://aws.amazon.com/marketplace/pp?sku=6sq2ud425j12tj4didc8xzf6m (El software no tiene precio, pero está empaquetado por Bitnami)
Una vez tenemos los requisitos clonamos el repositorio adanalvarez/AWS-malware-lab:
git clone https://github.com/adanalvarez/AWS-malware-lab
cd AWS-malware-lab
Creamos un fichero de configuración, con el nombre shared.auto.tfvars.json
como el siguiente:
{
"environment": "malware-lab",
"ami": "ami-xxxxxxxxxxxxxxxxx",
"account" : "222222222222",
"region": "eu-west-1",
"enable_guacamole": false
}
Aquí introduciremos, el entorno, el AMI ID de la imagen creada en el paso anterior, nuestra cuenta de AWS, la región donde desplegaremos el laboratorio y si queremos habilitar Apache Guacamole o no.
Inicializamos Terraform y hacemos un plan para ver qué recursos se crearán:
terraform init
terraform plan
Tras esto realizaremos un apply para crear nuestro laboratorio.
terraform apply
Tras unos minutos nuestro laboratorio estará creado y listo para usarse.
## Acceder al entorno en con guacamole deshabilitado (Internet)
Tras realizar el terraform apply nos aparecerá en la consola la IP pública de nuestra máquina FlareVM.
Podremos acceder directamente mediante RDP con la contraseña de Administrador que tenemos del primer apartado.
## Acceder al entorno en con guacamole habilitado (no Internet)
Tras realizar el terraform apply nos aparecerá en la consola la IP pública de Apache Guacamole, el usuario administrador y la contraseña generada. Si el usuario y la contraseña generada aparecen en blanco, esperar unos minutos y realizar un terraform plan. Si tras varios minutos no aparece la contraseña, seguir el siguiente manual https://docs.bitnami.com/aws/faq/get-started/find-credentials/
Mediante un navegador accedemos a la URL HTTPS://guacamole_public_ip e introducimos el usuario y contraseña que nos apareció en el output de Terraform.
Una vez en la interfaz de Apache Guacamole vamos a configurar una nueva conexión
Aquí configuraremos una conexión RDP con los datos de nuestra máquina FlareVM, la IP será 172.16.10.4 (aparecerá en el output de Terraform), el usuario será administrator y la contraseña será la que tenemos del primer apartado.
### Configurar el servidor SFTP para transferir ficheros
Si trabajamos con la opción de Guacamole nuestra máquina FlareVM no tendrá conexión a Internet, por lo que necesitaremos de un servidor SFTP para transferir ficheros. En el primer paso deberíamos haber descargado uno, la recomendación es utilizar un servidor simple como Rebex Tiny SFTP Server.
Si tenemos el ejecutable en nuestra máquina FlareVM, únicamente deberemos ejecutarlo y hacer clic en Start para tener el servidor funcionando.
Una vez esté funcionando, volvemos a las opciones de configuración de Guacamole, editamos la conexión y habilitamos el servicio SFTP
Lanzamos una nueva sesión y en esta ya nos permitirá copiar ficharos a la máquina, para esto simplemente hay que arrastras el fichero desde nuestra máquina al navegador. Los ficheros aparecerán en: C:\Users\Administrator\Downloads\data
## Regenerar FlareVM
Tras detonar malware en nuestra máquina, si queremos volver a una máquina FlareVM en un estado limpio, con el siguiente comando de Terraform podremos eliminar la máquina FlareVM y generar una nueva:
terraform apply -replace=aws_instance.flarevm
Importante si estamos trabajando con el entorno con Guacamole, será necesario modificar la conexión y deshabilitar la opción de SFTP, de lo contrario no podremos conectar al no estar el SFTP habilitado.
## Destruir el entorno Una vez hayamos finalizado de analizar malware, para ahorrar costes, procederemos a destruir el entorno. Para esto ejecutaremos el commando:
terraform destroy
Esto no eliminará nuestra AMI, así que cuando queramos volver a analizar malware simplemente necesitaremos volver a lanzar el comando terraform apply.
## Costes aproximados Cuando el laboratorio está apagado, el único coste que pagaremos es el del espacio ocupado por la AMI. Un disco de 60 GB tiene un precio aproximado de: 3 $ al mes.
Cuando el laboratorio esté encendido, pagaremos por las instancias y sus discos.
El entorno con Apache Guacamole tendrá un coste aproximado de: 0.12 $/H
El entorno con sin Apache Guacamole tendrá un coste aproximado de: 0.17 $/H