[목차]
동일한 UID 금지 (1.13)
1. 취약점 분석/평가 방법 상세 가이드
2. 취약점 점검 스크립트 제작
사용자 Shell 점검 (1.14)
1. 취약점 분석/평가 방법 상세 가이드
2. 취약점 점검 스크립트 제작
[동일한 UID 금지]
1. 취약점 분석/평가 방법 상세 가이드
1.13 동일한 UID 금지 ■ 점검 분류 항목: 계정 관리 ■ 세부 점검 항목: 동일한 UID 금지 ■ 대상: 리눅스 ■ 위험도: 중 ■ 관련 코드: U-13
(1) 취약점 개요 UNIX 시스템은 모든 사용자 계정에 UID를 부여하여 해당 UID로 사용자 이름, 패스워드, 홈 디렉터리 등과 같은 사용자 정보를 대응시킴. 만약 중복된 UID가 존재할 경우 시스템에서 동일한 사용자로 인식하여 문제가 발생할 수 있으며, 공격자에 의한 개인 정보 및 관련 데이터 유출 발생 시에도 감사 추적이 어렵게 됨.
(2) 판단기준 양호: 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우 취약: 동일한 UID로 설정된 사용자 계정이 존재하는 경우
(3) 조치방법 동일한 UID로 설정된 사용자 계정의 UID를 서로 다른 값으로 변경
(4) 보안 설정 방법 ■ 점검 방법 # cat /etc/passwd 동일한 UID를 갖는 계정이 존재하는 경우 아래의 보안설정방법에 따라 설정을 변경함 ■ 설정 방법 usermod 명령으로 동일한 UID로 설정된 사용자 계정의 UID 변경 # usermod -u <변경할 UID값> <user_name>
(5) 조치시 영향 일반적으로 영향 없음 |
2. 취약점 점검 스크립트 제작
(스크립트 작성시 유의사항)
/etc/passwd 파일내에 동일한 UID 번호를 가진 사용자가 존재하면 안된다.
아래 사항을 참고한다.
UID 체크 명령어
# cat /etc/passwd | awk -F: '{print $3}'
중복되는 부분 확인 및 제거 / 라인 카운트
# cat /etc/passwd | sort -n | uniq -d | wc -l
# awk -v check=0 -F: ' $3 == check { print $1 }' /etc/passwd
# awk -v check=1001 -F: ' $3 == check { print $0 }' /etc/passwd
# cat /etc/passwd | awk -F: '{print $3}' > output.txt # NUM=`cat output.txt | sort -n | uniq -d | wc -l` # if [ $NUM -gt 0 ] ; then echo "[ WARN ]" else echo "[ OK ]" fi |
or
#FILE=/etc/passwd FILE1=file1 TMP1=output.txt
cat $FILE1 | awk -F: '{print $3}' | sort -n | uniq -d > $TMP1 if [ -s $TMP1 ] ; then echo "[ WARN ]" cat $TMP1 | while read SARAM do awk -v CHECK=$SARAM -F: '$3 == CHECK {print $1 " = " CHECK}' $FILE1 done else echo "[ OK ]" fi |
------------------------------ 참고 ---------------------------------------
# awk -v <변수이름>=<값> '{print <변수이름>}'
ex) awk -v var1=5 '{print var1}' file1
# awk -v <변수이름>=<값> -v <변수이름>=<값> '{print <변수이름><변수이름>}'
ex) awk -v var1=5 -v var2=5 '{print var1 var2}' file1
---------------------------------------------------------------------------
U-13.sh
#!/bin/bash
. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1
TMP2=$(mktemp)
TMP3=$(mktemp)
> $TMP2
> $TMP3
BAR
CODE [U-13] 동일한 UID 금지
cat << EOF >> $RESULT
양호: 동일한 UID로 설정된 사용자 계정이 존재하지 않는 경우
취약: 동일한 UID로 설정된 사용자 계정이 존재하는 경우
EOF
BAR
# PASS_FILE=/etc/passwd
PASS_FILE=/root/scripts/passwd
awk -F: '{print $3}' $PASS_FILE | sort -n | uniq -d > $TMP2
if [ -s $TMP2 ] ; then # -s =파일의 '사이즈'가 존재하면
WARN '동일한 UID로 설정된 사용자 계정이 존재합니다.'
INFO '자세한 내용은 $TMP1 파일을 참고하세요.'
cat << EOF >> $TMP1
===============================================================
다음 내용은 /etc/passwd 파일의 내용 중 UID가 중복된 사용자의 정보입니다.
ex) $ awk -v CHECK=1001 -F: ' $3 ==CHECK {print \$0}' /etc/passwd
===============================================================
EOF
for Saram in $(cat $TMP2)
do
#echo $Saram
awk -v CHECK=$Saram -F: '$3 == CHECK {print $0}' $PASS_FILE >> $TMP1
done
else
OK '동일한 UID 로 설정된 사용자 계정이 존재하지 않습니다.'
fi
cat $TMP2
cat $RESULT
echo ; echo
[사용자 Shell 점검]
1. 취약점 분석/평가 방법 상세 가이드
1.14 사용자 shell 점검 ■ 점검 분류 항목: 계정 관리 ■ 세부 점검 항목: 사용자 shell 점검 ■ 대상: 리눅스 ■ 위험도: 하 ■ 관련 코드: U-14
(1) 취약점 개요 로그인이 필요 없는 계정을 이용해 시스템에 접근하여 사용자의 명령어를 해석하고 악용할 가능성이 있으므로, /bin/false *쉘(Shell)을 부여해 로그인을 금지함. *쉘(Shell): 대화형 사용자 인터페이스로써, 운영체제(OS) 가장 외곽계층에 존재하여 사용자의 명령어를 이해하고 실행함.
(2) 판단기준 취약: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되어 있는 경우 양호: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되지 않은 경우
(3) 조치방법 로그인이 필요하지 않은 계정에 대해 /bin/false(nologin) 쉘 부여
(4) 보안 설정 방법 ■ 점검 방법 # cat /etc/passwd | egrep "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^ listen|^operator|^games|^gopher" | grep -v "admin"
■ 설정 방법 1. vi 편집기를 이용하여 “/etc/passwd” 파일을 연 후 2. 로그인 쉘 부분인 계정 맨 마지막에 /bin/false(nologin) 부여 및 변경 (수정 전) daemon:x:1:1::/:/sbin/ksh (수정 후) daemon:x:1:1::/:/bin/false 또는, daemon:x:1:1::/:/sbin/nologin 일반적으로 로그인이 불필요한 계정 daemon, bin, sys, adm, listen, nobody, nobody4, noaccess, diag, listen, operator, games, gopher 등 일반적으로 UID 100 이하 60000 이상의 시스템 계정 해당
(5) 조치시 영향 일반적인 경우 영향 없음 모호한 경우 “/etc/shadow” 파일에서 해당 계정에 패스워드 존재 여부로 확인 |
(스크립트 작성시 참고 사항)
daemon, bin, sys, adm, listen, nobody, nobody4, noaccess, diag, listen, operator, games, gopher 사용자들은 로그인할 수 있는 쉘을 할당 받으면 안된다. 따라서, 이런 사용자에게 로그인 쉘이 할당 되어 있는지 확인한다.
아래 내용을 참고 한다.
# cat /etc/passwd | egrep \ "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^listen|^operator|^games|^gopher" \ | grep -v "admin \ | egrep bash|ksh|csh |
or
위 형식 말고 아래 형식이 추천된다.
awk -F: '$3 < 100 || $3 > 60000 {print $0}' /etc/passwd \ | egrep '(/bin/bash|/bin/sh|/bin/ksh|/bin/csh)' \ | egrep -v root > result.txt if [ -s result ] ; then echo "[ WARN ]" cat result.txt else echo "[ OK ]" fi |
CentOS 5.x : System Account UID 번호의 범위 : 0 ~ 499
CentOS 6.x : System Account UID 번호의 범위 : 0 ~ 799
CentOS 7.x : System Account UID 번호의 범위 : 0 ~ 999
VER=`cat /etc/redhat-release | awk '{print $3}' | awk -F. '{print $1}'`
case $VER in
5) UID_NUM=500 ;;
6) UID_NUM=800 ;;
7) UID_NUM=1000 ;;
*) UID_NUM=500 ;;
esac
확인 커맨드
# awk -v CHKUID=$UID_NUM -F: '$3 < CHKUID || $3 > 60000 {print $0}' /etc/passwd
# awk -F: '$3 < 1000 || $3 > 60000 {print $0}' /etc/passwd | egrep -v '^root:' | awk -F: '{print $7}'
7번이 쉘 자리 / 루트는 빼줘야 한다!
* 버전 별로 확인하는 방법을 만들어 주면 좋다.
2. 취약점 점검 스크립트 제작
U-14.sh
#!/bin/bash
. function.sh TMP1=`SCRIPTNAME`.log > $TMP1
BAR CODE [U-14] 사용자 shell 점검 cat << EOF >> $RESULT [취약]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되어 있는 경우 [양호]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되지 않은 경우 EOF BAR INFO $TMP1 파일을 점검합니다.
FILE1=/etc/passwd cat /etc/passwd \ | egrep "^daemon|^bin|^sys|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^listen|^operator|^games|^gopher" \ | egrep -v "admin" \ | egrep "(bash$|ksh$|csh$|sh$)" >> $TMP1 if [ -s $TMP1 ] ; then WARN 로그인이 필요하지 않은 계정에 쉘이 부여되었습니다. else OK 로그인이 필요하지 않은 계정에 쉘이 부여되지 않았습니다. fi
cat $RESULT echo ; echo |
■ U-14.sh (CentOS 7.X)
#!/bin/bash
. function.sh
TMP1=`SCRIPTNAME`.log > $TMP1
TMP2=`SCRIPTNAME`-2.log > $TMP2
BAR CODE [U-14] 사용자 shell 점검 cat << EOF >> $RESULT [취약]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되어 있는 경우 [양호]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되지 않은 경우 EOF BAR
FILE1=passwd TMP3=/tmp/tmp1 cat $FILE1 | egrep '^daemon|^bin|^adm|^listen|^nobody|^nobody4|^noaccess|^diag|^operator| ^games|^gopher' | grep -v "admin" | egrep '/sh$|/bash$|/csh$|/tcsh$|ksh$'> $TMP3 if [ -s $TMP3 ] ; then WARN 로그인이 필요하지 않은 계정에 쉘이 부여 되었습니다. INFO $TMP1 파일을 점검합니다. cat $TMP3 | awk -F: '{print $1 " : " $7}' > $TMP1 else OK 로그인이 필요하지 않은 계정에 쉘이 부여되지 않았습니다. fi
INFO $TMP2 파일에 추가적인 정보가 존재합니다. echo "다음 내용은 /etc/passwd 파일의 시스템 사용자가 사용하는 쉘 목록입니다." > $TMP2 echo "========================================================" >> $TMP2 cat $FILE1 | awk -F: '$3 >= 1 && $3 < 1000 {print $1 " : " $7}' >> $TMP2
cat $RESULT echo ; echo |
점검할려고 하는 사용자 범위 => 쉘(sh/ksh/csh/bash)을 사용하면 안된다.
CentOS 7.x : System Account UID 점검 범위 : 1 ~ 199 CentOS 7.x : 권한 없는 사용자 UID 점검 범위: 60001 ~ 65535 |
(CentOS 7.x) U-14.sh
#!/bin/bash
. function.sh TMP1=`SCRIPTNAME`.log > $TMP1
TMP2=/tmp/tmp1
BAR CODE [U-14] 사용자 shell 점검 cat << EOF >> $RESULT [취약]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되어 있는 경우 [양호]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되지 않은 경우 EOF BAR
# PASSFILE=/etc/passwd PASSFILE=passwd
# (1) 점검해야 하는 사용자 목록 생성 awk -F: '$3 < 1000 || $3 > 60000 {print $0}' $PASSFILE | grep -v '^root:' \ | egrep '/sh$|/csh$|/ksh$|/bash$' > $TMP2 if [ -s $TMP2 ] ; then WARN 로그인이 필요하지 않은 계정에 로그인 쉘이 부여되어 있습니다. INFO $TMP1 파일의 내용을 참고하십시오. cat << EOF >> $TMP1 ==================================================================== 1. 다음 같은 조건을 가진, 로그인 가능 쉘이 부여된 사용자 목록입니다. * UID 번호가 1 ~ 299 사용자 중 로그인 가능 쉘이 부여된 사용자 목록 * UID 번호가 60001 ~ 65535 사용자 중 로그인 가능 쉘이 부여된 사용자 목록
$(cat $TMP2) ==================================================================== EOF else OK 로그인이 필요하지 않은 계정에 로그인 쉘이 부여되어 있지 않습니다. fi
cat $RESULT echo ; echo |
#!/bin/bash
. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1
TMP2=/tmp/tmp1
> $TMP2
BAR
CODE [U-14] 사용자 shell 점검
cat << EOF >> $RESULT
[취약]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되어 있는 경우
[양호]: 로그인이 필요하지 않은 계정에 /bin/false(nologin) 쉘이 부여되지 않은 경우
EOF
BAR
# PASSFILE=/etc/passwd
PASSFILE=passwd
# (1) 점검해야 하는 사용자 목록 생성
#awk -F: '$3 < 1000 || $3 > 60000 {print $0}' $PASSFILE | grep -v '^root:' \
# | egrep '/sh$|/csh$|/ksh$|/bash$' > $TMP2
awk -F: '$3 < 1000 || $3 > 60000 {print $0}' /etc/passwd | egrep -v '^root:' | awk -F: '{print $1, $7}' > $TMP2
if [ -s $TMP2 ] ; then
WARN 로그인이 필요하지 않은 계정에 로그인 쉘이 부여되어 있습니다.
INFO $TMP1 파일의 내용을 참고하십시오.
cat << EOF >> $TMP1
====================================================================
1. 다음 같은 조건을 가진, 로그인 가능 쉘이 부여된 사용자 목록입니다.
* UID 번호가 1 ~ 299 사용자 중 로그인 가능 쉘이 부여된 사용자 목록
* UID 번호가 60001 ~ 65535 사용자 중 로그인 가능 쉘이 부여된 사용자 목록
$(cat $TMP2)
====================================================================
EOF
else
OK 로그인이 필요하지 않은 계정에 로그인 쉘이 부여되어 있지 않습니다.
fi
cat $RESULT
echo ; echo
[Session Timeout 설정]
1. 취약점 분석/평가 방법 상세 가이드
1.15 Session Timeout 설정 ■ 점검 분류 항목: 계정 관리 ■ 세부 점검 항목: Session Timeout 설정 ■ 대상: 리눅스 ■ 위험도: 하 ■ 관련 코드: U-15
(1) 취약점 개요 계정이 접속된 상태로 방치될 경우 권한이 없는 사용자에게 중요시스템이 노출되어 악의적인 목적으로 사용될 수 있으므로 일정 시간 이후 어떠한 이벤트가 발생하지 않으면 연결을 종료하는 Session Timeout 설정이 필요함.
(2) 판단기준 양호: Session Timeout이 600초(10분) 이하로 설정되어 있는 경우 취약: Session Timeout이 600초(10분) 이하로 설정되지 않은 경우
(3) 조치방법 600초(10분) 동안 입력이 없을 경우 접속된 Session을 끊도록 설정
(4) 보안 설정 방법 ■ 점검 방법 <sh, ksh, bash 사용 시> # cat /etc/profile(.profile) TMOUT=600 export TMOUT <csh 사용 시> # cat /etc/csh.login 또는, #cat /etc/csh.cshrc set autologout=10
■ 설정 방법 - sh(born shell), ksh(korn shell), bash(born again shell)을 사용하는 경우 - 1. vi 편집기를 이용하여 “/etc/profile(.profile)” 파일을 연 후 2. 아래와 같이 수정 또는, 추가 TMOUT=600 (단위: 초) export TMOUT - csh 을 사용하는 경우 - 1. vi 편집기를 이용하여 “/etc/csh.login” 또는, “/etc/csh.cshrc” 파일을 연 후 2. 아래와 같이 수정 또는, 추가 set autologout=10 (단위: 분)
(5) 조치시 영향 모니터링 용도로 사용할 경우 해당 계정의 환경변수 파일에만 예외적으로 600초 이상의 시간 입력 (예) root 로 모니터링 할 경우 /.profile, /.bash_profile 등에 600초 이상 입력 |
고객에게 취약점을 어떻게 이해시킬것인가? |
(고객에게 설명)
로그인하여 계정을 모두 사용한 후 사용자의 부주의로 계정이 접속한 상태로 방치할 경우 악의 적인 목적으로 사용 될 수 있으며, 권한이 없는 사용자에 의한 사용이 이루어 질 수 있음. 그러므로 일정 시간 이후 어떠한 이벤트가 발생하지 않으면 연결을 강제로 종료하는 session timeout 설정이 필요함
관련문서 제작 |
[실습] TMOUT 변수 설정
(로컬) 화면 잠금 기능(system > preference > screensaver, screenlock)
(CentOS 7.x : 설정 > 개인 정보 > 화면잠금)
(원격) 원격접속시 TMOUT 변수 설정(EX: export TMOUT=60)
[실습] HISTTIMEFORMAT 변수 설정
■ HISTTIMEFORMAT 변수
명령어 히스토리(Command history) 기능에 시간을 설정할 수 있는 기능이다.
사용자가 수행한 명령어를 추적할 때 사용할 수 있으므로 사용을 권장한다.
# vi /etc/profile
..... (중략) ..... for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then if [ "${-#*i}" != "$-" ]; then . $i else . $i >/dev/null 2>&1 fi fi done
unset i unset pathmunge
# # (1) Sfecific Configuration # export HISTTIMEFORMAT="%F %T " |
[참고] history -c (~/.bash_logout)
(history -c 명령어의 필요성)
# echo user01 | passwd --stdin user01
# mysql -h 172.16.6.249 -u root -p'password.'
# smbclient -L 192.168.20.200 -u root -p 'password.'
(작업 방법에 대한 예제)
# vi /etc/skel/.bash_logout
# ~/.bash_logout
/usr/bin/clear history -c |
■ 시간 출력 포멧 변경 프로그램
time.sh
#!/bin/bash
eval date -d \'1970-01-01 UTC $1 seconds\' +\"%Y-%m-%d %T %z\"
# chmod 755 time.sh
# cat ~/.bash_history
-> 적당한 시간 선택
# ./time.sh 1611543275
time_conversion.sh
#!/bin/bash
if [ $# -ne 1 ];then
echo "Usage : $0 <-user01/.bash_history>"
exit 1
fi
FILE1=$1
TMP1=/tmp/tmp1
TMP2=/tmp/tmp2
TMP3=/tmp/tmp3
> $TMP1
> $TMP2
> $TMP3
cat $FILE1 | egrep '^#' | cut -c2- > $TMP1
cat $TMP1 | while read TIME
do
/root/bin/time.sh $TIME >> $TMP2
done
cat $FILE1 | egrep -v '^#' >> $TMP3
paste $TMP2 $TMP3
# chmod 755 /root/bin/time_conversion.sh
# /root/bin/time_conversion.sh ~root/.bash_history
time_conversion2.sh
#!/bin/bash
FILE=/root/bin/bash_history
TMP1=/tmp/tmp1
TMP2=/tmp/tmp2
> $TMP1
> $TMP2
grep -n '^#' $FILE | awk -F: '{print $1}' > $TMP1
LastLine=$(tail -1 $TMP1) ; echo $LastLine
sed -i '$d' $TMP1 # 마지막 줄을 지워라
for N in $(cat $TMP1)
do
if [ $N -ne $LastLine ] ; then
sed -n "$N,/^#/p" $FILE | sed '$d' > $TMP2
#1번부터 다음 번째 #(번호)까지 프린트해라. 그 값의 마지막 값을 지워라.
TIME=$(sed -n '1p' $TMP2 | cut -c2-) # 첫 번째 라인을 출력
echo "------- $(date -d "@${TIME}") --------"
sed '1d' $TMP2 #첫 번째 라인을 삭제하고 출력
else
sed -n "$N,\$p" $FILE > $TMP2 #앞에건 변수 뒤에건 아님
TIME=$(sed -n '1p' $TMP2 | cut -c2-)
echo "------- $(date -d "@${TIME}") -------"
sed -n '2,$p' $TMP2
fi
done
컨설팅 |
(정리) 보안 정책
(로컬)화면 잠금(Screen Lock) 기능을 설정한다.
(원격)원격접속시 일정한 시간(예: TMOUT=600)안에 명령어 수행이 없으면 자동 로그아웃을 설정한다.
사용자의 수행한 명령어를 추적하기 위해서 HISTTIMEFORMAT 변수(/etc/profile)를 설정한다.
2. 취약점 점검 스크립트 제작
(스크립트 작성시 참고 사항)
세션 타임 아웃 설정이 /etc/profile, /etc/bashrc 또는 사용자 홈디렉토리에 설정 되어 있을 수 있다.
따라서, 사용자 한명을 선정하여 점검하는 것으로 한다.(또한, su 명령어를 사용할 수 있는 사용자이어야 한다.)
TMOUT 변수가 설정되지 않은 경우, TMOUT 변수가 600초 초과로 설정되어 있는 경우는 취약한것으로 판단한다.
아래 내용을 참고한다.
NUM=`echo $TMOUT` if [ $NUM ] ; then if [ $NUM -le 600 ] ; then echo "[ OK ]" else echo "[ WARN ]" fi else echo "NUM Variable is not exist" fi |
(스크립트 작성)
#!/bin/bash
. function.sh TMP1=`SCRIPTNAME`.log > $TMP1
BAR CODE [U-15] Session Timeout 설정 cat << EOF >> $RESULT [양호]: Session Timeout이 600초(10분) 이하로 설정되어 있는 경우 [취약]: Session Timeout이 600초(10분) 이하로 설정되지 않은 경우 EOF BAR
FILE1=/etc/passwd USER1=`cat $FILE1 | tail -1 | awk -F: '{print $1}'` TMOUTCHECK=`su - $USER1 -c 'echo $TMOUT'` if [ -n $TMOUTCHECK -a $TMOUTCHECK -le 600 ] ; then OK 세션 타임아웃이 600초 이하로 설정되어 있다. elif [ -z $TMOUTCHECK ] ;then WARN 세션 타임아웃이 전혀 설정 되어 있지 않다. else WARN 세션 타임아웃이 600초 초과로 설정되어 있지 않다. fi
cat $RESULT echo ; echo |
■ (CentOS 7.X) U-15.sh
#!/bin/bash
. function.sh
TMP1=`SCRIPTNAME`.log > $TMP1
BAR CODE [U-15] Session Timeout 설정 cat << EOF >> $RESULT [양호]: Session Timeout이 600초(10분) 이하로 설정되어 있는 경우 [취약]: Session Timeout이 600초(10분) 이하로 설정되지 않은 경우 EOF BAR
FILE1=/etc/passwd TMOUT_USER=$(cat $FILE1 | awk -F: '$3 >= 1000 && $3 < 60000 {print $1}' | head -1) TMOUT_VALUE=$(su - $TMOUT_USER -c 'echo $TMOUT') if [ $TMOUT_VALUE -le 600 ] ; then OK 세션 타임아웃이 600초 이하입니다. else WARN 세션 타임아웃이 600초 초과로 설정되어 있습니다. INFO $TMP1 정보를 확인합니다. echo "Sessions Timeout : $TMOUT_VALUE" > $TMP1 fi
cat $RESULT echo ; echo |
■ (CentOS 7.X) U-15.sh
#!/bin/bash
. function.sh TMP1=`SCRIPTNAME`.log > $TMP1
TMP2=/tmp/tmp1
BAR CODE [U-15] Session Timeout 설정 cat << EOF >> $RESULT [양호]: Session Timeout이 600초(10분) 이하로 설정되어 있는 경우 [취약]: Session Timeout이 600초(10분) 이하로 설정되지 않은 경우 EOF BAR
PASSFILE=/etc/passwd
TMOUT_USER=$(awk -F: '$3 >= 1000 && $3 < 60000 {print $1}' $PASSFILE | head -1) TMOUT_OUTPUT=$(su - -c 'echo $TMOUT' $TMOUT_USER) if [ -z $TMOUT_OUTPUT ] ; then WARN 세션 타임아웃 설정이 되어 있지 않습니다. else INFO 세션 타임아웃 설정이 되어 있습니다. if [ $TMOUT_OUTPUT -le 600 ] ; then OK "세션 타임아웃이 600초(10분) 이하로 설정되어 있습니다." else WARN "세션 타임아웃이 600초(10분) 이하로 설정되지 않았습니다." fi INFO $TMP1 파일을 참고 하십시오. echo "========================================================" >> $TMP1 echo "1. 무작위로 선출된 사용자 $TMOUT_USER의 TMOUT 변수 설정 확인" >> $TMP1 echo "" >> $TMP1 echo "$TMOUT_USER's \$TMOUT = $TMOUT_OUTPUT" >> $TMP1 echo "========================================================" >> $TMP1 fi
cat $RESULT echo ; echo |
#!/bin/bash
. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1
BAR
CODE [U-15] Session Timeout 설정
cat << EOF >> $RESULT
[양호]: Session Timeout이 600초(10분) 이하로 설정되어 있는 경우
[취약]: Session Timeout이 600초(10분) 이하로 설정되지 않은 경우
EOF
BAR
PASS_FILE=/etc/passwd
TMP2=/tmp/tmp2
> $TMP2
awk -F: '$3 >= 1000 && $3 <= 60000 {print $1}' $PASS_FILE > $TMP2
for Saram in $(cat $TMP2)
do
#echo $Saram
TMOUT_USER=$Saram
TMOUT_OUTPUT=$(su - $TMOUT_USER -c 'echo $TMOUT')
# echo $TMOUT_PUTPUT
if [ -z $TMOUT_OUTPUT ] ; then
echo "[ WARN ] $TMOUT_USER : not configured" >> $TMP1
else
if [ $TMOUT_OUTPUT -le 600 ] ; then
echo "[ OK ] $TMOUT_USER : $TMOUT_OUTPUT" >> $TMP1
else
echo "[ WARN ] $TMOUT_USER : $TMOUT_OUTPUT" >> $TMP1
fi
fi
done
if grep -q -w WARN $TMP1 ; then
WARN 'Session TimeOut 이 없거나 600초(10분) 이하로 설정되지 않은 경우'
else
OK 'Session TimeOut 이 없거나 600초(10분) 이하로 설정되어 있는 경우'
fi
INFO $TMP1 '파일의 내용을 참고합니다.'
cat $RESULT
echo ; echo
다른 사용자로 접속해
.bashrc 에
TMOUT=900
을 추가로 설정 후 프로그램을 돌려보자.
루트 사용자는 원격 접속 안되도록 배제시켜야 한다.
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 DAY97-2: (주통) U-16, 17, 24 파일 및 디렉토리 관리 시작 (0) | 2021.01.25 |
---|---|
정보보안 과정 DAY97-1 : 관리자의 잘못된 PATH 변수 설정 (0) | 2021.01.25 |
정보보안 과정 Day94-2 : PAM 이론 실습 (0) | 2021.01.22 |
정보보안 과정 Day96-1: (주통)계정관리 U-10~12 스크립트 제작 (0) | 2021.01.22 |
정보보안 과정 DAY96: (주통)계정 관리 U-06 ~ 09 스크립트 제작 (0) | 2021.01.22 |