AWS에 올린 개발용 Postgres DB가 주기적으로 Down되는 현상이 있어 분석했고
결과적으로 DB 컨테이너가 Malware로 부터 감염이 되어 채굴용으로 사용된 것으로 파악이 되었다.
1. DB 컨테이너가 Down 주기적으로 Down 되었던 이유
-> Host OS 혹은 Docker Daemon에서 판단 했을 때 해당 컨테이너의 CPU 점유율 및 메모리 사용량이 상당히 높아 해당 PID를 강제로 kill 했을 것으로 추측된다. 아래는 문제가 되었던 DB 컨테이너의 상태로. CPU 사용률/점유율이 200퍼센트를 넘겼으며 메모리 사용량도 2GiB를 넘기는 수치이다.

아래는 정상적인 DB 컨테이너의 상태로 차이가 극명하다.


*signal 9: Killed 라는 로그 메세지가 Out Of Memory killer 관련 로그.
표면적으로 메모리가 부족해서 발생한 문제인만큼 메모리 관련 설정값을 바꾸고 재시작한 뒤 모니터링 해보았지만 결과는 같았다.
2. DB 컨테이너의 CPU 및 메모리 사용률/점유율이 비정상적으로 높았던 이유
-> 단순히 메모리가 부족하여 꺼졌다기엔 파일을 조작하려다가 리눅스 자체적인 권한 때문에 막힌 로그도 일부 있었던 것으로 보아 단순 메모리 문제가 아니라고 판단

원인을 찾아보고자 DB 컨테이너 내부적으로 구동되는 프로세스들을 전부 리스트업 해보았고 아래 프로세스들을 발견했고
아래 프로세스들은 설치한 적이 없는데 자원은 99% 가량 점유하고 있었다.

어떤 프로세스인지 AI의 도움을 받아 확인해본결과 아래 내용과 같았고
정리하면 서버 대역폭과 메모리 자원을 착취하고 있는 채굴용 멀웨어라는 것

3. 임시조치
데이터를 백업 및 동기화하여 컨테이너를 재구동 후 CPU/메모리 사용률이 정상적으로 돌아온 것을 확인

4. 증상 재발현
다음날 증상이 또 발현했고 문제의 프로세스들이 있는 확인해보니 CPU 점유율은 또 200퍼센트 가까이 찍었고

분명 새로 말아서 없어졌던 프로세스들이 새벽 6시부터 생겨나서 또 있었다. (이녀석들도 부지런하구나)

5. 오픈소스 백신 프로그램 (ClamAV) 깔고 스캔하기
https://docs.clamav.net/Introduction.html
Introduction - ClamAV Documentation
ClamAV is an open source (GPLv2) anti-virus toolkit, designed especially for e-mail scanning on mail gateways. It provides a number of utilities including a flexible and scalable multi-threaded daemon, a command line scanner and advanced tool for automatic
docs.clamav.net
ClamAV란 시스코 시스템즈에서 만든 오픈소스 백신 프로그램으로 Unix 환경에 특화된 멀웨어 스캔/점검 툴이다.
사용법이야 공식문서도 많고 타 블로그에도 많아서 간략하게만 기입하겠다.
https://www.clamav.net/downloads
ClamAVNet
www.clamav.net
위 링크에서 OS 버전에 맞게 다운로드 & 설치
설치
sudo rpm -ivh <다운로드받은파일명>
sudo dnf install ./<다운로드받은파일명>
설정
sudo cp /usr/local/etc/freshclam.conf.sample /usr/local/etc/freshclam.conf
sudo sed -i 's/^Example/#Example/' /usr/local/etc/freshclam.conf
권한준비
sudo groupadd clamav
sudo useradd -g clamav -s /bin/false -c "Clamav" clamav
sudo chown clamav:clamav /usr/local/share/clamav
백신 DB 업데이트
sudo /usr/local/bin/freshclam
스캔
전체 스캔
sudo /usr/local/bin/clamscan -r -i /
특정경로 스캔
sudo /usr/local/bin/clamscan -r -i /경로
6. 감염된 파일을 통해 어디서 어떤 취약점이 있는지 파악
아래와 같이 4개의 감염된 파일이 있었으며

파일들은 각각 달랐지만
Unix.Exploit.Pkexecexploit-10034078-0 FOUND
와 같은 공통적인 취약점이 있어서 검색을 해보았다.
PwnKit: PolKit’s pkexec CVE-2021-4034 Vulnerability Exploitation
This blog explains PwnKit, Polkit pkexec vulnerability (CVE-2021-4034) is exploited by attackers for local privilege escalation in Linux distributions such as Ubuntu and CentOS
www.picussecurity.com

관련해서 짧게 정리를 해보면 루트권한을 탈취해서 조작을 할 수 있게 해주는 뭐 그런 취약점이라고 한다.
발생했던 경로가 전부 도커와 관련된 곳이어서
/var/lib/docker/overlay2/~/diff/tmp/.perf.c/postgres: Unix.Exploit.Pkexecexploit-10034078-0 FOUND
/var/lib/docker/overlay2/~/diff/var/lib/postgresql/.config/cron/perfcc: Unix.Exploit.Pkexecexploit-10034078-0 FOUND
/var/lib/docker/overlay2/~/merged/tmp/.perf.c/postgres: Unix.Exploit.Pkexecexploit-10034078-0 FOUND
/var/lib/docker/overlay2/~/merged/var/lib/postgresql/.config/cron/perfcc: Unix.Exploit.Pkexecexploit-10034078-0 FOUND
설치된 도커 daemon이 감염되었을 수도 있겠다 싶어서 도커를 완전 지우고 최신 버전으로 올려주었다.
이후 검사를 돌려보니 예상대로 감염된 파일이 없는것으로 나왔다.

언제 어떤 경로를 통해 들어왔는지는 몰라도 한동안 모니터링을 해야할 것으로 보이고
우리가 늘 사용하는 공식 오픈소스 또한 다양한 취약점과 버그들이 있기 때문에 주의가 필요하고
꾸준히 업데이트되고 있기 때문에 큰 drawback이 없는 경우 주기적으로 업데이트를 해야할 것으로 보인다.
이후에도 또 문제가 발생한다면 OS (AlmaLinux 9.4)의 보안패치를 해야할 것으로 보인다.

sudo dnf update polkit'개발자 전향 프로젝트' 카테고리의 다른 글
| 네트워크에서 Sever 와 Client의 관계 (Initiator & Listener) 정리 (0) | 2025.09.26 |
|---|---|
| 나의 Ubuntu가 갑자기 apt-get update를 못한다..? (도커) (0) | 2025.09.08 |
| VSCode Remote Explorer 통해 SSH 접근 시 에러 디버깅 (2) | 2025.06.20 |
| 자주 사용하는 도커 로그 구하는 법 (0) | 2025.06.18 |
| FATAL: remaining connection slots are reserved for roles with the SUPERUSER attribute 에러 디버깅 (1) | 2025.06.17 |