개발

U-33 서비스 관리 > DNS 보안 버전 패치 자동화 파이썬 코드

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

취약점

 

점검내용  

BIND 최신버전 사용 유무 및 주기적 보안 패치 여부 점검


점검목적  

취약점이 발표되지 않은 BIND 버전의 사용을 목적으로 함


보안위협  

최신버전(2016.01 기준 9.10.3-P2) 이하의 버전에서는 서비스거부 공격, 버퍼오버플로우(Buffer Overflow) 및 DNS 서버 원격 침입 등의 취약성이 존재함


참고
※ BIND(Berkeley Internet Name Domain): BIND는 BSD 기반의 유닉스 시스템을 위해 설
계된 DNS로 서버와 resolver 라이브러리로 구성되어 있음. 네임서버는 클라이언트들이 
이름 자원들이나 객체들에 접근하여, 네트워크 내의 다른 객체들과 함께 정보를 공유
할 수 있게 해주는 네트워크 서비스로 사실상 컴퓨터 네트워크 내의 객체들을 위한 분
산 데이터베이스 시스템임


 

코드

#!/usr/bin/python3
#-*- coding: utf-8 -*-
# 파일명: U-33.py

import os
import re
import subprocess

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

# DNS 실행중인지 ps -ef로 확인
output = subprocess.check_output(['ps', '-ef'])
output_str = output.decode('utf-8')
if not re.search('named', output_str):
    # 실행중이 아니면 서비스종료
    subprocess.run(['systemctl', 'stop', 'named'])
    print(f"{red}취약{reset} - 서비스를 종료합니다.")
else:
    # 실행중이면 버전체크
    version_output = subprocess.check_output(['named', '-v'])
    version_str = version_output.decode('utf-8')
    version_match = re.search(r'BIND \d+\.\d+\.\d+', version_str)
    if not version_match:
        print(f"{red}취약{reset} - 알 수 없는 BIND 버전")
    else:
        # 버전이 최신인가 확인
        latest_version = "9.16.21"
        current_version = version_match.group().split()[-1]
        if current_version != latest_version:
            print(f"{blue}양호{reset} - 최신 BIND 버전")
        else:
            # 보안패치여부 확인
            patches_dir = "/usr/local/bind-patches"
            if os.path.isdir(patches_dir):
                patches = os.listdir(patches_dir)
                if patches:
                    latest_patch = max(patches)
                    print(f"{blue}양호{reset} - {current_version} 사용 중, 최신 패치 적용됨: {latest_patch}")
                else:
                    print(f"{red}취약{reset} - {current_version}에 적용된 주기적인 보안 패치 없음")
            else:
                print(f"{red}취약{reset} - {current_version}에 대한 정기 보안 패치 디렉토리를 찾을 수 없음")
  •  
    • DNS 서비스 실행 여부 확인
    • DNS 서비스가 실행 중이지 않으면 서비스 종료
    • DNS 서비스가 실행 중이면 BIND 버전 확인
    • BIND 버전이 알 수 없으면 취약
    • BIND 버전이 최신이 아니면 보안 패치 여부 확인
    • 보안 패치가 있으면 양호, 없으면 취약
    • 정기 보안 패치 디렉토리를 찾을 수 없으면 취약
    • 색깔 변수(red, blue, reset) 사용하여 출력문의 색상 설정
  •  
  • 실제 테스트

 

DNS 서비스를 사용하지 않거나 주기적으로 패치를 관리하고 있는 경우

 
DNS 서비스를 사용하며 주기적으로 패치를 관리하고 있지 않는 경우
 
서비스를 사용하지 않을 때 서비스 종료

 
728x90
반응형