172 lines
6.2 KiB
YAML
172 lines
6.2 KiB
YAML
---
|
|
# AWS Attack Box Deployment Playbook
|
|
# Based on attk-box-setup but optimized for AWS deployment
|
|
|
|
- name: Deploy Attack Box on AWS
|
|
hosts: localhost
|
|
connection: local
|
|
gather_facts: false
|
|
vars_files:
|
|
- vars.yaml
|
|
vars:
|
|
ansible_python_interpreter: "{{ ansible_playbook_python }}"
|
|
deployment_type: "attack_box"
|
|
attack_box_name: "{{ attack_box_name | default('a-' + deployment_id) }}"
|
|
attack_box_type: "{{ attack_box_type | default('kali') }}"
|
|
aws_region: "{{ aws_region | default(aws_region_choices | random) }}"
|
|
instance_type: "{{ aws_instance_type | default('t2.medium') }}"
|
|
ssh_key_name: "attack-box-{{ deployment_id }}"
|
|
|
|
# Attack box AMI mapping (use Kali Linux AMIs)
|
|
attack_box_ami_map:
|
|
us-east-1: "{{ kali_ami_map['us-east-1'] | default('ami-061b17d332829ab1c') }}"
|
|
us-east-2: "{{ kali_ami_map['us-east-2'] | default('ami-061b17d332829ab1c') }}"
|
|
us-west-1: "{{ kali_ami_map['us-west-1'] | default('ami-061b17d332829ab1c') }}"
|
|
us-west-2: "{{ kali_ami_map['us-west-2'] | default('ami-061b17d332829ab1c') }}"
|
|
|
|
tasks:
|
|
- name: Validate AWS credentials
|
|
assert:
|
|
that:
|
|
- aws_access_key is defined and aws_access_key != ""
|
|
- aws_secret_key is defined and aws_secret_key != ""
|
|
fail_msg: "AWS credentials are required"
|
|
|
|
- name: Debug attack box deployment
|
|
debug:
|
|
msg: "Deploying {{ attack_box_type }} attack box on AWS in {{ aws_region }}"
|
|
|
|
- name: Set attack box AMI
|
|
set_fact:
|
|
attack_box_ami: "{{ attack_box_ami_map[aws_region] | default(attack_box_ami_map['us-east-1']) }}"
|
|
|
|
- name: Generate SSH key pair for attack box
|
|
ec2_key:
|
|
name: "{{ ssh_key_name }}"
|
|
region: "{{ aws_region }}"
|
|
aws_access_key: "{{ aws_access_key }}"
|
|
aws_secret_key: "{{ aws_secret_key }}"
|
|
state: present
|
|
register: ec2_key_result
|
|
|
|
- name: Save private key locally
|
|
copy:
|
|
content: "{{ ec2_key_result.key.private_key }}"
|
|
dest: "~/.ssh/{{ ssh_key_name }}"
|
|
mode: '0600'
|
|
when: ec2_key_result.key.private_key is defined
|
|
|
|
- name: Create security group for attack box
|
|
ec2_group:
|
|
name: "attack-box-sg-{{ deployment_id }}"
|
|
description: "Security group for attack box {{ deployment_id }}"
|
|
region: "{{ aws_region }}"
|
|
aws_access_key: "{{ aws_access_key }}"
|
|
aws_secret_key: "{{ aws_secret_key }}"
|
|
rules:
|
|
- proto: tcp
|
|
ports:
|
|
- 22
|
|
cidr_ip: "{{ operator_ip | default('0.0.0.0/0') }}/32"
|
|
rule_desc: "SSH access from operator IP"
|
|
- proto: tcp
|
|
ports:
|
|
- 80
|
|
- 443
|
|
cidr_ip: 0.0.0.0/0
|
|
rule_desc: "HTTP/HTTPS for tools"
|
|
rules_egress:
|
|
- proto: all
|
|
cidr_ip: 0.0.0.0/0
|
|
tags:
|
|
Name: "attack-box-sg-{{ deployment_id }}"
|
|
DeploymentID: "{{ deployment_id }}"
|
|
Type: "attack-box"
|
|
register: security_group
|
|
|
|
- name: Launch attack box EC2 instance
|
|
ec2:
|
|
key_name: "{{ ssh_key_name }}"
|
|
group: "{{ security_group.group_name }}"
|
|
instance_type: "{{ instance_type }}"
|
|
image: "{{ attack_box_ami }}"
|
|
region: "{{ aws_region }}"
|
|
aws_access_key: "{{ aws_access_key }}"
|
|
aws_secret_key: "{{ aws_secret_key }}"
|
|
wait: true
|
|
count: 1
|
|
instance_tags:
|
|
Name: "{{ attack_box_name }}"
|
|
DeploymentID: "{{ deployment_id }}"
|
|
Type: "attack-box"
|
|
Environment: "{{ attack_box_type }}"
|
|
user_data: |
|
|
#!/bin/bash
|
|
# Update system
|
|
apt-get update
|
|
apt-get upgrade -y
|
|
|
|
# Install additional tools if needed
|
|
{% if attack_box_type == 'kali' %}
|
|
# Kali already has most tools
|
|
apt-get install -y nmap curl wget git
|
|
{% else %}
|
|
# Install basic pentest tools for other distros
|
|
apt-get install -y nmap curl wget git python3-pip
|
|
{% endif %}
|
|
|
|
# Set hostname
|
|
echo "{{ attack_box_name }}" > /etc/hostname
|
|
hostname "{{ attack_box_name }}"
|
|
|
|
# Create deployment info
|
|
mkdir -p /root/deployment-info
|
|
cat > /root/deployment-info/info.txt << EOF
|
|
Deployment ID: {{ deployment_id }}
|
|
Attack Box Name: {{ attack_box_name }}
|
|
Attack Box Type: {{ attack_box_type }}
|
|
Region: {{ aws_region }}
|
|
Instance Type: {{ instance_type }}
|
|
SSH Key: {{ ssh_key_name }}
|
|
EOF
|
|
|
|
register: ec2_result
|
|
|
|
- name: Wait for SSH to be available
|
|
wait_for:
|
|
host: "{{ ec2_result.instances[0].public_ip }}"
|
|
port: 22
|
|
delay: 60
|
|
timeout: 300
|
|
|
|
- name: Display attack box information
|
|
debug:
|
|
msg:
|
|
- "Attack box deployed successfully!"
|
|
- "Instance ID: {{ ec2_result.instances[0].id }}"
|
|
- "Public IP: {{ ec2_result.instances[0].public_ip }}"
|
|
- "Private IP: {{ ec2_result.instances[0].private_ip }}"
|
|
- "SSH Command: ssh -i ~/.ssh/{{ ssh_key_name }} root@{{ ec2_result.instances[0].public_ip }}"
|
|
|
|
- name: Save deployment information
|
|
copy:
|
|
content: |
|
|
# Attack Box Deployment Information
|
|
Instance ID: {{ ec2_result.instances[0].id }}
|
|
Public IP: {{ ec2_result.instances[0].public_ip }}
|
|
Private IP: {{ ec2_result.instances[0].private_ip }}
|
|
SSH Key: ~/.ssh/{{ ssh_key_name }}
|
|
SSH Command: ssh -i ~/.ssh/{{ ssh_key_name }} root@{{ ec2_result.instances[0].public_ip }}
|
|
Region: {{ aws_region }}
|
|
Instance Type: {{ instance_type }}
|
|
AMI: {{ attack_box_ami }}
|
|
Security Group: {{ security_group.group_name }}
|
|
dest: "logs/attack_box_{{ deployment_id }}_info.txt"
|
|
|
|
- name: Set attack box facts for other playbooks
|
|
set_fact:
|
|
attack_box_instance_id: "{{ ec2_result.instances[0].id }}"
|
|
attack_box_public_ip: "{{ ec2_result.instances[0].public_ip }}"
|
|
attack_box_private_ip: "{{ ec2_result.instances[0].private_ip }}"
|
|
attack_box_security_group: "{{ security_group.group_name }}"
|