Windows Server DNS 보안
Contoso의 IT 인프라 직원이 중요한 DNS 서버 서비스가 안전한지 확인하려고 합니다. Windows Server DNS는 DNS 서버 역할을 보호하기 위해 다음과 같은 몇 가지 옵션을 제공합니다.
- DNS 캐시 잠금
- DNS 소켓 풀
- DANE(명명된 엔터티의 DNS 기반 인증)
- RRL(응답 속도 제한)
- 알 수 없는 레코드 지원합니다.
- DNSSEC(도메인 이름 서비스 보안 확장 프로그램)
DNS 캐시 잠금
캐시 잠금은 DNS 캐시의 정보를 덮어쓸 수 있는 시기를 제어하는 데 사용할 수 있는 Windows Server 보안 기능입니다. 재귀 DNS 서버가 쿼리에 응답하면, 서버는 동일한 정보를 요청하는 다른 쿼리를 수신하는 경우 신속하게 응답할 수 있도록 결과를 캐시합니다.
DNS 서버가 캐시에 정보를 보관하는 기간은 리소스 레코드의 TTL 값에 따라 결정됩니다. 해당 리소스 레코드에 대한 업데이트된 정보가 수신되면 TTL이 만료되기 전에 캐시에 있는 정보를 덮어쓸 수 있습니다. 악의적인 사용자가 캐시의 정보를 덮어쓰는 데 성공하면, 악의적인 사용자가 네트워크 트래픽을 악의적인 사이트로 리디렉션할 수 있습니다.
캐시 잠금을 사용하는 경우 DNS 서버는 TTL 값을 유지하는 동안 캐시된 레코드를 덮어쓰지 못하도록 합니다.
캐시 잠금은 백분율 값으로 구성합니다. 예를 들어, 캐시 잠금 값이 50으로 설정된 경우 DNS 서버는 TTL 기간의 절반 동안은 캐시된 항목을 덮어쓰지 않습니다. 기본적으로 캐시 잠금 백분율 값은 100입니다. 이는 전체 TTL 기간 동안 캐시된 항목을 덮어쓰지 않는다는 뜻입니다.
관리자 권한 명령 프롬프트에서 dnscmd /Config /CacheLockingPercent <percent>
을/를 실행하여 캐시 잠금을 구성할 수 있습니다.
팁
Windows PowerShell Set-DnsServerCache –LockingPercent
cmdlet을 사용할 수도 있습니다.
DNS 소켓 풀
DNS 소켓 풀을 사용하면 DNS 서버에서 DNS 쿼리를 실행할 때 원본 포트의 무작위화를 활용할 수 있습니다. DNS 서비스가 시작되면 서버는 쿼리를 실행하는 데 사용할 수 있는 소켓 풀에서 원본 포트를 선택합니다. DNS 서버는 예측 가능한 원본 포트를 사용하는 대신 DNS 소켓 풀에서 선택한 임의의 포트 번호를 사용합니다.
DNS 소켓 풀을 사용하면 악의적인 사용자가 DNS 쿼리의 원본 포트와 무작위 트랜잭션 ID를 모두 정확하게 추측해야만 공격이 성공하기 때문에 캐시 변조 공격이 더 어려워집니다.
참고
DNS 소켓 풀은 Windows Server에서 기본적으로 사용하도록 설정되어 있습니다.
값이 0에서 10,000 사이인 경우, 해당 값이 더 클수록 DNS 스푸핑 공격에서 보호하는 능력이 더 커집니다.
참고 항목
DNS 소켓 풀의 기본 크기는 2,500입니다.
관리자 권한 명령 프롬프트에서 dnscmd /Config /SocketPoolSize <value>
을/를 실행하여 DNS 소켓 풀 크기를 구성할 수 있습니다.
DANE
DANE 프로토콜은 Windows Server DNS 서버 역할에서 사용할 수 있는 기능입니다. DANE는 TLSA(전송 계층 보안 인증) 레코드를 사용하여, 클라이언트가 도메인 이름에 대한 인증서를 제공받을 수 있는 CA(인증 기관)를 지정하는 정보를 DNS 클라이언트에게 제공할 수 있습니다. 그러면 누군가가 웹 사이트를 표적으로 하여 DNS 캐시를 손상시키고 다른 CA에서 발급한 인증서를 제공할 수 있는 중간자(man-in-the-middle) 공격을 방지할 수 있습니다.
예를 들어, 조직에서 CANorth라는 잘 알려진 인증 기관의 인증서를 사용하여 HTTPS를 사용하는 보안 웹 사이트를 www.Contoso.com
(으)로 호스트한다고 가정합니다. 누군가는 상대적으로 덜 알려진 CAEast라는 다른 인증 기관에서 www.Contoso.com
에 대한 인증서를 받을 수도 있습니다.
이 시점에서 적법하지 않은 www.Contoso.com
웹 사이트를 호스트하는 엔터티는 해당 가짜 사이트에서 www.Contoso.com
을 표적으로 하게 하여 클라이언트 또는 서버의 DNS 캐시를 손상시킬 수 있습니다. 최종 사용자는 CAEast의 인증서를 제공받으며 자신도 모르게 인증서를 승인하고 불법 사이트에 연결할 수 있습니다.
DANE를 사용하면 클라이언트가 DNS 서버에 Contoso.com
에 대한 TLSA 레코드를 요청하고 www.Contoso.com
에 대한 인증서가 CANorth에서 발급되었음을 확인합니다. 다른 CA의 인증서를 제공하는 경우 연결을 종료합니다.
RRL
RRL은 DNS 증폭 공격을 줄이는 데 도움이 될 수 있는 DNS 프로토콜의 고급 기능입니다. 증폭 공격은 공격자가 퍼블릭으로 액세스할 수 있는 오픈 DNS 서버를 사용하여 DNS 응답 트래픽을 통해 대상 시스템을 초과하는 DDoS(분산형 서비스 거부)의 한 유형입니다. 공격자가 원본 주소를 스푸핑하여 공격 대상의 주소로 삼아서, DNS 이름 조회 요청을 개방형 DNS 서버에 전송하는 것이 주된 방법입니다.
DNS 서버에서 DNS 레코드 응답을 보낼 때, 공격 대상에게 응답 대신 전송됩니다. DNS 서버에서 RRL을 사용하도록 설정하면 해당 문제를 방지할 수 있습니다. RRL은 클라이언트 DNS 쿼리를 지속적으로 모니터링하고, 특정한 짧은 기간 내에 비슷한 이름을 요청하는 단일 원본 쿼리에서 많은 쿼리가 발생하는 경우에는 RRL에서 악의적인 쿼리일 가능성이 있다고 플래그를 지정합니다. RRL은 단순히 쿼리를 무시하거나 잘림으로 쿼리에 회신할 수 있으며, 이런 경우에는 클라이언트가 확인을 위해 TCP 3방향 핸드셰이크로 협상하게 됩니다.
알 수 없는 레코드 지원
Windows DNS 서버에서 명시적으로 지원하지 않는 레코드는 알 수 없는 레코드 기능을 사용하여 Windows Server DNS 영역에 추가할 수 있습니다. 즉, 지원되지 않는 레코드 유형을 이진 형식으로 Windows DNS 서버 영역에 추가할 수 있습니다. Windows Server DNS 서버에서는 알 수 없는 레코드에 대한 어떤 레코드 관련 처리도 수행하지 않지만, 해당 레코드에 대해 쿼리가 수신되면 확인을 다시 응답으로 보냅니다.