[목차]

 

 

동일한 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

을 추가로 설정 후 프로그램을 돌려보자. 

 

 

 

루트 사용자는 원격 접속 안되도록 배제시켜야 한다.

 

 

 

 

728x90

+ Recent posts