
나만의 의도적으로 취약하게 설계된 AWS 침투 테스트 플레이그라운드를 생성하세요.

해킹 시작하기: CloudFoxable
자세한 내용은 블로그를 읽어보세요: Introducing CloudFoxable: A Gamified Cloud Hacking Sandbox
CloudFox는 침투 테스터와 보안 전문가가 클라우드 인프라에서 악용 가능한 공격 경로를 찾을 수 있도록 돕습니다. 하지만 현재 환경에 없는 서비스를 찾아 악용하려면 어떻게 해야 할까요? 엔터프라이즈 AWS 환경에 대한 접근 권한이 없다면 어떻게 해야 할까요?
CloudFoxable은 바로 이러한 상황을 위해 만들어진, 의도적으로 취약하게 구성된 AWS 환경입니다. CloudFox의 기능을 선보이고 잠재된 공격 경로를 더 효과적으로 찾을 수 있도록 돕는 것이 목적입니다. CloudGoat, flaws.cloud, flaws2.cloud, Metasploitable 1-3에서 영감을 얻은 CloudFoxable은 CTF 형식으로 다양한 플래그와 공격 경로를 제공합니다.
CloudGoat 및 IAM-Vulnerable과 유사하게 CloudFoxable은 사용자가 관리하는 실습용 계정에 의도적으로 취약한 AWS 리소스를 배포하여 클라우드 취약점 식별 및 악용 방법을 학습할 수 있게 합니다. 다만 flaws.cloud에 더 가깝게, 경험은 웹 기반이며 안내 방식으로 진행됩니다.
CloudFoxable은 Terraform을 사용하여 의도적으로 취약한 AWS 인프라를 배포하고 관리합니다. 이 섹션에서는 Terraform을 설치하고 CloudFoxable 리소스를 배포, 수정, 제거하는 데 필요한 최소한의 지침을 제공합니다.
CloudFoxable을 배포하기 전에 Terraform을 로컬에 설치해야 합니다.
운영 체제에 맞는 공식 HashiCorp 설치 가이드를 따르세요.
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
설치를 확인합니다:
terraform version
설치가 성공하면 Terraform 버전이 출력됩니다.
Terraform을 실행하기 전에:
aws configure, 환경 변수 또는 수임된 역할(assumed role)을 통해).중요: CloudFoxable은 의도적으로 취약한 인프라를 배포합니다. 프로덕션, 공유 또는 기업 AWS 계정에는 배포하지 마세요.
모든 Terraform 명령은 다음 디렉터리에서 실행해야 합니다:
cd cloudfoxable/aws
작업 디렉터리를 초기화하고 필요한 공급자를 다운로드합니다:
terraform init
이 명령은 워크스페이스마다 한 번(또는 공급자 구성이 변경될 때) 필요합니다.
Terraform이 생성, 수정 또는 삭제할 내용을 검토하려면:
terraform plan
현재 활성화된 챌린지를 배포하려면:
terraform apply
메시지가 표시되면 yes를 입력하여 확인합니다.
CloudFoxable이 생성한 모든 리소스를 제거하려면:
terraform destroy
메시지가 표시되면 yes로 확인합니다.
| 명령 | 설명 |
|---|---|
terraform init | Terraform 프로젝트 초기화 |
terraform plan | 제안된 인프라 변경 사항 표시 |
terraform apply |
IAM-Vulnerable과 유사하게, 일부 챌린지는 기본적으로 활성화되어 있고(비용이 거의 또는 전혀 들지 않는 챌린지), 다른 챌린지는 기본적으로 비활성화되어 있습니다(배포 시 비용이 발생하는 챌린지). 이렇게 하면 필요에 따라 특정 모듈만 활성화할 수 있습니다. 다만 챌린지 활성화/비활성화 메커니즘은 IAM-Vulnerable과는 조금 다릅니다.
cloudfoxable.bishopfox.com에서 각 챌린지는 챌린지를 완료하기 위해 terraform 변경(즉, 무언가 배포)이 필요한지 여부를 알려줍니다. 이 작업은 terraform.tfvars를 편집하고 필요에 따라 enabled 플래그를 false에서 true로 변경하는 방식으로 수행합니다.
예시는 다음과 같습니다:
############################
# Enabled/Disabled Challenges
############################
# Always on (Low or No cost)
challenge_foo_enabled = true
challenge_bar_enabled = true
challenge_alice_enabled = true
# Enable as needed (These challenges incur cost)
challenge_bob_enabled = false
challenge_mallory_enabled = false
mallory 챌린지를 활성화하려면 다음 줄을 업데이트하기만 하면 됩니다:
challenge_mallory_enabled = true
챌린지를 활성화한 후에는 terraform apply를 다시 실행해야 합니다:
terraform apply
이제 mallory 챌린지를 배포했습니다.
정리
CloudFoxable이 생성한 모든 리소스를 제거하려면 다음 명령을 실행하면 됩니다:
cd cloudfoxable/awsterraform destroyWindows를 사용하는 경우 플랫폼별 제한으로 인해 일부 챌린지 배포 시 문제가 발생할 수 있습니다. 이를 방지하기 위해 다양한 시스템에서 일관된 환경으로 애플리케이션을 빌드하고 실행할 수 있도록 Dockerfile이 제공됩니다.
먼저 리포지토리를 로컬 머신에 클론합니다:
git clone https://github.com/BishopFox/cloudfoxable.git
cd cloudfoxable
리포지토리를 클론한 후 다음 명령으로 Docker 이미지를 빌드합니다. 이렇게 하면 캐시된 레이어 없이 새로 빌드됩니다:
docker build --no-cache -t cloudfoxable .
Windows를 사용하는 경우 다음 PowerShell 명령으로 Docker 컨테이너를 실행합니다. 이 명령은:
cd aws
docker run -it -v $env:USERPROFILE/.aws/credentials:/root/.aws/credentials -v ${PWD}:/cloudfoxable/aws cloudfoxable
https://github.com/iknowjason/Awesome-CloudSec-Labs
새 챌린지를 추가하려면 CloudFoxable에서 리포지토리를 포크한 후 다음 단계를 따르세요:
cp aws/challenges/1_challenge_template aws/challenges/challenge_namechallenge_name.tf 파일 이름을 챌린지 이름으로 바꿉니다.variable "challenge_name_enabled" {
description = "Enable or disable challenge_name challenge (true = enabled, false = disabled)"
type = bool
default = false
}
terraform.tfvars.example의 "Enabled/Disabled Challenge" 섹션에 추가합니다. 기본 활성화(저비용/무비용)인지, 기본 비활성화(비용 발생 $$)인지 지정합니다.
challenge_name_enabled = false
module "challenge_challenge_name" {
source = "./challenges/challenge-name"
count = var.challenge_name_enabled ? 1 : 0
aws_assume_role_arn = (var.aws_assume_role_arn != "" ? var.aws_assume_role_arn : data.aws_caller_identity.current.arn)
account_id = data.aws_caller_identity.current.account_id
aws_local_profile = var.aws_local_profile
user_ip = local.user_ip
}
enabled_challenges 로컬 변수에 챌린지 이름을 추가합니다:
var.challenge_name_enabled ? "name | $12/month |" : ""
| 리소스 생성 또는 업데이트 |
terraform destroy | 배포된 모든 리소스 제거 |