본문 바로가기
정보보호 (Security)

RPZ를 활용한 악성 도메인 응답 필터링: DNS 제어 보안 강화 가이드

by 날으는물고기 2025. 1. 14.

RPZ를 활용한 악성 도메인 응답 필터링: DNS 제어 보안 강화 가이드

RPZ (Response Policy Zone) 방식을 활용하여 특정 도메인에 대한 응답을 0.0.0.0으로 반환하는 것은 DNS 서버에서 특정 도메인이나 악성 사이트에 대한 접속을 차단할 때 사용하는 방법입니다. RPZ는 도메인 이름을 기반으로 응답 정책을 설정할 수 있는 기능을 제공하며, 이를 통해 특정 도메인에 대한 DNS 응답을 의도적으로 수정할 수 있습니다.

 

아래는 BIND DNS 서버에서 RPZ를 설정하여 특정 도메인에 대해 0.0.0.0으로 응답하도록 설정하는 방법입니다.

1. BIND 서버에 RPZ 설정을 적용하기 위한 기본 준비

BIND 서버가 이미 설치되어 있어야 하며, RPZ 기능을 사용할 수 있도록 설정 파일을 수정해야 합니다.

BIND 설치 (CentOS/Ubuntu 기준)

# CentOS
yum install bind bind-utils -y

# Ubuntu
apt-get install bind9 bind9utils -y

2. RPZ 구역 파일 생성

RPZ 구역 파일은 차단할 도메인 리스트와 정책을 설정하는 곳입니다. 예를 들어, rpz.zone 파일을 생성하여 설정을 추가할 수 있습니다.

RPZ 구역 파일 (rpz.zone)

$TTL 60
@    IN    SOA    localhost. root.localhost. (
        2023102401 ; Serial
        3600       ; Refresh
        1800       ; Retry
        604800     ; Expire
        60 )       ; Minimum TTL

     IN    NS    localhost.

; 차단할 도메인 목록
maliciousdomain.com.    CNAME    .
badsite.com.            A        0.0.0.0
exampleblock.com.       A        0.0.0.0

이 설정 파일에서 maliciousdomain.com에 대해 CNAME을 비워놓는 방식으로 NXDOMAIN을 반환할 수 있으며, badsite.comexampleblock.com에 대해서는 A 레코드로 0.0.0.0을 반환하도록 설정했습니다.

3. BIND 설정 파일 수정 (named.conf)

BIND의 설정 파일에 RPZ 구역을 포함시키는 단계입니다. named.conf 파일을 수정하여 RPZ 구역을 로드하고 활성화합니다.

named.conf 수정

// RPZ 구역 추가
zone "rpz" {
    type master;
    file "/etc/named/rpz.zone";  # RPZ 구역 파일의 위치
};

// 옵션 섹션에 RPZ 활성화
options {
    response-policy { zone "rpz"; };
};

이 설정은 BIND 서버가 RPZ 구역을 참조하여 정책을 적용하도록 하는 설정입니다.

4. BIND 서비스 재시작

구성 파일을 저장한 후 BIND 서비스를 다시 시작하여 변경 사항을 적용합니다.

# CentOS
systemctl restart named

# Ubuntu
systemctl restart bind9

5. 테스트

정상적으로 설정되었는지 확인하기 위해 도메인에 대한 쿼리를 실행하여 응답을 확인할 수 있습니다.

dig @localhost badsite.com

# 응답 예시:
;; ANSWER SECTION:
badsite.com.    60  IN  A   0.0.0.0

이와 같이 설정하면 badsite.com과 같은 특정 도메인에 대해 0.0.0.0 IP 주소를 반환하는 것을 확인할 수 있습니다. 이러한 방식으로 BIND 서버에서 RPZ를 설정하여 특정 도메인에 대해 0.0.0.0을 반환하게 할 수 있으며, 이를 통해 원치 않는 도메인으로의 접근을 효과적으로 차단할 수 있습니다.

 

NXDOMAIN은 "Non-Existent Domain"의 약자로, DNS 서버가 특정 도메인에 대한 질의를 처리했을 때 해당 도메인이 존재하지 않는다는 응답을 의미합니다. 즉, DNS 클라이언트가 어떤 도메인에 대한 IP 주소를 요청했을 때, 해당 도메인이 DNS 서버에서 확인되지 않으면 NXDOMAIN 응답이 반환됩니다. 이는 도메인이 실제로 존재하지 않거나, DNS 서버에서 해당 도메인 정보를 제공하지 않는 경우 발생합니다.

NXDOMAIN 반환의 작동 방식

DNS 클라이언트(예: 웹 브라우저)가 도메인(예: nonexistentdomain.com)에 대한 IP 주소를 요청하면, DNS 서버는 해당 도메인에 대한 정보가 있는지 확인합니다. 만약 그 도메인이 DNS 시스템에 등록되어 있지 않다면, DNS 서버는 다음과 같은 형식의 응답을 보냅니다.

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12345

status: NXDOMAIN 부분이 도메인이 존재하지 않음을 나타내며, 클라이언트는 이 응답을 통해 도메인이 없다는 사실을 알게 됩니다.

NXDOMAIN 반환을 활용하는 경우

DNS 서버에서 NXDOMAIN을 반환하도록 설정하면, 클라이언트가 해당 도메인에 접근할 수 없게 됩니다. 예를 들어, 특정 도메인에 대해 의도적으로 NXDOMAIN 응답을 설정하여 해당 도메인으로의 접근을 차단할 수 있습니다.

예시

BIND RPZ를 활용하여 특정 도메인에 대해 NXDOMAIN 응답을 반환하려면, CNAME 레코드를 비워둠으로써 다음과 같이 설정할 수 있습니다.

maliciousdomain.com.    CNAME    .

이 설정은 DNS 서버가 maliciousdomain.com에 대한 질의를 받았을 때 NXDOMAIN을 반환하게 만듭니다. 이를 통해 악성 도메인에 대한 접근을 차단할 수 있습니다. 이처럼 NXDOMAIN 응답은 도메인이 존재하지 않는다는 정보를 제공하여 사용자가 해당 도메인에 접근하지 못하도록 할 수 있습니다.

 

특정 도메인에 대해서만 허용하고, 그 외의 모든 도메인에 대해 NXDOMAIN을 반환하도록 설정하는 것은 "화이트리스트" 방식의 DNS 필터링을 의미합니다. 이를 위해 BIND DNS 서버에서 RPZ (Response Policy Zone)를 활용할 수 있으며, 설정 방식은 기본적으로 모든 도메인에 대해 NXDOMAIN을 반환하도록 하고, 특정 허용된 도메인만 예외로 설정하는 방식으로 진행할 수 있습니다.

BIND를 이용한 whitelist 방식 설정

1. RPZ 구역 파일 생성

모든 도메인에 대해 기본적으로 NXDOMAIN을 반환하고, 특정 도메인에 대해서만 정상적으로 응답하도록 하려면 RPZ 구역 파일을 생성하고 설정해야 합니다.

 

RPZ 구역 파일 예시 (rpz.zone)

$TTL 60
@    IN    SOA    localhost. root.localhost. (
        2023102401 ; Serial
        3600       ; Refresh
        1800       ; Retry
        604800     ; Expire
        60 )       ; Minimum TTL

     IN    NS    localhost.

; 기본적으로 모든 도메인에 대해 NXDOMAIN 반환
*    CNAME    .

; whitelist 도메인 목록 - 정상 응답을 허용할 도메인
gooddomain.com.    CNAME    rpz-passthru.
alloweddomain.net. CNAME    rpz-passthru.
  • * CNAME .은 모든 도메인에 대해 NXDOMAIN을 반환하도록 설정하는 부분입니다.
  • 특정 도메인(gooddomain.com, alloweddomain.net)에 대해서는 CNAME rpz-passthru.를 설정하여 해당 도메인은 정상적인 DNS 응답을 허용하도록 설정합니다.

2. named.conf에서 RPZ 구역 추가

BIND의 설정 파일인 named.conf에 RPZ 구역을 추가하여 적용해야 합니다.

 

named.conf 설정

zone "rpz" {
    type master;
    file "/etc/named/rpz.zone";  # RPZ 구역 파일의 경로
};

options {
    response-policy { zone "rpz"; };
};

위 설정은 rpz.zone 파일에서 정의된 정책을 기반으로 DNS 응답을 제어하도록 하는 설정입니다.

3. BIND 서비스 재시작

구성 파일을 수정한 후, BIND DNS 서비스를 재시작하여 설정을 적용합니다.

# CentOS
systemctl restart named

# Ubuntu
systemctl restart bind9

4. 설정 확인 및 테스트

설정이 제대로 적용되었는지 확인하기 위해 특정 도메인에 대해 DNS 질의를 수행하여 응답을 확인할 수 있습니다.

 

정상 허용 도메인 테스트

dig @localhost gooddomain.com

# 응답 예시:
;; ANSWER SECTION:
gooddomain.com.    60  IN  A   192.168.1.100

NXDOMAIN 반환 도메인 테스트

dig @localhost baddomain.com

# 응답 예시:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 12345

위와 같이 허용된 도메인(gooddomain.com, alloweddomain.net)은 정상적으로 응답을 반환하고, 그 외의 모든 도메인은 NXDOMAIN을 반환하는 것을 확인할 수 있습니다.

추가 고려사항

  1. Wildcard 사용: * 문자는 모든 도메인을 의미하며, 이를 활용하여 기본적으로 모든 도메인을 차단하고, 필요한 도메인만 허용할 수 있습니다.
  2. Whitelist 관리: 허용할 도메인은 RPZ 구역 파일에 직접 추가하거나 외부 파일을 참조하여 쉽게 관리할 수 있습니다.
  3. TTL 설정: RPZ 구역에서 설정하는 TTL 값은 서버 성능에 영향을 줄 수 있으니 적절한 값으로 설정하는 것이 중요합니다.

이 방식은 DNS 서버 수준에서 네트워크 접근을 관리할 수 있는 매우 강력한 방법입니다. 필요에 따라 특정 도메인을 쉽게 추가하거나 제거할 수 있습니다.

728x90

댓글