소개
앞서 소개한 K8SLANPARTY 2 – Finding Neighbours 풀이에 이어 3 – Data Leakage 풀이를 공유해보려 합니다.
이번 문제는 NFS(Network File System) 프로토콜로 공유된 스토리지로부터의 데이터 유출을 확인해야하는 문제입니다.
3 – Data Leakage
문제
문제에서 아래와 같은 정보를 제공해주고 있습니다.
- 표적 기업은 Production 환경에서 데이터 저장을 오래된 클라우드 지원 기술을 활용합니다.
- 이 기술은 네트워크 기반 접근제어만 사용하고 있습니다.
Challenge 제목을 보아 데이터 유출 관련된 것이고 네트워크 기반의 접근제어만 적용되어있는 환경에서 flag 를 찾아야 하는 것같습니다.
필요 사전 지식
- AWS EFS 는 AWS 에서 제공되는 Elastic File System 으로 NFS 프로토콜 기반의 관리형 스토리지 서비스입니다.
- NFS (Network File System) 프로토콜은 서버-클라이언트 구조로 여러 컴퓨터간 파일을 공유할 수 있도록 해줍니다.
풀이
클라우드 기술 지원의 스토리지를 사용하고 있다고 하였으니, 먼저 df
를 통해 filesystem 별 mount 현황을 확인해 봅니다.
AWS EFS 가 마운트 되어있네요.
ls -alh /efs
로 마운트된 경로에 어떤 파일이 있는지 확인을 한번 해봅니다.
바로 flag.txt 파일이 보이네요. 바로 읽어봅니다.
그냥 읽으니 Permission denied
가 발생하여, sudo 로 다시 읽어보았습니다만,,
root 권한 사용이 막혀있습니다.
다시 flag.txt
파일에 대한 정보를 위에서 보니 파일권한을 아무것도 가지고 있지 않습니다.
mount
명령어를 통해 마운트 정보를 다시 확인해봅니다.
아래 내용을 추가 확인할 수 있었습니다.
- 서버 : 192.168.124.98
- NFS 보안모드 :
sec=sys
기본 보안 옵션으로 클라이언트 uid, gid 기반으로 맵핑되어 NFS 서버 파일 접근을 위한 권한 부여
그렇다면 클라이언트의 uid, gid 는 무엇인지 한번 확인해보았습니다.
1001 이군요.
종합해보면..
그냥 flag.txt
파일을 읽었을 때 권한 에러가 발생하였고, ls
확인 시 파일 권한이 어떠한 권한도 가지고 있지 않았습니다.
NFS 서버의 flag.txt
파일권한이 클라이언트에서 uid, gid 권한으로는 읽을 수 없는 권한을 가지고 있어 이렇게 나온것이 아닌가.. 추측해 봅니다.
다른 권한으로 읽을 수 있어야 할듯한데, 아마 root 권한으로 읽어야 하지 않을까… 생각해 봅니다.
그렇다면 NFS 보안모드가 sec=sys
로 되어있었던 만큼 uid, gid 를 0 (root) 로 지정해서 nfs 서버로 파일 확인요청을 보낼 수 있는 nfs 클라이언트가 있으면 우회가 가능할 것같습니다.
이전 문제들에서도 기본적으로 문제들을 풀 수 있는 tool 들은 제공을 해주었기에.. global 실행 명령어로 nfs 관련된 것이 혹시 있는지 /usr/bin
디렉터리를 뒤져봅니다.
nfs-cat 이라는 것이 있군요. 해당 이름으로 검색하니 ubuntu manpages 에 관련 정보가 있습니다.
nfs-cat is a utility to read a file off an NFS server.
Example: Print the content of a file:
$ nfs-cat nfs://127.0.0.1/data/tmp/foo.c
사용 방법이 나오네요. 하지만 uid, gid 지정에 대한 옵션은 보이질 않습니다.
manpage 에 추가로 확인해 보라는 libnfs 라이브러리 깃페이지를 확인해봅니다. 아마 libnfs 라이브러리를 사용하여 구현된 것 같습니다.
확인 결과 아래와 같이 libnfs
는 NFS 쉐어 서버에 엑세스할 수 있는 client library 라고 합니다.
uid, gid 를 포함하는 nfs url 포맷을 위와 같이 사용할 수 있도록 해줍니다.
그렇다면 이를 이용하여 nfs-cat
인자로 uid, gid 0 을 포함하는 nfs url 를 전달해서 읽어봅니다.
//
를 넣어야 절대경로 확인이 된다고 하여 다시 입력하니 flag 가 확인이 되었네요!