[주요정보통신기반시설] U-02 패스워드 복잡성 설정
1. 취약점 개요
점검내용
사용자 계정에 패스워드 복잡성 관련 설정이 되어 있는지 점검합니다.
점검목적
패스워드 복잡성 관련 정책을 점검하여 비인가자의 패스워드 관련 공격(무작위 대입 공격, 사전 대입 공격 등) 에 대비가 되어 있는지 확인하기 위한 것을 목적으로 하고 있습니다.
보안위협
복잡성 설정이 되어 있지 않은 패스워드는 사회공학적인 유추가 가능 할 수 있으며 암호화된 패스워드 해시값을 무작위 대입공격, 사전대입 공격 등으로 단시간에 패스워드 크랙이 가능합니다.
점검환경
OS : CentOS 7
2. 점검방법 및 조치방안
판단기준
양호 : 패스워드 설정 시 최소 길이 8자리 이상, 영문 대소문자, 숫자, 특수문자를 하나 이상 포함하도록 정책이 설정된 경우
취약 : 패스워드 설정 시 최소 길이 8자리 이상, 영문 대소문자, 숫자, 특수문자를 하나 이상 포함하도록 정책이 설정되어 있지 않은 경우
점검방법
- Linux 6.X 미만
- /etc/login.defs 파일 내 PASS_MIN_LEN 설정 확인
- /etc/pam.d/system-auth 파일 내 pam_cracklib.so 설정 확인
- lcredit : 최소 소문자 요구
- ucredit : 최소 대문자 요구
- dcredit : 최소 숫자 요구
- ocredit : 최소 특수문자 요구
- minlen : 최소 패스워드 길이 설정
- Linux 7.x 이상
- /etc/security/pwquality 파일 내 패스워드 복잡성 설정 확인
- lcredit : 최소 소문자 요구
- ucredit : 최소 대문자 요구
- dcredit : 최소 숫자 요구
- ocredit : 최소 특수문자 요구
- minlen : 최소 패스워드 길이 설정
- minclass : 패스워드 생성 시 최소 종류(소문자, 대문자, 숫자, 특수문자 등) 요구
- /etc/pam.d/system-auth 파일 내 pam_pwquality.so 설정 확인
- /etc/security/pwquality 파일 내 패스워드 복잡성 설정 확인
점검 명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Linux 6.x 미만
# - /etc/login.defs 파일 내 PASS_MIN_LEN 설정 확인
# 양호 : 패스워드 최소 길이가 8자리 이상으로 설정되어 있는 경우
# 취약 : 패스워드 최소 길이가 8자리 이하로 설정되어 있는 경우
# 추가적으로 system-auth 파일 내 pam_cracklib.so 설정 확인이 필요
cat /etc/login.defs | grep "PASS_MIN_LEN"
# - /etc/pam.d/system-auth 파일 내 pam_cracklib.so 설정 확인
# credit : 최소 소문자 요구
# ucredit : 최소 대문자 요구
# dcredit : 최소 숫자 요구
# ocredit : 최소 특수문자 요구
# minlen : 최소 패스워드 길이 설정
# 양호 : 패스워드 설정 시 최소 길이 8자리 이상, 영문 대소문자, 숫자, 특수문자를 하나 이상 포함하도록 정책이 설정된 경우
# 취약 : 패스워드 설정 시 최소 길이 8자리 이상, 영문 대소문자, 숫자, 특수문자를 하나 이상 포함하도록 정책이 설정되어 있지 않은 경우
cat /etc/pam.d/system-auth | grep "pam_cracklib.so"
# Linux 7.x 이상
# - /etc/security/pwquality.conf
# lcredit : 최소 소문자 요구
# ucredit : 최소 대문자 요구
# dcredit : 최소 숫자 요구
# ocredit : 최소 특수문자 요구
# minlen : 최소 패스워드 길이 설정
# minclass : 패스워드 생성 시 최소 종류(소문자, 대문자, 숫자, 특수문자 등) 요구
# 양호 : 패스워드 설정 시 최소 길이 8자리 이상, 영문 대소문자, 숫자, 특수문자를 하나 이상 포함하도록 정책이 설정된 경우
# 취약 : 패스워드 설정 시 최소 길이 8자리 이상, 영문 대소문자, 숫자, 특수문자를 하나 이상 포함하도록 정책이 설정되어 있지 않은 경우
cat /etc/security/pwquality.conf | egrep "minlen|dcredit|ucredit|lcredit|ocredit|minclass"
# - /etc/pam.d/system-auth 파일 내 pam_pwquality.so 설정 확인
cat /etc/pam.d/system-auth | grep "pam_pwquality.so"
# pam_pwquality.so 모듈 설정에 enforce_for_root 설정 시 root도 복잡성을 따르도록 설정 가능
조치방안
- Linux 6.x 미만
- /etc/login.defs 파일 내 아래 설정 확인
- PASS_MIN_LEN 설정 값을 8 이상으로 설정
- /etc/pam.d/system-auth 파일 내 pam_cracklib.so 모듈에 설정 값을 확인
- 최소 소문자 요구
- lcredit = -1
- 최소 대문자 요구
- ucredit = -1
- 최소 숫자 요구
- dcredit = -1
- 최소 특수문자 요구
- ocredit = -1
- 최소 패스워드 길이 설정
- minlen = 8
- 최소 소문자 요구
- /etc/login.defs 파일 내 아래 설정 확인
- Linux 7.x 미만
- /etc/security/pwquality.conf 파일 내 아래 설정 확인
- 최소 소문자 요구
- lcredit = -1 (최소 1자리 이상)
- 최소 대문자 요구
- ucredit = -1
- 최소 숫자 요구
- dcredit = -1
- 최소 특수문자 요구
- ocredit = -1
- 최소 패스워드 길이 설정
- minlen = 8
- 패스워드 생성 시 최소 조합 수
- lcredit, ucredit, dcredit, ocredit를 설정 시 불필요
- minclass = 4
- 최소 소문자 요구
- /etc/pam.d/system-auth 파일 내 pam_pwquality.so 모듈 설정 확인
- /etc/security/pwquality.conf 파일 내 아래 설정 확인
3. 진단 스크립트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/sh
# 호스트네임
HOSTNAME=`hostname`
# 결과 저장
mkdir ./result
U_02() {
U_no=2
U_log=$(printf "./result/%s_U_%02d.log" "$HOSTNAME" "$U_no")
echo "==============================" >> $U_log 2>&1
echo "[U-02] 패스워드 복잡성 설정" >> $U_log 2>&1
echo "==============================" >> $U_log 2>&1
# Linux 6.x 미만
# /etc/login.defs 파일 확인
echo "[/etc/login.defs 파일 확인]"
if [ -f /etc/login.defs ]
then
# 파일 내 설정 확인
if [ `cat /etc/login.defs | grep "PASS_MIN_LEN" | egrep -v "^#" | wc -l` -gt 0 ]
then
echo `cat /etc/login.defs | grep "PASS_MIN_LEN" | egrep -v "^#"` >> $U_log 2>&1
else
echo "PASS_MIN_LEN 설정 값이 확인되지 않음" >> $U_log 2>&1
fi
else
echo "/etc/login.defs 파일이 존재하지 않음" >> $U_log 2>&1
fi
# /etc/pam.d/system-auth 파일 확인
echo "[/etc/pam.d/system-auth 파일 확인]"
if [ -f /etc/pam.d/system-auth ]
then
# 파일 내 설정 확인
if [ `cat /etc/pam.d/system-auth | grep "pam_cracklib.so" | egrep -v "^#" | wc -l` -gt 0 ]
then
echo `cat /etc/pam.d/system-auth | grep "pam_cracklib.so" | egrep -v "^#"` >> $U_log 2>&1
else
echo "pam_cracklib.so 설정이 확인되지 않음" >> $U_log 2>&1
fi
else
echo "/etc/pam.d/system-auth 파일이 존재하지 않음" >> $U_log 2>&1
fi
# Linux 7.x 이상
# 파일 확인
echo "[/etc/security/pwquality.conf 파일 확인]" >> $U_log 2>&1
if [ -f /etc/security/pwquality.conf ]
then
# 파일 내 설정 확인
echo `cat /etc/security/pwquality.conf | egrep "minlen|dcredit|ucredit|lcredit|ocredit|minclass"` >> $U_log 2>&1
else
echo "/etc/security/pwquality.conf 파일이 존재하지 않음"
fi
# pam_pwquality.so 설정 확인
echo `cat /etc/pam.d/system-auth | grep "pam_pwquality.so"` >> $U_log 2>&1
}
U-02
This post is licensed under CC BY 4.0 by the author.