
リコン(偵察)および脆弱性スキャンのワークロードを分散するためのサーバーレスAWSソリューション。Web UIからタスクを送信し、EC2ワーカーがNmapなどのツールを使用したカスタムPythonスクリプトを実行します。
CowCloudは、もともとリコン(偵察)ツールや脆弱性スキャンを分散実行するために作成されました。例えば、バグバウンティハンターによる利用が考えられます。このソリューションは、AWSでワークロードを分散するために必要な基盤作業からエンドユーザーを抽象化することを目的としています。CowCloudは、ユーザーに対して、タスクを表示・作成するための使いやすいWebインターフェースを提供します。作成されたタスクは、ワーカーノード(EC2インスタンス)上で実行されるPythonコードによって後で消費されます。PythonコードとEC2 AMIの両方をカスタマイズすることが想定されています。
例として、Nmapスキャンを実行したいとします。その場合、AMIカタログからAMIを選択し、Terraform/ec2_module/ec2_module.tf 内の image_id フィールドを更新するだけです。次に、ec2py/template.py を更新して、Nmapスキャンの引数(-Pn、-p 443など)をカスタマイズする必要があります。最後に、Terraform/ec2_module/ec2_module.tf 構成ファイル内の user_data フィールドを更新して、Nmapとその依存関係をインストールする必要があります。
もう1つの選択肢として、複数の商用ツールをインストールして実行する場合があります。その場合は、独自のEC2インスタンスまたはスナップショットを作成するとよいでしょう。この場合、すべての依存関係をインストールしてライセンスをアクティベートし、このAMIをワーカー用のゴールデンイメージとして使用できます。

CowCloudは、次の3つの主要コンポーネントに分けられます。
以下が主な機能です。
autoscalingStrategy.py を参照してください)。retention_time の有効期限が切れた後にCloudWatchロググループを削除します。template.py ファイルの extra_docker_params 変数を確認してください(これについては、以下の「管理者/メンテナー」セクションで説明します)。
Terraformを実行すると、新しいファイル(config.js)が作成されます。これには、React JSアプリがCognitoユーザープールディレクトリに対して認証するために必要な構成が含まれています。インフラストラクチャがデプロイされた後、Reactアプリをビルドしてbuildフォルダーをアップロードする必要があります。さらに、Pythonコードをコードリポジトリとして機能するS3バケットにアップロードする必要があります。このプロセスは setup.bat と setup.sh の2つのスクリプトで自動化されているため、これを心配する必要はありません。これはこの段階を要約したものです。
インフラストラクチャはデフォルトで us-east-1 リージョンにデプロイされますが、これはTerraformフォルダー内の locals.tf ファイルで変更できます。
手順:
variables.tf を更新します。ami 変数は、既存のEC2 AMI(ゴールデンAMIまたはEC2カタログのAMI)を指す必要があります。aws configure でAWSアカウントを使用するようにaws-cliを構成します。このコマンド 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
インフラストラクチャのデプロイと保守を担当する担当者は、Webアプリを介して提供されるエンドユーザー入力を適切にサニタイズし、検証する必要があります。言い換えれば、ec2py/template.py 内のコードがOSコマンドインジェクションに対して脆弱でないことを確認してください。
この点は、システムの最も重要な側面であるため強調されています。ワーカーの権限と露出の範囲を制限し、関連するリスクを軽減するために特別な注意が払われています。それでも、システムセキュリティのこの側面に注意を払うのは管理者の責任です。
EC2インスタンスプロファイルにアタッチされたロールポリシーは、Terraformフォルダー内のreadme.mdファイルに一覧表示されています
workers_manager.py と呼ばれるLambda関数があり、ec2pyツールによって呼び出され、より特権的なアクションを実行します。これらのアクションはLambda関数に移動され、EC2プロファイルにアタッチされたロールのアクセスキーが侵害された場合のリスクを制限しました。それでもIMDSv2で動作します。
Lambda関数 workers_manager.py にアタッチされたロールポリシーは、Terraformフォルダー内のreadme.mdファイルに一覧表示されていますタスクの実行中にstdoutを取得してWebインターフェースで表示したい場合は、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_module| variable | default value | description |
|---|
eipenable | false | trueの場合、ソリューションはワーカーノードの起動時に関連付けられたElastic IPアドレスのプールを割り当てます。予約するEIPの数は、次の式を使用して計算されます:sum([var.max_workers, var.maximum_number_of_terminating_machines]) |
cidr_whitelist | [] | ファイアウォールで特定のIP範囲のみを許可するCIDRホワイトリスト。例: ["195.95.131.0/24"] |
max_workers and max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | これらの2つの設定は、スケールインまたはスケールアウトのタイミングを決定します。例: max_workers 3、max_queued_tasks_per_worker 10。これは、タスク数が10を超えると新しいEC2インスタンスが作成されることを意味します。タスクが20を超える場合は、最大3つの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 | ログの保持期間(日数)と、アーカイブテーブルの項目(完了したタスク)の有効期限を設定します。 |