wazuh-cloudformation-logos

CloudFormation template para guía PoC Wazuh

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…

Ingeniero de Seguridad informática, Administrador IT, anteriormente docente de tecnología, apasionado por la ingeniería y como aprovechar la tecnología para nuestro beneficio

Artículos relacionados

5 thoughts on “CloudFormation template para guía PoC Wazuh

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *