[목차]

 

 

root 홈, 패스(PATH) 디렉토리 권한 및 패스(PATH) 설정 (2.1)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

파일 및 디렉토리 소유자 설정 (2.2)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

SetUID,SGID, Sticky Bit 설정 파일 점검 (2.9)

1. 취약점 분석/평가 방법 상세 가이드

2. 취약점 점검 스크립트 제작

 

 

 


 

 

 

[root 홈, 패스(PATH) 디렉토리 권한 및 패스(PATH) 설정]

 

 

 

1. 취약점 분석/평가 방법 상세 가이드

2.1 root 홈, 패스(PATH) 디렉토리 권한 및 패스(PATH) 설정

 

■ 점검 분류 항목: 파일 및 디렉토리 관리

■ 세부 점검 항목: root 홈, 패스(PATH) 디렉토리 권한 및 패스(PATH) 설정

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-16

 

(1) 취약점 개요

root 계정의 PATH 환경변수에 “.” (현재 디렉터리 지칭)이 포함되어 있으면, root 계정의 인가자로 인해 비의도적으로 현재 디렉터리에 위치하고 있는 명령어가 실행될 수 있음. 즉 “.”이 /usr/bin이나 /bin, /sbin 등 명령어들이 위치하고 있는 디렉터리 보다 우선하여 위치하고 있을 경우, root 계정의 인가자가 특정 명령을 실행하면, 비인가자가 불법적으로 위치시킨 파일을 실행하여 예기치 않은 결과를 가져올 수 있음.

잘못된 PATH의 우선순위 등이 침해사고에 이용될 수 있으므로 “.” 뿐만 아니라 비인가자가 불법적으로 생성한 디렉터리를 우선으로 가리키지 않도록 설정함.

 

(2) 판단기준

양호: PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되지 않은 경우

취약: PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되어 있는 경우

 

(3) 조치방법

root 계정의 환경변수 설정파일(“/.profile”, “/.cshrc” 등)과 “/etc/profile” 등에서 PATH 환경변수에 포함되어 있는 현재 디렉터리를 나타내는 “.”을 PATH 환경변수의 마지막으로 이동 “/etc/profile”, root 계정의 환경변수 파일, 일반계정의 환경변수 파일을 순차적으로 검색하여 확인

 

(4) 보안 설정 방법

■ 점검 방법

# echo $PATH

/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/local/bin:/usr/bi

n:/usr/X11R6/bin:/root/bin

위와 같이 출력되는 PATH 변수 내에 “.” 또는, “::” 포함 여부 확인

 

■ 설정 방법

1. vi 편집기를 이용하여 root 계정의 설정파일(~/.profile 과 /etc/profile)을 연 후

# vi /etc/profile

2. 아래와 같이 수정

(수정 전) PATH=.:$PATH:$HOME/bin

(수정 후) PATH=$PATH:$HOME/bin

※ 환경변수 파일은 OS별로 약간씩 다를 수 있음

 

(5) 조치시 영향

일반적인 경우 영향 없음

 

 

 

고객에게 취약점을 어떻게 이해시킬것인가?

(고객에게 설명)

root 사용자의 PATH 변수 설정에 현재 디렉토리가 설정이 되어 있다면 일반사용자가 이 취약점을 이용하여 root 권한을 따낼수 있다.

일반사용자가 root 사용자에 의한 프로그램 실행

 

관련문서 제작

[실습] 관리자의 잘못된 PATH 변수 설정 실습

 

이전 글 확인

https://blog.naver.com/takudaddy/222219258541

 

 

 

 

 

 

 

2. 취약점 점검 스크립트 제작

 

(스크립트 작성시 유의 사항)

root 사용자의 잘못된 PATH 설정은 아래와 같다.

 

 

다음 사항을 참고한다.

■ 잘못된 PATH 변수의 설정 예

(X) PATH=:/bin:/usr/bin:/sbin

(X) PATH=/bin:/usr/bin:/sbin:

(X) PATH=/bin::/usr/bin:/sbin

(X) PATH=.:/bin:/usr/bin:/sbin

(X) PATH=/bin:/usr/bin:/sbin:.

(X) PATH=/bin:.:/usr/bin:/sbin

 

echo $PATH | egrep '(^:|:$|::|^.:|:.:|:.$)' >/dev/null 2>&1

if [ $? -eq 0 ] ; then

echo "[ WARN ]"

else

echo "[ OK ]"

fi

 

 

(스크립트 작성)

U-16.sh

#!/bin/bash

 

. function.sh

 

TMP1=`SCRIPTNAME`.log

> $TMP1

 

BAR

CODE '[U-16] root 홈, 패스(PATH) 디렉토리 권한 및 패스(PATH) 설정'

cat << EOF >> $RESULT

[양호]: PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되지 않은 경우

[취약]: PATH 환경변수에 “.” 이 맨 앞이나 중간에 포함되어 있는 경우

EOF

BAR

 

ROOTPATH=`su - root -c 'echo $PATH'`

echo $ROOTPATH | egrep '(^:|:$|::|^.:|:.:|:.$)' >/dev/null 2>&1

if [ $? -eq 0 ] ; then

WARN root 사용자 PATH 환경변수에 현재 디렉토리 포함되어 있습니다.

INFO $TMP1 파일을 참조한다.

echo $ROOTPATH >> $TMP1

else

OK root 사용자 PATH 환경변수에 현재 디렉토리가 포함되어 있지 않습니다.

fi

 

cat $RESULT

echo ; echo

 

 

(CentOS 7.x) U-16.sh

 

 

#!/bin/bash

. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1

BAR
CODE "[U-16] root 홈, 패스(PATH) 디렉토리 권한 및 패스(PATH) 설정"
cat << EOF >> $RESULT
[양호]: PATH 환경변수에 "." 이 맨 앞이나 중간에 포함되지 않은 경우
[취약]: PATH 환경변수에 "." 이 맨 앞이나 중간에 포함되어 있는 경우
EOF
BAR

ROOTPATH=$(su - root -c 'echo $PATH')
CHECKPATH=$(echo $ROOTPATH | egrep '^:|:$|::|^.:|:.:|:.$')
if [ -z $CHECKPATH ] ; then
	OK PATH 환경변수에 "." 이 맨 앞이나 중간에 포함되지 않았습니다.
else
	WARN PATH 환경변수에 "." 이 맨 앞이나 중간에 포함되어 있습니다.
	INFO $TMP1 파일을 참고 하십시오.
	echo "==================================================" >> $TMP1
	echo "1. root 사용자의 PATH 변수 내용입니다." >> $TMP1
	echo "$CHECKEDPATH" >> $TMP1
	echo "==================================================" >> $TMP1
fi


cat $RESULT
echo ; echo

 

 

 

 

 


 

 

 

[파일 및 디렉토리 소유자 설정]

 

 

 

1. 취약점 분석/평가 방법 상세 가이드

2.2 파일 및 디렉토리 소유자 설정

■ 점검 분류 항목: 파일 및 디렉토리 관리

■ 세부 점검 항목: 파일 및 디렉토리 소유자 설정

■ 대상: 리눅스

■ 위험도: 상

■ 관련 코드: U-17

 

 

(1) 취약점 개요

소유자가 존재하지 않는 파일 및 디렉터리는 현재 권한이 없는 자(퇴직, 전직, 휴직 등)의 소유였거나, 관리 소홀로 인해 생긴 파일일 가능성이 있음. 만약 중요 파일 및 디렉터리일 경우 문제가 발생할 수 있으므로 관리가 필요함.

 

 

(2) 판단기준

양호: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하지 않는 경우

취약: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하는 경우

 

 

(3) 조치방법

소유자가 존재하지 않은 파일 및 디렉터리 삭제 또는, 소유자 변경

 

 

(4) 보안 설정 방법

■ 점검 방법

# find / -nouser -print

# find / -nogroup -print

소유자가 nouser, nogroup인 파일이나 디렉터리 존재하는 경우 아래의 보안설정방법에 따라

디렉터리 및 파일 삭제 또는, 소유자 및 그룹을 변경함

 

■ 설정 방법

1. 소유자가 존재하지 않는 파일이나 디렉터리가 불필요한 경우 rm 명령으로 삭제

# rm <file_name>

# rm <directory_name>

※ 삭제할 파일명 또는, 디렉터리명 입력

 

2. 필요한 경우 chown 명령으로 소유자 및 그룹 변경

# chown <user_name> <file_name>

(5) 조치시 영향

일반적인 경우 영향 없음

 

 

 

고객에게 취약점을 어떻게 이해시킬것인가?

(고객에게 설명)

소유자가 존재하지 않는 파일 및 디렉터리는 현재 권한이 없는 자(퇴직자 등)의 소유였거나, 관리 소홀로 인해 생긴 파일일 가능성이 있음. 만일 중요 파일 및 디렉터리일 경우 문제가 발생할 수 있으므로 관리가 필요함

삭제된 소유자의 UID 와 동일한 사용자가 해당파일, 디렉토리 접근 가능.

 

 

 

관련문서 제작

[실습] find 명령어를 사용한 소유자/그룹 없는 파일 검색 및 처리

[실습] 사용자/그룹이 없는 파일 생성

 

① 실습용 사용자(nouser) 생성 및 확인

# useradd nouser

# echo nouser | passwd --stdin nouser

 

Changing password for user nouser.

passwd: all authentication tokens updated successfully.

 


■ useradd 명령어 수행

(ㄱ) /etc/passwd 파일 내용 추가(# grep nouser /etc/passwd)

(ㄴ) /etc/shadow 파일 내용 추가(# grep nouser /etc/shadow)

(ㄷ) /home/nouser 디렉토리 생성(# ls -l /etc/skel/*)

(ㄹ) /etc/group 파일 내용 추가 (# grep nouser /etc/group)

(ㅁ) MAIL BOX 설정(# ls -l /var/spool/mail/$USER)

 

# grep nouser /etc/passwd

nouser:x:504:504::/home/nouser:/bin/bash

 

 

# cd /home

# ls -l

total 17

drwx------ 3 hacker hacker 1024 Sep 16 09:28 hacker

drwx------ 2 root root 12288 Jul 4 05:17 lost+found

drwx------ 3 nouser nouser 1024 Sep 16 09:28 nouser

drwx------ 3 user01 user01 1024 Dec 30 2014 user01

drwx------ 3 user02 user02 1024 Dec 30 2014 user02

drwx------ 3 user03 user03 1024 Dec 30 2014 user03

 

 

② /etc/passwd 파일 백업 및 /etc/passwd 파일 편집

# cp -p /etc/passwd /etc/passwd.old

# vi /etc/passwd

..... (중략) .....

user01:x:500:500::/home/user01:/bin/bash

user02:x:501:501::/home/user02:/bin/bash

user03:x:502:502::/home/user03:/bin/bash

hacker:x:503:503::/home/hacker:/bin/bash

nouser:x:504:504::/home/nouser:/bin/bash

 

-> nouser 라인 삭제

 

# ls -l

total 17

drwx------ 3 hacker hacker 1024 Sep 16 09:28 hacker

drwx------ 2 root root 12288 Jul 4 05:17 lost+found

drwx------ 3 504 nouser 1024 Sep 16 09:28 nouser

drwx------ 3 user01 user01 1024 Dec 30 2014 user01

drwx------ 3 user02 user02 1024 Dec 30 2014 user02

drwx------ 3 user03 user03 1024 Dec 30 2014 user03

 

 

 

 

③ nouser 파일들 목록 점검

# find / -nouser 2>/dev/null

/home/nouser

/home/nouser/.bash_logout

/home/nouser/.bash_profile

/home/nouser/.mozilla

/home/nouser/.mozilla/extensions

/home/nouser/.mozilla/plugins

/home/nouser/.bashrc

/home/nouser/.emacs

/var/spool/mail/nouser

 

 

# find / -nouser -ls 2>/dev/null

1 drwx------ 3 504 nouser 1024 Sep 16 09:28 /home/nouser

77523 1 -rw-r--r-- 1 504 nouser 33 Sep 16 09:28 /home/nouser/.bash_logout

77527 1 -rw-r--r-- 1 504 nouser 176 Sep 16 09:28 /home/nouser/.bash_profile

77524 1 drwxr-xr-x 4 504 nouser 1024 Sep 16 09:28 /home/nouser/.mozilla

77525 1 drwxr-xr-x 2 504 nouser 1024 Sep 16 09:28 /home/nouser/.mozilla/extensions

77526 1 drwxr-xr-x 2 504 nouser 1024 Sep 16 09:28 /home/nouser/.mozilla/plugins

77528 1 -rw-r--r-- 1 504 nouser 124 Sep 16 09:28 /home/nouser/.bashrc

77522 1 -rw-r--r-- 1 504 nouser 515 Sep 16 09:28 /home/nouser/.emacs

6431634 0 -rw-rw---- 1 504 mail 0 Sep 16 09:28 /var/spool/mail/nouser

 

 

# find / -nouser -o -nogroup -ls 2>/dev/null

# find / -nouser -exec rm -rf {} \;

# find / \( -nouser -o -nogroup \) -ls 2>/dev/null

# find / \( -nouser -o -nogroup \) -exec mv {} /tmp \;

 

# find / -perm -2 2>/dev/null

# find / -perm -0002 2>/dev/null

# find / -perm -o=w 2>/dev/null

 

(예제) (파일 ) -rw-r--rw- ..... file1 (예외) symbolic link : lrwxrwxrwx

(디렉토리) -rwxr-xrwx ..... dir1 (예외) sticky bit : drwxrwxrwt

 

내용중 불필요한 파일이 있다면 삭제한다.

 

④ /etc/passwd 파일 복원작업 검색된

# cp -f /etc/passwd.old /etc/passwd

# ls -l /home

-> /home/nouser 파일의 디렉토리 속성 정보 확인

 

 

 


 

 

 

2. 취약점 점검 스크립트 제작

 

 

(스크립트 제작시 참고 사항)

find 명령어를 통해 소유자 및 그룹이 없는 파일이나 디렉토리를 점검하여 목록으로 만든다.

find / \( -nouser -o -nogroup \) 2>/dev/null > nouser.txt

if [ -s nouser.txt ] ; then

echo "[ WARN ]"

cat nouser.txt

else

echo "[ OK ]"

fi

 

 

(스크립트 제작)

U-17.sh

#!/bin/bash

 

. function.sh

TMP1=`SCRIPTNAME`.log

> $TMP1

 

BAR

CODE '[U-17] 파일 및 디렉토리 소유자 설정'

cat << EOF >> $RESULT

[양호]: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하지 않는 경우

[취약]: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하는 경우

EOF

BAR

 

TMP2=`mktemp`

find / \( -nouser -o -nogroup \) 2>/dev/null >$TMP2

if [ -s $TMP2 ] ; then

WARN 소유자나 그룹이 존재하지 않은 파일 및 디렉토리가 존재합니다.

INFO $TMP1 파일을 내용을 참고합니다.

cat << EOF >> $TMP1

다음 목록은 소유자가 존재하지 않은 파일 및 디렉토가 존재하는 목록입니다.

반드시 고객과 상의하여 필요없는 경우 삭제하시기 바랍니다.

EOF

cat $TMP2 >> $TMP1

else

OK 소유자나 그룹이 존재하지 않는 파일 및 디렉토리가 존재하지 않습니다.

fi

 

cat $RESULT

echo ; echo

 

 

 

(CentOS 7.x) U-17.sh

#!/bin/bash

 

. function.sh

 

TMP1=$(SCRIPTNAME).log

> $TMP1

 

BAR

CODE '[U-17] 파일 및 디렉토리 소유자 설정'

cat << EOF >> $RESULT

[양호]: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하지 않는 경우

[취약]: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하는 경우

EOF

BAR

 

TMP2=$(mktemp)

find / \( -nouser -o -nogroup \) -ls 2>/dev/null >$TMP2

if [ -s $TMP2 ] ; then

WARN 소유자가 존재하지 않은 파일 및 디렉토리가 있습니다.

INFO $TMP1 파일의 내용을 참고합니다.

echo "다음 명령어가 실행된 출력 결과입니다." >> $TMP1

echo 'CMD : find / \( -nouser -o -nogroup \) -ls 2>/dev/null' >> $TMP1

echo "======================================================" >> $TMP1

cat $TMP2 >> $TMP1

else

OK 소유자가 존재하지 않은 파일 및 디렉토리가 없습니다.

fi

 

cat $RESULT

echo ; echo



(CentOS 7.x) 다른 예 : U-17.sh

#!/bin/bash

 

. function.sh

TMP1=`SCRIPTNAME`.log

> $TMP1

TMP2=$(mktemp)

 

BAR

CODE "[U-17] 파일 및 디렉토리 소유자 설정"

cat << EOF >> $RESULT

[양호: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하지 않는 경우

취약: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하는 경우

EOF

BAR

 

echo "[U-17] Checking.... Please wait a few minute...."

find / \( -nouser -o -nogroup \) -ls 2>/dev/null > $TMP2

if [ ! -s $TMP2 ] ; then

OK 파일 및 디렉토리의 소유권이 정상적으로 설정되지 않은 파일이 존재하지 않는다.

else

WARN 파일 및 디렉토리의 소유권이 정상적으로 설정되지 않은 파일이 존재한다.

INFO $TMP1 파일을 참고 하십시오.

cat <<- EOF >> $TMP1

1. 파일 및 디렉토리 소유권/그룹권이 정상적으로 설정되지 않은 파일 목록

 

$(cat $TMP2)

EOF

fi

 

cat $RESULT

echo ; echo

 

#!/bin/bash

. function.sh

TMP1=$(SCRIPTNAME).log
> $TMP1

BAR
CODE '[U-17] 파일 및 디렉토리 소유자 설정'
cat << EOF >> $RESULT
[양호]: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하지 않는 경우
[취약]: 소유자가 존재하지 않은 파일 및 디렉터리가 존재하는 경우
EOF
BAR
echo "[U-17] Checking.... Please wait...."
TMP2=$(mktemp)
find / \( -nouser -o -nogroup \) -ls 2>/dev/null >$TMP2
if [ -s $TMP2 ] ; then
	WARN 소유자가 존재하지 않은 파일 및 디렉토리가 있습니다.
	INFO $TMP1 파일의 내용을 참고합니다.
	echo "다음 명령어가 실행된 출력 결과입니다." >> $TMP1
	echo 'CMD : find / \( -nouser -o -nogroup \) -ls 2>/dev/null' >> $TMP1
	echo "======================================================" >> $TMP1
	cat $TMP2 >> $TMP1
else
	OK 소유자가 존재하지 않은 파일 및 디렉토리가 없습니다.
fi

cat $RESULT
echo ; echo

 

 

 

 


 

 

 

 

[SetUID,SGID, Sticky Bit 설정 파일 점검]

 

 

1. 취약점 분석/평가 방법 상세 가이드

2.9 SUID, SGID, Sticky bit 설정 파일 점검

■ 점검 분류 항목: 파일 및 디렉토리 관리

■ 세부 점검 항목: SUID, SGID, Sticky bit 설정 파일 점검

■ 대상: 리눅스

■ 위험도: 

■ 관련 코드: U-24

 

(1) 취약점 개요

*SUID(Set User-ID)와 *SGID(Set Group-ID)가 설정된 파일은(특히, root 소유의 파일인 경우) 특정 명령어를 실행하여 root 권한 획득 및 정상서비스 장애를 발생시킬 수 있으며, 로컬 공격에 많이 이용되므로 보안상 철저한 관리가 필요함.

root 소유의 SUID 파일의 경우에는 꼭 필요한 파일을 제외하고는 SUID, SGID 속성을 제거해주고, 잘못 설정되어 보안 위협이 되고 있는지 주기적인 진단 및 관리가 요구됨.

*SUID(Set User-ID): 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한을 얻게 됨.

*SGID(Set Group-ID): 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유 그룹의 권한을 얻게 됨.

 

 

(2) 판단기준

양호: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않은 경우

취약: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있는 경우

 

 

(3) 조치방법

1. 불필요한 SUID, SGID 파일 제거

2. 아래의 목록 이외에 애플리케이션에서 생성한 파일이나, 사용자가 임의로 생성한

파일 등 의심스럽거나 특이한 파일의 발견 시 SUID 제거 필요

 

 

(4) 보안 설정 방법

■ 점검 방법

OS별 주요 파일에 대한 SUID/SGID 설정 여부 확인

# ls -alL [check_file] |awk ' {print $1 }' | grep -i 's'

 

■ 설정 방법

1. 제거 방법

# chmod -s <file_name>

 

2. 주기적인 감사 방법

#find / -user root -type f \( -perm -4000 -o -perm -2000 \) -xdev -exec ls -al { } \;

 

3. 반드시 사용이 필요한 경우 특정 그룹에서만 사용하도록 제한하는 방법

일반 사용자의 Setuid 사용을 제한함 (임의의 그룹만 가능)

#/usr/bin/chgrp <group_name> <setuid_file_name>

#/usr/bin/chmod 4750 <setuid_file_name>

SetUID/SetGID 비트를 제거하는 파일 종류

/sbin/dump

/sbin/restore

/usr/bin/newgrp

/sbin/unix_chkpwd

/usr/bin/lpq-lpd

/usr/bin/lpr

/usr/sbin/lpc

/usr/bin/lpr-lpd

/usr/sbin/lpc-lpd

/usr/bin/lpq

/usr/bin/lprm-lpd

/usr/bin/lprm

/usr/bin/at

/usr/sbin/traceroute

 

(5) 조치시 영향

SUID 제거 시 OS 및 응용 프로그램 등 서비스 정상작동 유무 확인 필요



 

 

2. 취약점 점검 스크립트 제작

 

 

(고객에게 설명)

SetUID, SetGID 프로그램의 개수가 변경되었다면 거의 70 ~ 80%가 해킹을 당한것일 가능성이 높다. 일부 프로그램 설치시 SetUID 비트 설정이 될수 있지만 이런 경우는 극히 드문 경우이다.

SetUID 프로그램에 의해 공격 당할 가능성

 

 

(스크립트 작성시 유의 사항)

SetUID, SetGID 비트가 걸려 있는 프로그램을 최소화 하기 위해서

 

스크립트 작성시 다음을 참고합니다.

# yum -y install dump

# vi nosetuid.txt

/sbin/dump

/sbin/restore

/usr/bin/newgrp

/sbin/unix_chkpwd

/usr/bin/lpq-cups

/usr/bin/lpr

/usr/bin/lpc

/usr/bin/lpr-cups

/usr/sbin/lpc-cups

/usr/bin/lpq

/usr/bin/lprm-cups

/usr/bin/lprm

/usr/bin/at

/usr/bin/traceroute


# vi check_suid_delete.sh

#!/bin/bash

 

FILE1=nosetuid.txt

FILE3=tmp3.txt

 

cat << EOF

================================================

[ OK ] : SetUID 비트가 존재하지 않음. 안전함

[ WARN ] : 불필요한 SetUID 비트가 존재함.

================================================

 

EOF

 

cat nosetuid.txt | while read FILE2

do

if [ -e $FILE2 ] ; then

ls -l $FILE2 | awk '{print $1}' | grep -i 's' > $FILE3

if [ $? -eq 0 ] ; then

echo "[ WARN ] : $FILE2 (`cat $FILE3`)"

else

echo "[ OK ] : $FILE2"

fi

else

echo "[ file not found ] : $FILE2"

fi

done

 

 

 

 

# chmod 755 check_suid_delete.sh

# ./check_suid_delete.sh

================================================

[ OK ] : SetUID 비트가 존재하지 않음. 안전함

[ WARN ] : 불필요한 SetUID 비트가 존재함.

================================================

 

[ WARN ] : /sbin/dump (-rwsr-xr-x)

[ WARN ] : /usr/bin/newgrp (-rwsr-xr-x)

[ OK ] : /sbin/restore

[ OK ] : /usr/bin/lpr

[ OK ] : /usr/sbin/lpc

[ WARN ] : /sbin/unix_chkpwd (-rwsr-xr-x)

[ WARN ] : /usr/bin/at (-rwsr-xr-x)

[ OK ] : /usr/bin/lprm

[ OK ] : /usr/bin/lpq

 

 

 

(스크립트 작업)

■ U-24.sh

#!/bin/bash

 

. function.sh

TMP1=`SCRIPTNAME`.log

> $TMP1

 

BAR

CODE '[U-24] SUID, SGID, Sticky bit 설정 파일 점검'

cat << EOF >> $RESULT

[양호]: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않은 경우

[취약]: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있는 경우

EOF

BAR

INFO $TMP1 파일을 확인하십시오.

 

FILE1=nosetuid.txt

TMP2=`mktemp`

 

echo "다음은 setuid 비트 파일들의 목록과 퍼미션 설정입니다." >> $TMP1

echo "반드시 고객과 상의하시기 바랍니다." >> $TMP1

cat $FILE1 | while read SETUIDFILE

do

if [ -e $SETUIDFILE ] ; then

ls -l $SETUIDFILE | awk '{print $1}' | grep -i 's' > $TMP2

if [ $? -eq 0 ] ; then

echo "[WARN] : $SETUIDFILE (`cat $TMP2`)" >> $TMP1

else

echo "[ OK ] : $SETUIDFILE (`cat $TMP2`)" >> $TMP1

fi

else

echo "[ERROR]: $SETUIDFILE (File not found)" >> $TMP1

fi

done

 

if grep WARN $TMP1 >/dev/null 2>&1 ; then

WARN 불필요한 setuid 비트가 존재합니다.

else

OK 불필요한 setuid 비트가 존재하지 않습니다.

fi

 

cat $RESULT

echo ; echo

 

 

 

 

U-24.sh

#!/bin/bash

 

. function.sh

 

TMP1=$(SCRIPTNAME).log

> $TMP1

 

BAR

CODE '[U-24] SUID, SGID, Sticky bit 설정 파일 점검'

cat << EOF >> $RESULT

[양호]: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않은 경우

[취약]: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있는 경우

EOF

BAR

 

FILE1=nosetuid.txt

TMP2=/tmp/tmp2 && >/tmp/tmp2

TMP3=/tmp/tmp3 && >/tmp/tmp3

cat $FILE1 | while read LINE

do

if [ -f $LINE ] ; then

ls -lL $LINE | awk '{print $1}' | grep -i 's' >$TMP3 2>&1

if [ $? -eq 0 ] ; then

echo "[`cat $TMP3`] : $LINE" >> $TMP2

fi

fi

done

 

if [ -s $TMP2 ] ; then

WARN 주요 파일의 권한에 SUID, SGID가 존재합니다.

INFO $TMP1 파일의 정보를 확인합니다.

cat << EOF >> $TMP1

다음은 SUID,SGID가 제거 되어 있어야 하는 파일 목록 입니다.

============================================

$(cat $FILE1)

 

 

다음은 SUID,SGID 점검한 결과입니다.

============================================

$(cat $TMP2)

EOF

else

OK 주요 파일의 권한에 SUID, SGID가 존재하지 않습니다.

fi

 

cat $RESULT

echo ; echo



(CentOS 7.x) U-18.sh

#!/bin/bash

. function.sh
TMP1=`SCRIPTNAME`.log
> $TMP1
TMP2=$(mktemp)
TMP3=$(mktemp)

>$TMP2
>$TMP3


BAR
CODE "[U-18] SUID, SGID, Sticky bit 설정 파일 점검"
cat << EOF >> $RESULT
양호: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않은 경우
취약: 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있는 경우
EOF
BAR

echo "[U-18] Checking.... Please wait...."

NOTSETUIDFILE=nosetuid.txt
cat $NOTSETUIDFILE | while read i
do
	if [ -e $i ] ; then # -e 파일이 존재하면 참
		FILEPERM=$(ls -l $i | awk '{print $1}' | grep 's')
		if  [ ! -z $FILEPERM ] ; then # 문자열의 길이가 0이면 참
			echo "[+] $i $FILEPERM" >> $TMP2
		else
			echo "[*] $i" >> $TMP2
		fi
	else
		echo "[-] $i" >> $TMP2
	fi
done

find / -xdev -user root -type f \( -perm -4000 -o -perm -2000 \) -ls \
	| awk '{print $3, $11}' 2>/dev/null > $TMP3

if grep -q '[+]' $TMP2; then
	WARN 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있습니다.
	INFO $TMP1 파일의 내용을 참고 하십시오.
	cat <<- EOF >> $TMP1
==============================================================
1. 다음 내용은 주요 파일의 권한에 SUID/SGID에 대한 설정 여부입니다.
* [+] 파일이 존재하고, SUID 및 SGID 설정된 경우
* [*] 파일이 존재하지만 SUID 및 SGID 설정되지 않은 경우
* [-] 파일이 존재하지 않는 경우

$(cat $TMP2)

2. 다음은 시스템내의 SUID/SGID 전체 파일 목록입니다.

$(cat $TMP3)
==============================================================
	EOF
else
	OK 주요 파일의 권한에 SUID와 SGID에 대한 설정이 부여되어 있지 않습니다.
fi

cat $RESULT
echo ; echo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts