htop·ps가 못 잡는 크립토재킹(채굴 멀웨어) 탐지하는 법
최종 업데이트: 2026-06-27
서버 CPU가 원인 모르게 계속 100%라면 크립토재킹(무단 채굴)을 의심할 수 있습니다. 문제는 정교한 채굴 멀웨어가 ps·htop·top 목록에서 자신을 숨겨, 흔한 도구로는 보이지 않는다는 점입니다.
어떻게 숨는가 — LD_PRELOAD
공격자는 LD_PRELOAD로 libc의 디렉터리 열거 함수(readdir 등)를 가로채, /proc 목록에서 자기 프로세스의 PID를 결과에서 빼버립니다. ps·htop·top·ls는 모두 libc를 거쳐 /proc을 읽기 때문에, 그 가로채기에 똑같이 속아 해당 프로세스를 못 봅니다.
간접 단서
CPU·부하는 분명히 높은데 top·ps 상위에 그만한 소비자가 안 보인다면 은닉 프로세스를 의심할 수 있습니다. 다만 이건 단서일 뿐이고, ls·ps 모두 libc를 거치므로 일반 명령으로는 가려진 프로세스를 직접 볼 수 없습니다.
top -bn1 | head -12 # 상위에 범인이 안 보인다? cat /proc/loadavg # 부하는 높은데 설명이 안 된다
어떻게 잡는가 — libc 우회
- getdents64 시스템콜을 직접 호출해 /proc을 열거합니다 — libc 후킹을 우회하므로 숨긴 PID도 보입니다.
- 이 목록을 ps가 보는 목록과 비교해, 차이 나는 PID를 은닉 프로세스로 식별합니다.
- 함께: 채굴 풀로 나가는 아웃바운드 TCP 연결(/proc/net/tcp 직접 파싱)과 chattr +i로 잠근 변조 의심 파일도 봅니다.
오탐 주의
정상 인바운드 접속의 임시 포트나 IPv4-매핑 루프백 주소가 채굴 풀 연결로 오인될 수 있습니다. 연결 방향(아웃바운드만)과 로컬·사설 주소 제외 같은 정교한 필터가 없으면, 멀쩡한 운영을 침해로 오탐해 막아버릴 수 있습니다.
Sentibel로 보면
Sentibel 에이전트(Go)는 libc를 우회해 getdents64로 /proc을 직접 열거하고 ps 목록과 비교해 은닉 프로세스를 탐지합니다. 채굴 풀 연결은 LISTEN/방향을 구분하고 루프백·사설 주소를 제외해 오탐을 줄였습니다. CPU 급등(OS 계층)과 보안 탐지를 같은 타임라인에서 함께 보여, "원인 모를 고-CPU"가 침해인지 정상 부하인지 빠르게 가립니다.