본문 바로가기
모의해킹 침해대응 과정/Linux 기초

리눅스 기초때기 3일차. 특수 퍼미션 SetUID/SetGID/Sticky Bit

by 알거음슴 2021. 4. 1.

passwd CMD를 기억해보자 일반 사용자는 passwd를 통하여 비밀번호를 변경할 수 있다.

어떤 원리로 변경되는지 보면

/etc/passwd 에 접속하여 비밀번호를 확인하고 /etc/shadow에 변경암호가 암호화되어 저장된다. 한번 해당위치의 권한을 보자.

$ ls -l /etc/passwd /etc/shadow

-rw-r--r-- 1 root root 2.4K Aug 26 17:50 /etc/passwd

---------- 1 root root 1.4K Aug 26 17:51 /etc/shadow

/etc/shadow 엔 그 어떤권한도 부여되어 있지않은데 변겨오디는 이유가 뭘까?

 

SetUID/SetGID/Sticky Bit

임시적으로 CMD 가 실행되는 동안에만 UID와 GID를 (권한)변경한다

이후 종료시 자신의 본래 권한으로 돌아온다.

 

$ ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 28K Apr 1 12:57 /usr/bin/passwd*

passwd CMD 가 저장되어있는 /usr/bin/passwd 는 특이하게 S 심볼이 있다 이것이 SetUID/SetGID이다.

 

[참조] 특수퍼미션의 적용범위

set-uid : 파일에 적용가능하나 디렉토리에는 적용불가.

set-gid : 파일 및 디렉토리에 적용가능하다.

stickybit : 디렉토리에는 적용가능하나 파일에는 적용불가. 

* stickybit - 디렉토리에 적용하여 해당 디렉토리에 접근 복제는 누구나 가능하나 디렉토리내 생성된 파일의 소유자만 삭제가능함

 

1) 특수 퍼미션 확인

 0000 중 맨 앞의 0 자리가 특수 퍼미션 자리

SetUID : 심볼릭 - 4 (r)
SetGID : 심볼릭 - 2 (w)

Sticky Bit : 심볼릭 - 1 (x)

* 심볼릭 6은 SetUID 와 SetGID가동시에설정된것.

 

 2) chmod 를 활용하여 set-uid / set-gid 설정을 진행해보자.

# ll

-rw-r--r--   1 root root   0  4월  1 16:01 file1
drwxr-xr-x   2 root root   6  4월  1 16:01 dir1

# chmod 4755 file1

-rwsr-xr-x   1 root root   0  4월  1 16:01 file1
drwxr-xr-x   2 root root   6  4월  1 16:01 dir1

 * x -> s 로 치환이 되는걸로 확인이 가능하다/ 단 치환이 되는것임으로 x 권한이 없을경우 S로 표기되는데 이럴경우엔

특수퍼미션으로 설정이 정확히 되지않은 것으로 볼수있다.

 

 3) 특수 퍼미션의 위치 확인

-rwxr-xr-x   1 root root   0  4월  1 16:01 file1

-rwxr-xr-x 각 퍼미션 자리중 

user 의 x -> s : set-uid

group 의 x -> s : set-gid

other 의 x -> t : Sticky Bit

로 치환되며 각 자리의 x 가 비어있으면 지정이 불가하고 대문자로 표기되며 적용이안된다.

 

* bash 쉘의 경우 set-uid 를 걸어둘 경우. 다른 사용자도 이용이 가능하도록 설정이 되어버리기 때문에 bash 쉘의 경우 복제하여 다른곳에 만들어 set-uid를 부여가 되어도 bash 쉘 자체에서 해당기능을 막아버리기에 접속은 되더라도 root의 권한을 얻어올 순 없다.

-> 그리하여 bash 쉘 자체의 permission을 변경하는것이 아닌 bash쉘을 감싸는 다른 tool을 만들어 해당 tool의 권한을 변경하는 방식을 활용하여 백도어를 만드는경우가 많다. 

-> 이떄 특수 퍼미션이 있는 폴더나 파일들을 이용하여 root 권한을 얻고, 추가적인 작업을 진행하는 경우가 많다 고로 관리자는 특수 퍼미션이 있는 자료를 관리를 주기적으로 해야한다.

 

 3) 특수 퍼미션 관리방법.

(ㄱ) 검색방법 find / -perm (권한을 기준으로 검색)

# find / -perm -4000 -ls : Set-UID 권한 모든 자료 검색.

# find / -perm -2000 -ls : Set-GID 권한 모든 자료 검색.

# find / \( -perm -4000 -o -perm -2000 \) -ls : Set-UID 및 Set-GID 권한 모든 자료 검색.

(ㄴ) 목록화 하는 방법

# find / \( -perm -4000 -o -perm -2000 \) > setuid.txt : 통째로 저장

# find / \( -perm -4000 -o -perm -2000 \) | wc -l > setuid.txt : 갯수로 저장

# diff setuid.txt setuid.old.txt

 (ㄷ) 관리방법

# find /home -type f -perm -4000 -exec rm -f {} \; : 사용자의 모든 파일중 Set-UID 권한의 모든자료를 지움

-> 스케줄러등으로 주기적인 삭제 가능

# chmod 755 /usr/bin/passwd : 관리자만 암호변경이 가능하며 / 사용자는 암호변경이 불가하다

-> 주기적으로 암호를 관리자가 재설정함.