개발

U-12 파일 및 디렉토리 관리 > /etc/services 파일 소유자 및 권한 설정 자동화 파이썬코드

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

취약점

 

 

점검내용 :  /etc/services 파일 권한 적절성 점검
점검목적  : /etc/services 파일을 관리자만 제어할 수 있게 하여 비인가자들의 임의적인 파일 변조를 방지하기 위함 
보안위협 : services 파일의 접근권한이 적절하지 않을 경우 비인가 사용자가 운영 포트번호를 변경하여 정상적인 서비스를 제한하거나, 허용되지 않은 포트를 오픈하여 악성 서비스를 의도적으로 실행할 수 있음

 

참고
※ /etc/services : 서비스 관리를 위해 사용되는 파일. 해당 파일에 서버에서 사용하는 모
든 포트(port)들에 대해 정의되어 있으며, 필요시 서비스 기본사용 포트를 변경하여 네
트워크 서비스를 운용할 수 있음

 


 

코드

 

#!/usr/bin/python3
# 파일명: U-12.py
import os
import re
# 색깔변수
red   = '\033[91m'
blue  = '\033[94m'
reset = '\033[0m'
# /etc/services 파일 소유자 및 권한 설정
services_file = '/etc/services'
stat_info = os.stat(services_file)
owner = stat_info.st_uid
mode = stat_info.st_mode

# 권한과 소유자가 취약하지 않은 경우
if owner == 0 and 0o100644 <= mode <= 0o100664:
    print(f'{blue}양호{reset} : /etc/services 파일의 권한과 소유자가 올바릅니다.')

# 권한 또는 소유자가 취약한 경우
else:
    if owner != 0:
        print(f'{red}취약{reset} : /etc/services 파일의 소유자가 root가 아닙니다. (현재 소유자: {owner})')
    if not (0o100644 <= mode <= 0o100664):
        print(f'{red}취약{reset} : /etc/services 파일의 권한이 rw-r--r-- 또는 rw-rw-r--이 아닙니다. (현재 권한: {oct(mode)})')
        
        # 사용자로부터 y/n 입력을 받음
        answer = input(f'파일의 소유자와 권한을 변경하시겠습니까? {red}(y/n){reset} ')

        if answer.lower() == 'y':
            # 파일 소유자와 권한 변경
            os.system('chown root /etc/services')
            os.system('chmod 644 /etc/services')
            print('/etc/services 파일의 소유자와 권한을 변경했습니다.')
        else:
            print('파일의 소유자와 권한을 변경하지 않았습니다.')
  • /etc/services 파일의 권한과 소유자를 검사하고, 이들이 취약하다면 사용자에게 권한과 소유자를 변경할 것인지 묻는다.
  • 파일의 소유자가 root이고, 권한이 rw-r--r-- 또는 rw-rw-r--이면 "양호"로, 그렇지 않으면 "취약"으로 판단하고, 변경 여부를 물어본다.
  • 사용자가 변경을 원한다면, os 모듈을 사용하여 파일의 소유자와 권한을 변경한다.
  • 색깔 변수를 넣어서 예쁘게 출력한다.

실제 테스트

728x90
반응형