
Open Redirect 공격이란?
Open Redirect(오픈 리디렉트) 공격은 웹 애플리케이션에서 사용자의 입력값을 기반으로 특정 URL로 이동시키는 기능을 악용하여, 사용자를 공격자가 의도한 도메인으로 이동시키는 보안 취약점입니다.
이 취약점은 일반적으로 로그인 페이지, 이메일 링크, 광고 클릭 유도 페이지 등에서 발견됩니다. 예를 들어, 사용자가 “https://example.com/login?redirect=https://malicious-site.com” 와 같은 URL을 클릭하면, 정상적인 웹사이트를 거쳐 악성 사이트로 리디렉션될 수 있습니다.
이용자는 “https://example.com” 페이지로 알고 누르겠지만, 이동은 “https://malicious-site.com”로 이동하는 것이죠.
Open Redirect의 위험성
- 피싱 공격: 사용자가 신뢰하는 도메인에서 시작된 요청이므로 의심 없이 악성 웹사이트에 로그인 정보를 입력할 수 있습니다.
- 멀웨어 배포: 악성 사이트로 이동하면서 자동으로 멀웨어를 다운로드하도록 유도할 수 있습니다.
- 보안 토큰 탈취: OAuth, SSO 인증 과정에서 악용될 경우, 보안 토큰을 탈취할 가능성이 있습니다.
- 검색 엔진 최적화(SEO) 스팸: 악성 사이트가 신뢰할 수 있는 도메인의 리디렉션을 이용해 검색 엔진 순위를 조작할 수도 있습니다.
예제 코드
from flask import Flask, request, redirect
app = Flask(__name__)
@app.route('/redirect')
def open_redirect():
url = request.args.get('url')
return redirect(url) # 보안 취약점 발생 가능
if __name__ == '__main__':
app.run()
위 코드에서 url
매개변수는 사용자 입력을 그대로 사용하여 리디렉션을 수행하므로, 공격자가 조작된 URL을 전달할 경우 악성 사이트로 사용자를 이동시킬 수 있습니다.
예방책 및 해결 방법
-
허용된 도메인 목록(Whitelist) 적용
- 사용자가 이동할 수 있는 URL을 미리 정의된 목록에서만 선택하도록 제한해야 합니다.
- 예제 코드:
ALLOWED_DOMAINS = ["example.com", "secure-site.com"] @app.route('/redirect') def secure_redirect(): url = request.args.get('url') if url and any(url.startswith(f"https://{domain}") for domain in ALLOWED_DOMAINS): return redirect(url) else: return "잘못된 리디렉트 URL입니다.", 400
-
상대 경로 사용 제한
- 외부 도메인으로의 이동을 금지하고 내부 경로에서만 이동하도록 제한해야 합니다.
@app.route('/redirect') def safe_redirect(): path = request.args.get('path', '/') return redirect(f"/safe/{path}")
-
URL 검증 및 인코딩 적용
- 정규 표현식을 활용해 사용자가 입력한 URL이 정상적인지 검증해야 합니다.
import re @app.route('/redirect') def validated_redirect(): url = request.args.get('url') if url and re.match(r'^https://example\.com/.*$', url): return redirect(url) else: return "잘못된 URL입니다.", 400
-
XSS 보호 기능 강화
- Open Redirect 취약점과 함께 XSS(크로스 사이트 스크립팅) 공격을 막기 위해 HTTP 응답 헤더에
Content-Security-Policy
를 설정합니다.
Content-Security-Policy: default-src 'self';
- Open Redirect 취약점과 함께 XSS(크로스 사이트 스크립팅) 공격을 막기 위해 HTTP 응답 헤더에
-
보안 점검 도구 활용
- OWASP ZAP, Burp Suite 등의 보안 점검 도구를 사용해 Open Redirect 취약점을 사전에 탐지하고 조치합니다.
결론
Open Redirect는 사용자 신뢰를 악용해 피싱 공격, 멀웨어 배포 등 심각한 보안 위협을 초래할 수 있는 취약점입니다. 하지만 화이트리스트 적용, 상대 경로 제한, URL 검증 등의 보안 조치를 통해 충분히 예방할 수 있습니다. 웹 애플리케이션을 개발할 때 이러한 보안 대책을 고려하여 안전한 서비스를 제공하는 것이 중요합니다.
스마트 그리드(Smart Grid): 미래형 전력망의 혁신
[…] Open Redirect 공격이란? […]
[…] Open Redirect 공격이란? […]