개발

U-34 서비스 관리 > DNS Zone Transfer 설정 자동화 파이썬 코드

화이트해커 Luna 🌙 2023. 3. 17. 14:22
728x90
반응형

취약점

 

점검내용  

Secondary Name Server로만 Zone 정보 전송 제한 여부 점검

 
 


점검목적  

허가되지 않는 사용자에게 Zone Transfer를 제한함으로써 호스트 정보, 시스

템 정보 등 정보 유출의 방지를 목적으로 함

 


보안위협  

비인가자 Zone Transfer를 이용해 Zone 정보를 전송받아 호스트 정보, 시스

템 정보, 네트워크 구성 형태 등의 많은 정보를 파악할 수 있음

 


 

코드

#!/usr/bin/python3
#-*- coding: utf-8 -*-
# 파일명: U-34.py
#20230223 테스트
import os
import subprocess
import sys

# 색깔변수
red   = '\033[91m'
blue  = '\033[94m'
reset = '\033[0m'

# DNS 서비스 실행 여부 확인
dns_running = False
cmd_output = subprocess.check_output(['ps', '-ef'])
if 'named' in cmd_output.decode():
    dns_running = True

# named.conf 파일에서 allow-transfer 설정 확인
allow_transfer = False
with open('/etc/named.conf', 'r') as named_conf:
    for line in named_conf:
        if 'allow-transfer' in line:
            allow_transfer = True
            break

# named.boot 파일에서 xfrnets 설정 확인
xfrnets = ''
try:
    with open('/etc/named.boot', 'r') as named_boot:
        for line in named_boot:
            if 'xfrnets' in line:
                xfrnets = line.strip().split('=')[1]
                break
except FileNotFoundError:
    print(f"{blue}양호{reset} - DNS서비스상태: 미사용")
    sys.exit()

# 결과 출력
if dns_running and not allow_transfer and xfrnets == '':
    print(f"{blue}양호{reset} - DNS서비스상태: {dns_running}")
else:
    print(f"{red}취약{reset} - DNS서비스상태: {dns_running}")
  • DNS 서비스 실행 여부 확인
  • DNS 서비스가 실행 중이면 named.conf 파일에서 allow-transfer 설정 확인
  • named.boot 파일에서 xfrnets 설정 확인
  • DNS 서비스가 실행 중이고, allow-transfer 설정이 없고, xfrnets 설정이 비어있으면 양호
  • 그렇지 않으면 취약
  • 색깔 변수(red, blue, reset) 사용하여 출력문의 색상 설정
  • FileNotFoundError 예외 처리를 통해 named.boot 파일이 없을 때 DNS 서비스를 사용하지 않는 것으로 판단하고 양호 출력

 

 

실제 테스트

DNS 서비스 미사용 또는, Zone Transfer를 허가된 사용자에게만 허용한경우
 
DNS 서비스를 사용하며 Zone Transfer를 모든 사용자에게 허용한 경우
 

 

728x90
반응형