DNS 조회 결과에 의존한 보안 결정

DNS 조회 결과에 의존한 보안 결정

설명

DNS 정방향 또는 역방향 조회 결과를 신뢰 경계, 접근 허용, 인증 판단에 직접 사용하면 DNS 스푸핑, 캐시 오염, 리바인딩으로 우회될 수 있습니다.

잠재적 영향

  • 공격자가 DNS 응답을 조작해 신뢰된 호스트처럼 보일 수 있습니다.
  • 역방향 DNS 이름만으로 접근이 허용될 수 있습니다.

해결 방법

  • 인증과 권한 결정에는 TLS 클라이언트 인증, 서명 토큰, 서버 측 권한 모델처럼 DNS와 독립적인 신뢰 근거를 사용합니다.
  • 네트워크 위치 검증이 필요하면 해석된 IP를 검증된 CIDR 목록과 비교하고 리다이렉트 후에도 재검증합니다.

예시

DNS 결과만으로 접근 허용

python
addr = socket.gethostbyname(host)
if addr == TRUSTED_IP:
    grant_access()

추가 네트워크 확인

python
addr = ipaddress.ip_address(socket.gethostbyname(host))
return addr in TRUSTED_NET

설명:

  • 취약한 코드: DNS 정방향 또는 역방향 조회 결과를 신뢰 경계, 접근 허용, 인증 판단에 직접 사용하면 DNS 스푸핑, 캐시 오염, 리바인딩으로 우회될 수 있습니다.
  • 네트워크 위치 확인 예시: 해석된 IP를 승인된 CIDR 목록과 비교하는 추가 검사입니다. 이 코드만으로 호출자의 신원을 증명하거나 접근을 허가해서는 안 됩니다. 실제 인증과 권한 확인은 DNS와 독립적으로 수행해야 합니다.

참조