※ 리눅스 운영체제 중 하나인 Ubuntu 가상 머신을 생성한 후 실습을 해보도록 하자.
※ 간단한 리눅스 명령어 정리
- ls : 파일 탐색 (Windows에서의 dir)
- clear : Terminal 화면을 clear
- mkdir : 새 디렉토리 생성
- cd : 폴더 변경 (used for navigating directories)
- pwd : print working directory, 현재 작업 위치의 절대경로를 출력
01. 파일 접근 권한 작성 실습
1) 파일과 디렉토리를 생성할 때 기본 권한 확인
- 파일 : rw-rw-r--(664) 권한 디폴트로 생성 (아래 사진에서 파일 a.txt)
- 디렉토리 : rwxrwxr-x(775) 권한 디폴트로 생성 (아래 사진에서 디렉토리 a)
- 파일 : 기본 생성 최고 권한 666
- 디렉토리 : 기본 생성 최고 권한 777
- 파일 및 디렉토리 생성 시 기본 권한 = 최고 권한 - umask
- Umask : 기본 생성 권한을 바꾸는 용도로 활용
2) 파일 및 디렉토리의 권한 변경
- chmod [rwx 값] [파일명] : 생성되어 있는 파일의 권한 설정 변경
- chmod +x/-x [파일명] 문법 사용 가능
- 파일 b.txt 와 디렉토리 b 생성
- 파일 b.txt 777 권한으로 변경
- 파일 b.txt의 권한은 rwxrwxrwx로 최고 권한인 777로 변경된 것을 확인할 수 있다.
3) 파일 및 디렉토리의 소유자 변경
- chown [계정] [파일] : 소유자 변경
- chgrp [그룹 계정] [파일] : 그룹 변경
- 파일 b.txt 소유자와 그룹 모두 gaeun 으로 설정되어 있음을 알 수 있다.
- 파일 b.txt 의 소유자 계정을 root 로 변경해보자.
- root 계정으로 변경하려니, 일반 사용자 권한으로는 변경할 수 있는 권한이 없다.
- 따라서 sudo 커맨드를 사용하여 관리자 권한으로 변경해주어야 한다.
- 관리자 권한으로 변경해주니, 소유자가 root로 변경된 것을 확인할 수 있다.
- 다음은, 그룹 계정을 root로 변경해보자.
- 그룹 계정이 root로 변경된 것을 확인할 수 있다.
02. SetUID를 활용한 해킹 기법
1) SetUID 비트를 가진 셸의 생성
⭐SetUID : 소유자 권한 (4000으로 표현)
- root 권한으로 전환
- 원본 bash 셸을 본인의 workspace 디렉토리에 복사하여 4755 권한 부여
- 4000 : SetUID(설정 사용자 ID) 비트를 설정하여 파일에 할당
- bash 셸 프로그램은 프로세스가 살아있는 동안 파일의 소유자인 root 권한으로 실행
2) 일반 사용자 계정으로 SetUID 비트가 주어진 셸 실행
✏️ 일반 사용자 계정으로 SetUID 비트가 설정되어 있는 셸을 통해 관리자 권한 획득을 시도해보자.
id : 현재 실행 중인 셸의 EUID, EGID를 출력
⚠️하지만, bash 커맨드 실행할 때, 셸의 EUID는 일반 사용자 유저인 1000이다.
➡️SetUID 비트로 root 권한을 수행할 때, 새로운 프로세스를 생성하는 데까지만 사용되는 것이다.
즉, 실행과정에서는 root 권한 x
(보안상의 이유로, 커널은 새 프로세스 생성 시 이 프로세스의 euid를 ruid로 바꿔버린다.)
❗우리가 원하는 것은 실행과정에서도 root 권한을 유지하는 것!
3) SetUID 비트를 이용한 bash 셸 획득
위의 문제점을 해결하기 위해 gcc 컴파일러를 설치하고 다음 실습 코드를 입력해보자.
➡️ euid, egid 를 각각 0으로 바꾸기 위한 코드 (root 계정)
작성한 backdoor.c를 root 계정으로 컴파일하여 4755 권한을 부여해보자.
- 4000 : SetUID(설정 사용자 ID) 비트를 설정하여 파일에 할당
➡️ root 권한으로 변경
➡️ gcc 컴파일러를 통해 backdoor 이름의 바이너리를 backdoor.c 파일을 컴파일하여 생성
➡️ SetUID 비트로 모드 change!
- 컴파일 후 내 계정 (gaeun, UID = 1000) ./backdoor 실행
- 이 경우, 셸 권한이 root로 바뀌게 된다. ➡️ EUID 가 0으로 바뀌는 효과!
- Exit으로 셸을 빠져나가면 ./backdoor 프로세스가 끝나고 EUID가 원래대로 1000으로 바뀐다.
⭐ 즉, ./backdoor 프로세스가 실행되는 동안만 셸 권한이 root인 것.
4) SetUID 비트를 이용 /etc/shadow 읽기
🔒 /etc/shadow : 사용자 계정의 비밀번호와 관련된 정보 저장 파일
5) vi 에디터를 SetUID 비트가 주어진 프로세스로 실행해보기