발단
시스템보안실습 수업의 2번째 과제가 올라왔다.
구글 드라이브 URL을 통해 파일을 다운로드하면 다음과 같이 두 개의 가상머신 파일이 보인다.
구성도를 확인해보니 대략 저런식으로 구축하면 될 듯 하다.
공격 시작
1. CJU VM에 침투
vmware에 과제 가상머신을 구동시킨 후, 같은 NAT 네트워크로 묶인 칼리 리눅스를 통해 공격을 수행해보자.
일단 내 가상머신에서 vmware의 NAT 인터페이스인 vmnet8의 IP 대역은 192.168.12.1/24이다.
이 정보를 이용해 칼리 리눅스에서 CJU 가상머신의 정보를 획득해보자.
fping을 통해 CJU 가상머신에 설정된 IP를 확인하면 다음과 같다.
- 192.168.12.1 -> 네트워크 주소
- 192.168.12.2 -> 게이트웨이 주소
- 192.168.12.133 -> 칼리 리눅스의 IP 주소
- 192.168.12.128 -> CJU 가상머신의 IP 주소
nmap으로 CJU 가상머신에서 동작 중인 서비스를 확인해보자.
ssh 서비스가 open 상태이니 접속이 가능할 것이다.
문제는 CJU 가상머신에 어떤 계정이 존재하는지 모른다는 것이다...
이쯤에서 힌트를 확인해보자.
대놓고 계정명이 힌트로 주어졌다!
가상머신의 파일명이 CJU였으니 일단 소문자 계정명을 사용해 접속을 시도해보자.
습관적으로 1111을 입력했더니 로그인이 되어버렸다. 이래서 비밀번호는 잘 설정해야 한다.
2. Privilege Escalation 하기 위한 Collection
이제 goal 가상머신으로 이동해야 한다.
과제가 권한 상승과 관련이 있으니 일단 root 사용자로 권한 상승을 노려보자.
커널 버전이 5.15.140.0이니 과제 정보에 주어진 CVE-2024-1086 취약점을 적용할 수 있을 것 같다.
CVE-2024-1086 이란?
리눅스 커널 함수 중 ntf_verdict_init() 함수와 nf_hook_slow() 함수에서 발생하는 use-after-free 관련 취약점이다.
이 취약점에 대한 자세한 분석은 과제의 요구 사항이 아니기 때문에 관련 함수만 간단히 살펴보고 넘어가자.
- 대략 nf_hook_slow() 함수의 515번 라인의 NF_DROP 값의 검증이 미흡하여 UAF가 발생하는 듯 하다.
- 자세한 정보는 https://pwning.tech/nftables/ <- 여기서 확인 가능하다.
3. CVE-2024-1086를 이용하여 root 사용자로 Privilege Escalation
이 취약점에 대한 PoC 코드는 github에 공개되어 있으니 가져오자.
CJU 가상머신에는 빌드에 필요한 유틸리티들이 없기에 외부에서 컴파일하여 옮기는 것이 좋을 것 같다.
PoC 코드의 Makefile을 살펴보면 static 옵션을 준 것을 확인할 수 있다.
컴파일러 부분만 적절하게 옵션을 주면 될 것 같다.
CJU 가상머신의 운영체제 버전을 확인하고 docker를 통해 컴파일해서 옮겨보자.
빌드한 바이너리를 CJU 가상머신에 옮겨 실행하면 바로 root로 전환이 되는 것을 확인할 수 있다.
4. CJU VM에서 Goal VM으로 Lateral Movement 하기 위한 Collection
이제 goal 가상머신으로 옮겨가야 한다. 문제는 IP는 알지만 계정명을 모른다.
ssh 로그가 기록되는 /var/log/messages나 쉘 history를 찾아보면 ssh 로그를 찾을 수 있겠지만 더 좋은 방법은 grep으로 조회하는 것이다.
알파인 리눅스는 특성 상 저장공간이 작기 때문에 수용할 수 있는 시간 내에 탐색 가능할 듯 하다.
이전에 접속한 기록을 찾아보니 다음과 같이 ssh 로그가 남아있는 것을 확인할 수 있다.
- 참고로 github에 업로드 된 PoC 코드로 권한 상승 시 쉘에서 SIGINT와 같은 인터럽트를 발생시키면 운영체제를 재부팅하지 않는 이상 더 이상의 권한 상승은 불가능하다.(운영체제가 비정상적으로 동작함. 아마도 메모리를 건드렸기 때문인 것 같음.)
- grep으로 재귀적 디렉터리 탐색 시, 의도했던 것 이상으로 탐색될 수 있으니 리다이렉션을 걸어 적절히 파일에 저장하여 확인
proxynova라는 계정명으로 무언가에 접속한 기록이 남아있다. 저 계정명이 goal 가상머신에서 사용되는 계정명임을 유추할 수 있다.
비밀번호를 알아내려면 여러 방법이 있겠지만, 일단은 저 proxynova라는 것이 눈에 걸린다.
proxynova 란?
무료 프록시 서버를 제공해주는 서비스
공식 사이트에서 관련된 여러 툴을 제공해준다. -> 그 중, leaked password 데이터베이스를 제공해주는 서비스도 존재한다.
링크: https://www.proxynova.com/tools/comb/
굳이 사이트까지 안가도 아래처럼 curl을 통해 API로 조회해볼 수 있으니 편하게 조회해보면 바로 하나가 조회된다.
5. CJU VM에서 Goal VM으로 Lateral Movement
설마 되겠어? 라는 생각으로 goal에 로그인하면 저 비밀번호가 맞는 것을 확인할 수 있다.
공격 결과
침입에 성공하니 flag.txt 라는 파일이 보인다. 이게 침입 인증인 것 같다.
결론
알파인 리눅스는 아무래도 기본 명령어들이 busybox에 묶여 있고, 적절한 유틸리티들이 빠져있는 경우가 많다.
PoC 빌드 과정에서 static 링크를 생각하지 못하고, msul 라이브러리만 생각해서 시간을 좀 허비했다.
사실 굳이 도커로 동일한 환경을 구성하지 않고 glibc 기반 운영체제에서 컴파일해서 옮겨도 문제는 없다.
너무 하나만 생각하지 말고 여러 각도에서 생각해봐야 할 것 같다.
rocky linux 8을 메인 서버로 운용 중인데, 아무래도 최신 버전은 아니다 보니 이것저것 보안 관련하여 신경써야 할 부분이 많았다.
과제의 권한 상승도 커널 업데이트를 신경쓰지 않으면 아직까지도 유효한 취약점이다 보니 나도 좀 더 신경써야 관리해야 할 것 같다.
평소 포트는 최소한으로 열어두고 ssh 터널링을 이용하여 내부망에 접근하는 방식을 애용했는데, 아무래도 터널링으로 접근할 때는 로그가 직관적으로 보이지 않기 때문에 내 시야로는 잘 관찰하기 힘든 부분들이 존재했다.
이런 습관들이 쌓여 서버에 Lateral Movement 같은 공격을 허용할 수 있기 때문에 방화벽 관리에 좀 더 신경쓰고 경각심을 잃지 말아야 겠다.
'대학생활' 카테고리의 다른 글
시스템보안실습 | 4. 주통기 점검 스크립트 (0) | 2024.12.15 |
---|---|
시스템보안실습 | 5. 윈도우 RDP 침투 (0) | 2024.12.13 |
시스템보안실습 | 3. 버퍼오버플로우 (0) | 2024.10.26 |
시스템보안실습 | 1. shadow 파일 password cracking 해보기 (0) | 2024.09.24 |