인프라 진단/주•통기반 리눅스 서버 점검

U-04. 패스워드 파일 보호

sheow13 2024. 6. 23. 17:24
728x90

  주요정보통신기반시설 기술적 취약점 분석 평가

- 과학기술정보통신부 및 한국인터넷진흥원에서 발행한 가이드로, IDC, ISP 등 민간, 공공시설을 불문하고 침해사고 등이

발생할 경우 경제사회와 국가안정에 미치는 영향이 큰 시설들을 말하며, 이 시설들을 보호하기 위해 내부에 존재하는 취약점을 파악 및 조치하는 방법을 기술해놓은 가이드로, 국내 많은 기업들이 해당 가이드를 토대로 점검 및 조치를 진행하고 있다.

- 주요정보통신기반시설 기술적 취약점 분석 평가에는 주요 점검 대상으로 유닉스, 윈도우즈, 보안장비, 네트워크 장비, 데이터베이스, 웹 등을 다루고 있으며 해당 챕터에서는 유닉스(리눅스)서버를 다룰 예정

- 해당 가이드는 한국인터넷진흥원 가이드라인에서 참고

- https://www.kisa.or.kr/2060204/form?postSeq=12&page=1

 

 

  유닉스(리눅스) 서버 점검 항목

- Unix(Linux) 서버 점검 항목으로 크게 계정 관리, 파일 및 디렉터리 관리, 서비스 관리, 패치 관리, 로그 관리 등을 다루고 있다.

- 계정 관리의 경우, root 계정 원격 접속 제한, 계정 잠금 등에 대한 부분을 다루고 있으며, 파일 및 디렉터리 관리에서는 root 홈, 패스 디렉터리 권한 설정, UMASK 설정 등을 다루고 있으며, 서비스에서는 보안상 취약한 서비스(ex, finger) 비활성화 등을 다루고 있으며, 패치 관리는 최신 보안 패치 여부를 점검하며, 로그 관리는 정기적으로 로그를 검토 및 점검하고 있는지 여부를 확인하고 있다. 

- 해당 챕터에서는 CentOS 7.9 버전에서 진행하였으며, CentOS 이외에 다른 OS 점검 방법은 상기에 기재된 가이드 참고

 

 

  패스워드 파일 보호

점검 내용
- 시스템의 사용자 계정 정보가 저장된 파일에(ex, /etc/passwd, /etc/shadow)에 사용자 계정 패스워드가 암호화되어 저장되어 있는지 점검
- (양호) : 쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하는 경우
- (취약) : 쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않는 경우

 

보안 위협
- 패스워드가 평문으로 저장되어 있는 경우, 공격자는 LFI(Local File Include) 취약점 또는 일반 계정 탈취 후 사용자 계정 패스워드를 다루는 /etc/passwd 파일을 탈취하여, root 사용자 또는 다른 사용자 계정으로 권한 상승등을 손쉽게 할 수 있다.

 

점검 방법 확인 명령어

 

1.  /etc/passwd 파일에서 2번째 필드값이 'x'가 아닌 실제 패스워드값으로 저장되어 있는지 확인

  * 현재 패스워드 정책 Default값이 쉐도우 파일을 참고하도록 설정되어 있음

  * 패스워드 정책을 '/etc/passwd'로 설정 후, 패스워드를 평문으로 저장하면 보안상 취약할 수 있음 

cat /etc/passwd | awk -F: '{print $2}' | grep -v 'x'

 

['/etc/passwd' 파일에 두번째 필드값이 패스워드를 의미]
['x' 값이 아닌 값 중에서 ':' 기준으로 두번째 필드값을 출력하는 명령어]

 

2. /etc/shadow 파일이 존재하는지 확인

cat /etc/shadow

 

['/etc/shadow' 파일에서 패스워드 값은 일방향 암호화로 복호화 될 수 없게 설정되어 있음]

 

패스워드 파일 보호 스크립트 코드

 

#!/bin/bash

FILE="U-04.txt"
PASSWD=/etc/passwd
SHADOW=/etc/shadow

STATUS="양호"

echo "U-04. 패스워드 파일 보호 점검" >> $FILE 2>&1
echo "/etc/shadow 파일이 존재하는지 및 /etc/passwd 파일에 평문으로 저장하는지 확인" >> $FILE 2>&1
echo "=============================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1

# SHADOW 변수가 빈 문자열이 아닐 경우, 참인 조건문 수행
if [ -n $SHADOW ]; then
	echo "Shadow 파일이 존재합니다." >> $FILE 2>&1
	
	echo "=============================================================" >> $FILE 2>&1
	echo "" >> $FILE 2>&1

    # /etc/passwd 파일에서 패스워드 값인 두번째 항목에서 'x'가 아닌 값을 저장
    # 해당 변수가 빈 문자열일 경우 참인 조건문 수행
	PASSWD_VALUE=$(cat $PASSWD | awk -F : '{print $2}' | grep -v 'x')
	if [ -z $PASSWD_VALUE ]; then
		echo "SHADOW 파일 존재하며, /etc/passwd 파일에 평문으로 저장하고 있지 않습니다." >> $FILE 2>&1
		echo "=============================================================" >> $FILE 2>&1
		echo "" >> $FILE 2>&1
	
	
	else
		echo "SHADOW 파일 존재하나, /etc/passwd 파일에 평문으로 저장한 계정이 존재합니다." >> $FILE 2>&1
		echo "=============================================================" >> $FILE 2>&1
		echo "" >> $FILE 2>&1
		STATUS="취약"
	fi
else
	echo "Shadow 파일이 존재하지 않습니다." >> $FILE 2>&1
	echo "=============================================================" >> $FILE 2>&1
	echo "" >> $FILE 2>&1
	STATUS="취약"
fi

# 상태값에 따라 결과 출력
if [ "$STATUS" == "취약" ]; then
	echo "해당 항목 취약합니다." >> $FILE 2>&1
	echo "=============================================================" >> $FILE 2>&1
	echo "" >> $FILE 2>&1
else
	echo "해당 향목 양호합니다." >> $FILE 2>&1
	echo "=============================================================" >> $FILE 2>&1
	echo "">> $FILE 2>&1
fi

 

패스워드 파일 보호 스크립트 코드 결과값