본문 바로가기
취약점 진단/UNIX 취약점 진단

[UNIX] U-13 SUID, SGID, 설정 파일점검

by 게으른 피글렛 2024. 10. 13.
반응형

U-13 SUID, SGID, 설정 파일점검

항목중요도 : 상

1. 취약점 개요

▶ 점검내용 :  불필요하거나 악의적인 파일에 SUID, SGID 설정 여부 점검

 점검목적 :  불필요한 SUID, SGID 설정 제거로 악의적인 사용자의 권한상승을 방지하기 위함

 보안위협

 · SUID, SGID 파일의 접근권한이 적절하지 않을 경우 SUID, SGID 설정된 파일로 특정 명령어를 실행하여 root 권한 획득 가능함 

 참고

※ SUID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한을 얻게 됨
※ SGID: 설정된 파일 실행 시, 특정 작업 수행을 위하여 일시적으로 파일 소유 그룹의 권한을 얻게 됨
※ 불필요한 SUID/SGID 목록

/sbin/dump Backup/Restore
/sbin/restore Backup/Restore
/sbin/unix_chkpwd 사용자의 암호가 읽을 수 없는 장소에 보관되는 경우 사용자의 암호를 검사해주는 프로그램. 이 프로그램을 호출한 사용자의 암호를 검사해주는 역할만 함
/usr/bin/at 지정된 시간에 실행할 작업을 입력하고, 대기 목록을 확인하고, 제거하는 명령어
/usr/bin/lpq 라인프린터 작업 큐 조회 명령어
/usr/bin/lpq-lpd DAEMON
/usr/bin/lpr 콘솔환경에서 명시된 파일을 인쇄할 때 사용
/usr/bin/lpr-lpd  DAEMON
/usr/bin/lprm lpq 명령어로 볼 수 있는 작업 큐를 살펴보고 해당하는 작업을 취소하거나 작업 번호를 지정하여 작업 번호에 해당하는 큐를 삭제.
/usr/bin/lprm-lpd  DAEMON
/usr/bin/newgrp 현재 세션의 사용자 그룹 변경(지정한 그룹의 쉘로 환경이 바로 변경)
/usr/sbin/lpc  커맨드 기반의 프린터 제어
/usr/sbin/lpc-lpd  DAEMON
/usr/sbin/traceroute 네트워크 경로 출력

2. 점검대상 및 판단 기준

  대상 : SOLARIS, LINUX, AIX, HP-UX 등

  판단기준

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

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

  조치방법

1) 불필요한 SUID, SGID 파일 제거
2) 아래의 목록 이외에 애플리케이션에서 생성한 파일이나, 사용자가 임의로 생성한 파일 등 의심스럽거나 특이한 파일의 발견 시 SUID 제거 필요

3. LINUX 초기 설정값

※ 테스트한 LINUX의 버전은 AWS로 구성된 CentOS 9 입니다.

 

확인방법

# [check_file]에 파일 위치를 넣어주세요
$ ls -alL [check_file] | awk '{ print $1}' | grep -i 's'

 

아래와 같이 넣어주면됩니다.

그런데 이것보다는... 가운데 명령어부분을 빼는게 더 낫습니다.

# 1안. 가이드에서 알려준 명령어
$ ls -alL /sbin/dump | awk '{ print $1}' | grep -i 's'
$ ls -alL /sbin/restore | awk '{ print $1}' | grep -i 's'
$ ls -alL /sbin/unix_chkpwd | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/at | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/lpq | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/lpq-lpd | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/lpr | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/lpr-lpd | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/lprm | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/lprm-lpd | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/bin/newgrp | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/sbin/lpc | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/sbin/lpc-lpd | awk '{ print $1}' | grep -i 's'
$ ls -alL /usr/sbin/traceroute | awk '{ print $1}' | grep -i 's'

# 2안. 더 간단하게
$ ls -al /sbin/dump | grep -i 's'
$ ls -al /sbin/restore | grep -i 's'
$ ls -al /sbin/unix_chkpwd | grep -i 's'
$ ls -al /usr/bin/at | grep -i 's'
$ ls -al /usr/bin/lpq | grep -i 's'
$ ls -al /usr/bin/lpq-lpd | grep -i 's'
$ ls -al /usr/bin/lpr | grep -i 's'
$ ls -al /usr/bin/lpr-lpd | grep -i 's'
$ ls -al /usr/bin/lprm | grep -i 's'
$ ls -al /usr/bin/lprm-lpd | grep -i 's'
$ ls -al /usr/bin/newgrp | grep -i 's'
$ ls -al /usr/sbin/lpc | grep -i 's'
$ ls -al /usr/sbin/lpc-lpd | grep -i 's'
$ ls -al /usr/sbin/traceroute | grep -i 's'

 

확인해보겠습니다.

[ec2-user@localhost ~]$ ls -al /sbin/dump | grep -i 's'
ls -al /sbin/restore | grep -i 's'
ls -al /sbin/unix_chkpwd | grep -i 's'
ls -al /usr/bin/at | grep -i 's'
ls -al /usr/bin/lpq | grep -i 's'
ls -al /usr/bin/lpq-lpd | grep -i 's'
ls -al /usr/bin/lpr | grep -i 's'
ls -al /usr/bin/lpr-lpd | grep -i 's'
ls -al /usr/bin/lprm | grep -i 's'
ls -al /usr/bin/lprm-lpd | grep -i 's'
ls -al /usr/bin/newgrp | grep -i 's'
ls -al /usr/sbin/lpc | grep -i 's'
ls -al /usr/sbin/lpc-lpd | grep -i 's'
ls -al /usr/sbin/traceroute | grep -i 's'

# 결과값 중 값이 출력된 항목입니다.
-rwsr-xr-x. 1 root root 24016 Jun 18 22:01 /sbin/unix_chkpwd
-rwsr-xr-x. 1 root root 57928 Apr  4  2022 /usr/bin/at
lrwxrwxrwx. 1 root root 27 Sep 23 22:42 /usr/bin/lpq -> /etc/alternatives/print-lpq
lrwxrwxrwx. 1 root root 23 Sep 23 22:42 /usr/bin/lpr -> /etc/alternatives/print
lrwxrwxrwx. 1 root root 28 Sep 23 22:42 /usr/bin/lprm -> /etc/alternatives/print-lprm
-rwsr-xr-x. 1 root root 41928 Jul  3 16:38 /usr/bin/newgrp
lrwxrwxrwx. 1 root root 27 Sep 23 22:42 /usr/sbin/lpc -> /etc/alternatives/print-lpc

 

이중 l로 시작 항목은 심볼릭링크(바로가기) 입니다.

여기 파일은 원파일 위치에 s가 포함되서 나온항목입니다. 제외해주세요

 

제외하고 남은 파일은 아래 3개입니다.

suid, sgid권한의 경우 앞에 퍼미션에 s가 있을 경우 권한을 가지고 있는 것입니다.

s가 있을 경우 특정 작업 수행을 위하여 일시적으로 파일 소유자의 권한, 그룹의 권한을 가질수 있으므로 제거해주는게 좋습니다.

-rwsr-xr-x. 1 root root 24016 Jun 18 22:01 /sbin/unix_chkpwd
-rwsr-xr-x. 1 root root 57928 Apr  4  2022 /usr/bin/at
-rwsr-xr-x. 1 root root 41928 Jul  3 16:38 /usr/bin/newgrp

 

취약의 조건은 주요 실행파일의 권한에 SUID와 SGID에 대한 설정이 부여되어있을 경우 취약입니다.

단, 필요에 의해 설정하였을 경우는 양호입니다.

그리고 SUID 제거 시 OS 및 응용 프로그램 등 서비스 정상작동 유무 확인 이 필요합니다.

 

4. 조치

조치를 해보겠습니다.

명령어로 제거하면 됩니다. 

$ chmod -s <file_name>

 

조치해보겠습니다.

[ec2-user@localhost ~]$ sudo chmod -s /sbin/unix_chkpwd
[ec2-user@localhost ~]$ sudo chmod -s /usr/bin/at
[ec2-user@localhost ~]$ sudo chmod -s /usr/bin/newgrp

 

 

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

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

$ /usr/bin/chgrp <group_name> <setuid_file_name>
$ /usr/bin/chmod 4750 <setuid_file_name>

 

 

 

5. 결과

확인을 해보겠습니다.

[ec2-user@localhost ~]$ ls -al /sbin/dump | grep -i 's'
ls -al /sbin/restore | grep -i 's'
ls -al /sbin/unix_chkpwd | grep -i 's'
ls -al /usr/bin/at | grep -i 's'
ls -al /usr/bin/lpq | grep -i 's'
ls -al /usr/bin/lpq-lpd | grep -i 's'
ls -al /usr/bin/lpr | grep -i 's'
ls -al /usr/bin/lpr-lpd | grep -i 's'
ls -al /usr/bin/lprm | grep -i 's'
ls -al /usr/bin/lprm-lpd | grep -i 's'
ls -al /usr/bin/newgrp | grep -i 's'
ls -al /usr/sbin/lpc | grep -i 's'
ls -al /usr/sbin/lpc-lpd | grep -i 's'
ls -al /usr/sbin/traceroute | grep -i 's'
ls: cannot access '/sbin/dump': No such file or directory
ls: cannot access '/sbin/restore': No such file or directory
-rwxr-xr-x. 1 root root 24016 Jun 18 22:01 /sbin/unix_chkpwd
-rwxr-xr-x. 1 root root 57928 Apr  4  2022 /usr/bin/at
lrwxrwxrwx. 1 root root 27 Sep 23 22:42 /usr/bin/lpq -> /etc/alternatives/print-lpq
ls: cannot access '/usr/bin/lpq-lpd': No such file or directory
lrwxrwxrwx. 1 root root 23 Sep 23 22:42 /usr/bin/lpr -> /etc/alternatives/print
ls: cannot access '/usr/bin/lpr-lpd': No such file or directory
lrwxrwxrwx. 1 root root 28 Sep 23 22:42 /usr/bin/lprm -> /etc/alternatives/print-lprm
ls: cannot access '/usr/bin/lprm-lpd': No such file or directory
-rwxr-xr-x. 1 root root 41928 Jul  3 16:38 /usr/bin/newgrp
lrwxrwxrwx. 1 root root 27 Sep 23 22:42 /usr/sbin/lpc -> /etc/alternatives/print-lpc
ls: cannot access '/usr/sbin/lpc-lpd': No such file or directory
ls: cannot access '/usr/sbin/traceroute': No such file or directory

 

퍼미션에 s 권한이 있는게 없으므로 양호입니다.

조치가 완료되었습니다!

 

Linux를 마스터하는 그날까지

화이팅!

 

반응형