실제 피싱 메일 분석부터 Open Redirect 원리, Gmail을 이용한 리디렉션 URL 생성 실험까지

security

13 분 읽기

[보안] Google 리디렉션을 악용한 피싱 공격 분석과 방어 방법 탐구

주의

이 포스팅은 피싱 메일에서 활용한 기술의 원리를 분석하고, 이에 대해 예방법을 알아보는 목적으로 작성하였습니다. 기술을 악용하여 피해를 끼치거나, 위험을 감수하고 링크를 클릭하는 등의 행동으로 불이익을 받지 않도록 주의하시기 바랍니다.

핵심 요약 (Key Points)

  • Google의 Redirection URL을 이용해 사용자를 피싱 사이트로 유도하는 공격이 발생하고 있다.
  • 이 공격은 Google이라는 신뢰할 수 있는 도메인을 통해 심리적 경계를 낮추고, 실제 목적지를 감춘다.
  • Google Redirection URL은 경우에 따라 경고 없이 바로 외부 사이트로 이동할 위험성을 가지고 있다.
  • 따라서 신뢰할 수 있는 도메인이라는 이유만으로 링크의 안전성을 판단하면 안된다.

Intro

얼마 전, 회사 이메일로 한 통의 피싱 메일을 받았다. 메일의 내용은 계정 비밀번호가 만료되었으니, 제공된 링크에 접속해 비밀번호 유지를 위한 인증 절차를 진행하라는 것이었다.

처음에는 흔한 피싱 메일이라고 생각해 그냥 넘겼다. 그런데 링크를 실수로 클릭한 사람에게 별다른 경고 없이 로그인 페이지로 바로 이동했다는 이야기를 들었다.

궁금증이 생겨 메일에 포함된 링크를 살펴보니, Google 도메인을 경유해 외부 사이트로 리디렉션되는 URL이었다. Google과 같이 신뢰도 높은 서비스의 도메인이 어떻게 피싱에 활용될 수 있는지, 그리고 왜 별도의 경고가 없었는지 등이 궁금해졌다.

이번 포스팅에서는 실제로 수신한 피싱 메일의 URL을 분석하고, Google의 리디렉션 기능과 이를 악용한 피싱 기법에 대해 알아보려 한다. 몇 가지 실험을 통해 리디렉션 동작을 살펴보고, 이러한 공격에 대응하는 방법까지 정리해보고자 한다.


1. 피싱 메일 살펴보기

1.1. 메일 내용과 발신자

우선 확인한 것은 피싱 메일의 내용과 발신자였다. 메일의 내용은 앞서 살펴본대로 링크에 접속해 비밀번호를 인증하라는 것이었다. 그리고 메일은 Microsoft 365에서 발송한 것처럼 보이게 꾸며져 있었다.

하지만 보자마자 발신자에서 이상함을 확인할 수 있다. 이메일 주소가 상당히 길었으며, 이메일 도메인 역시 Microsoft와 무관한 도메인이었다. 해당 도메인을 조사해보니, 사우디아라비아 소재의 회사 도메인으로 추정되며, 도메인이 가리키는 IP 주소는 인도에 위치한 AWS 데이터센터인 것으로 확인되었다.

이러한 정보들만으로 발신자가 누구인제, 어디에 있는지는 알 수 없다. 하지만 확실한 건 Microsoft 365와는 무관한 곳이라는 점에서 피싱 메일이라고 확실하게 추정된다.

1.2. 피싱 링크

이번 피싱 링크에서 가장 핵심적이고, 가장 재밌는 부분이 바로 피싱 링크이다. 우선 링크는 아래와 같이 생겼다.

1
https://images.google.ki/url?q=https%3A%2F%2Fjyraxxxxxx.com%2Fusers%2F&sa=D&sntz=1&usg=xxxxxx#?nE=xxxxxxxxx

보안상 일부 정보는 가렸다.

URL을 살펴보면 images.google.ki라는 Google 도메인으로 시작하지만, 그 뒤에 다른 외부 사이트의 주소가 포함되어 있다.

처음에는 이 URL 구조를 보고, 이전에 공부했던 SSRF(Server-Side Request Forgery)와 비슷한 구조처럼 보였다. 하지만 링크 구성과 동작들을 차차 뜯어보면서, 이는 SSRF가 아닌, Google의 리디렉션 기능을 이용해 사용자를 피싱 사이트로 이동시키려 하는 것임을 알게 되었다.

그렇다면 이 URL은 어떤 구조로 이루어져 있으며, 각각의 구성 요소는 어떤 역할을 하는 것일까? 하나씩 살펴보도록 하자.


2. 피싱 링크 분석

2.1. google.ki 도메인

피싱 링크에서 가장 먼저 의심되었던 부분은 google.k라는 도메인이었다. google이라는 이름은 익숙하지만, .ki라는 도메인은 생소하게 다가왔고, 혹시나 Google을 사칭하기 위해 만들어진 가짜 도메인은 아닐까 의심이 되었다.

그래서 조사를 해보았다. 먼저, nslookup 명령어를 통해 해당 도메인의 IP 주소를 조회했다.

1
nslookup google.ki
1
2
3
142.251.118.105
142.251.118.103
...

조회된 IP들을 조회해본 결과, 모두 Google 소유 도메인으로 확인이 되었다.

추가적으로 의심되었던 .ki 도메인은 태평양의 섬나라인 키리바시(Kiribati)에 할당된 국가 코드 최상위 도메인으로 확인되었다.

즉, 생소한 국가 도메인을 사용하고 있었지만, Google을 사칭한 도메인은 아니었다. 그렇다면 어떻게 실제 Google 도메인으로 시작하는 링크로 피싱 사이트에 리디렉션 되게 한 걸까?

여담 : 키리바시는 날짜변경선 바로 서쪽에 있는 나라로, 세계에서 가장 이른 시간대를 가진 나라라고 한다.

2.2 URL 구조와 파라미터

다음으로는 URL 전체 구조를 확인해보자. URL을 살펴보면 google.ki 뒤에 /url?이라는 경로와 여러 매개변수들이 있는 것을 확인할 수 있다.

1
.../url?q=https%3A%2F%2Fjyraxxxxxx.com%2Fusers%2F&sa=D&sntz=1&usg=xxxxxx#?nE=xxxxxxxxx

먼저 이 URL을 읽을 수 있도록 디코딩해보면 아래와 같다.

1
.../url?q=https://jyraxxxxxx.com/users/&sa=D&sntz=1&usg=xxxxxx#?nE=xxxxxx

각 구성 요소를 표로 정리해보면 다음과 같다.

구성 요소 설명
images.google.ki 최초 접속하는 Google 도메인
/url Google의 리디렉션 처리 경로
q= 리디렉션할 목적지 URL
sa=D Google 리디렉션에 사용되는 매개변수
sntz=1 Google 리디렉션에 사용되는 매개변수
usg= Google 리디렉션 URL에 포함된 토큰(으로 추정됨)
#?nE= URL Fragment에 포함된 추가 정보

이 중 q=에 지정된 주소가 바로 공격자가 접속을 유도하려는 목적지 주소로 추정된다. 즉, 링크는 Google 도메인으로 시작하지만, 최종적으로는 https://jyraxxxxxx.com/users/에 접속하도록 구성된 것이다.

그리고 URL 마지막에 있는 #?nE= 부분도 재밌었다. 해당 파라미터의 값을 Base64로 디코딩해보니, 내 이메일 주소가 나온 것이다.

URL 분석 결과를 정리해보면 다음과 같다.

  • 피싱 링크는 Google의 리디렉션 기능을 통해 피싱 사이트로 이동하도록 구성됨
  • 목적지는 https://jyraxxxxxx.com/users/라는 점
  • 피싱 링크에 수신자의 이메일 주소가 포함되어있다는 점

자 이제 실제 목적지(q= 뒤의 주소)를 분석해보자.

2.3. 실제 목적지 분석

앞서 분석한 URL에서 알게 된 실제 목적지는 다음과 같다.

1
https://jyraxxxxxx.com/users/

해당 도메인의 정보를 조회해보니, 미국에 소재한 웹 호스팅 업체와 관련된 IP 주소가 확인되었다.

따라서 이것만으로는 공격자가 누구인지, 그리고 어디에 소재해있는지는 알 수 없다고 판단했다. 웹 호스팅 서비스이기 때문에, 실제 서버의 위치와 서비스 운영자 위치가 다를 수 있고, 공격자가 직접 운영하는 서버인지, 제3자의 자원을 탈취한 것인지도 알기 힘들다고 판단했다.

또한 공격자가 발송한 이메일은 영어 + 스페인어/포르투갈어로 추정되었으며, 이메일 계정이 속한 도메인은 인도의 데이터센터에서 서비스되고 있었다. 결론적으로, 공격자를 특정하기는 어렵다고 판단했다.

그렇다면 공격자는 왜 굳이 Google 도메인을 거쳐 외부 사이트로 이동하도록 만들었을까? 이를 이해하기 위해 먼저 Open Redirect의 개념을 살펴보도록 하자.


3. Open Redirect

3.1. Open Redirect의 개념

앞서 살펴봤듯, 피싱 링크는 Google 도메인을 거쳐 외부 사이트로 이동하도록 구성되어 있었다. 이러한 웹 보안 취약점이 바로 Open Redirect(오픈 리디렉션)이다.

이는 웹사이트가 외부에서 전달받은 URL을 충분히 검증하지 않고, 사용자를 해당 주소로 리디렉션할 수 있도록 허용하는 취약점을 의미한다.

일반적으로 리디렉션은 사용자를 다른 URL로 이동시키는 정상적인 기능이나, 이동할 목적지를 외부에서 임의로 지정할 수 있다는 점에서 공격에 사용된다. 따라서 리디렉션 링크에 대한 검증/제한이 없는 경우 공격자가 이를 악용할 수 있다.

이러한 Open Redirection 악용 사례는 꽤 오래 전부터 있었으며, 2009년 Google의 공식 블로그 글에서 확인할 수 있듯, 리디렉션 URL이 피싱이나 악성 사이트 유도에 악용될 수 있다는 점도 알려져있다.

이러한 Open Redirection은 피싱 공격에서 다음 두 가지 효과를 지닐 수 있다.

  • 신뢰도 높은 서비스의 리디렉션 기능을 이용해 사용자들의 경계심을 낮춤
  • 실제 이동할 최종 목적지가 숨겨짐

3.2 Open Redirect의 작동 원리

그렇다면 Open Redirect는 구체적으로 어떤 원리로 동작할까? 간단한 예시를 통해 살펴보자.

Open Redirect의 작동 원리는 간단하다. 웹사이트가 외부에서 전달받은 URL을 목적지로 사용하여, 사용자를 해당 주소로 이동시키는 것이다. 예를 들어 다음과 같은 URL이 있다고 가정해보자.

1
https://example.com/redirect?url=https://destination.com

이 URL에는 두 개의 주소가 포함되어 있다.

구분 URL 역할
리디렉션 처리 주소 https://example.com/redirect 사용자가 최초로 접속하는 주소
실제 목적지 https://destination.com 리디렉션을 통해 최종적으로 이동하는 주소

사용자가 위 링크를 클릭하면 브라우저는 먼저 example.com에 요청을 보내고, 이후 요청을 받은 서버가 url 매개변수에 지정된 목적지를 확인하고 리디렉션 응답을 반환하면, 브라우저는 해당 주소로 이동하게 되는 것이다.

sequenceDiagram
    autonumber
    actor U as 사용자
    participant B as 웹 브라우저
    participant R as 리디렉션 서버
    participant D as 목적지 서버

    U->>B: 링크 클릭
    B->>R: GET /redirect?url=https://destination.com
    R-->>B: HTTP 302
Location: https://destination.com B->>D: GET / D-->>B: 웹페이지 응답 B-->>U: 목적지 웹페이지 표시

3.3 Open Redirect를 이용한 피싱 시나리오

여기까지 살펴봤다면, 대략적으로 공격자가 어떻게 Open Redirect를 이용해 피싱을 하는지 감이 잡힐 것이다. 정상적인 웹사이트인척, 공격자가 의도한 목적지로 유도하는것이다.

그렇다면 이런 피싱의 목적은 무엇일까? CWE와 OWASP를 참고해 Open Redirect 피싱으로 인해 발생할 수 있는 영향을 정리해보면 다음과 같다.

CWE와 OWASP 문서를 개인적으로 풀어서 해석한 것이므로 오류가 있을 수 있습니다.

(1) 악성코드 다운로드

  • 악성코드가 포함된 파일을 다운로드 받는 URL로 리디렉션 될 경우이다.
  • 이 경우 악성코드의 작동방식과 의도에 따라 굉장히 넓은 범위의 추가 영향이 있을 수 있다.

(2) 민감정보 탈취

  • 계정 정보, 비밀번호, 인증키, API 키, 개인 식별정보 등을 사용자가 입력하게 하여 이를 탈취할 수도 있다.
  • 또한 제출버튼을 누르지 않더라도 키로깅 등을 통해 타이핑한 글자를 수집할 수도 있으니 주의

(3) 데이터 탈취

  • 가치있는 데이터를 사용자가 업로드하도록 유도하여 데이터를 탈취할 수도 있음

(4) URL 검증 회피를 통한 SSRF

  • 서비스들은 일반적으로 SSRF 방어를 위해, 요청 가능한 URL 허용 목록(Allowlist)를 제한하곤 한다.
  • 하지만 최초(앞쪽) 요청 URL만 검증하고, 리디렉션 목적지는 검증하지 않는면, SSRF가 이뤄질 수 있다.
  • 예를 들어 서버가 trusted-site.com 에 대한 요청만 허용하고, 리디렉션을 허용한다고 가정해보자
  • 이 때 공격자는 아래와 같은 URL을 서버에 전달할 수 있다.
1
https://trusted-site.com/go?url=http://internal-service/credentials/
  • 최초 URL 도메인이 trusted-site.com이므로 서버는 요청을 허용한다.
  • 하지만 해당 사이트에서 internal-service로 리디렉션하고, 서버가 이를 검증 없이 따라간다면 외부의 접근이 제한된 내부 리소스를 가져올 수도 있는 것이다.
  • 다이어그램으로 표현해보면 다음과 같다.
sequenceDiagram
    autonumber
    actor A as 공격자
    participant S as 취약한 서버
    participant T as 신뢰된 사이트
    participant I as 내부 리소스

    A->>S: URL 전달
https://trusted-site.com/go?url=내부주소 S->>S: 최초 URL 검증
trusted-site.com → 허용 S->>T: GET /go?url=내부주소 T-->>S: HTTP 302
Location: 내부주소 Note over S: 리디렉션 목적지 재검증 없음 S->>I: GET 내부주소 I-->>S: 내부 리소스 응답 S-->>A: 응답 내용 반환

4. Open Redirect 실험

앞서 Open Redirect에 대해 살펴봤다. 이번에는 피싱 메일의 Google 리디렉션 URL을 가지고 이것저것 실험해보려 한다.

4.1. 리디렉션 목적지 변경 실험

먼저, 피싱 메일에 포함된 URL에서, 실제 목적지를 가리키는 q= 매개변수를 변경해봤다.

  • 기존 피싱 링크의 구조
1
https://images.google.ki/url?q=https%3A%2F%2Fjyraxxxxxx.com%2Fusers%2F&sa=D&sntz=1&usg=xxxxxx
  • 변경한 피싱 링크의 구조
1
https://images.google.ki/url?q=https://github.com&sa=D&sntz=1

이 URL을 웹 브라우저에 입력하면 Google을 경유하여 GitHub로 이동할 것으로 예상했으나..!

4.2. 리디렉션 경고

실험 결과, GitHub로 바로 이동하지 않고 Google의 리디렉션 경고 페이지가 나타났다.

경고 페이지에서는 외부 사이트로 이동한다는 사실을 안내하고, 사용자가 직접 링크를 클릭하도록 안내하고 있다.

추가로 기존 피싱 링크의 다른 매개변수들은 그대로 유지하고, q=에 포함된 목적지 URL만 변경해보았지만, 이 경우에도 마찬가지로 리디렉션 경고가 나타났다. 즉, Google의 리디렉션 URL에서 목적지만 변경한다고 해서 바로 외부 사이트로 이동하는 것은 아니었다.

여기에서 이상한 지점이 있었다. 분명 링크를 클릭한 사람은 바로 리디렉션되었다고 했다. 왜 피싱 링크에서는 이러한 경고가 나타나지 않은 것일까?

이를 알아보기 위해 먼저 Google Redirection 기능부터 분석해보도록 하자.


5. Google Redirection 분석

5.1. Google 리디렉션 URL의 파라미터

앞선 실험에서 Google의 리디렉션 URL은 목적지를 변경할 경우, 리디렉션에 대한 경고 페이지로 이동한다는 점을 확인했다. 하지만 피싱 링크는 로그인 페이지로 바로 리디렉션이 되었다(고 전해들었다.).

이러한 차이는 어디에서 발생한 걸까? 이를 알아보기 위해 피싱 링크에서 사용된 Google Redirection 기능을 살펴보자.

1
https://images.google.ki/url?q=https%3A%2F%2Fjyraxxxxxx.com%2Fusers%2F&sa=D&sntz=1&usg=xxxxxx#?nE=xxxxxxxxx

Google의 리디렉션 URL에는 목적지를 지정하는 q 외에도 sa, sntz, usg 등의 매개변수가 존재한다. 이러한 매개변수들은 정확한 내부 처리 방식이 공식적으로 공개되어 있는 것은 아닌 것으로 보인다.

관련된 보안 분석 자료인 Mimecast의 Google Redirect Abuse Powers Phishing and Spam Delivery를 참고하여 알아본 주요 매개변수를 정리하면 다음과 같다.

매개변수 역할 및 특징
q= 리디렉션할 목적지 URL 지정
sa=D 직접 이동 형태의 Google 리디렉션
sa=t 검색 클릭 방식
sntz=1 시간대로 추정됨. sa=D와 함께 사용되는 사례가 있음
usg= Google이 생성한 리디렉션 URL에 포함되는 토큰. 목적지 URL의 검증과 관련된 값으로 추정됨

이 중에 이번 피싱 링크에서 주목한 점은 usg 매개변수이다. 앞선 실험에서는 목적지 URL을 변경했을 때 리디렉션 경고가 발생했는데, usg가 이러한 차이를 만들었을 가능성이 있다고 추정했다.

다만 usg 값의 정체를 알 수 없기 때문에 리디렉션 경고 여부에 직접 영향을 주는지는 단정하기 어렵다. 즉, 반드시 usg 라는 파라미터에 따라 경고가 발생하는지는 결론 내릴 수 없는 것이다.

마지막으로 공격자는 어떻게 이러한 usg가 포함된 Google 리디렉션 URL을 어떻게 확보했을까 의문이 든다. 이를 알아보기 위해 Google 서비스에서 실제로 이러한 URL을 생성할 수 있는지 살펴보기로 했다.

5.2. 공격자는 리디렉션 URL을 어떻게 확보했을까?

지금까지 살펴본 내용을 정리해보면 다음과 같다.

1
2
3
- 피싱 메일에 포함된 `images.google.ki`는 실제 Google의 도메인이다.
- 피싱 링크를 클릭했을 때 별도의 경고 없이 로그인 페이지로 이동한다.
- 반면 직접 구성한 리디렉션 URL의 경우엔 리디렉션 경고가 나타났다.

이러한 사실들을 종합해보면 공격자가 임의로 리디렉션 URL을 조합한 것이 아니라, 실제로 Google 서비스에서 생성된 리디렉션 URL을 확보했을 가능성이 높다고 판단된다.

만약 Google의 특정 서비스에서 외부 URL을 등록하거나 처리하는 과정에서 usg가 포함된 리디렉션 URL을 생성한다면, 공격자는 이를 피싱 링크에 활용할 수도 있을 것이다.

인터넷상의 악의적인 활동을 모니터링하는 ISC에서 게시한 글(ISC - How Malware Campaigns Employ Google Redirects and Analytics)에 따르면, 공격자는 Gmail과 같은 구글 서비스로부터 직접 리디렉션 URL을 획득하여 사용한다고 되어있다. 이를 기만으로 Google Redirection을 이용한 Open Redirect 피싱의 공격 흐름을 전반적으로 표현해보면 아래와 같은 도식이 될 것이다.


sequenceDiagram
    autonumber
    actor A as 공격자
    participant G as Google 서비스
    actor M as 메일 수신자
    participant R as Google Redirect (/url)
    participant P as 피싱 사이트

    A->>G: 외부 URL 등록 또는 링크 생성 유도
    G-->>A: q 및 usg가 포함된 URL 생성
    Note over A,G: usg는 대상 URL과 연결된 검증 토큰으로 추정

    A->>M: Google 리디렉션 링크가 포함된 피싱 메일 발송
    M->>R: 링크 클릭 (q, usg 포함)

    R->>R: usg 및 리디렉션 조건 검증(추정)

    R-->>M: HTTP 3xx + Location: 피싱 사이트
    M->>P: 피싱 사이트 접속
    P-->>M: 피싱 페이지 응답

참고 : 위 흐름도는 추정을 기반으로 했음. Google Redirection URL에서 usg 값이 어떤 역할을 하는지, 그리고 usg 값에 대한 검증을 어떻게 하는지에 대해서는 모름

그렇다면 Google 서비스에서 실제로 usg가 포함된 리디렉션 URL을 생성할 수 있을지, 이를 확인하기 위해 ISC 의 게시글에서 확인된 Gmail을 이용한 방법을 직접 실험해보기로 했다.


6. Google Redirection URL 생성 실험

6.1. Gmail을 이용한 리디렉션 URL 생성

Gmail에서 보내기(Compose)를 클릭하고 링크를 붙여넣었다. 혹시 모르니 일반 텍스트로 된 링크와, 링크 기능을 통해 입력한 링크를 모두 포함해보았다.

도착한 메일을 확인해보면 링크가 잘 걸려있는 것을 볼 수 있다. 하지만 메일 본문에 있는 링크는 그냥 https://github.com이며, 링크 복사를 해보아도 usg가 붙은 리디렉션 링크는 찾을 수 없었다.

6.2. data-saferedirecturl 확인

ISC의 게시글을 살펴보면, HTML 보기 메뉴에서 usg가 붙은 리디렉션 링크를 찾을 수 있다고 한다. 링크를 우클릭한 후, 검사버튼을 클릭한다.

그러면 개발자 도구가 열리게 되는데, 여기에서 data-saferedirecturl 부분에 usg가 붙은 리다이렉션 링크를 확인할 수 있다.

data-saferedirecturl이라는 이름이 목적지 사이트의 안전성을 보증한다는 의미는 아니다.

6.3. 리디렉션 동작 검증 및 결과 분석

그러면 이번에는 data-saferedirecturl에서 확인한 URL을 테스트해보자. URL을 복사하여 웹 브라우저에 직접 입력해보았다.

실험 결과, 별도의 리디렉션 경고 페이지가 나타나지 않고 지정한 외부 사이트로 이동하는 것을 확인할 수 있었다.

이번 실험을 통해 Google 서비스에서 usg가 포함된 리디렉션 URL이 생성될 수 있으며, 이러한 URL을 이용하면 별도의 경고 없이 외부 사이트로 이동한다는 점을 확인했다.

공격자 또한 이러한 Google의 정상적인 리디렉션 기능을 이용해 피싱 링크 만들었을 것으로 추정된다. 물론 실험과 동일하게 Gmail을 사용했다고 단정할 수는 없으며, 경고 없이 이동한 원인이 반드시 usg 때문이라고 결론 내릴 수도 없다.

하지만 신뢰도 높은 Google 도메인을 경유하는 악의적인 피싱 링크가 쉽게 만들어질 수 있다는 점은 확인할 수 있었다.


7. 보안 및 대응 방안

지금까지 Google과 같이 신뢰도 높은 서비스의 리디렉션 기능을 악용한 피싱 방법의 원리를 추정하고 실험해보았다. 그렇다면 이러한 공격에는 어떻게 대응해야 할지, 어떻게 사용자를 보호할 수 있을지 살펴보자.

7.1. 사용자 관점

사용자 입장에서 이러한 피싱에 속지 않기 위해서 가장 중요한 것은 링크의 시작 주소가 아니라 최종 목적지를 확인하는 것이다. 그리고 Open Redirect 또한 피싱의 일종이기 때문에, 일반적인 피싱 방어 방법을 적용해야 한다.

항목 내용
URL의 도메인만으로 신뢰하지 않기 - 신뢰도 높은 도메인이라도 리디렉션을 통해 다른 사이트로 이동할 수 있음
- 따라서 URL에 포함된 url 등의 매개변수에 외부 주소가 있는지 확인
공식 사이트를 통한 접속 - 메일의 링크를 클릭하기보다, 브라우저에서 공식 사이트로 직접 접속하는게 안전
- 특히나 비밀번호, 계정, 보안 인증과 관련된 메일의 경우 주의
리디렉션 경고에 의존하지 않기 - 앞선 실험처럼 별도 경고 없이 리디렉션 될 수도 있음
- 따라서 리디렉션 경고가 없다고 해서 링크가 안전하다고 판단하면 안됨
이동한 사이트의 도메인 확인 - 만약 링크를 클릭했다면, 정보를 입력하기 전에 주소창의 도메인을 확인
- HTTPS나 자물쇠 표시만으로 신뢰성을 판단해서도 안됨
- 확실하지 않거나 이상한 도메인인 경우 바로 탈출하기

7.2. 서비스 개발 및 운영 관점

또한 서비스를 개발하거나 운영하는 입장에서도 Open Redirect에 대해 충분히 대비를 해둬야 한다. 리디렉션 자체가 결함이나 취약점이 아니기 때문에, 리디렉션 자체를 막기보다는 악용될 경로를 차단하는 것이 옳다고 한다.

Google, CWE, OWASP 에서 이미 악용 사례와 함께 대응 방법들을 제시하고 있다.

Google Search Central - Open redirect URLs: Is your site being abused
OWASP - Open Redirect
CWE - CWE-601: URL Redirection to Untrusted Site ‘Open Redirect’

대표적인 대응 방법을 정리해보면 다음과 같다.

대응 방법 설명
리디렉션 대상 제한 허용된 도메인이나 내부 경로로만 리디렉션하도록 제한
URL 검증 외부에서 전달받은 URL을 검증하고, 임의의 목적지로 이동하는 것을 방지
외부 이동 안내 외부 사이트로 이동하기 전에 사용자에게 목적지를 안내
리디렉션 경로 점검 접근 로그와 리디렉션 요청을 분석하여 악용 여부를 확인

특히, 앞서 살펴본 Open Redirect를 이용한 SSRF 방어 우회 예시와 같은 취약점을 방어하기 위해서는, 최초의 URL 도메인만 검사하는 게 아니라, 파라미터나 응답에 포함된 리디렉션 경로까지 검사하는 것이 안전할 것이다.


마무리

이렇게 해서 피싱 메일과 피싱 링크 분석부터 Open Redirect의 개념, Google 리디렉션 URL 생성 실험, 그리고 이에 대한 방어 방법까지 살펴보았다.

그냥 지나칠 수도 있었던 피싱 메일 한 통과 “그냥 리디렉션 되던데요?”라는 말에서 시작된 일이었다. 처음에는 단순한 호기심이었지만, 하나씩 파고들다 보니 이번에도 생각보다 많은 시간이 걸렸다.

이번 포스팅을 작성하면서 알게 된 것은 공격자가 반드시 가짜 도메인이나 취약한 서버만을 이용하는 것은 아니라는 점이다. Google과 같이 신뢰도가 높은 도메인과 리디렉션이라는 정상적인 기능도 공격자의 의도에 따라 피싱에 악용될 수 있다는 점이 크게 다가왔다.

Google 블로그에서도 설명하듯, 리디렉션 기능 자체가 곧 결함이나 취약점은 아니다. 따라서 사용자 입장에서는 링크를 클릭하기 전에 최종 목적지가 어디인지, 신뢰할 수 있는 사이트인지 확인하는 습관이 필요하다. 그리고 개발자 역시 자신의 서비스가 악의적인 리디렉션에 이용되지 않도록 적절한 대책을 생각해봐야 할 것이다.


Reference

mimecast - Google Redirect Abuse Powers Phishing and Spam Delivery
Google Search Central - Open redirect URLs: Is your site being abused
HAHWUL - Open Redirect
OWASP - Open Redirect
CWE - CWE-601: URL Redirection to Untrusted Site ‘Open Redirect’
Google - Technical Report Systemic Abuse of Google Sites & Signed Redirects for CTR Manipulation
OWASP - Unvalidated Redirects and Forwards Cheat Sheet
ISC - How Malware Campaigns Employ Google Redirects and Analytics
Wikipedia - ISC

// reading compass

이 글과 이어지는 경로

시리즈, 카테고리, 태그 겹침, 최신도를 점수화해 가까운 글일수록 중심에 배치합니다.

hover nodes or cards · click a node to pin
Next reads 0

    댓글 남기기