
Бессерверное 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.extra_docker_params в файле template.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 | Задаёт срок хранения (в днях) для журналов и срок действия элементов архивной таблицы (выполненных задач). |
В результате выполнения Terraform создаётся новый файл (config.js), содержащий конфигурацию, необходимую React JS-приложению для аутентификации в каталоге пользовательского пула Cognito. После развёртывания инфраструктуры необходимо собрать React-приложение и загрузить папку build. Кроме того, нужно загрузить Python-код в S3-бакет, который выступает в роли репозитория кода. Этот процесс автоматизирован в двух скриптах setup.bat и setup.sh, так что вам не нужно об этом беспокоиться; здесь это указано лишь для описания данного этапа.
Инфраструктура по умолчанию развёртывается в регионе us-east-1, хотя это можно изменить в файле locals.tf внутри папки Terraform.