권한 상승은 익스플로잇이 아니라 열거에서 시작한다

🛡️ 강사 제공 인가된 실습 환경에서 수행

LPE란 무엇인가

LPE(Local Privilege Escalation) 는 이미 시스템 내부에서 일반 사용자 권한을 확보한 뒤, 설정 오류나 취약점을 이용해 더 높은 권한으로 올라가는 과정이다.

일반 사용자 권한 → 관리자 또는 root 권한

권한 상승은 취약점 하나를 찾는 작업이라기보다 시스템 전체의 권한과 설정을 분석해 잘못 구성된 부분을 찾는 과정에 가깝다.

주로 이런 데서 생긴다.

  • 잘못 설정된 파일 및 디렉터리 권한
  • 위험하게 구성된 SUID·SGID 실행 파일
  • 부적절한 sudo 권한 설정
  • 설정 파일이나 스크립트에 하드코딩된 계정 정보
  • 일반 사용자가 수정할 수 있는 Cron 스크립트
  • root 권한으로 실행되는 취약한 서비스
  • 오래된 커널 또는 패키지 버전

분석 순서와 원칙

  1. 현재 사용자와 그룹 확인
  2. 운영체제, 커널, 배포판 정보 확인
  3. sudo 권한 확인
  4. SUID·SGID 파일 확인
  5. Cron과 systemd 작업 확인
  6. 쓰기 가능한 파일과 디렉터리 확인
  7. 민감 정보와 인증 정보 확인
  8. 실행 중인 프로세스와 내부 서비스 확인

원칙은 이렇다.

  • 현재 권한으로 확인할 수 있는 항목부터 조사한다
  • 시스템을 변경하기 전에 읽기 중심으로 증거를 수집한다
  • 하나의 취약점만 찾기보다 여러 설정을 종합적으로 본다
  • 실습 환경이 아니라면 Exploit 실행보다 설정 오류를 입증하는 것을 우선한다
  • 명령 결과와 발견 내용을 기록하면서 분석한다

현재 사용자 정보

whoami
id
groups
pwd
hostname
명령어설명
whoami현재 로그인된 사용자 이름
idUID, GID, 소속 그룹
groups현재 사용자가 포함된 그룹
pwd현재 작업 디렉터리
hostname시스템의 호스트 이름

특히 다음 그룹에 속해 있으면 주의해서 봐야 한다. 설정에 따라 시스템 파일이나 관리자 기능에 접근할 수 있어 그 자체가 권한 상승 단서가 된다.

sudo · docker · adm · backup · disk · lxd

시스템 정보

uname -a
cat /etc/os-release
hostnamectl
명령어설명
uname -a커널 버전과 시스템 아키텍처
cat /etc/os-release리눅스 배포판과 버전
hostnamectl호스트 이름, 운영체제, 커널 정보
ip addr
ss -tulpn
ps aux
명령어설명
ip addr네트워크 인터페이스와 IP 주소
ss -tulpn열려 있는 TCP·UDP 포트와 서비스
ps aux현재 실행 중인 프로세스

여기서 찾는 것은 네 가지다. 취약한 커널·패키지 버전의 단서, 외부에서는 못 보고 내부에서만 열린 서비스, root 권한으로 실행 중인 프로세스, 예상하지 못한 네트워크 인터페이스나 내부망.

SUID와 SGID

SUID(Set User ID) 가 설정된 프로그램은 이를 실행한 사용자의 권한이 아니라 파일 소유자의 권한으로 실행된다. root가 소유한 프로그램에 SUID가 걸려 있으면 일반 사용자가 실행해도 프로그램 일부가 root 권한으로 동작한다.

정상적인 예가 passwd 다. 일반 사용자가 자기 비밀번호를 바꾸려면 root만 수정할 수 있는 파일에 접근해야 하므로 제한적으로 높은 권한을 쓴다. 그러나 SUID 프로그램이 잘못 구성됐거나 위험한 기능을 제공하면 그대로 권한 상승 경로가 된다.

find / -perm -4000 -type f 2>/dev/null   # SUID
find / -perm -2000 -type f 2>/dev/null   # SGID

무엇을 볼 것인가.

  • 일반적인 시스템 파일이 아닌 수상한 SUID 파일
  • 사용자가 직접 만든 실행 파일
  • 오래된 프로그램 또는 알려진 취약점이 있는 프로그램
  • 셸 실행이나 외부 명령 실행이 가능한 프로그램
  • 파일 읽기·쓰기 기능을 제공하는 프로그램

SUID 파일을 발견했다고 무조건 취약한 건 아니다. 프로그램의 기능·버전·소유자·권한을 함께 확인해야 한다.

sudo 권한

sudo -l

확인할 항목은 이렇다.

  • NOPASSWD 설정 여부
  • 실행 가능한 명령어의 경로
  • 어떤 사용자 권한으로 실행할 수 있는지
  • 명령어 인자에 제한이 있는지
  • 와일드카드가 포함되어 있는지
  • 편집기, 스크립트 언어, 파일 관리 프로그램이 허용되어 있는지
user ALL=(root) NOPASSWD: /usr/bin/some-command

이건 해당 사용자가 비밀번호 없이 그 명령을 root 권한으로 실행할 수 있다는 뜻이다. 허용된 프로그램이 셸 실행, 파일 수정, 명령 실행 기능을 제공한다면 거기서 권한 상승이 열린다.

Cron 작업

Cron은 정해진 시간마다 명령이나 스크립트를 자동 실행하는 스케줄러다. 백업, 로그 정리, 시스템 점검 같은 반복 작업에 쓰인다.

cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/
ls -la /etc/cron.weekly/
crontab -l

핵심 위험은 하나다. root 권한으로 도는 Cron이 일반 사용자가 수정할 수 있는 스크립트를 실행하는 것. 세 조건이 겹치면 권한 상승이 성립한다.

  1. Cron 작업이 root 권한으로 실행됨
  2. Cron이 특정 스크립트를 주기적으로 실행함
  3. 일반 사용자가 그 스크립트를 수정할 수 있음

함께 볼 것: 스크립트의 소유자, 파일 권한, 스크립트가 호출하는 다른 파일, 절대 경로 사용 여부, 와일드카드 사용 여부, PATH 환경변수 설정.

systemd 작업

Cron 말고 systemd 서비스나 타이머도 자동으로 프로그램을 실행한다.

systemctl list-units --type=service
systemctl list-timers --all

root 권한으로 실행되는 서비스, 사용자가 수정할 수 있는 실행 파일·스크립트, 설정 파일의 잘못된 권한, 쓰기 가능한 작업 디렉터리, 상대 경로로 지정된 실행 파일을 확인한다.

쓰기 가능한 파일과 디렉터리

일반 사용자가 수정할 수 있는 파일이 root 프로세스와 연결돼 있으면 그게 경로가 된다.

find / -writable -type f 2>/dev/null
find / -writable -type d 2>/dev/null

모든 결과가 취약한 건 아니다. 다음과 연결되는지를 중심으로 본다 — root가 실행하는 스크립트, Cron·systemd가 사용하는 파일, 시스템 실행 파일이 위치한 디렉터리, 서비스 설정 파일, 백업·배포 스크립트, 환경변수에 포함된 경로.

민감 정보와 인증 정보

설정 파일이나 작업 기록에 비밀번호, API 키, SSH 키가 남아 있는 경우가 많다.

cat ~/.bash_history
ls -la ~/.ssh/
env

웹 애플리케이션 환경이면 이런 파일도 대상이다.

.env
config.php
settings.py
application.properties
docker-compose.yml

발견했을 때는 실제 계정 정보인지, 현재 시스템에서 재사용되는 정보인지를 함께 확인해야 한다.

자동화 도구 — LinPEAS

LinPEAS 는 권한 상승 관련 설정을 자동으로 점검해 주는 스크립트다. 시스템·커널 정보, SUID·SGID, sudo 설정, Cron, 쓰기 가능한 파일, 민감한 환경변수, 실행 중인 서비스, 자격 증명을 한 번에 훑는다.

다만 이건 권한 상승을 수행하는 도구가 아니라 가능성이 있는 항목을 수집해 보여주는 점검 도구다. 출력을 그대로 믿지 말고 이 과정을 거쳐야 한다.

  1. 도구가 표시한 항목 확인
  2. 파일 권한과 소유자 확인
  3. 해당 프로그램·서비스의 실행 방식 분석
  4. 실제로 권한 상승에 연결되는지 검증

빠른 점검에는 유용하지만 수동 분석 방법도 같이 익혀야 한다.

전체 흐름

현재 사용자 및 그룹 확인

OS·커널·네트워크 정보 확인

sudo 권한 확인

SUID·SGID 파일 확인

Cron·systemd 작업 확인

쓰기 가능한 파일과 디렉터리 확인

민감 정보와 인증 정보 탐색

실행 중인 서비스와 프로세스 분석

발견한 설정 오류의 실제 위험성 검증

정리

Linux 권한 상승은 Exploit 코드를 실행하는 과정이 아니다. 사용자 권한, 그룹, 파일 권한, sudo 설정, SUID 파일, 예약 작업, 실행 중인 서비스, 인증 정보를 순서대로 확인해 잘못된 설정을 찾아내는 분석 과정이다.

우선순위가 높은 항목은 이 일곱 개다.

sudo 권한
SUID·SGID 파일
root Cron 작업
쓰기 가능한 스크립트
하드코딩된 인증 정보
root 권한 프로세스
오래된 커널과 패키지

자동화 도구를 쓰더라도 각 결과가 왜 위험한지 이해하고 수동으로 검증하는 능력이 핵심이다.