Taken
AWS의 유령 탄력적 IP를 사용하여 서브도메인을 탈취하고, 서브도메인 탈취에 대한 작동하는 POC를 제공합니다.
서브도메인 탈취로 할 수 있는 작업:
- 쿠키 탈취: 쿠키가 도메인 속성으로 하이재킹된 서브도메인에 설정된 경우.
- CORS 요청: Access-Control-Allow-Origin이 하이재킹된 서브도메인으로 설정된 경우.
- 인증 코드를 얻기 위한 OAuth 리디렉션: 하이재킹된 서브도메인이 허용 목록에 있는 경우.
- XSS를 위한 CSP 정책: CSP 정책이 이 서브도메인을 허용하는 경우.
- 클릭재킹: X-Frame-Options가 이 서브도메인을 허용하는 경우.
- 이메일 스푸핑: SPF 레코드가 이 서브도메인을 허용하는 경우.
자동화 아이디어는 다음과 같습니다.
- 서브도메인 수집
- 역방향 조회를 수행하여 AWS IP만 저장
- EC2 인스턴스를 매분 재시작하여 공용 IP가 재시작될 때마다 교체되도록 함. 기존 서브도메인 IP 목록과 일치시키면 작동하는 서브도메인 탈취 POC가 확보됨.
- 서브도메인을 탈취하는 즉시 이메일로 알림
인용
이 소프트웨어를 연구 논문, 기사 등에서 사용하는 경우 인용해 주십시오.
@software{Agrawal_Taken_AWS_Subdomain_2020,
author = {Agrawal, Vaibhav},
month = oct,
title = {{Taken: AWS Subdomain TakeOver at Scale}},
url = {https://github.com/In3tinct/Taken},
version = {1.0},
year = {2020}
}
사전 요구 사항
- AWS 계정
- Linux 및 Bash 스크립트에 대한 지식
사용된 기술/프레임워크
제작에 사용된 도구
기능
- 서브도메인을 수집하고 역방향 조회를 수행하여 AWS IP만 대상으로 지정
- EC2 인스턴스를 재시작하여 IP를 교체하고 목록의 IP 중 하나와 일치할 때까지 반복
- 일치 시 해당 IP/호스트가 허용 목록 파일에 추가되어 다시 교체되지 않으며 이메일 알림 전송
상세 사용 단계
- t2.medium 인스턴스 1개(공격 머신) 생성 – 연중무휴 무료.
- t3a.nano 인스턴스 유형으로 5~10개 인스턴스 생성 (가장 저렴함, 숫자가 많을수록 성공 확률은 높지만 비용 증가, 10대 기준 약 $60/월). 하나 이상의 리전에서 생성하며 5분 소요, SG 그룹을 본인의 공용 IP에만 열어둠.
- 인스턴스를 중지/시작하기 위한 AWS API 키 생성.
- 공격 머신에 SSH 접속.
- 이메일 알림 유틸리티 SSMTP 설치.
https://www.digitalocean.com/community/questions/how-to-send-emails-from-a-bash-script-using-ssmtp
- 서브도메인 수집을 위해 subfinder 및 sublist3r.py 도구 설치 (또는 다른 도구를 사용할 수 있으나, 서브도메인 수집 스크립트에 추가해야 함).
다음 단계에 따라 설정:
https://github.com/aboul3la/Sublist3r
https://github.com/projectdiscovery/subfinder
- Taken 저장소를 클론하고 screen 세션을 열어 서브도메인 수집 스크립트 실행.
screen 사용법: https://linuxize.com/post/how-to-use-linux-screen/
- 대상으로 삼을 모든 도메인이 포함된 텍스트 파일을 생성하고, 동일 디렉토리에 "alldomains"로 저장한 후 서브도메인 수집 스크립트 실행. 이 스크립트는 subfinder와 sublist3r.py를 사용하며, 각 줄에 "subdomain:IP" 형식으로 모든 서브도메인 목록을 생성합니다. 이 목록은 나중에 일치 및 알림에 사용됩니다.
- 다른 screen 세션을 열고 해당 세션에서 AWS 자격 증명을 내보냅니다.
AWS 키 내보내기.
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE AWS 계정의 액세스 키입니다.
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY AWS 계정의 비밀 액세스 키입니다.
다른 screen 세션에서 탈취 스크립트를 실행합니다. 각 리전에 대해 다른 screen 세션에서 실행할 수도 있습니다 (아래 스크린샷 참조).
Reasoning - AWS의 각 리전은 서로 다른 IP 서브넷과 연결되어 있습니다. 미국에 위치한 회사를 대상으로 할 경우, 대부분 미국 리전에서 운영될 가능성이 높지만 아일랜드, 프랑크푸르트 등 다른 리전에도 자산이 있을 수 있습니다. 따라서 10개의 자산을 한 리전에 모두 배치하지 말고, 회사 본사가 위치한 리전에 5개, 다른 리전에 5개를 배치하는 것이 좋습니다.
Screen session example-
Email Notification -

Took over a subdomain what next - 해당 호스트에 SSH로 접속하여 간단한 HTML 파일을 만들고 Python 서버를 시작하면 실행 중인 POC가 완성됩니다. (다음 릴리스에서는 이 과정도 자동화할 계획입니다.)
대량 실행
HackerOne 및 Bugcrowd의 모든 공개 프로그램과 Forbes/SaaS 상위 500개 기업을 스크래핑하여 서브도메인을 수집하고 탈취를 시작했습니다. 24시간 이내에 3개의 서브도메인을 탈취할 수 있었습니다. 총 3개의 다른 리전에서 10개의 인스턴스를 실행했습니다. 성공률은 실행 중인 인스턴스 수에 크게 의존합니다. 스크립트를 사용하면 24시간 동안 약 1440개의 IP를 변경할 수 있으며, 10개의 인스턴스로는 24시간 동안 약 14400개의 IP를 변경할 수 있습니다.
참고 자료
서브도메인 수집에 사용된 도구:
https://github.com/projectdiscovery/subfinder
https://github.com/aboul3la/Sublist3r
기여
향후 확장
- 동일한 스크립트를 사용하여 EC2 인스턴스 생성.
- AWS Beanstalk을 사용한 HTTP 서비스 자동 배포 추가.
라이선스
GNUV3 © [In3tinct]