[목차]
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
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day99 : 로그 보안 시작 (냉무) (0) | 2021.01.28 |
---|---|
정보보안 과정 Day98: 주통 U-36~40 / 서비스 관리 점검 스크립트 제작 (0) | 2021.01.27 |
정보보안 과정 DAY97-1 : 관리자의 잘못된 PATH 변수 설정 (0) | 2021.01.25 |
정보보안 과정 DAY97: (주통) 계정관리 U-13~15 스크립트 제작 / 계정관리 종료 (0) | 2021.01.25 |
정보보안 과정 Day94-2 : PAM 이론 실습 (0) | 2021.01.22 |