3년 넘게 리눅스(Linux) 서버와 워크스테이션을 대상으로 한 악성코드 “퍼프ctl(perfctl)”이 루트킷(rootkit)과 고도의 난독화 기법을 사용하여 대부분 탐지되지 않은 채 활동해온 것으로 밝혀졌다. 이 악성코드는 주로 모네로(Monero) 암호화폐를 채굴하기 위해 사용되었지만, 전문가들은 이를 악용한 더 심각한 공격도 가능하다고 경고했다.
주요 사이버 보안 연구팀인 아쿠아 노틸러스(Aqua Nautilus)는 최근 퍼프ctl이 전 세계적으로 수천 대의 서버를 감염시킨 사실을 밝혀냈다. 시스템 관리자들은 자신도 모르게 이 악성코드에 감염되었으며, 이는 주로 리눅스 서버의 잘못된 구성이나 취약점을 악용해 접근한 것으로 확인되었다.
퍼프ctl은 주로 잘못 구성된 서버를 타깃으로 하며, 노출된 자격 증명이나 로그인 인터페이스와 같은 공개된 비밀 정보를 악용한다. 아쿠아 노틸러스에 따르면, 퍼프ctl은 CVE-2023-33246과 같은 원격 명령 실행 취약점이 있는 아파치 로켓MQ(Apache RocketMQ) 서버와 CVE-2021-4034라는 권한 상승 취약점이 있는 폴킷(Polkit)을 주로 이용한다. 이러한 취약점을 악용하면 공격자는 “httpd”라는 파일명을 가진 페이로드를 다운로드한 후 실행시킨다. 이 페이로드는 일반적인 시스템 프로세스로 위장하여 “sh”라는 이름으로 /tmp 디렉터리에 복사되어 탐지를 피한다.
퍼프ctl은 탐지나 삭제 시도에도 불구하고 추가적인 복사본을 /root/.config, /usr/bin/, /usr/lib/와 같은 중요한 시스템 디렉터리에 생성하여 영속성을 유지한다. 이 악성코드는 유닉스(Unix) 소켓을 통해 토르 네트워크를 사용해 명령 및 제어(C2) 서버와 암호화된 통신을 설정하며, 이를 통해 통신을 해독하는 것이 거의 불가능해진다.
또한, 퍼프ctl은 시스템 기능을 가로채고 네트워크 트래픽을 조작할 수 있는 루트킷 'libgcwrap.so'을 사용하여 인증 체계를 우회한다. 이외에도 ldd, top, crontab, lsof와 같은 정상적인 시스템 유틸리티를 악성 버전으로 교체해 사용자 도구에서 악성코드의 프로세스를 숨김으로써 탐지를 더욱 어렵게 만든다.
악성코드가 설치되면 XMRIG 채굴기를 배포하여 시스템의 CPU 리소스를 사용해 모네로를 채굴한다. 채굴기는 TOR을 통해 모네로 채굴 풀과 통신하므로 네트워크 트래픽이 숨겨지며, 암호화폐 수익 또한 추적되지 않는다. 이외에도 아쿠아 노틸러스는 퍼프ctl이 때때로 프록시 재킹(proxy-jacking) 소프트웨어를 배포해 공격자가 Bitping, Repocket과 같은 서비스로 네트워크 대역폭을 판매하는 추가적인 수익 경로를 구축하는 사례를 발견했다.
시스템 관리자는 서버의 CPU 사용량이 100%로 치솟을 때 이상을 감지하지만, 이 악성코드는 사용자가 서버에 로그인하는 즉시 암호화폐 채굴 활동을 중단하도록 설계되어 있어 실시간으로 탐지하기 어렵다. 사용자가 로그아웃하면 채굴은 몇 초 또는 몇 분 후 다시 시작된다. 한 레딧 사용자는 “내 모니터링 시스템이 CPU 사용량 100%를 경고했을 때 악성코드의 존재를 알게 됐다. 그러나 SSH나 콘솔로 로그인하면 즉시 프로세스가 중단되었다”고 밝혔다.
퍼프ctl을 탐지하려면 파일 무결성 모니터링, 프로세스 감시, 네트워크 트래픽 분석과 같은 다층적 접근이 필요하다. 아쿠아 노틸러스는 /tmp, /usr, /root 디렉터리에서 의심스러운 바이너리 파일을 정기적으로 검사하고, 예상치 못한 위치에서 “httpd” 또는 “sh”와 같은 프로세스가 실행되는지 확인할 것을 권장했다.
또한 ~/.profile, ~/.bashrc, /etc/ld.so.preload에 대한 무단 변경 사항을 주의 깊게 모니터링하고, TOR을 기반으로 외부 IP와의 네트워크 트래픽을 분석해야 한다. 알려진 암호화폐 채굴 풀이나 프록시 재킹 서비스로의 아웃바운드 연결을 찾고, 보고서에서 제공된 IP 주소를 차단 목록에 추가하여 악성 호스트와의 통신을 차단하는 것도 유용하다.
퍼프ctl이 널리 사용되는 애플리케이션의 취약점을 악용하고 있는 만큼, 특히 인터넷에 노출된 애플리케이션(예: RocketMQ 서버의 CVE-2023-33246, Polkit의 CVE-2021-4034)의 보안 패치를 철저히 적용해야 한다. 또한 사용하지 않는 HTTP 서비스를 비활성화하고, 역할 기반 접근 제어를 구현하며, /tmp와 /dev.shm과 같은 중요한 디렉터리에 'noexec' 옵션을 적용하여 악성코드 실행을 방지하는 것이 중요하다.
보안 전문가들은 퍼프ctl이 주로 암호화폐 채굴 목적으로 사용되고 있지만, 그 고도의 은폐 기술과 루트킷 사용이 리눅스 시스템의 무결성에 심각한 위협을 제기할 수 있다고 경고했다. 이 악성코드가 시스템의 중요한 파일을 조작하고 대체하기 때문에 단순히 악성코드를 제거하는 것만으로는 충분하지 않다. 감염된 시스템을 완전히 삭제하고 재설치하는 것이 악성코드의 흔적을 완전히 제거하는 가장 좋은 방법이다.
전문가들은 모니터링과 패치 작업 외에도 파일 무결성 모니터링과 네트워크 트래픽 분석 도구를 도입해 초기 단계에서 이상을 탐지하고 향후 감염을 예방하는 것이 중요하다고 조언했다. 또한, 가능한 경우 컨테이너화된 환경을 사용하면 애플리케이션을 격리하여 악성코드의 확산을 제한할 수 있다.
★정보보안 대표 미디어 데일리시큐 /Dailysecu, Korea's leading security media!★