소개
권한 상승 (Privilege Escalation) 은 모의 해킹 및 윤리적 해킹에서 매우 중요한 단계입니다. 공격자가 시스템에 대한 초기 낮은 권한의 접근 권한을 획득하면, 다음 목표는 대개 관리자나 root 사용자로 권한을 높이는 것입니다. 성공적인 권한 상승은 철저한 시스템 열거 (Enumeration), 즉 대상 시스템의 구성, 실행 중인 프로세스, 파일 권한 및 설치된 소프트웨어에 대해 가능한 한 많은 정보를 수집하는 것에 크게 의존합니다.
이 모듈은 "익스플로잇 이전에 열거가 먼저다"라는 핵심 규칙을 강조합니다. 대부분의 성공적인 권한 상승은 마법이 아니라, 이미 존재하던 잘못된 구성이나 관계를 발견하는 것에서 시작됩니다.
이 지루한 과정을 간소화하기 위해 보안 전문가들은 자동화된 열거 스크립트를 사용합니다. 가장 인기 있고 업계 표준으로 통용되는 도구 중 하나가 LinPEAS(Linux Privilege Escalation Awesome Script) 입니다. LinPEAS 는 Linux/Unix/macOS 호스트에서 권한을 상승시킬 수 있는 경로를 자동으로 검색하며, 색상 코드를 사용하여 익스플로잇 성공 가능성을 시각적으로 보여줍니다.
현대 시스템은 너무 복잡하여 모든 부분을 수동으로 검사하기 어렵기 때문에 자동화가 필수적입니다. 하지만 스크립트의 결과물은 여전히 인간의 해석이 필요합니다.
이번 실습에서는 사후 침투 (Post-exploitation) 시나리오를 시뮬레이션합니다. 여러분은 모의 해커가 되어 "공격자" 머신에서 "대상" 머신으로 LinPEAS 스크립트를 전송하고, 이를 실행한 뒤 결과물을 분석하여 권한 상승 가능성이 높은 벡터를 식별하는 과정을 수행하게 됩니다.
전송을 위한 로컬 웹 서버 시작
이 단계에서는 대상 머신으로 파일을 전송할 수 있도록 파일을 호스팅하는 방법을 배웁니다. 모의 해킹 중에는 로컬 머신에 유용한 스크립트 (예: LinPEAS) 가 있지만, 이를 침투한 대상 서버로 옮길 방법이 필요할 때가 많습니다.
Linux 에서 파일을 호스팅하는 빠르고 내장된 방법은 Python 의 HTTP 서버 모듈을 사용하는 것입니다. 이를 통해 어떤 디렉토리든 즉시 가벼운 웹 서버로 전환할 수 있습니다.
이번 실습을 위해 작업 공간 내에 두 개의 환경을 시뮬레이션했습니다. ~/project/attacker 디렉토리는 linpeas.sh 스크립트가 있는 로컬 머신을 나타내며, ~/project/target 디렉토리는 스크립트를 다운로드해야 하는 침투 대상 서버를 나타냅니다.
먼저, 스크립트가 위치한 공격자 디렉토리로 이동합니다.
cd ~/project/attacker
디렉토리 내용을 나열하여 스크립트가 있는지 확인합니다.
ls -l
출력에서 linpeas.sh를 확인할 수 있을 것입니다. 이제 포트 8080에서 Python HTTP 서버를 시작합니다. 명령어 끝에 & 기호를 사용하여 서버를 백그라운드에서 실행하면, 동일한 터미널 창을 계속 사용할 수 있습니다.
python3 -m http.server 8080 &
서버가 실행 중임을 나타내는 다음과 유사한 출력이 표시됩니다.
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
Enter 키를 한 번 눌러 터미널 프롬프트를 다시 불러옵니다. 이제 로컬 웹 서버가 linpeas.sh 파일을 활발히 호스팅하고 있습니다.
대상 머신으로 LinPEAS 다운로드
이 단계에서는 침투 대상 머신이 되어 공격자의 웹 서버로부터 스크립트를 다운로드합니다.
Linux 시스템에는 일반적으로 wget이나 curl과 같은 명령줄 다운로드 유틸리티가 기본적으로 설치되어 있습니다. 이러한 도구는 대상 시스템으로 스크립트나 익스플로잇을 가져오는 데 매우 유용합니다.
먼저, 시뮬레이션된 대상 디렉토리로 이동합니다.
cd ~/project/target
이제 wget 명령어를 사용하여 이전 단계에서 시작한 로컬 웹 서버로부터 linpeas.sh 스크립트를 다운로드합니다. 이번 실습에서는 서버가 동일한 환경에서 실행 중이므로 주소로 localhost를 사용합니다.
wget http://localhost:8080/linpeas.sh
다운로드 진행 상황을 보여주는 출력이 표시됩니다.
--2026-10-25 10:00:00-- http://localhost:8080/linpeas.sh
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 645 [text/x-sh]
Saving to: ‘linpeas.sh’
linpeas.sh 100%[===================>] 645 --.-KB/s in 0s
2026-10-25 10:00:00 (15.4 MB/s) - ‘linpeas.sh’ saved [645/645]
디렉토리 내용을 나열하여 파일이 성공적으로 다운로드되었는지 확인합니다.
ls -l
이제 ~/project/target 디렉토리에 linpeas.sh가 있는 것을 확인할 수 있습니다.
스크립트 실행
이 단계에서는 LinPEAS 스크립트를 준비하고 실행합니다.
도구를 실행하는 것은 시작일 뿐입니다. 진정한 가치는 어떤 결과가 일반적인 노이즈이고, 어떤 결과가 실제 권한 상승 경로와 연결되는지 파악하는 데 있습니다.
인터넷에서 스크립트를 다운로드하거나 웹 서버를 통해 전송하면, 보안상의 이유로 Linux 는 해당 파일의 "실행" 권한을 제거합니다. 즉시 실행하려고 하면 "Permission denied" 오류가 발생합니다.
이를 해결하려면 chmod (change mode) 명령어를 사용하여 파일에 실행 (+x) 권한을 추가해야 합니다.
다음 명령어를 실행하여 스크립트를 실행 가능하게 만듭니다.
chmod +x linpeas.sh
ls -l을 다시 실행하면 파일 권한이 변경된 것을 확인할 수 있으며 (일반적으로 사용자에게 rwx로 표시됨), 터미널에서 파일 이름이 다른 색상으로 표시되어 실행 가능한 프로그램임을 나타낼 수도 있습니다.
이제 스크립트를 실행합니다. Linux 에서 현재 디렉토리에 있는 실행 파일을 실행하려면 앞에 ./를 붙여야 합니다. 이는 시스템에 프로그램이 어디에 있는지 정확히 알려줍니다.
./linpeas.sh
스크립트가 실행되면서 다양한 시스템 검사 결과가 출력되는 것을 볼 수 있습니다. 실제 환경에서 LinPEAS 는 수천 줄의 정보를 출력합니다. 이번 실습에서는 핵심 개념을 강조하기 위해 간소화된 모의 버전을 사용합니다.
[+] LinPEAS - Linux Privilege Escalation Awesome Script (Mock Version)
========================================================================
[?] Basic System Information
Linux labex-vm 5.15.0-1040-aws #45-Ubuntu SMP ...
[!] HIGH PROBABILITY PRIVILEGE Escalation VECTORS
[+] SUID files:
-rwsr-xr-x 1 root root 43K /usr/bin/sudo
-rwsr-xr-x 1 root root 32K /usr/bin/su
-rwsr-xr-x 1 root root 15K /usr/bin/custom_backup (Unknown SUID)
[?] Checking sudo permissions
User labex may run the following commands on this host:
(ALL : ALL) ALL
[+] Enumeration Completed.
잠시 시간을 내어 출력 내용을 살펴보세요. "Basic System Information" 및 "SUID files"와 같은 섹션으로 정보가 어떻게 분류되는지 확인해 보시기 바랍니다.
권한 상승 가능성이 높은 벡터 분석
이 단계에서는 열거 스크립트가 생성한 결과물을 관리하고 분석하는 방법을 배웁니다.
실제 열거 스크립트는 엄청난 양의 텍스트를 생성하기 때문에, 모의 해커들은 터미널 화면에서 직접 읽는 경우가 거의 없습니다. 대신, 결과물을 텍스트 파일로 리다이렉션 (redirection) 하여 나중에 grep과 같은 도구를 사용하여 검색합니다.
스크립트를 다시 실행하되, 이번에는 > 연산자를 사용하여 결과물을 results.txt라는 파일로 저장하겠습니다.
./linpeas.sh > results.txt
이번에는 화면에 아무것도 출력되지 않는 것을 확인하세요. 모든 텍스트가 results.txt 파일로 직접 전송되었습니다.
이제 결과를 분석해 보겠습니다. LinPEAS 는 색상 코딩으로 유명하며, 빨간색/노란색 텍스트는 권한 상승 벡터일 확률이 99% 임을 나타냅니다. 우리의 출력 결과에서는 "Unknown SUID" 파일이 플래그되었습니다.
SUID(Set owner User ID up on execution) 는 파일에 부여되는 특수한 유형의 파일 권한입니다. SUID 가 설정된 파일이 실행되면, 해당 파일을 실행한 사용자가 아닌 파일 소유자 (종종 root) 의 권한으로 실행됩니다. 만약 커스텀 바이너리나 취약한 바이너리에 SUID 비트가 설정되어 있다면, 공격자는 이를 악용하여 root 셸을 획득할 수 있습니다.
grep 명령어를 사용하여 results.txt 파일에서 SUID라는 키워드를 구체적으로 검색합니다.
grep "SUID" results.txt
다음과 같은 출력이 표시될 것입니다.
[+] SUID files:
-rwsr-xr-x 1 root root 15K /usr/bin/custom_backup (Unknown SUID)
출력을 필터링함으로써 매우 의심스러운 파일 (/usr/bin/custom_backup) 을 성공적으로 식별했습니다. 실제 모의 해킹에서는 다음 단계로 이 특정 바이너리를 조사하여 root 권한을 획득하는 데 악용될 수 있는지 확인하게 됩니다.
요약
이번 실습에서는 권한 상승을 위한 자동화된 시스템 열거의 중요한 과정을 경험했습니다. Python 의 내장 HTTP 서버 모듈을 사용하여 로컬에서 파일을 호스팅하는 방법을 배웠습니다. 또한 wget과 같은 명령줄 도구를 사용하여 대상 머신으로 파일을 전송하는 방법도 익혔습니다. 더 나아가, 파일 권한을 수정하여 스크립트를 실행 가능하게 만들고 실행하는 연습을 했습니다. 마지막으로, 스크립트 출력 결과를 파일로 리다이렉션하고 grep을 사용하여 잘못 구성된 SUID 바이너리와 같이 권한 상승 가능성이 높은 벡터를 분석하는 방법을 배웠습니다.
이러한 기본 기술은 보안 전문가나 모의 해커가 Linux 시스템의 내부 보안 상태를 평가할 때 필수적인 역량입니다.



