AWS 침투 테스트 연구소
Terraform을 사용하여 IaC로 AWS에 배포된 침투 테스트 연구소입니다. SSH & WireGuard VPN을 통해 접근 가능한 Kali Linux 인스턴스를 배포합니다. 취약한 인스턴스는 프라이빗 서브넷에 있습니다.
참고:
- ID는 "eu-west-1" 리전에만 정의되어 있습니다.
- 다른 리전의 경우 kali AMI ID를 지정해야 하며 metasploitable3 ID도 지정해야 합니다(빌드 후).
변경 로그
- [2022-01-30]
- sudoers 설정: 사용자 그룹이 sudo nmap을 사용할 수 있도록 설정
- 보안 그룹: 8800-8899 포트로의 인바운드 연결 허용 (리버스 셸 용도)
- [2021-12-26]
- 첫 번째 가용 영역 자동 설정
- Packer로 새 metasploitable AMI 생성
- metasploitable3 머신에 log4jshell 취약점 초기 통합 (사용 불가)
- [2021-12-22]
- metasploitable 이미지 빌드를 위한 Packer (./metasploitable3/ 참조)
- kali user_data 스크립트 수정
- us-east-1 배포 검증
- [2021-12-09]
- ID를 직접 제공하는 대신 최신 Kali Linux AMI ID 검색
- terraform template_file을 deprecated로 인해 대체
- Windows Server AMI (TODO: 취약한 소프트웨어 설치)
- [2021-09-15]
- WireGuard 다중 피어 생성 수정
- Kali Linux에 Infection Monkey 앱 통합
- 새로운 Kali 버전 2021.3으로 업그레이드
- [2021-06-02] AMI ID를 Kali 2021.2 사용으로 변경
- [2021-03-10] 새로운 Kali 버전 2021.1 사용
다이어그램

구성 요소
- Kali 인스턴스 (개인 키는 kali.pem에 저장됨)
- Wireguard VPN 서비스: 클라이언트 파일 client_vpn.wg
- SSH/SCP를 통해 접근 가능
- 퍼블릭 서브넷 10.0.0.5/24
- Infection Monkey: 5000 포트에서 실행 (VPN 또는 SSH로만 접근 가능)
- 취약 머신 "Metasploitable" (AMI 빌드는 공개)
- 추가 취약 연구소/머신/도커 (예정)
추가된 기능
- 사용자 관리
- Kali 인스턴스에 RSA로 비특권 사용자 자동 생성
- 사용자별 WireGuard VPN 클라이언트 파일
- syslog에 명령줄 감사 로깅
- auditd 활성화: sudo_log 및 users_log 키로 사용자 행동 감사 (ausearch 명령 참조)
- TODO: 터미널 감사를 CloudWatch 또는 한 번 쓰기 정책이 있는 S3 버킷으로 전달
사용 방법
- 요구 사항:
- Terraform CLI 설치 가이드
- AWS CLI 설치 가이드
- AWS CLI 및 Terraform이 $PATH에 설정되어 있어야 함
- AWS 계정 및 aws cli를 통한 자격 증명 구성:
aws configure
- AWS Marketplace에서 Kali Linux 구독
- 사전에 빌드된 Metasploitable3 AMI 이미지 (eu-west-1 리전용 공개 AMI 사용 가능) 참조
배포
- 취약 인스턴스 배포를 활성화/비활성화하려면
variables.tf에서 0 또는 1을 설정합니다:
variable "deploment-control" {
type = map
default = {
#"instance" = 0 or 1, to disable or enable
"metasploitable3" = 1
"dvca" = 0
}
description = "Control which EC2 instances are deployed, 0 for none or 1"
}
- Terraform을 사용하여 인프라 배포:
terraform init
terraform plan
terraform apply -auto-approve
출력
Terraform 출력에 다음 항목이 표시됩니다:
- kali 사용자(루트는 sudo 사용)의 SSH 연결 명령
- kali 사용자의 WireGuard 클라이언트 파일이 Kali 서버에서 자동으로 검색됨
- WireGuard 클라이언트 파일 검색을 위한 SCP 명령 (terraform local-exec 명령이 실패할 경우를 대비)
- Kali 인스턴스에 생성된 각 일반 사용자에 대해:
- SSH 연결용 개인 키 파일
- VPN 연결용 WireGuard 클라이언트 파일
사용 방법
SSH 또는 WireGuard를 통해 Kali에 연결:
- SSH: (명령줄 전용) 자동 생성된 개인 키 사용 (terraform 출력 참조)
KALI_IP=<KALI_IP> # configure kali public ip
ssh -i kali.pem -o StrictHostKeyChecking=no -o IdentitiesOnly=yes kali@${KALI_IP}
- Wireguard: 로컬 Kali 인스턴스를 WireGuard를 통해 연결 (client_vpn.wg 생성 파일 참조)
KALI_IP=<KALI_IP> # configure kali public ip
scp -i kali.pem -o StrictHostKeyChecking=no IdentitiesOnly=yes kali@${KALI_IP}:/home/kali/client_vpn.wg .
####
(local_kali)$ sudo apt-get install –y wireguard
(local_kali)$ sudo gedit /etc/wireguard/wg0.conf # copy contents of client_vpn.wg
(local_kali)$ sudo chmod 700 /etc/wireguard/wg0.conf
(local_kali)$ sudo wg-quick up wg0
(local_kali)$ ping 10.0.0.5 # AWS의 Kali 인스턴스와의 연결 테스트
파기
terraform destroy -auto-approve
참고 자료