본문 바로가기
[DevOps]/Docker

Linux에서 CPU 과부하를 일으키는 의문의 프로세스 추적하기(Docker 공식 이미지 내 멀웨어, kdevtmpfsi)

by 팡펑퐁 2025. 2. 16.
728x90

  • 몇 주 전부터 테스트 서버에 설정해 놓은 CPU 사용량 알람이 불규칙하게 발생했다.
  • 이 알람은 CPU 사용량이 5분간 90% 이상일 때만 전송되도록 설정한 것이었는데 사용량이 아예 없는 새벽에도 뜬금없이 메일이 오기도 했다.
  • 최근에 잦아진 느낌이 들어 리눅스 명령어를 통해 원인을 파악해 보았다.

 

🛠️  top 명령어 실행

$ top

# 출력문 
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                                                                                    
2603276 systemd+  20   0 2441220   2.3g      4 S 187.7  14.9   4:29.73 kuuqohhxo
...
  • top 명령어는 현재 실행 중인 프로세스의 cpu와 메모리 사용량을 알 수 있다.
  • 그럼 사용량 순으로 정렬이 되는데 COMMAND를 보면 불규칙적인 문자열 프로세스가 리소스를 많이 잡아먹고 있었다.
  • 불필요한 내용이라고 판단하여 몇 번이나 삭제했음에도 다른 문자열로 재생성되었다.
  • 재생성 시기 역시 최단 1분 이내부터 하루나 며칠 뒤까지 매우 불규칙했다.

 

👮🏻‍♂️ 추적해 보기

# 새로 생긴 프로세스 이름을 복사하여 파일 위치 확인
$ sudo find / -name "kuuqohhxo" 2>/dev/null

# 출력
/var/lib/docker/overlay2/18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be/diff/tmp/.fhbtzbkeo/kuuqohhxo
/var/lib/docker/overlay2/18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be/merged/tmp/.fhbtzbkeo/kuuqohhxo
  • 먼저 이 불규칙한 문자열의 프로세스가 어느 위치에 있는지부터 추적해 봤다.
  • find 명령어로 찾아본 결과 Docker의 overlay2 디렉터리였다. 즉, Docker의 특정 컨테이너가 범인이다.
    • 이곳에 저장되는 디렉터리 명은 Docker의 OverlayFS 스냅샷(레이어) ID이다.
    • 이곳은 Docker가 컨테이너를 실행할 때 이미지 레이어를 저장하는 용도로 사용된다.
    • 이 스냅샷을 사용 중인 컨테이너가 무엇인지 알면 어느 컨테이너에서 발생한 것인지를 알 수 있을 것이다.

 

⛴️ overlay2 들어가 보기

# 루트 권한으로만 접근 가능하다.
$ sudo su root
[root@...]# cd /var/lib/docker/overlay2/
[root@...]# ls -al

# 출력
...
drwx--x---. 5 root root  69 Feb 11 12:49 18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be
drwx--x---. 4 root root  72 Feb 11 12:49 18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be-init
  • 스냅샷의 생성 시간으로도 얼추 유추할 수 있지만 보다 정확한 확인을 위해 스냅샷의 ID를 이용하여 찾아보자.

 

👀 컨테이너 탐색

# --no-trunc container id의 생략 없이 전부 나옴
$ docker ps -a --no-trunc
CONTAINER ID   IMAGE               COMMAND                  CREATED         STATUS        PORTS                                       NAMES
xxxxxxxxxxxx   be-product          "sh -c 'exec java -D…"   23 hours ago    Up 23 hours   0.0.0.0:xxxx->xxxx/tcp, :::xxxx->xxxx/tcp   be-product-1
xxxxxxxxxxxx   postgres:16.2       "docker-entrypoint.s…"   23 hours ago    Up 23 hours   0.0.0.0:xxxx->xxxx/tcp, :::xxxx->xxxx/tcp   db-product-1

위 스냅샷과 비슷한 시기에 created 된 컨테이너를 찾았고 이제 컨테이너의 상세 정보를 파악하자.

 

👀 postgres 컨테이너 상세 검색

$ docker inspect <container id>

# 출력문
...
"Image": "sha256:8e4fc9e184899a58735e7ee333f5e272d7d2298cf59302006b71f33e217be130",
...
"GraphDriver": {
            "Data": {
            	...
                 "MergedDir": "/var/lib/docker/overlay2/18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be/merged",
                "UpperDir": "/var/lib/docker/overlay2/18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be/diff",
                "WorkDir": "/var/lib/docker/overlay2/18aa6c1f707129482c9f63032304103bb3b3884a98be7c3e6dc72dd4a48656be/work"
            }
...
  • "Image" 값은 컨테이너를 띄울 때 사용된 로컬 이미지의 id이다.
  • GraphDriver.Data.xxxDir의 경로를 통해 posrgres:16.2를 사용하는 컨테이너가 범인임을 확인했다.
  • 그럼 여기서 유추해 볼 수 있는 것은 postgres:16.2가 공식 이미지가 아닌 악성 코드나 프로그램이 심어진 조작된 이미지이고, 그걸 사용해서 생긴 문제가 아닌가 하는 점이다.
  • 실제로 이 프로젝트는 외국 외주 업체를 통해 개발된 것이기 때문에 개발 스펙 및 이미지를 외주업체에서 정했었다.
  • 혹시나 잘못된 경로로부터 받은 이미지인지를 확인해 보자.

 

👀 postgres image 상세 검색

$ docker inspect <image id>

# 출력
[
    {
        "Id": "sha256:8e4fc9e184899a58735e7ee333f5e272d7d2298cf59302006b71f33e217be130",
        "RepoTags": [
            "postgres:16.2"
        ],
        "RepoDigests": [
            "postgres@sha256:4aea012537edfad80f98d870a36e6b90b4c09b27be7f4b4759d72db863baeebb"
        ],
    ...
  • 해당 postgres 이미지를 inspect 명령어로 상세 검색하면 "Id" 값이 나오는데 이 값과 위의 컨테이너 상세 검색 시 나온 "Image"의 값이 일치함을 확인할 수 있다.
  • 이제 repoDigests를 보면 다시 sha256으로 시작하는 다이제스트가 나오는데 이 값이 dockerhub에 있는 공식 이미지의 다이제스트 값과 같다면 공식 이미지를 사용한 것으로 볼 수 있다.

 

🐳 dockerhub 내 postgres 특정 태그 이미지 찾기

  • 태그에 버전을 입력하여 검색한다.

 

  • INDEX DIGEST를 확인한다.
  • 위의 postgres:16.2에 해당하는 로컬 이미지의 다이제스트와 같음을 확인할 수 있다.
  • 즉, 공식 이미지를 사용한 것이 맞다.
  • 다음으로 공식 이미지 내에 악성 프로그램 혹은 DB 내 특정 문제로 과부하가 주기적으로 발생하는 상황을 상상해 보았다.
  • 이 과정에서 하루가 지나갔고, 프로세스 과부하 문제가 다시 발생하여 프로세스를 kill을 한 상태에서 컨테이너도 다시 띄우고 추적을 시작했다.

 

👾 암호화폐 마이닝(채굴) 멀웨어?!

  • 악성 프로그램보다는 postgres 내 DB가 과부하에 걸리는 상황이 있을 확률이 높기 때문에 구글링을 먼저 해보았다.
  • 검색어는 postgresql image cpu usage로 했다.
  • 그런데, kdevtmpfsi 프로세스라는 멀웨어가 공식 이미지에서 문제를 일으켰다는 내용의 이슈를 확인할 수 있었다.

 

😈 kdevtmpfsi & kinsing: 암호화폐 채굴 악성코드(Malware)

  • 비슷한 류의 악성 코드를 찾아보니 여러 개가 있었고 그중 대표적인 것을 간략하게 정리해 봤다.

kdevtmpfsi

리눅스 시스템에서 발견되는 암호화폐 채굴 악성코드

  • /tmp/kdevtmpfsi 같은 경로에서 실행됨
  • CPU 사용량 급증, 서버 리소스 과다 점유

kinsing

  • Docker 및 Kubernetes 환경을 노리는 악성코드
  • 컨테이너 취약점을 이용해 백도어 설치 & 채굴 활동
  • kdevtmpfsi와 함께 동작하는 경우 많음

정리하면 다음과 같다.

암호화폐 채굴 멀웨어는 감염된 서버의 CPU 자원을 몰래 사용하여 암호화폐를 채굴한다.

  • 그 결과, 서버의 CPU 사용률이 비정상적으로 높아지고 성능 저하가 발생할 수 있다.

Docker 공식 이미지 자체에는 악성코드가 포함되지 않지만,

  • 이미 감염된 호스트(OS)에서 컨테이너가 실행되면 내부로 유입될 가능성이 있다.

컨테이너의 포트 설정, 보안 설정이 취약하면 감염 위험이 커진다.

  • 예를 들어, 잘 알려진 포트(22, 2375 등)를 오픈하거나,
  • root 권한으로 컨테이너를 실행하면 공격자가 쉽게 침투할 수 있다.

보안 강화가 필수!

  • 최신 패치 적용, root 권한 제한, 방화벽 설정 강화, 의심스러운 프로세스 주기적 점검이 필요하다.

 

👨🏻‍✈️ 잠복 근무하기

  • 먼저 리눅스 로컬에서 위 멀웨어와 관련된 키워드로 검색해 보았지만 전혀 나오지 않았다.
  • 이 때문에 로컬에서 컨테이너로 감염된 것이 아니라 이미지 자체가 문제인 것 같다는 생각도 들었다.
  • 멀웨어의 저장 위치를 정확히 추적하기 위해 해당 프로세스가 다시 나타나기를 기다렸다.
  • 컨테이너를 새로 띄운 상태여서인지 몇 시간을 기다려봤지만 나타나지 않았다.
  • 그래서 우선 멀쩡한 상태의 postgres 컨테이너의 정보를 기록해 두었다.

 

🏃🏻‍♂️‍➡️ postgres 컨테이너를 새로 띄운 직후

# 도커 컨테이너 내 실행 중인 프로세스를 확인
$ docker top <container id>

# 출력
UID          PID                 PPID                C                   STIME               TTY                 TIME                CMD
systemd+     19832               19811               0                   14:24               ?                   00:00:00            postgres
systemd+     19912               19832               0                   14:24               ?                   00:00:00            postgres: checkpointer
systemd+     19913               19832               0                   14:24               ?                   00:00:00            postgres: background writer
systemd+     19921               19832               0                   14:24               ?                   00:00:00            postgres: walwriter
systemd+     19922               19832               0                   14:24               ?                   00:00:00            postgres: autovacuum launcher
systemd+     19923               19832               0                   14:24               ?                   00:00:00            postgres: logical replication launcher
root         61634               19811               0                   14:49               pts/0               00:00:00            /bin/bash

# 컨테이너 내부 접속
$ docker exec -it <container id> /bin/bash

# /tmp 폴더 이동
root@020dcd076130:/# cd /tmp/

# 숨김폴더까지 확인
root@020dcd076130:/tmp# ls -al
total 0
drwxrwxrwt. 2 root root  6 Apr 24  2024 .
drwxr-xr-x. 1 root root 29 Feb 13 14:24 ..

# /var/tmp 폴더 이동
root@020dcd076130:/# cd /var/tmp/

# 숨김폴더까지 확인
root@020dcd076130:/var/tmp# ls -al
total 0
drwxrwxrwt. 2 root root  6 Jan 29  2024 .
drwxr-xr-x. 1 root root 17 Apr 24  2024 ..
  • 이 정보를 보면 postgres 컨테이너 내 실행 중인 프로세스에 이상한 점은 없으며 컨테이너 내부에 들어가 /tmp 등 멀웨어가 저장될만한 공간을 전부 들어가 보았지만 아무것도 없었다.
  • 심지어 인스턴스에서 위 멀웨어와 관련된 키워드로 검색해 보았지만 전혀 나오지 않았다.

 

😈 다시 실행된 의문의 프로세스

# top
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                               
 167357 systemd+  20   0 2441228   2.3g      4 S 191.7  14.9 250:24.48 gylnuhwro    


root@020dcd076130:/tmp# ls -al
total 0
drwxrwxrwt. 1 root     root     42 Feb 14 01:12 .
drwxr-xr-x. 1 root     root     40 Feb 13 14:24 ..
drwx------. 2 postgres postgres 23 Feb 14 01:12 .vrbuzemjt
drwx------. 2 postgres postgres 23 Feb 13 22:12 .xwaphstex


root@020dcd076130:/tmp# cd .vrbuzemjt/
root@020dcd076130:/tmp/.vrbuzemjt# ls -al
total 1988
drwx------. 2 postgres postgres      23 Feb 14 01:12 .
drwxrwxrwt. 1 root     root          42 Feb 14 01:12 ..
-rwxr-xr-x. 1 postgres postgres 2032004 Feb 14 01:12 gylnuhwro
  • top 명령어를 통해 해당 프로세스가 다시 동작중임을 확인했다.
  • 이후 문제의 컨테이너인 postgres:16.2 컨테이너에 접속하여 컨테이너 내부의 /tmp 폴더에 들어가 보았다.
  • 해당 경로를 살펴보니 postgres 유저 이름으로 불분명한 문자열의 숨김폴더가 생성되었음을 확인할 수 있었다.
  • 해당 폴더 중 제일 최근에 생성된 폴더를 들어가니 로컬 호스트의 COMMAND에 표시된 문자열과 동일한 문자열의 파일을 찾을 수 있었다.

 

🐳 docker 컨테이너 내부 탐색하기

# 컨테이너 내부에서 패키지 다운로드
# procps → ps, top, uptime, free 명령어 사용 가능하게 다운로드
# net-tools → netstat, ifconfig 명령어 사용 가능하게 다운로드
$ apt update && apt install -y net-tools procps

# 컨테이너 내부 실행 중인 모든 프로세스를 확인
root@020dcd076130:/tmp# ps -aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres       1  0.0  0.1 220136 18264 ?        Ss   Feb13   0:02 postgres
root         116  0.0  0.0   7196   540 pts/0    Ss+  Feb13   0:00 /bin/bash
root         147  0.0  0.0   7196   544 pts/1    Ss+  Feb13   0:00 /bin/bash
root         706  0.0  0.0   7196   516 pts/2    Ss+  Feb13   0:00 /bin/bash
postgres     943  0.0  0.0   6716  4428 ?        Sl   Feb13   0:00 postgres:
root        1724  0.0  0.0   7196  2628 pts/3    Ss+  03:22   0:00 /bin/bash
root        2983  0.0  0.0   7196  4100 pts/4    Ss   11:36   0:00 /bin/bash
postgres    3571  186 14.9 2441228 2402536 ?     Sl   12:12 143:09 /bin/bash
...

root@020dcd076130:/tmp# ls -l /proc/3571/exe
lrwxrwxrwx. 1 postgres postgres 0 Feb 14 12:12 /proc/3571/exe -> /tmp/.qyoopvprr/xkvmnjdrv


# PID로 부모 프로세스 추적
root@020dcd076130:/tmp# ps -o pid,ppid,cmd -p 3571
    PID    PPID CMD
   3571     943 /bin/bash

# PID로 부모 프로세스 추적
root@020dcd076130:/tmp# ps -o pid,ppid,user,cmd -p 943
    PID    PPID USER     CMD
    943       1 postgres postgres:

# 프로세스 트리로 확인해보기
root@020dcd076130:/tmp# pstree -ap
postgres,1
  ├─emwddcpwo,943
  │   ├─xkvmnjdrv,3571
  │   │   ├─{xkvmnjdrv},3572
  │   │   ├─{xkvmnjdrv},3573
  │   │   ├─{xkvmnjdrv},3574
  │   │   ├─{xkvmnjdrv},3575
  │   │   ├─{xkvmnjdrv},3576
  │   │   ├─{xkvmnjdrv},3582
  │   │   └─{xkvmnjdrv},3583
  │   └─{emwddcpwo},944
  ├─postgres,8966
  ├─postgres,8967
  ├─postgres,8968
  ├─postgres,8969
  ├─postgres,8970
  ├─postgres,8973
  ├─postgres,8974
  ├─postgres,8975
  ├─postgres,8976
  ├─postgres,8977
  ├─postgres,8978
  ├─postgres,8979
  ├─postgres,8980
  ├─postgres,8981
  └─postgres,8982
  • 좀 더 명확한 정보 수집을 위해 컨테이너에 ps, netstat 등과 같은 명령어를 사용하려고 했으나 기본 이미지 내 OS에는 해당 명령어를 제공해주지 않아 직접 설치해야 했다.
  • 이후 ps -aux와 같은 명령어를 통해 해당 프로세스가 컨테이너 내부에서 실행 중임을 확인했다.(PID 3571)
  • 해당 PID로 부모프로세스를 추적해 보니 postgres라는 user 이름이 최상단에 위치해 있었다.
  • 이로써 공식 이미지를 사용한 컨테이너임에도 멀웨어 의심 프로세스가 동작중임이 확인되었다.

 

# 현재 시스템의 네트워크 연결 상태를 확인하는 명령어
root@020dcd076130:/tmp# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.x.x.x:xxxxx        0.0.0.0:*                LISTEN      -                   
tcp        0      0 0.0.0.0:xxxx           0.0.0.0:*                LISTEN      -                   
tcp        0      0 172.x.x.x:xxxx         172.x.x.x:xxxxx          ESTABLISHED -                   
tcp        0      0 172.x.x.x:xxxx         172.x.x.x:xxxxx          ESTABLISHED -                   
tcp        0      0 172.x.x.x:xxxx         172.x.x.x:xxxxx          ESTABLISHED -                   
tcp        0      0 172.x.x.x:39830        185.10.68.220:443        ESTABLISHED -                   
...                
tcp6       0      0 :::xxxx                 :::*                    LISTEN      -
  • 또한 컨테이너 내부에서 netstat 명령어를 통해 182.10.68.220과 같은 처음 보는 IP와 연결되고 있음이 확인되었다.
  • Local Address에 적힌 39830 포트는 해당 프로세스를 죽여 다시 재생성되었을 때 변하지만 Foreign Address의 IP는 변하지 않고 그대로였다. 
  • 아이피 주소를 검색해 보니 인도네시아로 나왔다.(프로세스를 죽이고 컨테이너를 재시작 했을 때 루마니아로 변경된 걸 보면 실행 프로세스마다 유동적인 것 같다)
  • 처음엔 DB의 과부하였나 싶었는데 멀웨어임을 확신하는 순간이었다.

 

🫥 상황 정리하기

  1. 의문의 프로세스가 CPU를 엄청 잡아먹는 것을 발견
  2. top로 해당 프로세스 위치 추적
  3. 특정 docker container에서 실행 중임을 확인
  4. 암호화폐 마이닝 멀웨어 이슈가 있다는 걸 알게 됨
  5. 로컬 호스트에서 해당 멀웨어 이름을 여러 번 검색했지만 나오지 않음
  6. 문제의 컨테이너로 들어가 컨테이너 내부에서 리눅스 명령어 사용하도록 패키지 다운로드를 함
  7. Linux 명령어를 통해 /tmp 폴더에 멀웨어 의심 프로세스가 생성됨을 확인

 

😤 대처하기

  • 이후에 해당 컨테이너 내부에 멀웨어가 있다고 가정하고 멀웨어의 위치를 찾으려고 별 짓을 다해봤지만 컨테이너 내부에서는 도저히 찾을 수 없었다.
  • 이거만 지우면 완전한 승리인데 매우 아쉬웠다.
  • 여기서 거의 포기 직전이었기 때문에 임시방편으로 더 이상 해당 멀웨어에 프로세스 사용량을 뺏기지 않게만 막도록 하려고 했다.
  • 왜냐하면 이미지 자체가 문제라고 여겨 해당 이미지를 업데이트하기에는 해당 프로젝트는 우리 회사 프로젝트와는 전혀 관계가 없었고, 우리 서버를 빌려주고 운영을 도와주며 약간의 유지보수만 하고 있었기 때문이다.
  • 마음대로 버전을 바꾸다가 문제가 발생하면 굉장히 곤란해지기 때문에 이미지를 변경하는 것보다 문제 해결을 더 우선으로 했다.
  • 그래서 해당 프로세스의 원리를 생각해 봤다.
    • 분명 이러하다.
    • 해당 컨테이너가 띄워지면 어떤 트리거인지는 모르나 매우 불규칙하게 postgres 유저 권한으로 /tmp 폴더에 불분명한 랜덤 문자열의 숨김 폴더가 생성되며, 해당 폴더 안에는 다시 불분명한 랜덤 문자열의 프로세스가 설치되고 이 프로세스가 cpu를 갉아먹는다.
      • 만약 postgres의 db 관련 임시파일이었다면 postgres 폴더 내에 생성되었을 것이다.
  • 그래서 단순히 이렇게 접근해 봤다. /tmp 폴더의 접근권한을 root 계정으로 막아버리면 psotgres 유저 권한으로는 파일을 생성 못하지 않을까?

 

🔐 컨테이너 내 멀웨어 설치 폴더 권한 변경하기

# tmp 폴더 권한 변경(루트만 읽고 쓸 수 있도록 변경)
root@020dcd076130:/# chmod 600 /tmp

# 권한 변경 후 모습 ls -al
drw-------.   1 root root    6 Feb 14 15:04 tmp
  • 이렇게 바꿔주니 놀랍게도 최근 하루에도 여러 번 생성되던 프로세스가 3일째 나타나지 않았다.
  • 그리고, 로컬 호스트에서 top 명령어로 매일 체크하고 있는데 매우 놀라운 걸 발견했다.

 

👮🏻‍♂️ 로컬 호스트에서 kdevtmpfsi의 등장 잡았다 요놈!

# 로컬 호스트에서 top
$ top

# 출력
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND 
...
 26 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs
  • 이게 연관이 있는지는 모르겠으나 tmp 권한 변경으로 더 이상 컨테이너 내부 postgres 유저의 권한으로 멀웨어 프로세스를 설치하지 못하게 하자 한 번도 보이지 않던 kdevtmpfsi가 로컬 호스트에 등장했다.
    • 또한, 여러 글을 찾아 본 바 로컬 호스트에서 컨테이너에 접근하여 컨테이너 내부에 프로세스를 설치한다는 내용이 대다수였다.
    • 아마 kdevtmpfsi가 컨테이너에 멀웨어를 설치하기 위해 계속 실행중인 것이 아닐까 생각이 들었다.(권한 문제로 계속 실패하기 때문에 시도만 하는 것 아닌가..?)
  • 사실 이 프로세스를 삭제하는 방법은 매우 단순했다.
    • 그저 find 명령어로 프로세스 위치를 찾아 지우는 것이었는데 나의 경우 처음에는 검색이 되지 않아 멀웨어가 아니구나 생각했던 것이다. 

 

🤔 부모 프로세스 추적과 찜찜한 해결

     26 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs                                                                            
$ sudo find / -name kdevtmpfs

# 출력 아무것도 안나옴

 

# 부모 프로세스 추적
$ ps -o pid,ppid,cmd -p 26
    PID    PPID CMD
     26       2 [kdevtmpfs]
$ ps -o pid,ppid,cmd -p 2
    PID    PPID CMD
      2       0 [kthreadd]

# 프로세스 트리로 확인
$ pstree -ap 2
(kthreadd,2)
  ...
  ├─(kdevtmpfs,26)
  ...
  • kthreadd는 Linux 커널의 스레드 관리자 프로세스이며, 이 프로세스에 의해 kdevtmpfsi가 실행됨을 확인할 수 있다.
  • 그러나, 로컬 호스트에서 kdevtmpfsi는 여전히 검색되지 않았고, kill 명령어도 먹히지 않았다.
  • 스텍오버플로우나 블로그를 보면 대부분의 경우 이 프로세스에서 cpu 사용량을 엄청 잡아먹는데, 아직 그런 문제는 발생하지 않았다.
    • 나의 경우는 kdevtmpfsi 대신 불분명한 랜덤 문자열의 프로세스였다.
    • 만약 kdevtmpfsi 프로세스가 cpu 사용량을 초과해 버리는 문제가 발생하면 그때 다시 내용을 업데이트하겠다.

 

😵‍💫 정리

  • 로컬 호스트인지 Docker Image인지 특정 감염 경로를 통해 postgres:16.2 이미지를 사용한 컨테이너에서 멀웨어 프로세스가 지속적으로 생성됨을 확인했다.
  • 멀웨어의 정확한 위치를 찾지 못해 해당 멀웨어가 이용하는 폴더의 권한을 root로 업데이트해줘 임시로 해결했다.
  • 그랬더니 보이지 않던 kdevtmpfsi가 로컬호스트 프로세스 목록에 나왔다.
  • 찾아서 지우려고 했으나 찾을 수 없는 상태이다.
  • 만약 이 프로세스가 다시 다른 문제를 일으킨다면 그때 다시 해결 후 블로깅하겠다. 끗

 

 

 

참고

chatGPT

https://stackoverflow.com/questions/60151640/kdevtmpfsi-using-the-entire-cpu

728x90