Subdomain Takeover

Introduction

Subdomain Takeover는 Subdomain에 매핑된 서버가 제거 또는 삭제됬을 떄 공격자가 해당 IP, 설정 등을 점유하여 인수할 수 있는 공격 방법입니다. 대표적으로 S3, Github Page, Heroku 등의 서비스를 사용할 때 자주 발생합니다.

예를들면 아래와 같습니다.

  • takeme.target.com => target1144.github.io
    • 위와 같이 takeme 도메인이 target1144의 Github page를 가리킴
    • target1144 계정이 삭제된 상태
    • 현재 해당 도메인은 Github page의 소유주가 없기 때문에 404를 나타냄
  • 이 때 공격자가 target1144란 이름의 계정을 새로 생성하여 Github page를 만들게 되면
  • takeme.target.com의 도메인을 사용할 수 있게 됩니다.

Offensive techniques

Detect

Subdomain 서비스에 접근했을 때 Response 내 노출된 데이터를 가지고 어떤 환경에서 구동되는지 추측해야합니다. 보통 연결된 서버가 없거나 계정이 삭제된 경우 각 서비스에서 특정한 메시지들을 보여주고 있고 이를 기반으로 쉽게 식별할 수 있습니다.

예를들어 Github page에서 매핑된 repository가 없는 경우 아래와 같은 메시지가 발생합니다.

There isn't a GitHub Pages site here.

각 서비스에서 대한 정보들은 Can I take over XYZ에서 자세히 확인하실 수 있으며 Subdomain Enum 도구인 Amass, Subfinder, Findomain 등의 도구와 Takeover 체크 도구인 SubOver, Subjack 등의 도구를 조합하여 쉽게 식별할 수 있습니다.

Find Subdomain Takeover with Amass + SubJack

Exploitation

취약한 도메인을 찾았다면 연결된 서비스 등을 통해 해당 도메인을 인수하여 증명할 수 있습니다. 예를들어 S3 Bucket 이름으로 도메인이 매핑되어 있지만 S3 Bucket이 연결되어 있지 않다면 해당 이름으로 Bucket을 생성하여 도메인을 인수할 수 있습니다.

서비스 별 인수 방법은 직접 해당 서비스를 사용하면서 찾아야합니다. 정리하기엔 방대한 양이고, 서비스에 따라서 정책이나 방법등이 변경될 수 있어서 발견 시 찾아보는게 가장 정확합니다.

Defensive techniques

대응 방안은 간단합니다. 사용하지 않는 도메인은 제거하는 것이 좋고, 주기적으로 스캔 등을 돌려 발견되는 도메인은 인수하지 못하도록 선점하거나 도메인을 제거하여 방어할 수 있습니다.

관심이 최고의 대응방안입니다 😌

Tools

Articles

References