클라우드 기반 보안 테스트를 위한 OOB(Out-of-Band) 트래픽 수집 환경을 구축하기 위해, projectdiscovery/interactsh를 EC2에서 운영하며, 소유하고 있는 도메인에 대한 HTTPS 인증서를 자동으로 발급 및 갱신하는 구조를 구성했습니다. 이 문서는 아카이빙 및 다른 도메인/서버 구성 시 재활용할 수 있도록, 구축 과정을 트러블슈팅 포함하여 정리합니다.
1. Interactsh란?
보안 테스트에서 OOB 트래픽 분석은 다양한 공격 벡터(예: Blind SSRF, RCE, XXE 등)의 성공 여부를 감지하는 핵심 기법이다. 그러나 상용 플랫폼(예: Burp Collaborator) 의존 없이 DNS, HTTP 요청을 직접 수집하고 통제 가능한 환경을 구성하려면 독립적인 도메인과 서버 구축이 필요하다.
이 프로젝트에서는 OOB 테스팅을 위한 도메인을 직접 구매하고, AWS 기반 EC2에서 서버를 구성하여 내부적으로 DNS 로그를 추적하고 TLS 통신까지 제어할 수 있는 테스트 인프라를 확보하였다. 이를 통해 기업 내 보안 진단 또는 연구 목적으로 외부 요청에 대한 상세한 가시성과 분석이 가능해진다.
Interactsh는 ProjectDiscovery에서 개발한 Out-of-Band (OOB) 인터랙션 수집 도구다. 보안 진단 중 DNS, HTTP, SMTP 등 다양한 프로토콜을 이용한 외부 요청 발생 여부를 탐지하고 수집하는 데 유용하다. 주로 다음과 같은 목적에 활용된다:
- SSRF, RCE, XXE, Blind XSS 등의 탐지
- Red Team이나 Bug Bounty 활동에서 OOB 기반 Payload 수집
- 클라이언트와 서버 사이의 외부 요청 트래픽 분석
Interactsh는 Server(수집기)와 Client(로그 확인/등록기)를 함께 제공하며, Web UI를 통해 시각화도 지원한다.
2. 아키텍처 구성 환경/목표
- EC2 기반 Interactsh 서버 실행 (DNS/HTTP 리스닝)
- Let's Encrypt 인증서 자동 발급/갱신 (Route53 DNS 사용)
- 도메인은 다른 AWS 계정 A에 있음, EC2는 B 계정에서 운영
- 인증서 경로를 interactsh에 연결 후 TLS 통신 지원
3. 전제 조건 및 사전 준비
3.1. 도메인
- 도메인: 인증서를 등록하고,
- Route53 호스팅 영역: A 계정에서 운영
3.2. EC2
- EC2는 B 계정에서 실행, Amazon Linux 2023 사용
- root 계정 기준으로 certbot 실행 및 AWS 인증 필요
4. 초기 설정: 인증서 발급 스크립트(pemkeygen.sh)
#!/bin/bash
set -e
export AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_REGION=ap-northeast-2
# 1. certbot + 플러그인 설치
sudo yum install -y certbot python3-certbot-dns-route53
# 2. 인증서 저장 경로 지정
CERT_DIR="/etc/letsencrypt/live/{도메인명}"
CERT_PATH="${CERT_DIR}/fullchain.pem"
KEY_PATH="${CERT_DIR}/privkey.pem"
# 3. 인증서 발급
sudo certbot certonly \
--dns-route53 \
--non-interactive \
--agree-tos \
--email example@domain.com \
-d "{사용할 도메인 입력}" \
--preferred-challenges dns \
--server https://acme-v02.api.letsencrypt.org/directory
# 4. Interactsh용 인증서 링크 생성
mkdir -p /opt/interactsh/certs
ln -sf "${CERT_PATH}" /opt/interactsh/certs/cert.pem
ln -sf "${KEY_PATH}" /opt/interactsh/certs/privkey.pem
트러블슈팅1. AWS 인증정보를 찾을 수 없음
EC2 환경에서 쉘 스크립트를 실행하면 `certbot`에서 AWS Credential을 찾지 못하는 문제가 있었다. 공식 홈페이지에 따르면 다음의 순서대로 인증정보를 찾는다.
* Using the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.
* Using a credentials configuration file at the default location, ~/.aws/credentials. If you’re running on sudo, the credentials will be picked up from the root home.
* Using a credentials configuration file at a path supplied using the AWS_CONFIG_FILE environment variable.
certbot는 root 계정 기준으로 동작하므로, root의 홈경로(/root)에 인증정보를 위치시키는 방법으로 해결했다.
cat <<EOF > /root/.aws/credentials
[default]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
EOF
참조: https://certbot-dns-route53.readthedocs.io/en/stable/index.html#config-ini
트러블슈팅 2. AWS 권한 문제
인증정보는 올바르게 읽었지만 사용자에게 부여된 권한이 없어, 에러가 발생했다. 다음 권한을 올바르게 부여한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:GetChange",
"route53:ChangeResourceRecordSets"
],
"Resource": "arn:aws:route53:::hostedzone/{호스팅존ID}"
}
]
}
5. 인증서 갱신 자동화(renew-cert.sh + crontab)
#!/bin/bash
set -e
export AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_REGION=ap-northeast-2
CERT_DIR="/etc/letsencrypt/live/{도메인명}"
CERT_PATH="${CERT_DIR}/fullchain.pem"
KEY_PATH="${CERT_DIR}/privkey.pem"
sudo certbot renew --quiet --no-self-upgrade
if [ $? -eq 0 ]; then
ln -sf "$CERT_PATH" /opt/interactsh/certs/cert.pem
ln -sf "$KEY_PATH" /opt/interactsh/certs/privkey.pem
systemctl restart interactsh
fi
크론탭 등록
sudo crontab -e
0 3 * * * /opt/interactsh/renew-cert.sh >> /var/log/interactsh-cert-renew.log 2>&1
6. 마무리
이 구성을 기반으로 다양한 도메인/환경에서 OOB 테스트 환경을 간편하게 운영할 수 있으며, 추가적으로 웹 UI, 로깅, reverse proxy 구성을 통해 더욱 발전시킬 수 있다. nginx 리버스 프록시 작업도 해야한다. 이건 나중에,..
'Security > Cloud Computing' 카테고리의 다른 글
[AWS] Gophish로 침해대응(악성메일) 훈련 진행기 5 (0) | 2024.05.22 |
---|---|
[Podman] 컨테이너로 PostgreSQL + pgAdmin 구동하기 (0) | 2024.03.05 |
[AWS] S3 정적 웹 사이트 호스팅 버킷 Route53 도메인 설정 (0) | 2024.02.13 |
[AWS] S3 퍼블릭 버킷을 이용한 정적 웹 사이트 배포하기 (0) | 2024.02.05 |
[AWS] Route 53 서비스에 가비아 도메인 연결하기 (0) | 2024.01.30 |