보안/시스템 보안

[시스템 보안] 리눅스 계정과 권한 실습

gaan 2023. 3. 26. 02:32

※ 리눅스 운영체제 중 하나인 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 컴파일러를 설치하고 다음 실습 코드를 입력해보자.

 

backdoor.c

 

➡️ 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 비트가 주어진 프로세스로 실행해보기