
Бессерверное AWS-решение для распределения рабочих нагрузок по разведке и сканированию уязвимостей. Отправляйте задачи через веб-интерфейс; рабочие узлы EC2 выполняют пользовательские Python-скрипты с такими инструментами, как Nmap.
CowCloud изначально был создан для распределённого запуска инструментов разведки и сканирования уязвимостей; например, одним из сценариев использования может быть работа охотников за багами (bug bounty). Это решение предназначено для того, чтобы абстрагировать конечных пользователей от работы, необходимой для распределения рабочих нагрузок в AWS. CowCloud предоставляет пользователям удобный веб-интерфейс для просмотра и создания новых задач, которые затем обрабатываются Python-кодом, выполняющимся на рабочих узлах (EC2-инстансах). Предполагается, что Python-код и AMI EC2 будут настраиваться под конкретные нужды.
В качестве примера, предположим, вы хотите выполнять сканирование с помощью Nmap. В этом случае вы можете просто выбрать AMI из каталога AMI и обновить поле image_id в Terraform/ec2_module/ec2_module.tf. Затем потребуется обновить файл ec2py/template.py, чтобы настроить аргументы для сканирования Nmap (-Pn, -p 443 и т.д.). Наконец, потребуется обновить поле user_data в файле конфигурации Terraform/ec2_module/ec2_module.tf, чтобы установить Nmap и его зависимости.
Другой вариант — установить и запустить несколько коммерческих инструментов; в этом случае вы можете создать собственный EC2-инстанс или снапшот. В этом случае вы установите все зависимости и активируете лицензии, чтобы использовать этот AMI в качестве эталонного образа для своих рабочих узлов.

CowCloud можно разделить на три основных компонента:
Ниже перечислены ключевые возможности:
autoscalingStrategy.py).retention_time.
В результате выполнения Terraform создаётся новый файл (config.js), содержащий конфигурацию, необходимую React JS-приложению для аутентификации в каталоге пользовательского пула Cognito. После развёртывания инфраструктуры необходимо собрать React-приложение и загрузить папку build. Кроме того, нужно загрузить Python-код в S3-бакет, который выступает в роли репозитория кода. Этот процесс автоматизирован в двух скриптах setup.bat и setup.sh, так что вам не нужно об этом беспокоиться; здесь это указано лишь для описания данного этапа.
Инфраструктура по умолчанию развёртывается в регионе us-east-1, хотя это можно изменить в файле locals.tf внутри папки Terraform.
Шаги:
variables.tf; переменная ami должна указывать на существующий AMI EC2, который может быть вашим эталонным AMI или AMI из каталога EC2.aws configure. Проверьте, что настройка выполнена правильно, выполнив команду: aws sts get-caller-identity; при правильной настройке она не должна возвращать ошибку.aws ec2 create-key-pair –key-name cowCloud –query “cowCloud” –output text > ec2_module/cowCloud.pemgit clone [email protected]:nccgroup/cowcloud.git
# Deploy the infra
cd cowcloud
cd Terraform
terraform init
terraform plan
terraform apply --auto-approve
Теперь всё готово! Регистрируйтесь, входите и создавайте новую задачу!
После того как всё развёрнуто и интерфейс доступен, выполните следующие действия:
CowCloud\ec2py> python .\decypt_file.py 2e8cf87c-5389-11ec-abec-d6d1f378b18d
Лицо, отвечающее за развёртывание и сопровождение инфраструктуры, должно надлежащим образом очищать и проверять входные данные конечных пользователей, передаваемые через веб-приложение. Иными словами, необходимо убедиться, что код в ec2py/template.py не уязвим для инъекций команд операционной системы.
Этот момент особо подчёркивается, поскольку это самый критически важный аспект системы. Были приняты особые меры для ограничения разрешений и области доступности рабочих узлов, чтобы снизить соответствующие риски. Тем не менее, именно администратор несёт ответственность за этот аспект безопасности системы.
Политики ролей, привязанные к профилю EC2-инстансов, перечислены в файле readme.md внутри папки Terraform
workers_manager.py, которая вызывается инструментом ec2py для выполнения действий с более высокими привилегиями. Эти действия были перенесены в Lambda-функцию, чтобы ограничить риск в случае компрометации ключа доступа роли, привязанной к профилю EC2. Тем не менее, она работает с IMDSv2.
Политики ролей, привязанные к Lambda-функции workers_manager.py, перечислены в файле readme.md внутри папки TerraformЕсли вы хотите захватывать stdout и показывать его через веб-интерфейс во время выполнения задачи, перейдите в ec2py/template.py и выполните следующие действия:
extra_docker_params содержит информацию, необходимую вашим Docker-контейнерам для отправки stdout в группы журналов CloudWatch. Вам нужно включить эту переменную в командную строку, когда вы хотите просматривать stdout через интерфейс.cmd = f"docker run {extra_docker_params} --rm -v {tmp_folder}target.txt:/root/Tools/reconftw/target.txt -v {tmp_folder}reconftw.cfg:/root/Tools/reconftw/reconftw.cfg -v {tmp_folder}Recon/:/root/Tools/reconftw/Recon/ six2dez/reconftw:main -l target.txt -w".split(' ')
Вы можете уничтожить инфраструктуру, выполнив эту простую команду: terraform destroy --auto-approve — это удалит все существующие ресурсы.
Примечание: не прерывайте этот процесс, так как в облаке могут остаться некоторые элементы, которые затем придётся найти и удалить вручную.


terraform destroy --auto-approve -target module.gateway_module.aws_api_gateway_deployment.lambdaterraform apply --auto-approve -target module.gateway_moduleextra_docker_paramstemplate.py| переменная | значение по умолчанию | описание |
|---|
eipenable | false | Если true, решение выделяет пул эластичных IP-адресов, связанных с рабочими узлами по мере их запуска. Количество резервируемых EIP вычисляется по формуле sum([var.max_workers, var.maximum_number_of_terminating_machines]) |
cidr_whitelist | [] | Белый список CIDR, разрешающий в брандмауэре только определённые IP-диапазоны. Например: ["195.95.131.0/24"] |
max_workers и max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | Эти два параметра определяют, когда уменьшать или увеличивать масштаб, например, max_workers 3, max_queued_tasks_per_worker 10. Это означает, что если количество задач превышает десять, будет создан новый EC2-инстанс. Если задач больше двадцати, для распределения рабочих нагрузок будет доступно не более трёх EC2-инстансов (см. алгоритм в скрипте Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py). |
maximum_number_of_terminating_machines | 2 | Определяет количество инстансов, которые должны быть завершены, но находятся в ожидании, пока процесс/скан не завершит задачу. |
heartbeat_timeout | 900 | Определяет время, в течение которого эти рабочие узлы находятся в ожидании. После истечения этого времени рабочий узел будет принудительно завершён. |
instance_type | t2.micro | https://aws.amazon.com/ec2/instance-types/ |
ami | null | https://aws.amazon.com/es/amazon-linux-ami/ |
retention_time | 7 | Задаёт срок хранения (в днях) для журналов и срок действия элементов архивной таблицы (выполненных задач). |