[목차]
패스워드 파일 보호(1.4)
1. 취약점 분석/평가 방법 상세 가이드
2. 취약점 점검 스크립트 제작
root 이외의 UID가 '0' 금지(1.5)
1. 취약점 분석/평가 방법 상세 가이드
2. 취약점 점검 스크립트 제작
[패스워드 파일 보호]
1. 취약점 분석/평가 방법 상세 가이드
1.4 패스워드 파일 보호 ■ 점검 분류 항목: 계정 관리 ■ 세부 점검 항목: 패스워드 파일 보호 ■ 대상: 리눅스 ■ 위험도: 상 ■ 관련 코드: U-04 (1) 취약점 개요 패스워드 정보를 평문으로 저장하는 경우 정보 유출 피해가 발생할 수 있으므로 패스워드를 암호화하여 보호하여야 함. 쉐도우 패스워드를 사용하여 "/etc/shadow"파일에 암호화된 패스워드가 저장되도록 하고 특별 권한이 있는 사용자들만 읽을 수 있도록 제한함.
(2) 판단기준 양호: 쉐도우 패스워드(EX: shadow)를 사용하거나, 패스워드를 암호화하여 저장하는 경우 취약: 쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않는 경우
(3) 조치방법 패스워드 암호화 저장∙관리 설정 적용
(4) 보안 설정 방법 ① /shadow 파일 존재 확인 (일반적으로 /etc 디렉터리 내 존재) # ls /etc ② /etc/passwd 파일 내 두 번째 필드가 "x" 표시되는지 확인 # cat /etc/passwd root:x:0:0:root:/root:/bin/bash
(5) 조치시 영향 Trusted Mode로 전환 시 파일시스템 구조가 변경되어 운영 중인 서비스에 문제가 발생할 수 있으므로 충분한 테스트를 거친 후 Trusted Mode로의 전환이 필요함. |
고객에게 취약점을 어떻게 이해시킬것인가? |
(고객에게 설명)
/etc/passwd(rw-r--r--) 파일은 other 퍼미션에 read 권한이 필요하다.
많은 프로그램들이 /etc/passwd 파일을 참조하여 동작하기 때문이다.
/etc/passwd 파일안에 암호화된 암호가 들어 있는 경우에는
악의적인 사용자에 의해 암호화된 암호를 크랙 당할 수 있는 가능성이 있다.
(EX) user01:$1$5NMpVSbZ$iOKUDimAmp9KtlzGuE6A01:1002:1002::/home/user01:/bin/bash
$1(암호화방식)$ (솔트키)5NMpVSbZ $(암호해시)iOKUDimAmp9KtlzGuE6A01
따라서, /etc/passwd 파일 체계(암호화된 암호는 /etc/passwd에 저장)를 사용하는 것은 보안상 위험하다. 그래서 /etc/passwd, /etc/shadow(암호화된 암호는 /etc/shadow에 저장) 파일을 사용하는 체계를 사용해야 한다.
관련문서 제작 |
[실습] pwconv/pwunconv 명령어 실습
* /etc/passwd -- pwunconv --> /etc/passwd, /etc/shadow
* /etc/passwd, /etc/shadow -- pwconv --> /etc/passwd
컨설팅 |
(보안정책)
리눅스의 기본 체계를 쓸것을 권장한다.
[참고] /etc/passwd, /etc/shadow 파일의 백업본 존재 유무 확인
# ls -l /etc/*passwd*
# ls -l /etc/*shadow*
2. 취약점 점검 스크립트 제작
■ (스크립트 제작 시 참고 사항)
/etc/passwd 파일이 존재하지 않는 경우는 없다.
패스워드는 반드시 암호화되어 있다. 암호화 되어 있지 않는 경우는 없다.
/etc/passwd 파일만 쓰는 경우와 /etc/passwd, /etc/shadow 파일을 사용하는 체계가 있다.
(결국 shadow 파일이 있는가 없는가를 확인하면 됨)
■ (스크립트 제작시 판단 근거)
/etc/shadow 파일이 존재하는가를 점검한다.
■ (스크립트 안에 들어갈 내용)
(CentOS 5.x) U-04.sh
#!/bin/bash
. function.sh
BAR CODE [U-04] 패스워드 파일 보호 cat << EOF >> $RESULT [양호]: 쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하는 경우 [취약]: 쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않는 경우 EOF BAR
FILE1=/etc/passwd FILE2=/etc/shadow
if [ -f $FILE1 -a -f $FILE2 ] ; then OK 쉐도우 패스워드를 사용하며, 패스워드가 암호화되어 있습니다. else WARN 쉘도우 패스워드 파일을 사용하지 않습니다. fi
cat $RESULT echo; echo |
function.sh
..중략..
CheckEncryptedPasswd() {
SFILE=$1
# $1$saltkey$encrypted 숫자들은 암호화 알고리즘의 종류
# $2a$saltkey$encrypted
# $5$saltkey$encrypted
# $6$saltkey$encrypted 우리는 6번을 써야함
EncryptedPasswdField=$(grep '^root' $SFILE | awk -F: '{print $2}' | awk -F'$' '{print $2}')
#echo $EncryptedPasswdField
case $EncryptedPasswdField in
1|2a|5) echo WarnTrue ;;
6) echo TrueTrue ;;
*) echo 'None' ;;
esac
}
# 1) echo "암호화 방식 : MD5" ;; # 메뉴얼 확인 : man 5 shadow ; man 3 crypt
# 2a) echo "암호화 방식 : Blowfish" ;;
# 5) echo "암호화 방식 : SHA-256" ;;
# 6) echo "암호화 방식 : SHA-512" ;;
# *) echo "암호화 방식 : None" ;;
(CentOS 7.x) U-04.sh
#!/bin/bash
. function.sh
BAR
CODE [U-04] 패스워드 파일 보호
cat << EOF >> $RESULT
[양호]: 쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하는 경우
[취약]: 쉐도우 패스워드를 사용하지 않고, 패스워드를 암호화하여 저장하지 않는 경우
EOF
BAR
PASSFILE=/etc/passwd
#PASSFILE=passwd
SHADOWFILE=/etc/shadow
#SHADOWFILE=shadow
if [ -f $PASSFILE -a -f $SHADOWFILE ] ; then
Ret1=$(CheckEncryptedPasswd $SHADOWFILE)
case $Ret1 in
None) WARN '쉐도우 패스워드를 사용하지만, 패스워드가 암호화 되어 있지 않습니다.' ;;
TrueTrue) OK '쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하고 있습니다.' ;;
WarnTrue) OK '쉐도우 패스워드를 사용하거나, 패스워드를 암호화하여 저장하고 있습니다.' ; INFO 'SHA-512 알고리즘을 사용할 것을 권장합니다.' ;;
*) : ;;
esac
else
WARN "쉐도우 패스워드를 사용하지 않고 있습니다."
fi
cat $RESULT
echo ; echo
[Root 이외의 UID가 '0' 금지]
1. 취약점 분석/평가 방법 상세 가이드
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
셀 전체 선택
열 너비 조절
행 높이 조절
1.5 root 이외의 UID가 '0' 금지 ■ 점검 분류 항목: 계정 관리 ■ 세부 점검 항목: root 이외의 UID가 '0' 금지 ■ 대상: 리눅스 ■ 위험도: 중 ■ 관련 코드: U-05
(1) 취약점 개요 root(UID=0)와 동일한 *UID(User Identification)를 가진 계정 존재 시 root 권한으로 시스템 접근이 가능하므로 root의 UID를 가진 계정이 존재하지 않도록 확인하여야 함. root 뿐만 아니라 사용자 간 UID 중복 시에도 권한 중복으로 인한 사용자 감사 추적이 어렵게 되는 문제가 발생하므로 계정 및 UID 확인이 필요함. UID(User Identification): 여러 명의 사용자가 동시에 사용하는 시스템에서 사용자가 자신을 대표하기 위해 쓰는 이름.
(2) 판단기준 양호: root 계정과 동일한 UID를 갖는 계정이 존재하지 않는 경우 취약: root 계정과 동일한 UID를 갖는 계정이 존재하는 경우
(3) 조치방법 UID가 0인 계정 존재 시 변경할 UID를 확인 후 다른 UID로 변경 및 불필요 시 삭제, 계정이 사용 중이면 명령어로 조치가 안 되므로 /etc/passwd 파일 설정 변경
(4) 보안 설정 방법 1. usermod 명령으로 UID가 0인 일반 계정의 UID를 500 이상으로 수정 (예) test 계정의 UID를 2002 로 바꿀 경우 # usermod -u 2002 test ※ 각 OS별로 사용자 UID 체계가 달라 시스템 계정 및 일반 사용자 계정이 부여받는 값의 범위에 차이가 있으며, 공통적으로 관리자는 "UID=0"을 부여받음
(5) 조치시 영향 해당 계정에 관리자 권한이 필요하지 않으면 일반적으로 영향 없음 |
고객에게 취약점을 어떻게 이해시킬것인가? |
(고객에게 설명)
리눅스 운영체제에서는 사용자 이름이 아닌 UID를 통해 권한 할당이 된다. 따라서 user01 사용자 이름을 가지고 있지만 UID 번호가 0으로 되어 있다면, 관리자와 동인할 기능을 갖는다.
간단한 테스트
# usermod -u 0 -o user01
# telnet localhost
user01 사용자로 로그인
$ id
$ exit
# usermod -u 1001 user01
관련문서 제작 |
[실습] user01 사용자를 추가하고 uid 번호를 0으로 설정하여 권한 상승 실습
컨설팅 |
(보안 정책)
중복된 UID 번호를 쓰는 사용자가 존재하는지와 UID 번호가 0으로 설정된 사용자 확인
2. 취약점 점검 스크립트 제작
(스크립트 작성 시 참고사항)
root 사용자와 동일한 UID를 갖는 사용자가 있을 때는 반드시 컨설턴트에게 알려줘야 한다.
(스크립트 작성 시 판단 근거)
# cat /etc/passwd | awk -F: '{print $3}' | sort -n | uniq –d
# cat /etc/passwd | awk -F: '$3 == '0' {print $1}'
root
user01
# cat /etc/passwd | awk -F: '$3 == '0' {print $1, ":", $3}'
root : 0
user01 : 0
(스크립트 안에 들어갈 내용)
■ U-05.sh
#!/bin/bash
. function.sh TMP1=`SCRIPTNAME`.log > $TMP1
BAR CODE [U-05] root 이외의 UID가 '0' 금지 cat << EOF >> $RESULT [양호]: root 계정과 동일한 UID를 갖는 계정이 존재하지 않는 경우 [취약]: root 계정과 동일한 UID를 갖는 계정이 존재하는 경우 EOF BAR
FILE1=/etc/passwd
echo "[root 사용자와 동일한 UID를 갖는 계정들]" > $TMP1 awk -F: '$3 == "0" {print $1 " = 0"}' $FILE1 >> $TMP1 NUM=`cat $TMP1 | wc -l` if [ $NUM -ge 3 ] ; then WARN root 계정과 동일한 UID를 갖는 계정이 존재합니다. INFO $TMP1 파일을 점검합니다. else OK root 계정과 동일한 UID를 갖는 계정은 없습니다. fi
cat $RESULT echo; echo |
(CentOS 7.x) 다른 예 : U-05.sh
#!/bin/bash
. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1
BAR
CODE [U-05] root 이외의 UID가 '0' 금지
cat << EOF >> $RESULT
[양호]: root 계정과 동일한 UID를 갖는 계정이 존재하지 않는 경우
[취약]: root 계정과 동일한 UID를 갖는 계정이 존재하는 경우
EOF
BAR
PASSFILE=passwd
awk -F: '$3 == "0" {print $1}' $PASSFILE >> $TMP1
UIDZEROCNT=$(wc -l < $TMP1)
if [ $UIDZEROCNT -ge 2 ] ; then
WARN 'root 계정과 동일한 UID를 갖는 계정이 존재합니다'
INFO $TMP1 참고 하십시오
else
OK 'root 계정과 동일한 UID를 갖는 계정은 없습니다.'
fi
cat $RESULT
echo ; echo
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day96-1: (주통)계정관리 U-10~12 스크립트 제작 (0) | 2021.01.22 |
---|---|
정보보안 과정 DAY96: (주통)계정 관리 U-06 ~ 09 스크립트 제작 (0) | 2021.01.22 |
정보보안 과정 Day95: (주통)계정관리 U-02 ~03 / 패스워드 복잡성/ 계정 잠금 임계 값 설정 점검 스크립트 제작 (2) | 2021.01.21 |
정보보안 과정 Day94-1: 리눅스 루트 암호 초기화 방법(주정통 기반) (0) | 2021.01.20 |
정보보안 과정 Day94: 주통 스크립트 제작 시작 / 1. 계정관리 1.1 (0) | 2021.01.20 |