카테고리 없음

X-Forwarded-For 헤더는 변조 가능한가?

idea9329 2025. 1. 22. 10:23
반응형

 

X-Forwarded-For (XFF)는 클라이언트의 원래 IP 주소를 추적하기 위해 프록시 서버나 로드 밸런서가 추가하는 HTTP 요청 헤더입니다. 이 헤더는 클라이언트의 요청이 여러 중간 서버를 거칠 때, 원래 IP 주소와 중간 서버의 IP 주소를 기록하는 역할을 합니다.

변조 가능성

결론: X-Forwarded-For 헤더는 클라이언트 또는 중간 프록시 서버에 의해 쉽게 변조될 수 있습니다.

이유:

  1. 클라이언트 수준의 수정 가능:
    • XFF는 표준 HTTP 헤더 중 하나로, 클라이언트(예: 웹 브라우저, cURL, Postman)에서 요청을 생성할 때 임의의 값을 추가하거나 수정할 수 있습니다.
    • 예를 들어, 다음과 같은 명령으로 헤더 값을 수정 가능합니다:
      curl -H "X-Forwarded-For: 1.2.3.4" https://example.com
  2. 프록시 서버의 설정에 따라 달라짐:
    • 중간 프록시 서버나 CDN이 XFF 헤더를 생성하거나 덮어쓸 수 있습니다.
    • 예를 들어, 일부 잘못 설정된 프록시 서버는 클라이언트에서 전달된 XFF 값을 신뢰하여 그대로 전달하거나, 올바르게 검증하지 않을 수 있습니다.
  3. 보안 취약점:
    • 공격자는 XFF 헤더를 변조하여 IP 차단 우회, 익명화, 또는 서버 로깅에 잘못된 정보를 주입할 수 있습니다.

보안 대책

  1. 신뢰할 수 있는 프록시만 허용:
    • 서버는 XFF 헤더를 신뢰하기 전에 요청이 신뢰할 수 있는 프록시(예: 로드 밸런서)에서 왔는지 확인해야 합니다.
    • AWS, Cloudflare 같은 프록시는 자체적으로 XFF 값을 관리합니다.
  2. 헤더 검증:
    • 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
  3. 신뢰할 수 없는 헤더 무시:
    • 서버 설정에서 직접적인 클라이언트 입력을 무시하고, 로드 밸런서나 게이트웨이에서 추가한 헤더만 신뢰합니다.
  4. 대체 기술 사용:
    • XFF 대신 Proxy Protocol 같은 신뢰할 수 있는 기술을 사용해 프록시가 원래 IP를 서버에 전달하도록 설정할 수 있습니다.

정리

X-Forwarded-For 헤더는 변조 가능하며, 이를 신뢰하려면 보안 대책을 철저히 마련해야 합니다. 신뢰할 수 있는 프록시를 통해 헤더를 생성하고 검증 로직을 서버에 구현하여 악용을 방지하는 것이 중요합니다.

반응형