개요

기업은 고객에게 서비스를 제공하거나 회사를 알리기 위해 인터넷 홈페이지를 운영하는데 대부분의 기업에서는 고유의 최상위 도메인과 서브도메인을 조합하여 다수의 홈페이지 주소를 관리한다. 이 글에서는 블랙박스 모의해킹에서 서브 도메인 정보를 이용해 공개 서비스를 파악하는 방법을 소개한다. 

 

도메인이란?

도메인은 인터넷 상에서 식별되는 웹사이트나 네트워크의 주소이다.

도메인의 구조는 오른쪽부터 최상위 도메인이 위치하고, 왼쪽으로 갈수록 하위 도메인이 추가된다.

일반적으로 Second-level을 도메인이라고 하고, sub를 서브 도메인으로 부른다.

 

도메인 정보 수집

블랙박스 모의해킹에서 특정 기업의 도메인 정보를 수집할 때, 검색엔진을 통해 수동으로 도메인 정보를 수집할 수 있다. - (광범위) 검색 엔진에서 회사명으로 검색하여 나오는 모든 도메인 정보 수집 - (좁은범위) 회사의 메인 홈페이지 내 사이트링크, 패밀리사이트, 연계사이트 등 도메인 정보 수집

 

서브 도메인 정보 수집

타겟의 도메인 정보를 수집했다면, 각 도메인별 하위 도메인을 검색하여 공개 서비스 목록을 수집해야 한다.도메인을 활용해 서브 도메인을 확인하는 일반적인 방법은 다음과 같다.

 

1. DNS 쿼리 조회

 - 도메인 검색 도구는 DNS(Domain Name System)를 사용하여 도메인과 관련된 정보를 가져온다. DNS는 도메인 이름을 IP 주소로 해석하는 역할을 한다. 도구는 DNS 쿼리를 수행하여 도메인에 연결된 IP 주소와 함께 도메인의 서브도메인을 확인한다.

 

2. 서브도메인 인증서 검색

 - 도메인의 서브도메인에 대한 인증서 정보를 검색하는 방법입니다. 서브도메인이 자체적으로 SSL/TLS 인증서를 보유하고 있다면, 해당 인증서 정보를 가져올 수 있습니다. 이를 통해 서브도메인의 존재 여부와 인증서의 유효성을 확인할 수 있습니다.

3. CNAME 레코드

 - CNAME 레코드는 도메인의 별칭(alias)을 지정하는 레코드입니다. 서브도메인을 찾는 데에 사용될 수 있습니다. CNAME 레코드를 확인하여 도메인과 연결된 다른 도메인의 정보를 파악하고, 해당 도메인에 대한 추가 서브도메인을 탐색할 수 있습니다.

트포스

 

 4. 서브도메인 브루트포스

 - 서브도메인을 브루트포스(brute force) 방식으로 검색한다. 이는 서브도메인 이름에 대한 가능한 조합을 생성하고, 해당 도메인의 DNS 서버에 질의하여 존재 여부를 확인하는 과정을 반복한다. 예를 들어, "www", "mail", "blog" 등의 일반적인 서브도메인 이름을 시도한다.

5. WHOIS 조회

 - 도구는 WHOIS 데이터베이스를 사용하여 도메인과 관련된 정보를 수집할 수도 있다. WHOIS는 도메인 등록 정보를 관리하고, 도메인 소유자, 등록일, 만료일 등의 정보를 제공합니다. 도구는 도메인의 WHOIS 레코드를 조회하여 추가 정보를 수집할 수 있다.

6, 외부 데이터 소스

 - 도구는 외부 데이터 소스와 연결하여 도메인과 관련된 추가 정보를 가져올 수도 있다. 예를 들어, 인터넷 상에서 유출된 데이터베이스, 서브도메인 정보가 공유되는 포럼 또는 GitHub 저장소 등을 활용할 수 있다.

 

서브 도메인 정보 수집 도구 소개

다양한 오픈소스 도구들이 공개되어있지만 가장 많이 사용되는 도구 5가지를 선별하여 그 특징을 소개한다.

 

1, Sublist3r
 - Sublist3r는 주로 오픈 소스 인텔리전스(OSINT) 도구인 sublist3r.py를 기반으로 합니다.
 - 도메인의 서브도메인을 식별하기 위해 Google, Yahoo, Bing 등의 검색 엔진을 사용합니다.
 - 검색 결과에서 도메인과 관련된 URL을 추출하고, 이를 서브도메인으로 간주하여 보고합니다.

 ※ 해당 도구가 수집하는 정보 중 Virustotal 연계 과정에 오류가 있어 수정하기 귀찮은 분들께는 패스를 추천한다.

https://github.com/aboul3la/Sublist3r

 

GitHub - aboul3la/Sublist3r: Fast subdomains enumeration tool for penetration testers

Fast subdomains enumeration tool for penetration testers - GitHub - aboul3la/Sublist3r: Fast subdomains enumeration tool for penetration testers

github.com

 

2. Subfinder
 - Subfinder는 여러 가지 소스를 활용하여 서브도메인을 탐색합니다.
 - 일반적으로 서브도메인 레코드 검색, 악성 URL 탐지 데이터베이스, 인텔리전스 제공 업체 등을 사용합니다.
 - DNS 레코드 검색, SSL/TLS 인증서 탐색, 인텔리전스 데이터 검색 등을 통해 서브도메인을 발견합니다.

https://github.com/projectdiscovery/subfinder

 

GitHub - projectdiscovery/subfinder: Fast passive subdomain enumeration tool.

Fast passive subdomain enumeration tool. Contribute to projectdiscovery/subfinder development by creating an account on GitHub.

github.com

 

3. Amass
 - Amass는 대규모 서브도메인 탐색을 위한 자동화 도구입니다.
 - 여러 DNS 물리 서버 및 레코드 검색 기술을 사용하여 서브도메인을 탐색합니다.
 - DNS 쿼리, AXFR(Zone Transfer), CNAME 레코드 탐색 등을 통해 서브도메인을 수집합니다.

https://github.com/owasp-amass/amass

 

GitHub - owasp-amass/amass: In-depth attack surface mapping and asset discovery

In-depth attack surface mapping and asset discovery - GitHub - owasp-amass/amass: In-depth attack surface mapping and asset discovery

github.com

 

4. Assetfinder
 - Assetfinder는 여러 타사 서비스를 활용하여 서브도메인을 식별합니다.
 - 주로 DNS 쿼리, WHOIS 레코드, SSL/TLS 인증서 정보 등을 활용하여 서브도메인을 수집합니다.
 - 주어진 도메인과 연결된 서브도메인을 찾아내고 보고합니다.

https://github.com/tomnomnom/assetfinder

 

GitHub - tomnomnom/assetfinder: Find domains and subdomains related to a given domain

Find domains and subdomains related to a given domain - GitHub - tomnomnom/assetfinder: Find domains and subdomains related to a given domain

github.com

 

5. Findomain
 - Findomain은 서브도메인을 식별하기 위해 대규모 DNS 쿼리를 수행하는 도구입니다.
 - 다양한 DNS 서버에 대한 병렬 쿼리를 사용하여 서브도메인을 발견합니다.
 - WHOIS 레코드, DNS 쿼리, CNAME 레코드 등을 통해 서브도메인을 수집합니다.

 ※ 해당 도구는 패키지 설치가 지원되지 않기 때문에 수동 설치가 귀찮은 분들께는 패스를 추천한다.

https://github.com/Findomain/Findomain

 

GitHub - Findomain/Findomain: The fastest and complete solution for domain recognition. Supports screenshoting, port scan, HTTP

The fastest and complete solution for domain recognition. Supports screenshoting, port scan, HTTP check, data import from other tools, subdomain monitoring, alerts via Discord, Slack and Telegram, ...

github.com

 

나만의 서브 도메인 정보 수집 도구

각 도구들의 원리를 파악해서 내가 원하는 기능들만 뽑아다가 커스텀할 수도 있지만 필자는 귀찮으므로 위에서 소개한 도구(Subfinder, Amass, Assetfinder)를 짬뽕시켜서 무적의 서브도메인 수집 도구를 만들어보자.

 

먼저 Kali-Linux에 해당 도구들을 설치하자.

apt-get install subfinder amass assetfinder -y

 

설치한 세 개의 도구를 이용해 각각 서브도메인 정보를 수집하고, 도메인 목록을 하나로 묶어서 출력하는 도구를 만든다.

#!/bin/bash

DOMAIN="$1"
OUTPUT_FILE="domains"

subfinder -d "$DOMAIN" >> "$OUTPUT_FILE"
amass enum -norecursive -noalts -d "$DOMAIN" >> "$OUTPUT_FILE"
assetfinder -subs-only "$DOMAIN" >> "$OUTPUT_FILE"
sort -u -o "$OUTPUT_FILE" "$OUTPUT_FILE"

 

주어진 스크립트는 다음과 같은 작업을 수행한다:

  1. 첫 번째 줄에서는 Bash 셸을 사용하여 스크립트를 실행합니다.
  2. 두 번째 줄에서는 스크립트의 첫 번째 실행 인자를 DOMAIN 변수에 할당합니다. 이 변수는 대상 도메인을 저장하는데 사용됩니다.
  3. 세 번째 줄에서는 출력 파일의 이름을 "domains"로 설정합니다. 이 파일은 서브도메인 결과가 저장되는 곳입니다.
  4. 네 번째 줄에서는 subfinder 명령어를 사용하여 대상 도메인의 서브도메인을 찾습니다. -d 옵션은 대상 도메인을 지정하고, >> 연산자를 사용하여 결과를 출력 파일에 추가합니다.
  5. 다섯 번째 줄에서는 amass enum 명령어를 사용하여 대상 도메인의 서브도메인을 찾습니다. -norecursive와 -noalts 옵션은 재귀적 탐색 및 대체 도메인을 비활성화합니다. -d 옵션을 사용하여 대상 도메인을 지정하고, >> 연산자를 사용하여 결과를 출력 파일에 추가합니다.
  6. 여섯 번째 줄에서는 assetfinder 명령어를 사용하여 대상 도메인의 서브도메인을 찾습니다. -subs-only 옵션은 서브도메인만 반환하도록 지정합니다. >> 연산자를 사용하여 결과를 출력 파일에 추가합니다.
  7. 일곱 번째 줄에서는 sort 명령어를 사용하여 출력 파일을 정렬합니다. -u 옵션은 중복된 항목을 제거하도록 지정합니다. -o 옵션을 사용하여 정렬된 결과를 출력 파일에 다시 저장합니다.

따라서, 이 스크립트를 실행하면 대상 도메인의 서브도메인이 찾아진 후 정렬된 상태로 "domains" 파일에 저장됩니다.

복사했습니다!