이 페이지는 번역본입니다. 공식 원문은 영어판입니다. 영어로 읽기
malware · cryptojacking · crypto-stealer · rust · docker · worm · honeypot · monero
godhive: 새롭게 확인된 Rust 기반 암호화폐 탈취·채굴 프레임워크
Kinryū Labs는 자체 허니팟 네트워크에서 노출된 Docker API를 악용하던 신종 미공개 Rust 공격 프레임워크 godhive를 분석했다. 이 프레임워크는 Monero를 채굴하고, 주요 거래소와 8개 이상의 블록체인에서 암호화폐 지갑을 털며, 웜으로 확산하고, 테이크다운을 견디도록 설계된 명령 채널 뒤에 숨는다. 우리는 이것이 목적에 맞게 제작된 범죄용 악성코드이며, 개발자 한 명이 소비자용 모바일 회선에서 자신의 도구를 현장 시험하며 배포한 것이라고 높은 확신도로 평가한다.
작성자 Davis Zheng·
TLP:CLEAR. 공개 배포가 허용되었다. Kinryū Labs 허니팟 센서 네트워크가 수집했다. 아래 지표는 디팽 처리되었다.
요약
- 6,946단일 자동화 공격에서 관측된 Docker API 요청
- 946바이너리에 포함된 Rust 소스 모듈
- 8+지갑 드레이너가 표적으로 삼는 블록체인
- 9명령 채널 유형
godhive는 Rust로 컴파일된 웜, 암호화폐 탈취 도구, 채굴 프레임워크로서 노출된 Docker Remote API를 통해 우리 허니팟 네트워크에 도달했다. 단일 운영자가 노출된 Docker API를 대상으로 대량 자동화 캠페인을 실행하며 전체 공격 체인을 21회 반복했다. Kinryū Labs는 godhive가 범용 채굴 악성코드가 아니라 목적에 맞게 제작된 범죄용 악성코드라고 높은 확신도로 평가한다. 자체 브랜드를 갖추고 있고, 공개된 위협 인텔리전스에 이름이 등장하지 않으며, 복원한 바이너리에는 946개의 개별 Rust 소스 모듈과 수개월에 걸친 개발 흔적이 담겨 있다.
운영자는 프레임워크를 URL에서 내려받지 않았다. base64로 인코딩한 ELF를 printf로 컨테이너 안에 청크 단위로 직접 써 넣었다. 바이너리는 운영자 자신이 인라인으로 전송한 청크에서 전부 복원했다. 215개 청크를 재조립해 6.2 MB 크기의 x86-64 ELF(SHA-256 4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36)를 얻었으며, 이 파일은 VirusTotal에 존재하지 않는다.
가장 두드러진 발견은 godhive가 일차적으로 채굴 도구가 아니라는 점이다. 채굴은 대체 수단이다. 주된 사업은 절도다. 주요 거래소 6곳에서 자동 출금을 수행하고 8개 이상의 블록체인에서 자금을 쓸어가며, 지갑이 발견되지 않을 때에만 Monero를 채굴한다.
- godhive는 새롭게 확인된, 목적 제작형 Rust 범죄용 악성코드다. 자체 브랜드를 달고 있고, 공개 보고에 등장하지 않으며, 946개 Rust 모듈과 18개 이상의 crate 의존성으로 구성되어 있다. 복원한 바이너리는 단순한 드로퍼가 아니라 광범위한 공격 툴킷이다.
- 목표는 수익화이며, 절도가 우선이다. 이 바이너리는 거래소 출금(Binance, Coinbase, Kraken, Bybit, OKX, KuCoin)과 Ethereum, BSC, Polygon, Arbitrum, Optimism, Base, Avalanche, Cronos, Solana 전반의 DeFi 자금 탈취를 자동화하며 스테이블코인을 우선한다. XMRig를 이용한 Monero 채굴은 지갑이 없는 호스트를 위한 대체 수단이다.
- 우리가 처음부터 끝까지 관측한 내용. 관측된 체인은 노출된 Docker API, 호스트 파일시스템을 읽기·쓰기로 마운트한 특권 컨테이너, 호스트 탈출,
/etc/shadow와 SSH 키 탈취, XMRig 배포, 대역 외 접근용 ngrok 터널, Telegram 봇으로의 유출로 이어졌고, 그 뒤 클라우드 메타데이터 SSRF와 Kubernetes 및 Elasticsearch 스캔이 이어졌다. - 명령 채널은 테이크다운을 견디도록 설계되었다. godhive는 P2P Kademlia 메시, 블록체인에 호스팅된 C2(EtherHiding), 가동 중인 Cloudflare Workers 릴레이, 알고리즘 기반 예비 도메인, Telegram을 계층적으로 쌓아 두고, 한 채널이 응답하지 않으면 자동으로 이전한다.
- 운영자의 기술적 운용 수준은 도구와 정반대다. 프로덕션 수준의 범죄용 악성코드가 소비자용 모바일 회선에서 배포되었고, Telegram 토큰이 평문으로 하드코딩되어 있으며 공개 파일 호스트를 사용했다. 안티 허니팟 모듈을 탑재했음에도 단일 출처에서 시끄러운 한 번의 공격으로 실행되었다. 우리는 이것이 개발자 한 명이 자신의 프레임워크를 현장 시험한 사례일 가능성이 가장 높다고 평가한다.
유입 경로: 노출된 Docker API
진입점은 컨테이너 환경에서 가장 오래된 것이다. TCP/2375에서 인증 없이 열려 있는 Docker Remote API다. 그 다음부터는 교과서적인 호스트 장악이며, 운영자의 Docker API 요청에서 그대로 확인된다.
운영자는 alpine:latest로 컨테이너를 생성하면서 privileged: true를 지정하고 network_mode: host를 사용하며, 호스트 파일시스템 전체를 읽기·쓰기로 바인드 마운트한다(/:/host:rw). 이 컨테이너 설정 하나가 곧 탈출이다. 특권 컨테이너에 호스트 루트를 마운트하는 것은 해당 장비에 대한 root 동등 권한을 갖는 것과 같다. 이어서 경쟁 채굴기를 제거하고(pkill -9 xmrig; pkill -9 lolMiner; pkill -9 minerd; pkill -9 godhive_c2), 호스트의 /etc/godhive에 지속성 디렉터리를 만들며, 마운트를 통해 호스트 비밀 정보를 그대로 읽어 /etc/shadow와 /root/.ssh/authorized_keys를 덤프한다.
그 다음에야 익숙한 크립토재킹이 등장한다. godhive는 익명 파일 호스트에서 XMRig 빌드를 받아 배포하고, 대역 외 접근용 ngrok 터널을 열며, 결과를 Telegram 봇으로 전송한다. 마지막으로 클라우드 메타데이터 서비스(169.254.169.254)에 자격 증명을 질의하고 Kubernetes, Elasticsearch, Kibana를 탐색해 확산 범위를 넓힌다. 운영자는 이 체인을 해당 공격에서 21회 반복했다.
채굴은 가장 사소한 부분이다
복원한 바이너리는 우리가 실행 과정을 관측한 체인보다 훨씬 크다. 946개의 Rust 모듈과 그 빌드 문자열은 광범위한 공격 툴킷의 구성을 드러낸다. 일부는 컴파일된 코드로 뒷받침된다(Rust 단형화에서 비롯된 중복 리터럴, 오류 처리 경로, crate 빌드 디렉터리). 반면 다른 부분은 모듈 이름과 설정 스텁만 존재하므로, 아래 목록은 검증된 기능만큼이나 의도로도 읽어야 한다.
핵심은 수익화 파이프라인이다. harvester는 파일시스템을 훑으며 wallet.dat, .env, SSH 키, wp-config.php를 찾는다. scorer는 CoinGecko를 기준으로 BTC, XMR, ETH, Ravencoin의 가격을 계산해 피해자를 가치순으로 정렬한다. 자격 증명 단계는 탈취한 로그인 정보를 대입하면서 2CAPTCHA를 연동해 로그인 챌린지를 우회한다. 드레이너는 CCXT 거래소 라이브러리와 온체인 DeFi 스윕을 통해 자금을 빼내고, 탈취한 시드 구문에서 키를 유도하며 각 출금마다 가장 저렴한 체인을 선택한다. 바이너리에 남아 있는 개발자 주석은 Ethereum 가스비를 피하도록 스테이블코인 출금을 최적화하는데, 이는 개념 증명 수준과 실제로 동작하는 드레이너를 갈라놓는 수준의 세심함이다.
이 핵심 주변에 나머지 툴킷이 배치되어 있다. Masscan과 Nuclei로 스캔하고 Docker, Redis, Kubernetes, Elasticsearch, WordPress, 그리고 Log4Shell을 포함한 일련의 Windows 및 Java 취약점을 악용하는 웜, 프로세스 이름으로 9개 엔드포인트 벤더를 표적하는 EDR 무력화 기능, TPM 조작을 동반한 UEFI 부트킷에 이르는 5개 계층의 지속성, C2를 건드리지 않고도 봇넷에 새로운 기능을 배포하는 WASM 플러그인 시스템, 1,000 미국 달러 가치 기준을 넘길 때만 작동하도록 제한된 랜섬웨어, 클립보드 하이재커, DDoS 모듈, 그리고 wtmp, btmp, 저널 로그를 삭제하고 가짜 syslog 잡음을 심어 분석가의 시간을 낭비시키는 안티 포렌식 기능이 있다. 모든 모듈을 가짜 sysd 프로세스 이름으로 위장하며, 실제 googlevideo.com SNI 호스트명을 빌려 자신의 트래픽을 YouTube 스트리밍으로 꾸민다.
두 가지 세부 사항은 이 그림을 다소 완화한다. 이 프레임워크는 15개 허니팟 플랫폼과 다수의 샌드박스 및 하이퍼바이저를 탐지하는 기능을 갖추고 있다. 그리고 설정 중 일부는 미완성이다. 기본 채굴 풀은 2022년에 운영을 중단했고, 클립보드용 ENS 이름은 등록된 적이 없으며, 암호화 키는 여전히 CHANGE_ME 자리표시자다. 기능 자체는 컴파일되어 실제로 존재하지만, 일부는 아직 연결되지 않았다.
ngrok, 그리고 그것이 해킹 도구로 분류되는 이유
이 캠페인을 처음 포착하게 한 샘플은 ngrok의 자체 CDN에서 내려온, 정상적으로 서명된 ngrok 바이너리다. 악성코드가 아니다. 상업용 리버스 터널링 도구이며, 침해 이후 단계에서 매우 유용하기 때문에 안티바이러스 엔진이 이를 해킹 도구로 분류한다. godhive가 특권 컨테이너 안에서 코드 실행을 확보하면, ngrok은 ngrok 클라우드로 접속을 시도해 선택한 로컬 서비스를 공개 URL로 노출한다. 인바운드 포트를 열지 않으므로 경계 방화벽이나 송신 전용 NAT가 막을 대상이 없다. 운영자는 ngrok 로컬 에이전트 API(127.0.0.1:4040/api/tunnels)를 폴링해 터널을 확인하고, 할당된 공개 URL을 자신의 Telegram 봇으로 전송했다. 새로 장악한 호스트마다 클릭 한 번으로 접속할 수 있는 핸들로 바꾼 것이다.
테이크다운을 견디도록 설계된 명령 채널
godhive는 단일 C2에 의존하지 않는다. 제거 난이도 순서로 채널을 쌓아 둔다. 가장 아래에는 작업 증명 기반 참여 챌린지와 NAT 통과 기능을 갖춘 P2P Kademlia 메시가 있으며, 여기에는 압수할 중심점이 없다. 그 위에는 EtherHiding이 있다. 현재 백엔드 주소가 취소 불가능한 블록체인 스마트 컨트랙트에 저장되어 있고, 방어자에게 백엔드를 숨기는 가동 중인 Cloudflare Workers 릴레이(c2-proxy.operator.workers[.]dev)를 통해 런타임에 해석된다. 그 위에는 SNI를 위조한 DNS-over-HTTPS로 조회하는 알고리즘 생성 예비 도메인, Tor 히든 서비스, GitHub gist에 남긴 데드 드롭, 8개 SaaS 채널, 그리고 운영자의 주 채널인 Telegram이 있다. 번 감지 기능은 명령 폴링이 연속으로 비어 있는 상황을 감시하다가 암호화된 설정 백업과 함께 운영자를 새 인프라로 자동 이전시키며, 페더레이션 기능은 다수의 봇 간 조율을 지원한다.
우리는 Cloudflare Workers 릴레이를 외부에서 핑거프린팅하여 그것이 가동 중이며 요청을 처리하고 있음을 확인했다. 등록, 작업 배포, 대시보드 엔드포인트가 백엔드로 라우팅되는 반면 인증되지 않은 입력은 거부되는데, 이는 바이너리가 C2 인증에 사용하는 AEAD 암호화 토큰과 일치한다. 운영자는 그 뒤에 강화된 관리 대시보드도 운영하며, Argon2 비밀번호 해싱, 다중 인증, 역할 기반 접근 제어, TLS 설정의 포스트 양자 옵션까지 갖추고 있다. 봇넷을 프로덕션 인프라로 다루는 수준이며, Prometheus 메트릭을 내보내는 데까지 이르렀다.
나머지 절반: 아마추어 수준의 운용
이만한 엔지니어링에도 배포 방식은 중요한 지점에서 부주의하다. 캠페인은 방탄 호스팅이나 VPS가 아니라 미국 Verizon Wireless의 소비자용 모바일 회선 한 곳(174.230.35[.]232, 역방향 DNS 232.sub-174-230-35.myvzw.com, 플로리다주 게인즈빌)에서 인프라 재사용 없이 짧은 자동화 공격으로 이루어졌다. Telegram 봇 토큰은 평문으로 하드코딩되어 있어 단일 테이크다운 지점이 된다. XMRig 페이로드는 공개 익명 파일 호스트에서 제공되었다. 그리고 허니팟 탐지 코드를 모두 갖추고도, 추적 가능한 주소에서 시끄러운 단일 공격으로 배포되었다.
바이너리는 macOS에서 dev라는 사용자 계정으로, research/godhive라는 디렉터리에서 빌드되었다. 운영자의 Telegram 신원을 의도적으로 익명화한 점, 미완성 설정, 자기 귀속으로 이어지는 배포 방식을 함께 읽으면, 가장 경제적인 해석은 malware-as-a-service 플랫폼의 고객이 아니라 숙련된 1인 개발자가 자신의 프레임워크를 시험하며 운영한 것이다. 브랜드는 맞춤형 황금 벌집 로고와 “one mind, one purpose, one hive”라는 태그라인까지 갖춰 잘 다듬어져 있지만, 운용은 그렇지 않다.
귀속
이 캠페인은 Telegram 인프라를 통해 단일 운영자와 연결된다. godhive는 탈취한 자격 증명, 터널 URL, 감염 확인 메시지를 하드코딩된 봇 @godhive_bot(봇 id 8836117161)으로 전송한다. 수집된 chat_id는 개인 계정 @godhive77(사용자 id 7659611777)로 확인되며, 표시 이름은 밑줄 문자들이고 프로필 사진이 없다. 익명성을 확보하려는 시도이지만 godhive77이라는 핸들 자체가 그것을 무력화한다. 동일한 운영자는 이에 대응하는 선점용 채널 @godhive(구독자 1명, 공개 게시물 없음, 전달 비활성화)도 보유하고 있으며, 순차적으로 부여되는 Telegram 사용자 id는 이 계정의 생성 시점을 2024년 후반으로 지목한다. godhive77 핸들은 추가 귀속을 위한 가장 유력한 피벗이다.
침해 지표
공격자 인프라는 디팽 처리했다. 악성코드가 악용하는 정상적인 제3자 서비스는 탐지를 위해 그대로 남겨 두었다.
네트워크 및 호스트
| 지표 | 설명 |
|---|---|
c2-proxy.operator.workers[.]dev | 가동 중인 Cloudflare Workers C2 릴레이(Cloudflare에 신고 대상) |
hxxps://files.catbox.moe/p46h39.gz | 익명 파일 호스트에 올려진 XMRig 페이로드(SHA-256 cb49ae0793b2…) |
bin.equinox.io/c/.../ngrok-v3-stable-linux-amd64.tgz | ngrok 다운로드(정상 CDN). 서버에서 bin.equinox.io로 나가는 트래픽 자체가 신호다 |
127.0.0.1:4040/api/tunnels | ngrok 로컬 에이전트 폴링(할당된 공개 터널 URL을 읽는다) |
169.254.169.254/latest/meta-data/ | 자격 증명 탈취를 위한 클라우드 메타데이터 SSRF |
api.telegram.org | Telegram 봇 C2 및 유출. 서버 워크로드에서 나가는 트래픽이 헌팅 신호다 |
gitlab.com/nzyme/ | 정적 도구 스테이징(sshpass, redis-cli, wget, tor, proxychains) |
2captcha.com, hashes.org, nitrxgen.net | 자격 증명 파이프라인에서 악용된 CAPTCHA 우회 및 해시 크래킹 서비스 |
r[1-20]---sn-*.googlevideo.com, manifest.googlevideo.com | TLS SNI 위조에 사용된 실제 YouTube CDN 호스트명. Google이 아닌 IP로 해석되면 경보를 발생시켜야 한다 |
행위자, C2 신원, 수익 수취
| 지표 | 설명 |
|---|---|
174.230.35[.]232 | 캠페인 출처(Verizon Wireless 모바일, 232.sub-174-230-35.myvzw.com, 플로리다주 게인즈빌). 차단 가치가 낮은 동적 통신사 주소다 |
@godhive_bot(Telegram 봇 id 8836117161) | 악성코드 C2 및 유출 봇. 토큰이 바이너리에 하드코딩되어 있다(비밀 값은 여기서 삭제했으며, 테이크다운을 위해 Telegram에 신고했다) |
@godhive77(Telegram 사용자 id 7659611777) | 운영자의 유출 수신 계정이며 가장 유력한 귀속 피벗이다 |
@godhive(Telegram 채널 id -1002105830453) | 운영자의 선점용 채널 |
49aXwwgXBKRKTUVgYuLy3fZkTeLP3PWgMhwiyK55Ur7WhgYXJ33N8JZG87vzUV1UyVdZzPGLvx1w9YQHk7faWPn1UzJte2R | 확인된 Monero 수취 지갑(가동 중인 XMRig 설정과 연결됨) |
pool.minexmr.com:4444 | XMRig 설정의 채굴 풀. minexmr는 2022년에 운영을 중단했으므로 이 기본값은 실패한다 |
파일 및 산출물
- godhive 바이너리(복원본): SHA-256
4194f2337c2b261ed6e1fd0b6d18f0ba75388bdc91a2658eb827a154ed784f36(6.2 MB x86-64 ELF, VirusTotal에 없음). ELF 헤더가 의도적으로 손상되어 크기를 약 106 MB로 주장하고 코드 위치를 파일 끝 이후로 가리키며, 표준 도구를 무력화한다. - 호스트 지속성:
/etc/godhive,/host/usr/local/bin/sysd(가짜 systemd 바이너리),/host/tmp/godhive_deployed.txt,godhive_c2프로세스, 컨테이너 내부 커스텀 이미지godhive:latest. - 컨테이너 탈출 시그니처:
Privileged:true,network_mode:host,/:/host:rw바인드로 생성된 컨테이너. - 빌드 산출물:
/Users/dev/.cargo/registry/src/하위의 cargo 경로와research/godhive빌드 디렉터리(macOS 개발자). - 호스트 강화 흔적: Redis 비밀번호가
CHANGED_BY_GODHIVE로 설정됨. WordPress 무차별 대입 활동과 함께 나타나는b374k.php웹셸.
행위 기반
pkill -9 xmrig|lolMiner|minerd|godhive_c2실행 직후mkdir /host/etc/godhive.- 컨테이너 마운트를 통한
/host/etc/shadow와/host/root/.ssh/authorized_keys읽기. - 실제 systemd가 아닌
sysd프로세스. “System Core”라는 이름의 EFI 부트 항목을 생성하는efibootmgr쓰기 작업. - Nuclei 작업 디렉터리
/tmp/.nuclei_assault-t*.
탐지
- 서버에서 나가는
bin.equinox.io및 모든*.ngrok*호스트 접속, 그리고 ngrok 에이전트 API 폴링127.0.0.1:4040/api/tunnels에 경보를 설정한다. Privileged:true와/:/host바인드를 함께 지정해 생성된 모든 컨테이너에 경보를 설정한다. 이 조합은 거의 확실히 탈출 시도다.- 서버 워크로드에서
api.telegram.org,c2-proxy.operator.workers[.]dev,gitlab.com/nzyme/,2captcha.com, 해시 크래킹 서비스로 나가는 트래픽에 경보를 설정한다. sysd프로세스, EDR 에이전트의 종료 또는 중지(falcon-sensor,SentinelOne,cbdefense,sophos-edr,cylancesvc), 그리고CONFIG SET requirepass CHANGED_BY_GODHIVE에 경보를 설정한다.- Google이 아닌 IP로 해석되는
googlevideo.comSNI의 TLS, 그리고 브라우저가 아닌 프로세스에서 발생하는manifest.googlevideo.com접속은 트래픽 위장으로 취급한다.
완화
- 2375 포트에 인증 없는 Docker API를 절대 노출하지 않는다. localhost에 바인딩하고 TLS 클라이언트 인증을 적용한다. 이것이 근본 원인이다.
no-new-privileges를 강제하고,--privileged를 제거하고, 호스트 바인드 마운트를 제한하거나, rootless Docker 또는 gVisor를 사용한다.- 컨테이너에서 클라우드 메타데이터 서비스(
169.254.169.254) 접근을 차단하고 IMDSv2를 요구한다. - 송신 트래픽을 필터링한다. 서버 워크로드는 익명 파일 호스트, ngrok, Telegram, CAPTCHA 우회 서비스, 위에 제시한 정적 도구 스테이징 경로에 접근할 이유가 없다.
- UEFI 지속성을 무력화하기 위해 Secure Boot를 활성화하고, godhive가 종료를 시도하는 엔드포인트 에이전트의 변조 방지 기능을 활성화한다.
- 침해 가능성이 있는 호스트가 하나라도 있다면 거래소 API 키를 즉시 교체한다. godhive는 출금을 자동화한다.
MITRE ATT&CK 매핑
| 전술 | 기법 |
|---|---|
| 초기 접근 | T1190 Exploit Public-Facing Application(Docker API. 무기고에는 Redis, Kubernetes, WordPress, Log4Shell도 포함) |
| 실행 | T1610 Deploy Container, T1059.004 Unix Shell |
| 권한 상승 | T1611 Escape to Host(특권 컨테이너, 호스트 마운트) |
| 지속성 | T1543 Create or Modify System Process(sysd), T1542.003 Bootkit(UEFI), T1014 Rootkit |
| 방어 회피 | T1562.001 Impair Defenses(EDR 무력화), T1070 Indicator Removal(로그 삭제), T1497 Virtualization/Sandbox Evasion(허니팟 및 VM 탐지), T1036 Masquerading(sysd, YouTube SNI), T1027 Obfuscated Files(손상된 ELF) |
| 자격 증명 접근 | T1003.008 /etc/passwd and /etc/shadow, T1552.004 Private Keys, T1552.005 Cloud Instance Metadata API |
| 탐색 | T1046 Network Service Scanning(Masscan, Nuclei) |
| 명령 및 제어 | T1572 Protocol Tunneling(ngrok), T1090 Proxy, T1071.001 Web Protocols(Telegram, Cloudflare Workers), T1102 Web Service(GitHub gist, SaaS 채널) |
| 영향 | T1496 Resource Hijacking(XMRig), T1486 Data Encrypted for Impact(랜섬웨어), T1657 Financial Theft(거래소 및 DeFi 자금 탈취), T1498 Network Denial of Service |
분석 방법 및 참고 사항
- 분석은 ELF에 대한 정적 바이너리 분석이며, 해당 ELF는 허니팟이 수집한 운영자 자신의 인라인 base64 청크에서 전부 복원했다. 여기에 수집된 Docker API 트래픽 검토와 운영자의 가동 중인 Cloudflare Workers 릴레이에 대한 승인된 외부 정찰을 병행했다. 악성코드를 실행하지 않았으며 C2 인증도 시도하지 않았다.
- 지표는 디팽 처리했으며, 악성코드가 악용하는 정상적인 제3자 서비스는 탐지를 위해 그대로 남겨 두었다.
- 샘플은 요청 시 다른 연구자와 방어자에게 제공한다. contact@kinryu.sh로 신원과 사용 목적을 간단히 적어 보내면 된다.