반응형
X-Forwarded-For (XFF)는 클라이언트의 원래 IP 주소를 추적하기 위해 프록시 서버나 로드 밸런서가 추가하는 HTTP 요청 헤더입니다. 이 헤더는 클라이언트의 요청이 여러 중간 서버를 거칠 때, 원래 IP 주소와 중간 서버의 IP 주소를 기록하는 역할을 합니다.
변조 가능성
결론: X-Forwarded-For 헤더는 클라이언트 또는 중간 프록시 서버에 의해 쉽게 변조될 수 있습니다.
이유:
- 클라이언트 수준의 수정 가능:
- XFF는 표준 HTTP 헤더 중 하나로, 클라이언트(예: 웹 브라우저, cURL, Postman)에서 요청을 생성할 때 임의의 값을 추가하거나 수정할 수 있습니다.
- 예를 들어, 다음과 같은 명령으로 헤더 값을 수정 가능합니다:
curl -H "X-Forwarded-For: 1.2.3.4" https://example.com
- 프록시 서버의 설정에 따라 달라짐:
- 중간 프록시 서버나 CDN이 XFF 헤더를 생성하거나 덮어쓸 수 있습니다.
- 예를 들어, 일부 잘못 설정된 프록시 서버는 클라이언트에서 전달된 XFF 값을 신뢰하여 그대로 전달하거나, 올바르게 검증하지 않을 수 있습니다.
- 보안 취약점:
- 공격자는 XFF 헤더를 변조하여 IP 차단 우회, 익명화, 또는 서버 로깅에 잘못된 정보를 주입할 수 있습니다.
보안 대책
- 신뢰할 수 있는 프록시만 허용:
- 서버는 XFF 헤더를 신뢰하기 전에 요청이 신뢰할 수 있는 프록시(예: 로드 밸런서)에서 왔는지 확인해야 합니다.
- AWS, Cloudflare 같은 프록시는 자체적으로 XFF 값을 관리합니다.
- 헤더 검증:
- XFF 값이 올바른 형식(IP 주소)인지 확인합니다.
- 예: 정규 표현식으로 검증
- import re def is_valid_ip(ip): pattern = r'^(\d{1,3}\.){3}\d{1,3}$' return re.match(pattern, ip) is not None
- 신뢰할 수 없는 헤더 무시:
- 서버 설정에서 직접적인 클라이언트 입력을 무시하고, 로드 밸런서나 게이트웨이에서 추가한 헤더만 신뢰합니다.
- 대체 기술 사용:
- XFF 대신 Proxy Protocol 같은 신뢰할 수 있는 기술을 사용해 프록시가 원래 IP를 서버에 전달하도록 설정할 수 있습니다.
정리
X-Forwarded-For 헤더는 변조 가능하며, 이를 신뢰하려면 보안 대책을 철저히 마련해야 합니다. 신뢰할 수 있는 프록시를 통해 헤더를 생성하고 검증 로직을 서버에 구현하여 악용을 방지하는 것이 중요합니다.
반응형