□ 주요정보통신기반시설 기술적 취약점 분석 평가
- 과학기술정보통신부 및 한국인터넷진흥원에서 발행한 가이드로, 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 점검 방법은 상기에 기재된 가이드 참고
□ 계정 잠금 임계값 설정
점검 내용
- 사용자 계정 로그인 실패 시 계정잠금 임계값이 설정되어 있는지 점검
- (양호) : 계정 잠금 임계값이 10회 이하의 값으로 설정되어 있는 경우
- (취약) : 계정 잠금 임계값이 설정되어 있지 않거나, 10회 이하의 값으로 설정되어 있지 않은 경우
보안 위협
- 사용자 계정 잠금 임계값 설정이 되어 있지 않은 경우, 공격자는 무작위 대입 공격(brute force) 등을 통해 손쉽게 사용자 계정을 탈취할 수 있다.
점검 방법
- /etc/pam.d/system-auth 파일에서 계정 잠금 임계값 설정 여부 확인(잠금 설정 활성화 및 10 이하로 설정 여부)
- auth required pam_tally2.so deny=5 unlock_time=60
- account required pam_tally2.so
/etc/pam.d/system-auth 파일
- PAM(Pluggable Authentication Modules) 설정 파일로서, 시스템 전반의 인증 설정하는 파일. 주로 통합 인증 설정 및 모듈화된 접근 방식을 통해 인증 절차를 설정하는 파일이다.
- 해당 파일은 주로 사용자 인증(auth), 사용자 계정 관리(account), 비밀번호 관리(password), 세션 설정(session)을 다루고 있다.
- 해당 파일의 내용은 'type control-flag module-path module-arguments' 형식으로 동작한다.
● type : PAM 모듈의 유형을 지정
☞ auth : 사용자 인증
☞ account : 사용자 계정 관리
☞ password : 비밀번호 관리
☞ session : 세션 설정
● control-flag : PAM 모듈의 동작 방식을 제어
☞ required : 해당 모듈이 실패하면 모든 스택이 실패
☞ requisite : 해당 모듈이 실패하면 즉시 실패하고 남은 모듈을 처리하지 않음
☞ sufficient : 해당 모듈이 성공하면 남은 모듈을 처리하지 않고 성공으로 간주
☞ optional : 해당 모듈이 성공여부와 상관없이 전체 결과에 영향을 미치지 않음
● module-path : 호출할 PAM 모듈의 경로를 지정.
- 대부분 '/lib/security' 또는 '/lib64/security' 디렉토리에 존재
● module-arguments : PAM 모듈에 전달할 인수를 지정
- pam_tally2.so deny=5 unlock_time=60 : 계정 잠금 정책을 5회로 설정하고, 잠금시간은 60초로 설정
auth required pam_env.so
auth required pam_unix.so try_first_pass
auth optional pam_faillock.so preauth
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail
auth sufficient pam_faillock.so authsucc
auth required pam_deny.so
account required pam_unix.so
account required pam_faillock.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session optional pam_permit.so
[ /etc/pam.d/system-auth 파일 ]
점검 방법 확인 명령어
1. '/etc/pam.d/system-auth' 파일에서 계정 잠금 설정 활성화 여부 확인
- egrep 명령을 사용하여 정규표현식으로 공백문자 다음에 오는 문자가 존재하는지 확인
cat /etc/pam.d/system-auth | egrep "^auth\s+required\s+pam_tally2.so"
2. '/etc/pam.d/system-auth' 파일에서 계정 잠금 임계값이 10 이하인지 확인
- egrep 및 grep, cut 명령을 사용하여 정규표현식으로 임계값만 가져오도록 수행
cat /etc/pam.d/system-auth | egrep "^auth\s+required\s+pam_tally2.so" | grep -oP "deny=\d+" | cut -d '=' -f 2
계정 잠금 임계값 설정 스크립트 코드
#!/bin/bash
# 해당 코드는 계정 잠금 모듈로 pam_tally2.so로 설정되어 있다고 가정하고 점검 스크립트 생성
# 해당 모듈이 아닌 pam_faillock.so 등으로 구현 가능
FILE="U-03.txt"
echo "U-03. 계정 잠금 임계값 설정" >> $FILE 2>&1
echo "===============================================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1
echo "계정 임계값 설정 여부 및 계정 임계값이 10이하로 설정되어 있는지 확인" >> $FILE 2>&1
echo "===============================================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1
# 상태값 설정(초기값은 양호)
status="양호"
# /etc.pam.d/system-auth에서 계정 잠금 임계값 모듈 설정 여부 체크
# 정규표현식 ^로 주석처리 되어 있을 경우, 해당 변수에 저장되지 않음
auth_pam_lock=$(grep -E "^auth\s+required\s+pam_tally2.so" /etc/pam.d/system-auth)
account_tally2=$(grep -E "^account\s+required\s+pam_tally2.so" /etc/pam.d/system-auth)
# 해당 변수에 값이 저장되어 있을 경우 해당 조건문이 동작하도록 설정
if [ -n "$auth_pam_lock" ] && [ -n "$account_tally2" ]; then
echo "계정 잠금을 설정하는 모듈인 pam_tally2.so 모듈이 설정되어 있습니다. " >> $FILE 2>&1
echo "===============================================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1
# 계정 잠금 임계값만을 출력하기 위해 grep 및 cut 명령어를 사용하여 출력
auth_deny=$(echo "$auth_pam_lock" | grep -oP "deny=\d+" | cut -d '=' -f 2)
auth_unlock_time=$(echo "$auth_pam_lock" | grep -oP "unlock_time=\d+" | cut -d '=' -f 2)
if [ -n "$auth_deny" ] && [ -n "$auth_unlock_time" ]; then
echo "계정 잠금 임계값 설정:" >> $FILE 2>&1
echo "===============================================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1
echo "계정 잠금 임계값은 :" "$auth_deny" >> $FILE 2>&1
echo "계정 잠금 시간은 :" "$auth_unlock_time" >> $FILE 2>&1
echo "===============================================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1
if [ "$auth_deny" -ge 10 ]; then
echo "계정 잠금 임계값이 10 이상으로 설정되어 있습니다. 취약합니다." >> $FILE 2>&1
echo "===============================================================================" >> $FILE 2>&1
echo "" >> $FILE 2>&1
status="취약"
fi
else
status="취약"
fi
else
status="취약"
fi
# 상태값에 따라 결과 출력
if [ "$status" == "취약" ]; then
echo "해당 항목 취약합니다." >> $FILE 2>&1
else
echo "해당 항목 양호합니다." >> $FILE 2>&1
fi
계정 잠금 임계값 설정 스크립트 코드 결과값
'인프라 진단 > 주•통기반 리눅스 서버 점검' 카테고리의 다른 글
U-06. 파일 및 디렉터리 소유자 설정 (0) | 2024.06.26 |
---|---|
U-05. root홈, 패스 디렉터리 권한 및 패스 설정 (0) | 2024.06.26 |
U-04. 패스워드 파일 보호 (0) | 2024.06.23 |
U-02. 패스워드 복잡성 설정 (0) | 2024.06.23 |
U-01. Root 계정 원격 접속 제한 (0) | 2024.06.18 |