|
1.2 패스워드 복잡성 설정 ■ 점검 분류 항목: 계정 관리 ■ 세부 점검 항목: 패스워드 복잡성 설정 ■ 대상: 리눅스 ■ 위험도: 상 ■ 관련 코드: U-02 (1) 취약점 개요 ● 사용자 계정 및 일반 계정 모두 해당 암호를 유추하기 쉽게 설정할 경우 비인가자의 시스템 접근을 허용하게 하는 위험이 존재함 여러 문자를 혼합한 8자리 이상의 암호를 사용하게 하여 패스워드 복잡성을 높이면 비인가자에 의해 발생하는 침입 공격 발생률을 낮출 수 있음. (2) 판단기준 ● 양호: 영문 숫자 특수문자가 혼합된 8 글자 이상의 패스워드가 설정된 경우 ● 취약: 영문 숫자 특수문자 혼합되지 않은 8 글자 미만의 패스워드가 설정된 경우 (3) 조치방법 ● 계정과 유사하지 않은 8 글자 이상의 영문 숫자 특수문자의 조합으로 암호 설정 (4) 보안 설정 방법 <부적절한 패스워드 유형> ● 사전에 나오는 단어나 이들의 조합 ● 길이가 너무 짧거나 공백(NULL)인 패스워드 ● 키보드 자판의 일련의 나열 (예) abcd, qwert, etc ● 사용자 계정 정보에서 유추 가능한 단어들 (예) 지역명 부서명 계정명 사용자 이름의 이니셜 <패스워드 관리 방법> ● 영문, 숫자, 특수문자를 조합하여 계정명과 상이한 8자 이상의 패스워드 설정 ※ 다음 각 목의 문자 종류 중 2종류 이상을 조합하여 최소 10자리 이상 또는, 3종류 이상을 조합하여 최소 8자리 이상의 길이로 구성 가. 영문 대문자(26개) 나. 영문 소문자(26개) 다. 숫자(10개) 라. 특수문자(32개) ● 시스템마다 상이한 패스워드 사용 ● 패스워드를 기록해 놓을 경우 변형하여 기록 ● 가급적 자주 패스워드를 변경할 것 (5) 조치시 영향 패스워드 변경 시 Web, Was, DB연동 구간에서 문제가 발생할 수 있으므로 연동 구간에 미칠 수 있는 영향을 고려하여 적용 필요 |
|
( 고객에게 설명 )
패스워드가 복잡하게 구성되지 않으면, 쉽게 로컬/원격에서 패스워드 크랙툴에 의해 공격 당한다.
문자( 대/소문자 ), 숫자, 특수 문자, 공백 문자를 섞어서 사용한다.
사이트를 참고하여 강력한 암호 클랙 시간 점검 ([참고] 취약한 암호와 강력한 암호 http://5log.tistory.com/137)
- 정리 ) 보안 정책
패스워드(password) 관리 정책에 대한 경우
- 복잡한 암호를 사용해야 한다.(문자(대문자/소문자), 숫자, 특수문자, 공백문자)
- 암호의 최소 길이는 8글자 이상으로 한다.
- (예) 암호는 2개의 문자와 한개의 숫자 또는 특수문자가 포함되어야 한다.
암호의 길이는 6글자 이상으로 설정한다.
암호는 사용자 아이디가 포함되면 안된다.(동일하면 안된다.)
암호는 사용자 아이디의 Circular Shift 형태이면 안된다.
암호는 순서대로 되어 있으면 안된다.(예: 1234, abcd)
암호는 이전의 암호와 3글자 이상은 틀려야 한다.
- 관리자의 정책
(ㄱ) 암호를 정기적으로 변경하도록 유도(/etc/login.defs, chage CMD)
(ㄴ) 암호를 사용자가 변경할수 없도록 설정(# chmod u-s /usr/bin/passwd)
- function.sh 추가
|
..... SCRIPTNAME() { basename $0 | awk -F. '{print $1}' } |
|
- 점검 쉘 스크립트
vi U-02.sh
|
#!/bin/bash . function.sh TMP1=`SCRIPTNAME`.log > $TMP1 BAR CODE [U-02] 패스워드 복잡성 검사 cat << EOF >> $RESULT [양호]: 영문 숫자 특수문자가 혼합된 8 글자 이상의 패스워드가 설정된 경우. [취약]: 영문 숫자 특수문자 혼합되지 않은 8 글자 미만의 패스워드가 설정된 경우. EOF BAR INFO $TMP1 파일을 점검한다. FILE1=/etc/pam.d/system-auth PAM_MODULE=pam_cracklib.so LINE1=`cat $FILE1 | egrep -v '(^$|^#)' | grep $PAM_MODULE` LINE2=`echo $LINE1 | cut -d ' ' -f 4-` for VAR in `echo $LINE2` do FIRST=`echo $VAR | awk '{print $1}'` CHECK1=`echo $FIRST | awk -F= '{print $1}'` CHECK2=`echo $FIRST | awk -F= '{print $2}'` case $CHECK1 in try_first_pass) echo "try_first_passwd" >> $TMP1 ;; retry) echo "retry : $CHECK2" >> $TMP1 ;; minlen) echo "minlen : $CHECK2" >> $TMP1 ;; ucredit) echo "ucredit : $CHECK2" >> $TMP1 ;; lcredit) echo "lcredit : $CHECK2" >> $TMP1 ;; dcredit) echo "dcredit : $CHECK2" >> $TMP1 ;; ocredit) echo "ocredit : $CHECK2" >> $TMP1 ;; minclass) echo "ocredit : $CHECK2" >> $TMP1 ;; *) echo 'other' ;; esac shift done cat $RESULT echo ; echo |
|
> 패스워드 정책은 각 회사마다 다를 수 있다. 때문에 표준보다 더 복잡하게 맞출 수도 있고 몇가지는 빠져있을 수 도 있고
경우가 많기 때문에 파일을 따로 저장해서 고객하고 상의하고 조율해야 한다. 그러려면 내용이 따로 저장되어 있는 log 파일이 필요하다.
'Security > Linux Server' 카테고리의 다른 글
방화벽 ( Firewall ) _ iptables ( 패킷 필터링 ) (0) | 2017.12.20 |
---|---|
리눅스 서버 점검 (계정 잠금 임계값 설정 ) 쉘 스크립트 (0) | 2017.12.15 |
주요 PAM 모듈 ( cracklib.so , wheel.so , tally.so , tally2.so ) (0) | 2017.12.15 |
PAM (Pluggable Authentication Modules) (0) | 2017.12.15 |
리눅스 서버 점검 ( root 계정 원격 접속 제한 ) 쉘 스크립트 (0) | 2017.12.14 |