AWS EC2+Interactsh+Route53 기반 도메인 인증서 자동 발급 및 갱신 아키텍처 구축

클라우드 기반 보안 테스트를 위한 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.

Unable to locate credentials

 

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 리버스 프록시 작업도 해야한다. 이건 나중에,..

반응형