<권한과 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파일을 열어보니 열람이 가능한 것을 확인