개발

U-13 파일 및 디렉토리 관리 > SUID, SGID, 설정 파일점검

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

취약점

 

점검내용 

불필요하거나 악의적인 파일에 SUID, SGID 설정 여부 점검


점검목적  

불필요한 SUID, SGID 설정 제거로 악의적인 사용자의 권한상승을 방지하기 위함


보안위협  

SUID, SGID 파일의 접근권한이 적절하지 않을 경우 SUID, SGID 설정된 파일로 특정 명령어를 실행하여 root 권한 획득 가능함 


참고
※ SUID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한
을 얻게 됨
※ SGID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유 그룹의 
권한을 얻게 됨
※ 불필요한 SUID/SGID 목록: 부록 참고


 

코드

 

#!/usr/bin/python3
#-*- coding: utf-8 -*-
# 파일명: U-13.py
import os
# 불필요하거나 악의적인 파일에 SUID, SGID 설정 여부 점검
# 색깔변수
red   = '\033[91m'
blue  = '\033[94m'
reset = '\033[0m'

# 참조할 파일 리스트
set_files = [
    "/bin/su",
    "/bin/ping",
    "/bin/mount",
    "/usr/bin/passwd",
    "/usr/bin/sudo",
    "/usr/bin/chsh",
    "/usr/bin/chfn",
    "/usr/bin/at",
    "/usr/bin/newgrp",
    "/usr/bin/crontab"
]

vulnerability = False

vul_files = []
for file in set_files:
    if os.path.exists(file):
        command = f"find {file} -perm -u=s -o -perm -g=s -type f 2>/dev/null"
        result = os.popen(command)
        output = result.read().strip()
        if output:
            vulnerability = True
            vul_files.append(file)
    else:
        print(f"{file} 파일이 존재하지 않습니다.")

print("U-13: SUID, SGID, 설정 파일점검")
if vulnerability:
    print(f"진단 결과 : {red}취약{reset}")
    print("취약한 파일 목록:")
    for vul_file in vul_files:
        print(f"     {red}{vul_file}{reset}")
    answer = input(f"지금 권한을 제거하시겠습니까? {red}(y/n){reset}: ")
    if answer.lower() == "y":
        for file in vul_files:
            os.system(f"chmod -s {file}")
            print(f"권한이 제거되었습니다: {blue}{file}{reset}")
else:
    print(f"진단 결과 : {blue}양호{reset}")
  • 불필요하거나 악의적인 파일에 SUID, SGID 설정 여부를 점검하는 프로그램
  • set_files 변수에 참조할 파일 리스트를 저장
  • for문을 사용하여 각 파일을 점검하고, 취약점이 발견되면 vulnerability 변수를 True로 설정하고, vul_files 리스트에 취약한 파일을 추가
  • 출력 결과에 따라 취약한 파일과 권한 변경 여부를 묻는 메시지를 출력
  • 사용자가 권한을 제거하기로 결정한 경우, os 모듈을 사용하여 해당 파일의 SUID, SGID 권한을 제거

실제 테스트

 

양호

 

취약

 

728x90
반응형