시스템/시스템 보안

SetUID와 권한상승

비니화이팅 2018. 1. 7. 22:00

<권한과 umask>

* 파일과 디렉터리 생성 시 기본 권한

- 파일 -> 644

- 디렉터리 -> 755


* 파일, 디렉터리의 기본 생성 최고 권한(umask 활용)

파일 -> 666 (chmod로 실행권한 줄 수 있음 -일반 파일에 실행권한을 부여 하면 파일 색(실행 파일)이 연두색으로 변함)

디렉터리 -> 777


* /etc/profile 파일

- umask 설정 돼 있음


<SetUID>

* SetUID

- 프로그램 실행 시 파일 소유자의 권한으로 실행


* /etc/shadow 파일의 접근권한

- ---------

- 권한 설정이 안 돼있어도 소유자(root)는 열람 가능


* /usr/sbin/passwd 명령어의 접근권한

- rwsr-xr-x

- 비밀번호를 바꿀때는 /etc/shadow파일에 접근해야 하는데 SetUID를 통하여 일반 사용자들도 /etc/shadow에 접근하게 돼서 비밀번호 변경이 가능


<User ID>

1. UID(=RUID)

: 계정을 식별


2. EUID(Effective User ID)

: 프로세스에 대한 권한을 결정


3. SUID(Saved User ID)

: EUID 저장, 복원


ex) passwd 명령 실행 시 권한 전환

     EUID(500)을 SUID에 복사


    RUID:500

    EUID:0


    passwd 명령 종료 시 권한 전환

    SUID(500)을 EUID에 복사


<권한 상승 가능한 명령어 조건>

1. 파일 소유자 루트

2. setuid비트가 설정

-> 공격 대상이 됨


-> find / -user root -perm +4000 2>/dev/null 명령으로 해당 조건을 갖고 있는 파일을 찾을 수 있음

- 결과값 오류 메시지 나오는데 출력 안하려면 2>/dev/null

- 0 : 표준입력, 1 : 표준출력, 2 : 표준에러

- /dev/null : 휴지통


<실습1>

- 실습환경: CentOS

1. 파일 소유자가 root인 파일을 root(uid:0)로 실행할 경우 변화 확인


2. 파일 소유자가 root인 파일을 일반 계정(uid:500)으로 실행할 경우 변화 확인(setuid()실행여부)

- 변화가 없음. 즉, setuid()실행 안됨

- setuid함수는 관리자 계정에서만 실행이 가능하다는 것을 알 수 있음


3. 파일 소유자가 root이고 SetUID가 설정되어 있는 파일을 일반 계정(uid:501)으로 실행할 경우 변화 확인

- SetUID가 설정되어 있는 파일을 실행했기 때문에 실행 하는 동안 root권한을 얻게 되므로 setuid함수를 실행시킬 수 있음


4. 파일 소유자가 일반 계정(uid:500)이고 SetUID가 설정되어 있을 때 결과 확인

- 일반 계정(uid:501)로 실행

- root(uid:0)로 실행


<실습2>

- 실습환경: CentOS

- 실습을 위해 /bin/bash를 /workspace/bash로 복사 후 진행


1. bash의 권한을 확인해보니 755이고 소유자가 root(즉, SetUID가 설정되어 있지 않음->권한 상승이 안되는 상태)


2. bash파일에 SetUID를 줌(소유자는 그대로 root) 


3. 일반 계정으로 bash를 실행하여 id명령으로 권한 상승이 되었는지 확인

- 결과를 확인해보니 상승이 안된 것을 확인할 수 있음(bash는 시스템 파일로 보안 설정이 미리 돼있어서 권한상승이 안됨)


4. 관리자 계정으로 bash를 실행할 수 있도록 우회

[방법1]

- 아래와 같은 코드를 bashHack.c라는 이름으로 만들고 컴파일



- 실행 파일에 SetUID를 주어 root로 권한 상승이 가능하게 함


- 일반 계정으로 로그인하여 만든 실행파일을 실행후 id명령으로 권한상승 된 것을 확인


[방법 2]

- 아래와 같은 코드를 viHack.c라는 이름으로 만들고 컴파일



- 실행 파일에 SetUID를 주어 root로 권한 상승이 가능하게 함


- 일반 계정으로 실행 파일을 실행하고 :!/bin/bash입력하여 쉘 실행


- id명령으로 권한상승 된 것을 확인


<실습3>

- 실습환경: CentOS

- /bin/more명령어에 SetUID를 설정


- 일반 계정으로 more명령을 이용하여 /etc/shadow파일을 열어보니 열람이 가능한 것을 확인