크립토마이너 해부: 크립토마이너 분석

마오르 다한(Maor Dahan)

에 의해 작성

Maor Dahan

March 19, 2025

마오르 다한(Maor Dahan)

에 의해 작성

Maor Dahan

마오르 다한(Maor Dahan)은 사이버 보안 업계에서 10년 이상의 경력을 가진 Akamai의 수석 보안 연구원입니다. 운영 체제 내부, 취약점 리서치, 멀웨어 분석을 전문으로 하며, EDR, EPP, 가상 기반 보안과 같은 혁신적인 보안 제품을 위한 최신 탐지 및 예방 메커니즘을 설계하고 개발했습니다.

다음 사례 연구에서는 Akamai가 실제로 확인한 크립토마이너 샘플 중 일부를 다룰 것입니다.
다음 사례 연구에서는 Akamai가 실제로 확인한 크립토마이너 샘플 중 일부를 다룰 것입니다.

핵심 요약

이 글은 3부로 구성된 블로그 시리즈인 ‘크립토마이너 해부’ 시리즈의 두 번째 글입니다. 1부에서는 암호화폐의 일반적인 특징과 다양한 속성, 그리고 어떤 점 때문에 일부 암호화폐를 공격자들에게 더 매력적으로 보이는지를 살펴보았습니다.

이 글에서는 다양한 크립토마이너 샘플을 분석해 그 내부 구조를 이해하는 데 초점을 맞출 것입니다. 악성 활동에 적합한 것으로 밝혀진 두 가지 코인인 Monero와 Zephyr를 채굴하는 크립토마이너에 초점을 맞추겠습니다. 이 블로그 게시물에서는 다음을 논의하겠습니다.

  • 블록체인 네트워크를 사용해 잠재적인 크립토마이너 멀웨어의 의심스러운 채굴 통신을 식별하는 방법

  • 서로 다른 토폴로지를 사용해 오랫동안 활성 상태를 유지하는 4가지 사례 연구

  • 한 흥미로운 사례에서 장기적이고 지속적인 캠페인이 수천 명의 피해자를 대상으로 벌어들인 돈은 매시간 미화 5.50달러

  • 하나의 캠페인에서 여러 코인을 사용하는 공격자

  • 네트워크 활동을 통한 탐지 및 블록체인 네트워크와의 상호 참조

  • 프로세스 메모리 분석 및 합의 알고리즘 지문 분석을 통한 탐지

또한, 이 블로그 게시물의 사례 연구에서 확보한 IOC(Indicator of Compromise) 목록도 포함하여 보안팀이 자산을 보호하는 것을 돕고자 했습니다.

ASIC 저항성 알고리즘 개념에 의존하는 탐지 기법과 크립토마이닝 작업 탐지를 살펴보며 이 게시물을 마무리하겠습니다. 탐지는 채굴의 기본에 초점을 맞추고 있으며 네트워크 수준이나 운영 체제 수준에 적용될 수 있습니다.

Monero 네트워크 분석

Monero 네트워크는 Levin 프로토콜 을 사용해 네트워크 노드를 통해 P2P(Peer-To-Peer) 통신을 구축합니다. 이 프로토콜을 사용해 새로운 거래 및 새로운 블록과 같은 블록체인 작업을 분산합니다. 또한 피어 노드 게시를 통해 분산된 방식으로 네트워크를 자체 유지할 수 있는 기능과 합의 알고리즘을 통해 공격을 제거할 수 있는 기능을 제공합니다.

Monero를 예로 들었지만 대부분의 암호화폐에서 블록체인 네트워크를 발견할 수 있어야 합니다. 이는 블록체인 네트워크의 분산적 특성 때문이며 자세한 내용은 Akamai의 이전 블로그에서 확인할 수 있습니다.

네트워크 발견

Monero 네트워크는 개인 기여자들의 분산형 P2P 네트워크이기 때문에 Akamai가 직접 쉽게 연결할 수 있습니다. Monero 네트워크를 매핑함으로써 Akamai는 신뢰할 수 있는 IOC(노드 IP 주소 등)를 확보하고, 다른 것보다 더 많이 연결된 노드 허브의 잠재적 활동을 파악할 수 있습니다.

이 정보는 채굴 작업을 탐지하고 조사하는 데 사용될 수 있으며, 네트워크의 취약점과 블록체인 공격에 대한 노출 정도를 평가하는 데도 사용됩니다. 그림 1은 Monero 채굴 네트워크를 시각적으로 표현한 것으로 지리적 영역별로 노드의 밀도를 나타내는 히트 맵을 보여줍니다. 전 세계에 공개된 노드는 빨간색 점으로 표시했습니다.

Figure 1 is a visual representation of the Monero mining network, in which the heat map shows the density of nodes by its geographical area. Fig. 1: A graphical mapping of the Monero network (as of March 2025)

네트워크가 분산된 피어 노드로 구성되어 있기 때문에 크립토마이너는 맵에서 찾을 수 있는 약 3만 개의 전 세계 서버 중 하나와 직접 또는 간접적으로 상호 작용해야 합니다. 앞으로 알게 되겠지만 이 맵은 크립토마이너 샘플을 추적하고 블록체인에 대한 직접적인 네트워크 연결을 탐지하는 데 매우 유용합니다 (자세한 정보는 Akamai의 GitHub 리포지토리에서 찾을 수 있습니다. 블록체인 크롤링 및 맵 생성을 위한 소스 코드도 확인할 수 있습니다).

크립토마이너를 네트워크와 상호 참조

Monero 네트워크를 매핑해 얻은 다양한 지표를 활용하면 블록체인 네트워크와 상호 작용하는 샘플을 식별할 수 있습니다. 예를 들어, VirusTotal Livehunt를 사용하면 알려진 노드 주소가 포함된 파일을 식별할 수 있으며 이를 통해 활성 크립토마이너 캠페인을 탐지할 수 있습니다 (그림 2).

Using VirusTotal Livehunt, we can identify files containing known node addresses, which will help us detect active cryptominer campaigns (Figure 2). Fig. 2: An example of a VirusTotal Livehunt YARA rule

보안의 다른 모든 것과 마찬가지로 이 방법도 모든 경우에 적용할 수 있는 탐지 기술이 아닙니다. 이 접근 방식만 사용하면 서버가 독점적인 블록체인 노드가 아닐 때 오탐이 발생할 수 있습니다. 또한, 맵이 모든 노드를 발견하지 못하기 때문에 가시성이 떨어질 수 있습니다. 그러나 이 기술을 다른 지표와 결합하면 실제 양성 탐지율을 높일 수 있습니다.

맵에는 최근에 접속한 노드와 함께 공개적으로 접속할 수 있는 노드가 포함되어 있습니다. 일부 노드는 Monero 노드 이상의 용도로 사용됩니다. 예를 들어, Python의 PyPi 리포지토리 또는 기타 서비스의 미러 역할을 하는 노드가 있습니다. 그림 3은 여러 서비스를 제공하는 서버의 예로, 탐지 과정에서 많은 방해 요소가 될 수 있습니다. Akamai는 잠재적인 오탐을 줄이기 위해 분석에서 이러한 서버를 제거했습니다.

Figure 3 is an example of a server that provides multiple services, which can cause a lot of distraction in the hunting process. Fig. 3: Example of a node in the Monero network that serves multiple services (VirusTotal)

관련 없는 샘플을 걸러내는 것은 위협 헌팅에서 관련 있는 샘플을 걸러내는 것만큼이나 중요합니다. 네트워크 분석과 상호 참조 접근 방식을 결합하면 크립토마이너와 봇넷을 통해 조율된 전체 채굴 캠페인을 밝혀낼 수 있습니다. 하드코딩된 지갑 주소와 매칭하는 것과 같은 추가적인 정적 분석 기법을 통합함으로써 가장 관련성이 높은 악성 샘플에 효율적으로 집중할 수 있습니다.

크립토마이너 샘플 분석

채굴은 소음이 심한 특성 때문에 ‘육안’으로도 쉽게 작동 여부를 탐지할 수 있습니다. 알림을 받은 IT 전문가는 정교한 멀웨어 방지 툴 없이도 크립토마이너에 의해 생성된 비정상을 탐지할 수 있습니다. 기술 전문가가 아닌 사람들도 머신의 기본 성능을 알고 있기 때문에 머신이 느려지면 전문가에게 분석을 의뢰해 근본 원인을 쉽게 찾을 수 있습니다. 이 때문에 많은 크립토마이너는 분석과 탐지를 피하기 위해 멀웨어를 보호하는 대신, 표적이 없는 대량 감염 전략을 사용합니다.

다음 사례 연구에서는 Akamai가 실제 현장에서 확인한 크립토마이너 샘플 중 일부를 다루고 그 작동 방식과 행동에 관한 가장 흥미로운 세부 사항들을 살펴볼 것입니다. 사례 연구를 찾기 위해 사용한 두 가지 주요 요소는 (1) 이 시리즈의 첫 번째 블로그 게시물에 설명된 관련 코인과 (2) 그들이 악용하는 마이닝 토폴로지입니다.

사례 연구 #1: 끈질긴 대규모 캠페인

리서치의 일환으로 다양한 크립토마이너 샘플을 분석했으며 그중 한 캠페인은 6년 동안 진행되었습니다. 장기간에 걸쳐 진행되는 캠페인에서 쉽게 볼 수 있듯이 이 캠페인은 조직적인 작업이거나 써드파티를 위해 크립토마이너를 배포하는 멀웨어 배포 서비스인 것으로 보입니다.

해당 샘플의 분석 에 따르면 해시레이트가 5.6Mh/s에 달하는 여러 프록시가 축적되어 있으며, 이는 수천 대의 머신이 감염된 것과 같습니다 (그림 4). 이것은 대규모의 지속적인 공격이며, 해시레이트가 일정하게 유지되기 때문에 멀웨어는 대부분의 피해자에게 들키지 않고, 방해받지 않고 계속 실행될 가능성이 큽니다. 이런 종류의 공격은 공격자에게 매우 유리한 캠페인입니다.

Analysis of that sample shows it has multiple proxies that accumulate to a hashrate of 5.6 Mh/s, which equates to thousands of compromised machines (Figure 4). Fig. 4: The campaign’s Nanopool dashboard reveals the total hashrate

이 캠페인은 적어도 2018년 6월부터 진행되어 왔으며 샘플에 사용된 언어와 같은 지표가 포함되어 있어, 이는 러시아와 중국의 공격자 간의 협력 관계를 가리킬 수 있습니다. C2(Command and Control) 서버를 분석한 결과도 이 이론을 뒷받침하지만 이 게시물을 작성하는 시점에서는 완전히 확인되지 않았습니다.

이 글을 쓰는 시점에서 공격자는 최소 1702XMR을 축적했으며 이는 오늘 환율로 미화 약 28만 달러에 해당합니다. 6년에 걸쳐 발생한 이 금액을 단일 캠페인의 연간 평균으로 환산하면 미화 약 4만 7000달러에 해당합니다.

이 캠페인과 관련된 샘플의 대부분은 피해자의 운영 체제에 해당하는 스크립팅 언어를 초기 로더 및 다운로더로 사용합니다. 이는 악성 파일을 C2 서버에서 분리하려는 시도로 보이며 라우팅과 오해의 소지가 있는 네트워크 연결에 크게 의존합니다.

캠페인 샘플을 분석한 결과, 이 캠페인은 PowerShell을 통해 로더 라는 실행 파일을 r77 루트킷을 사용해 은밀하게 배포한다는 것을 확인했습니다. 복잡한 드롭퍼를 분석하지 않아도 이 크립토마이너의 여러 버전이 존재한다는 것을 알 수 있습니다.

일부 버전에서는 크립토마이너 자체에 채굴 설정을 담고 있는 config.json 파일이 포함되어 있습니다. 다른 샘플에서는 OracleLoader 스크립트가 크립토마이너를 드롭하고 설정합니다. 이 멀웨어에는 감염된 경우 봇넷을 복구할 수 있는 업데이트 메커니즘도 있습니다 (표 1).

특성

참고

멀웨어 이름

Oracle Loader

 

현재 버전

1.1.72.0

<5.133.65.53>/Oracle/ver$77_loader.exe.txt

관련 구성요소

  • OracleLoader.ps1

  • rms.exe

  • rms2.exe

  • $77_oracle.exe



표 1: Oracle Loader의 특성

이 멀웨어는 포트 999에서도 수신 대기하면서 XMRig의 HTTP API 기능을 노출시킵니다. 이를 통해 공격자는 피해자의 크립토마이너에 접속할 수 있고 채굴 과정을 모니터링할 수 있습니다. 피해자의 머신이 인터넷에 직접 연결되어 있고 NAT(Network Address Translation) 라우터나 외부 방화벽 뒤에 있지 않은 경우, 이론적으로 Shodan과 같은 네트워크 모니터링 서비스를 통해 피해자를 찾을 수 있습니다. 그림 5는 잠재적 피해자를 탐지하는 데 사용된 Shodan의 쿼리 결과를 보여줍니다.

Figure 5 shows the result of a Shodan query used to detect potential victims. Fig. 5: Shodan results for potential victims (Source: http://shodan.io)

XMRig 작업자 모니터 웹 애플리케이션을 사용해 피해자의 크립토마이너를 모니터링하면 CPU 모델 및 해시레이트와 같은 정보를 확인할 수 있습니다. 이 인터페이스는 정보만 조회할 수 있기 때문에 활동을 볼 수는 있지만 이를 통해 크립토마이너를 제어하거나 종료할 수는 없습니다(그림 6).

This interface only enables us to query information, so although we can see activity, we can’t control the miner through it nor shut it down (Figure 6). Fig. 6: Remote access to the victim machine using the worker monitor

채굴 풀 대시보드에서 볼 수 있듯이 꾸준한 해시레이트는 피해자가 전 세계에 분포되어 있음을 시사합니다. 그렇지 않다면, 시간대 활동 시간에 따라 해시레이트의 상태가 달라질 것입니다. 이와 달리 공격자가 다른 크립토마이너 캠페인처럼 소비자 대신 서버를 표적으로 삼는다고 설명할 수도 있을 것입니다.

사례 연구 #2: Zephyr 크립토마이너가 사용하는 퍼블릭 풀 토폴로지

사례 연구 1에서처럼 장기적인 캠페인을 통해 막대한 이익을 거두는 매우 의욕적이고 정교한 공격자가 있지만 위협의 대부분은 그러한 공격자가 아닙니다. 퍼블릭 풀을 사용하는 크립토마이너가 가장 일반적입니다. 이러한 크립토마이너는 난독화 또는 분석 방지 기술과 같은 정교한 기능을 포함하지 않습니다. 전형적인 공격 방식은 풀에 직접 일반 텍스트 지갑 주소를 연결하는 것입니다. 이들은 보통 그 영향과 수익도 적습니다.

암호화폐 시장은 공격자들이 선택할 수 있는 다양한 옵션을 제공하며 채굴 수익성과 코인 가치도 다양합니다. 크립토마이닝의 본질적인 재정적 측면에도 불구하고 많은 공격자들에게는 통화의 채굴 수익성이 가장 중요한 고려 사항이 아닌 것 같습니다. Monero보다 수익성이 낮은 Zephyr 코인은 공격자들 사이에서 매우 흔합니다. 암호화폐 시장의 변동성은 공격자와 정상적인 암호화폐 구매자 모두에게 고려 사항입니다. 장기적인 잠재적 가치가 암호화폐를 더 매력적으로 만들 수 있습니다.

Akamai가 목격한 가장 큰 Zephyr 캠페인 은 활성 피해자가 1400명 이상이고, 총해시레이트가 800Kh/s, 총수익은 906.3ZEPH로, 현재 미화 2528달러에 해당합니다.

Akamai는 시간이 지남에 따른 봇넷의 해시레이트를 조사함으로써 공격자가 지리적으로 특정 지역을 표적으로 삼는 시기를 파악할 수 있습니다. 이에 대한 예는 러시아어를 사용하는 사용자를 표적으로 삼는 것으로 보이는 직접 연결 멀웨어와 프록시를 함께 사용하는 것으로 관찰된 또 다른 캠페인에 있습니다(그림 7).

An example of this lies in another observed campaign that uses proxies combined with direct connection malware that seems to be targeting Russian-speaking users (Figure 7). Fig. 7: Cryptominer hashrate graph over time (Source: https://zephyr.hashvault.pro/en/)

주기적인 변화는 대부분의 피해자가 서버가 아닌 개인 사용자임을 의미할 수 있습니다. 개인용 머신은 주기적으로 꺼지는 경향이 있기 때문입니다. 해시레이트의 빈도를 분석해 보면, 주기가 24시간이고, 최저점이 야간이라는 가정하에, 대부분의 피해자가 거주하는 시간대를 파악할 수 있습니다(그림 8).

If we analyze the frequency of the hashrate, we can see that the cycle is 24 hours long, and under the assumption that the low point is nighttime, it’s possible to locate the time zone in which most of the victims live (Figure 8). Fig. 8: Time zone map identifies the location of the majority of the victims (Source: https://www.timeanddate.com/time/map/)

시간 간격만으로는 피해자의 위치에 대한 충분한 증거가 되지 않지만 Akamai의 가설은 Hashvault 풀에서 제공하는 IP 지리적 위치 조회 기능에 의해 뒷받침되었습니다. 이것을 멀웨어 분석과 Fortnite, Roblox용 Solara executor 등과 같은 게임 관련 멀웨어 전달 이름과 결합하면 이 멀웨어가 치트 엔진인 것처럼 가장하여 플레이어를 유혹해 멀웨어를 찾도록 유도한다는 보다 확실한 가정에 도달했습니다. 또한 Telegram 및 Discord와 같은 소셜 미디어 및 메시징 애플리케이션을 통해 확산된 것으로 의심됩니다.

사례 연구 #3: 채굴 프록시 토폴로지를 사용하는 크립토마이너

Akamai는 Monero 네트워크 맵을 사용해 2만 5000개 이상의 노드에 대한 정보를 수집했지만 그중 10%에만 직접 연결할 수 있었습니다. 반대로 해당 맵을 사용해 네트워크에 접속하지 않는 알려진 크립토마이너를 필터링하는 데도 사용했는데, 이를 통해 2022년 4월부터 활동 중인 캠페인 을 발견할 수 있었습니다. 

그림 9는 멀웨어의 공격 기법을 보여줍니다. XMRig 프록시와 같은 채굴 프록시를 사용하고, 크랙된 IDM(Internet Download Manager)과 같은 불법 복제 소프트웨어를 통해 크립토마이너를 배포합니다.

Figure 9 shows the malware’s attack vectors: It uses a mining proxy like XMRig-proxy and distributes its cryptominer through pirated software, like cracked Internet Download Manager (IDM). Fig. 9: Visualization of cryptominer using a cracked program for initial access

공격 흐름은 캠페인 멀웨어 샘플 간에 유사합니다. 일반적으로 페이로드 체인을 시작하는 crackingcity.com에서 드라이브 바이 다운로드를 통해 시작됩니다. 그리고 마지막 단계에서 크립토마이너 dlIhost.exe 를 배포하며 이것은 custompool.xyz에서 호스팅된 프록시에 연결합니다. 공격자는 환경 변수를 사용해 문자열을 주로 배치 파일인 자식 프로세스에 인수로 전달하는 회피 기법을 사용합니다. 이 기법은 내장된 아카이브를 해독하고 보안팀 제외 목록을 조작한 후 스크립트 또는 파일을 실행하는 방식으로 작동합니다.

공격자가 2022년 4월 29일, VirusTotal에 custompool.xyz 라는 이름으로 프록시 도메인을 등록한 시점은 처음 탐지된 지 불과 3일 만 이었습니다. 첫 번째 샘플 VScan.exe는 두 개의 배치 파일을 사용하는 자체 압축 해제 아카이브입니다. 첫 번째 파일은 main.bat로, 환경 변수에 숨겨진 암호를 사용해 두 번째 단계 배치 파일인 VS.bat를 추출합니다. 디버거를 사용하면 “l3”라는 환경 변수에 접속할 때 중단(그림 10), 또는 환경 변수의 모든 수정 시 중단 등의 두 가지 방법으로 숨겨진 정보를 추출할 수 있습니다.

We can extract the hidden information using a debugger in two ways: break when an environment variable named "l3" is accessed (Figure 10) or break on every modification of the environment variables. Fig. 10: Dynamic analysis reveals the encrypted compression password

비밀번호 un#912345678@rar을 사용하면 다른 C2 도메인 crackingcity.com에 연결하는 두 번째 단계 로더를 추출할 수 있습니다. 최종 단계에서 멀웨어는 이 시점에서 직접 IP인 dlIhost.exe (본질적으로 custompool.xyz 풀에 내장된 설정과 함께 수정된 XMRig 클라이언트)를 실행합니다(그림 11).

. In the final stage, the malware executes dlIhost.exe (essentially a modified XMRig client with embedded configuration to the custompool.xyz pool), which at this point is the direct IP (Figure 11). Fig. 11: Intercepting configuration data through static analysis

이제 서버 종류를 질문해야 합니다. 프라이빗 풀입니까? 채굴 프록시입니까? 아니면 프라이빗 풀과 같은 것으로 간주되는 일종의 사용자 지정 노드입니까? 이 질문에 답하기 위해서는 서버에서 일부 식별자를 추출할 수 있는 방법이 필요합니다. 전용 노드를 통한 솔로 채굴은 크립토마이너가 데몬 모드(RPC 요청이 HTTP를 통해 전송되는 모드)로 작동해야 하는데, 이 설정에는 데몬 모드가 없으므로 솔로 채굴은 분명히 해당되지 않습니다.

JSON 구조는 직렬화 과정에서 보존되기 때문에 XMRig 프록시가 지원하는 다양한 계층 메서드를 전송함으로써 서버로부터 응답을 얻을 수 있습니다. 서버의 응답이 키와 값의 순서와 일치한다면 서버가 XMRig 프록시를 사용하거나 이를 기반으로 한다는 강력한 증거가 될 수 있습니다.

XMRig는 세 가지 Stratum 프로토콜 방법을 지원합니다.

  1. 로그인 : 크립토마이너가 시작한 첫 번째 요청으로 일반적으로 로그인으로 지갑을 포함
  2. Keepalived : 단순히 연결을 유지
  3. 제출 : 유효한 셰어가 발견되면 결과를 제출

 

유효하지 않은 방법이 요청되면 XMRig 프록시는 오류 메시지로 응답합니다(그림 12). 이는 서버 종류를 나타내는 지표가 될 수 있습니다. 풀과 같은 다른 서비스는 오류 메시지가 아닌 잘못된 요청을 무시하기 때문입니다. 이 모든 것을 종합해 보면 XMRig 프록시를 다루고 있다는 결론을 내릴 수 있습니다.

When an invalid method is requested, the XMRig-proxy will answer with an error (Figure 12). Fig. 12: XMRig-proxy response as baseline

Akamai는 제출 방법을 XMRig 프록시로부터 명시적인 오류를 반환해야 하는 세 가지 경우로 나누었습니다(표 2).

  • 난이도가 낮은 셰어는 크립토마이너가 예상 목표치보다 낮은 값의 해시를 제출하는 경우입니다. 

  • 유효하지 않은 넌스는 나이스해시 설계에 따른 범위를 벗어난 넌스의 결과입니다. 

  • 최대 난이도 해시는 어떤 작업의 목표라도 만족시킬 수 있는 특수 제작된 해시입니다. 이 경우, XMRig 프록시 난이도 검증을 우회하고 풀에 직접 전송해 풀 오류를 반환합니다.

요청

XMRig 프록시

MoneroOcean

HashVault

Nanopool

SupportXMR

C3Pool

로그인

(기준선)

Keepalived

(기준선)

알 수 없음

(기준선)

제출: 난이도 낮음

(기준선)

제출: 유효하지 않은 넌스

(기준선)

NA: 차단된 IP

제출: 최대 난이도

풀 응답 메시지 반복

NA: 차단된 IP

표 2: XMRig 프록시와 다양한 퍼블릭 풀에 대한 Stratum 프로토콜 요청의 비교. ✅은 기준선과 동일함을, ✕은 다른 데이터를, ≈은 동일한 데이터의 다른 순서를 나타냄

XMRig 프록시를 일반적으로 사용되는 풀과 구별할 수 있을 뿐 아니라 풀 자체도 구별할 수 있습니다. 이 정보는 리버스 프록시와 같은 다른 네트워크 구성요소를 통해 풀에 라우팅할 때 유용할 수 있습니다. 이 경우, 최대 난이도로 채굴 결과를 제출하면 프록시가 아닌 백엔드 풀에서 오류가 발생합니다. 이 정보를 사용하면 공격자가 Nanopool을 사용한다는 것을 확인할 수 있지만 지갑 주소가 없기 때문에 이 캠페인에 대한 피해자 수나 수익에 대한 평가를 얻을 수 없습니다.

사례 연구 #4: Stratum 프록시 토폴로지를 이용한 숨겨진 블록체인 통신

Stratum 프로토콜 프록시는 지갑 주소를 수정하지 않고 Stratum 프로토콜 요청을 다른 서버로 직접 전달함으로써 네트워크 수준에서 작동합니다. 이를 통해 각 크립토마이너의 작업이 각자의 지갑에 기록되도록 합니다. Stratum 프록시의 실행은 기본 전송 레이어 네트워크 프록시 또는 프로토콜을 이해하고 처리하는 특수 애플리케이션 프록시를 사용해 수행할 수 있습니다.

Akamai는 이 토폴로지를 사용하고 계층 프록시를 통해 퍼블릭 풀에 연결하는 활성 캠페인 을 발견했습니다. 이것이 네트워크 수준에서의 리버스 프록시인지, 아니면 Stratum 프로토콜 자체를 가로채어 애플리케이션 프록시로 작동하는지 확인할 수 없었습니다. 어느 쪽이든, 백엔드 풀 또는 노드를 숨기기 위해 Stratum 메시지를 리디렉션합니다. 제공된 지갑에 대한 퍼블릭 풀을 스캔하면 MoneroOcean 퍼블릭 풀에 연결하는 것을 알 수 있습니다.

캠페인은 최소 4개월 동안 진행되었으며 총수익은 1.158XMR(미화 약 180달러)입니다. 그 자체로는 성공적인 캠페인은 아니지만 공격자의 명백한 노력은 인프라, 크립토마이너, 그리고 이를 실행하기 위한 다양한 악성 파일 등 전체 캠페인을 스스로 개발하는 것을 포함하는 잠재적인 더 큰 계획을 가리킵니다. 또한 공격자들은 써드파티에 의존하지 않고 직접 캠페인을 배포하는 동시에 암호화, 난독화, 모니터링 툴 사용 방지 등 리버스 엔지니어링 방지 메커니즘을 구축합니다(그림 13).

The attackers also distribute the campaign themselves without relying on third parties, while implementing anti-reverse engineering mechanisms, including encryption, obfuscation, and the prevention of the use of monitoring tools (Figure 13). Fig. 13: Persistent cryptominer uses Stratum proxy to hide the back-end pool

캠페인이 느릴 수 있지만 특히 난독화 과정에서 멀웨어의 신중한 실행을 볼 수 있습니다. 멀웨어는 런타임 중에 아카이브를 다운로드하고 정상적인 시스템 파일 이름으로 프로세스를 실행해 페이로드를 숨기려고 합니다.

탐지

탐지에는 일반적으로 여러 가지 방법이 있습니다. 각각의 방법은 단독으로는 효과가 없을 수도 있지만 다른 탐지 메커니즘과 함께 사용하면 효과가 있습니다. 크립토마이너도 예외는 아닙니다. 사실, 크립토마이너는 특성이 양성이기 때문에 탐지하기가 어려운 멀웨어일 수 있습니다. 대부분의 운영 체제에서 특별한 허가가 필요하지 않은 유일한 것, 즉 연산(CPU 시간)만 사용합니다.

네트워크 연결

이러한 크립토마이너를 탐지하기 위해 방화벽이나 세그멘테이션 솔루션과 같은 네트워크 가시성 툴에서 얻은 데이터와 (앞서 스크레이핑한 Monero 네트워크와 같은) 블록체인 네트워크를 상호 참조할 수 있습니다. 모든 노드 또는 풀이 Monero 블록체인과 상호 작용해야 하기 때문에 네트워크 관리자에게 네트워크에서 나오는 트래픽에 대한 귀중한 인사이트를 제공합니다. 네트워크 포트와 결합하면 탐지가 훨씬 쉬워집니다. 대부분의 크립토마이너가 999, 3333, 7777과 같은 고유한 포트 번호를 사용하기 때문입니다. 이 사례 연구에서는 Monero를 사용하지만 블록체인 네트워크 매핑은 모든 PoW(Proof of Work) 기반 네트워크에서 사용할 수 있습니다.

그러나 Monero 노드로 향하는 모든 트래픽이 반드시 채굴을 위한 것은 아니라는 점에 유의해야 합니다. 왜냐하면 이러한 노드는 때때로 하나 이상의 서비스를 제공하기 때문입니다. 예를 들어 IP 157[.]90[.]212[.]53 은 Monero 네트워크 맵에서 발견되지만 출구 노드 ( Tor 네트워크의)이기도 합니다. Monero 노드가 다른 서비스를 제공하는 이유에 대해서는 여러 가지 설명이 있을 수 있습니다. 즉 노드가 감염되었거나 단순히 다목적성을 의도했을 수도 있습니다. 어느 쪽이든, 추가 정보 없이 네트워크 연결을 사용하면 블록체인 연결을 약하게 의미할 수 있고 오탐을 생성할 수 있습니다. 이것이 정확한 탐지에 포트 번호 정보가 중요한 또 다른 이유입니다.

또 다른 오탐의 원인은 맵의 업데이트 속도가 느린 경우입니다. 정상적인 서버가 이전에 Monero 노드에서 사용된 IP 주소를 할당받을 수 있고, 맵이 최신 상태가 아니라면 오탐을 유발할 수 있습니다.

이 탐지는 단독으로는 사용할 수 없지만 보다 포괄적인 탐지 로직이나 조사의 트리거로 사용할 수 있습니다. 크립토마이너의 모든 작업에는 채굴 작업 할당을 위한 계층 서버와의 통신이 포함되어야 합니다. 일반적으로 공개적으로 알려진 채굴 풀을 통해 작동하지만 경우에 따라 프록시를 사용해 숨길 수 있으며 이 경우 네트워크 맵에 나타나지 않습니다.

알고리즘 실행 탐지

크립토마이너는 피해자의 컴퓨팅 리소스를 집중적으로 사용하므로 시스템 사용량이 급증하는 것을 모니터링하면 감염 여부를 알 수 있습니다. 그러나 네트워크 맵 상호 참조와 마찬가지로 이 방법만으로는 정확한 탐지가 불가능합니다.

여러 개의 탐지 가능한 IOC를 결합하면 탐지 신뢰도가 높아집니다. 즉, 오탐이 줄어듭니다. 채굴 작업이 성공하려면 필수적인 대응책이 필요합니다. 크립토마이너는 작업 증명으로서 합의 알고리즘을 사용해 선택한 코인을 채굴해야 합니다. 이와 같은 모든 알고리즘은 런타임 동안 시스템에 고유한 지문을 가지고 있으며 이러한 특징을 추출하면 악성 크립토마이너를 탐지하는 확실한 방법을 만들 수 있습니다.

RandomX와 같은 ASIC 저항 알고리즘은 일반적으로 고유하게 식별할 수 있는 복잡한 일련의 연산을 구축합니다. 예를 들어, RandomX의 개발자는 이 정확한 가정을 바탕으로 탐지 툴 을 만들었습니다. 시스템에서 실행 중인 스레드를 반복함으로써 CPU 레지스터 값을 포함한 스레드 상태를 조사할 수 있습니다. RandomX는 최신 CPU 기능을 많이 사용하기 때문에, RandomX 개발자가 제공하는 탐지 툴에서 제공하는 반올림 제어 설정을 사용하는 것이 한 가지 방법입니다.

실제로 하드웨어 AES 작업 및 휴즈페이지(hugepage) 설정과 같은 다른 지표와 결합하면 탐지율이 향상됩니다. 요약하면, 탐지는 SSE 레지스터에서 고유한 AES 키를 찾거나 스레드 접속 토큰 권한을 쿼리해 각각 수행할 수 있습니다.

이러한 방법을 다른 운영 체제에도 적용할 수 있습니다. 대부분의 크립토마이너는 플랫폼에 구애받지 않고 다른 운영 체제에서도 동일한 방식으로 작동해야 하기 때문입니다. 하나의 운영 체제에 국한되지 않음으로써 목표 수치가 급격하게 증가하는 방식으로 캠페인의 잠재적 성공 가능성이 커집니다.

프로세스 메모리에서 지갑 찾기

크립토마이너들이 프록시를 통하지 않고 채굴 풀과 직접 통신할 때 크립토마이너의 지갑은 프로세스의 메모리에 있어야 합니다. 이는 Stratum 프로토콜이 크립토마이너에 서버 인증을 요구하고 유효한 셰어 제출에 대해 보상을 받을 계정을 알려야 하기 때문입니다. 일반적으로 지갑 주소를 사용하며 특히 Monero 채굴의 경우, 크립토마이너는 XMRig 소프트웨어를 기반으로 할 것입니다. 이러한 가정을 바탕으로 다양한 소켓 API에 연결해 지갑이 풀로 전송될 때 이를 찾아 가로챌 수 있습니다. 또는 (이론적으로는) MITM(Machine-In-The-Middle) ‘공격’을 사용해 크립토마이너가 보낸 인증 메시지를 가로챌 수 있습니다.

또한, 프로세스의 할당된 메모리 전체에 대해 간단한 정규식 검색을 사용해 95자 지갑 주소를 찾을 수 있습니다. 주소는 엄격한 포맷을 따르며 4 또는 8로 시작하고 BASE58 유효 문자로 구성됩니다. 따라서, 패턴 /[48][1-9A-HJ-NP-Za-km-z]{94}/ 는 이 작업에 충분할 수 있으며 YARA 룰에 포함될 수도 있습니다. 스캔은 크립토마이너가 풀에 처음 연결된 후 언제든지 수행할 수 있습니다. 크립토마이너는 다시 연결해야 할 경우를 대비해 지갑 주소를 사용할 수 있도록 유지해야 하기 때문입니다.

마지막으로 위에서 언급한 기술 중 하나를 사용해 Stratum 프로토콜과 관련된 다른 문자열을 찾고 지갑을 내부에서 구문 분석할 수 있습니다. 이러한 지표는 프로토콜의 JSON 구조가 훨씬 더 독특하기 때문에 오탐을 줄일 수 있습니다. 예를 들어 그림 14의 로그인 요청을 살펴보겠습니다. 더 정확한 탐지를 위해 여러 키를 포함하는 더 강력한 시그니처를 만들 수 있습니다.

  {
   "id": 1,
   "jsonrpc": "2.0",
   "method": "login",
   "params": {
       "login": "<wallet address>",
       "pass": "<Usually the worker name>",
       "agent": "<Usually xmrig agent>",
       "algo": [
           "rx/0"
       ]
   }
}

그림 14: 로그인 요청의 예. 패턴에 일치하는 것은 더 정확한 탐지를 제공할 수 있음

결론

Akamai 연구원은 악성 캠페인과 그 배후의 공격자를 계속해서 폭로하고 IOC를 식별해 고객과 일반 대중 모두를 보호하는 데 도움을 줄 것입니다.

3부로 구성된 크립토마이너 블로그 시리즈의 2부에서는 채굴 프록시 뒤에 숨어 있는 채굴 풀을 식별하거나, 시간이 지남에 따라 크립토마이너 봇넷의 해시레이트를 분석해 캠페인의 지리적 운영 위치를 파악하는 것을 비롯한 캠페인에 대한 더 많은 다양한 정보를 드러내는 여러 가지 기술을 소개했습니다.

Akamai는 잘 알려진 Monero와 함께, Zephyr를 사용하는 악성 크립토마이너를 관찰했습니다. 크립토마이너는 서로 다른 마이닝 토폴로지를 사용해 정보를 숨기고 식별 및 감염 지표의 수를 최소화할 수 있었습니다.

서로 다른 크립토마이너의 구조와 채굴 과정을 이해한 후, 일반적으로 다음과 같은 질문이 제기되었습니다. 크립토마이너 봇넷의 채굴 작업을 중단할 수 있을까요? 채굴 작업을 효과적으로 중단하면 피해자의 머신을 감염시키고 리소스를 소비하는 크립토마이너를 차단할 수 있습니다. 이 질문에 대해서는 시리즈의 마지막 편에서 자세히 살펴보겠습니다.

이 시리즈와 다른 최신 보안 리서치소식을 계속 받아 보려면 보안 리서치 페이지를 방문하거나 소셜 미디어에서 Akamai를 팔로우하세요.

감염 징후



마오르 다한(Maor Dahan)

에 의해 작성

Maor Dahan

March 19, 2025

마오르 다한(Maor Dahan)

에 의해 작성

Maor Dahan

마오르 다한(Maor Dahan)은 사이버 보안 업계에서 10년 이상의 경력을 가진 Akamai의 수석 보안 연구원입니다. 운영 체제 내부, 취약점 리서치, 멀웨어 분석을 전문으로 하며, EDR, EPP, 가상 기반 보안과 같은 혁신적인 보안 제품을 위한 최신 탐지 및 예방 메커니즘을 설계하고 개발했습니다.