Para profesionales de TI experimentados y cualquier persona dando los primeros pasos en ciberseguridad un buen lugar para empezar es con el producto open source SIEM y XDR Wazuh, hay una guía PoC con casos interesantes como detectar un ataque de fuerza bruta, monitoreo de la integridad de archivos, detección de vulnerabilidades, entre otros.
Se puede llevar algo de tiempo armar el laboratorio requerido en el artículo, por lo que les comparto una plantilla de CloudFormation que despliega todos los componentes en AWS en unos 5 minutos.
En el siguiente enlace pueden conseguir el template de CloudFormation
Es posible que sea necesaria la suscripción a las AMIs antes de desplegar el template de CloudFormation.
Video mostrando el procedimiento para desplegar los componentes usando CloudFormation:
Desglose del código del template:
Mappings, esto se usa para las AMI IDs, es preferible usar el AMI alias y facilita mucho el trabajo, sin embargo, en el caso de la instancia de RedHat no conseguí el alias por lo que tuve que realizar este mapping.
Mappings:
RegionMap:
us-east-1:
HVMREDHAT9: ami-05723c3b9cf4bf4ff
us-east-2:
HVMREDHAT9: ami-08d616b7fbe4bb9d0
us-west-1:
HVMREDHAT9: ami-029465c1f346dd34f
us-west-2:
HVMREDHAT9: ami-0b6ce9bcd0a2f720d
ca-central-1:
HVMREDHAT9: ami-093dddc44bec52167
eu-west-1:
HVMREDHAT9: ami-0f11fb3119dc9fc60
eu-west-2:
HVMREDHAT9: ami-023cd3f0d10fb8a9c
eu-west-3:
HVMREDHAT9: ami-0c226b3aa389adbef
ap-northeast-1:
HVMREDHAT9: ami-083594d506bfbc152
ap-northeast-2:
HVMREDHAT9: ami-07cc74f198bb9e86a
ap-southeast-1:
HVMREDHAT9: ami-0b2aec26bb1a5169d
ap-southeast-2:
HVMREDHAT9: ami-003cf7280eac7a28a
ap-south-1:
HVMREDHAT9: ami-069d9fecd19e7ed40
sa-east-1:
HVMREDHAT9: ami-07509c78b1456cc84
Parameters
Esta sección es donde especificamos los parámetros y podemos luego editarlos al momento de crear el stack
El WorkstationIP lo asociamos mas adelante con el SecurityGroupIngress del WazuhLinuxSecurityGroup y el WazuhWindowsSecurityGroup para de esta manera solo permitir SSH o RDP de las IPs deseadas
Parameters:
WorkstationIp:
Type: String
Description: The IP address of the workstation that can RDP and SSH into the instances. Have 0.0.0.0/0 to allow any IP address.
Default: '0.0.0.0/0'
MinLength: 9
MaxLength: 18
AllowedPattern: "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})"
ConstraintDescription: must be a valid IP address of the form x.x.x.x/x
Los AMI Alias especifican el AMI a usar, es algo relativamente reciente y antes solo se podia usar el Mapping o directamente especificar el AMI ID. Mas info: https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-ami-aliases.html
AmiAliasWazuhServer:
Description: AMI alias of Wazuh
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/marketplace/prod-khkzdapwa4w62/latest' #An specific version can be selected sometimes by changing "latest" for the version, ex: "v4.3.8"
AmiAliasLinuxAgent1:
Description: AMI alias of Ubuntu 22.04 Agent
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/marketplace/prod-lfutkwiaknxsk/latest' #https://aws.amazon.com/marketplace/server/procurement?productId=47489723-7305-4e22-8b22-b0d57054f216
# AmiAliasLinuxAgent2:
# Description: AMI alias of Red Hat Enterprise Linux 9.0 Agent # I have not found the AMI alias
# Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
# Default: '/aws/service/marketplace/prod-lfutkwiaknxsk/latest'
AmiAliasWindowsAgent1:
Description: AMI alias of Windows Agent Server 2022 base
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/marketplace/prod-tj2wcsymhcvj2/latest'
Lo siguiente es el CIDR a usar para la VPC, para la subnet y las IP privadas a asignar, estos parámetros se referencian más adelantes
CidrBlockVPC:
Description: CIDR block of the VPC
Type: 'String'
Default: '172.20.0.0/16'
CidrBlockSubnet:
Description: CIDR block of the Public Subnet
Type: 'String'
Default: '172.20.0.0/24'
PAWazuhServer:
Description: Private IP Address of Wazuh Server
Type: 'String'
Default: '172.20.0.10'
PALinuxAgent1:
Description: Private IP Address of Linux Agent-1
Type: 'String'
Default: '172.20.0.20'
PALinuxAgent2:
Description: Private IP Address of Linux Agent-2
Type: 'String'
Default: '172.20.0.30'
PAWindowsAgent1:
Description: Private IP Address of Windows Agent-1
Type: 'String'
Default: '172.20.0.40'
Estos parámetros son para el tamaño y tipo de las instancias del Wazuh AIO y el de la instancia de Windows Server 2022, esto permite que al momento de desplegar el template en CloudFormation se puede elegir entre los valores especificados aquí, por ejemplo para la instancia de Windows Server se puede elegir entre m4.xlarge, t2.medium and t2.large. No se especificaron las máquinas Linux ya que el tamaño de estas funcionara bien con t2.small y en la mayoría de los casos hasta con una t2.micro.
WazuhServerInstanceType:
Description: EC2 Instance type of Wazuh Server AIO #c5a.xlarge vendor recommended, c5a.large or t2.medium to save money
Type: String
Default: c5a.large
AllowedValues:
- c5a.large #bare minimum 2vCPU and 4GB RAM
- c5a.xlarge #recommended 4vCPU and 8GB RAM
- t2.medium #bare minimum 2vCPU and 4GB RAM, cheapest option
- t2.large #2vCPU and 8GB RAM
- t2.xlarge #4vCPU and 16GB RAM
ConstraintDescription: must be a valid EC2 instance type.
WindowsAgentInstanceType:
Description: EC2 Instance type of Windows Server 2022 #m4.xlarge vendor recommended (very expensive), t2.medium to save money
Type: String
Default: t2.medium
AllowedValues:
- m4.xlarge #vendor recommended 4vCPU and 16GB RAM
- t2.medium #minimum 2vCPU and 4GB RAM, cheapest option
- t2.large #2vCPU and 8GB RAM
ConstraintDescription: must be a valid EC2 instance type.
Resources es la única sección requerida por CloudFormation, primero se especificó la VPC (Virtual Private Cloud) que se esta creando una nueva y el rango de IPs a usar esta definido en el parámetro CidrBlockVPC
Resources:
LabVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref CidrBlockVPC
EnableDnsHostnames: true
EnableDnsSupport: true
InstanceTenancy: default
La Subnet or Subred está comprendida dentro de la VPC, se especifica las IPs de esta con el parámetro CidrBlockSubnet, mas información sobre las availability zones
Subnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref LabVPC
CidrBlock: !Ref CidrBlockSubnet
AvailabilityZone: !Select
- 0
- !GetAZs
Ref: 'AWS::Region'
Se necesita un Internet Gateway para proporcionar con internet a la VPC, esta se asocia a la VPC con el el recurso AttachGateway que usa VPCGatewayAttachment
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: !Join [ '-', [ !Ref LabVPC, 'igw']]
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref LabVPC
InternetGatewayId: !Ref InternetGateway
También es necesaria una RouteTable para la VPC, asignarle la ruta por defecto 0.0.0.0/0 como la salida de internet y asociar también la Subnet a la RouteTable
RouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref LabVPC
Route:
Type: AWS::EC2::Route
DependsOn: AttachGateway
Properties:
RouteTableId: !Ref RouteTable
DestinationCidrBlock: "0.0.0.0/0"
GatewayId: !Ref InternetGateway
SubnetRouteTableAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
RouteTableId: !Ref RouteTable
SubnetId: !Ref Subnet
Aqui se crea el KeyPair a usar para poder hacer conectarse via SSH o RDP (decriptando la contraseña con el KeyPair) a las instancias, el nombre que se le da es wazuhKeyLab y se puede encontrar en el Parameter Store una vez desplegado el stack de CloudFormation
KeyNameToUse:
Description: New EC2 Key pair that will be saved on Parameter Store
Type: AWS::EC2::KeyPair
Properties:
KeyName: wazuhKeyLab
Seguiré actualizando este articulo para explicar cada una de las partes del template de CloudFormation…
Thanks again.
Thank you!
I hope it was useful to you!
Good article!
Thank you!
You should checked the improved version: https://github.com/carlosdams/Wazuh-tools-scripts/blob/main/Wazuh-lab-version2-PoC.yaml
Here is the article in Spanish: https://educaciontech.com/2023/07/version-mejorada-de-cloudformation-template-para-guia-poc-wazuh/
Article in English: https://medium.com/@damscarlos/improved-cloudformation-templates-for-wazuh-poc-guide-87689780a0c1