Anatomia dos criptomineradores: análise dos criptomineradores
Resumo executivo
Esta é a segunda parte da nossa série de publicações de três partes chamada Anatomia dos criptomineradores. Na primeira parte, falamos sobre as criptomoedas em geral, suas principais características e o que torna algumas mais atrativas do que outras para os invasores.
Nesta parte, iremos a fundo na análise de várias amostras de criptomineradores para entender como funcionam. Vamos enfocar criptomineradores que estão explorando Monero e Zephyr, duas das criptomoedas que identificamos como propícias para uso em atividades mal-intencionadas. Nesta publicação do blog, discutiremos:
O uso da rede blockchain para identificar a comunicação de mineração suspeita de um possível malware de criptomineração
Quatro exemplos de estudos de caso que usam topologias diferentes para permanecer ativos e persistentes por um longo período
Um caso intrigante de uma campanha longa e persistente com milhares de vítimas que gera US$ 5,50 por hora
Invasores que usam várias moedas em uma única campanha
Detecção pelas atividades de rede e referência cruzada com a rede blockchain
Detecção pela análise de memória dos processos com a impressão digital do algoritmo de consenso
Também incluímos uma lista de IOCs (list of indicators of compromise, lista de indicadores de comprometimento) dos estudos de caso nesta publicação do blog para ajudar as equipes de segurança a proteger os respectivos ativos.
Por fim, nesta publicação, examinaremos as técnicas de detecção que dependem dos conceitos de algoritmos resistentes a ASIC, bem como da detecção de operações de criptomineração. A detecção se concentra nos fundamentos da mineração e pode ser aplicada no nível da rede ou do sistema operacional. Para saber como conseguimos derrubar campanhas maliciosas de mineração de criptomoedas, confira a terceira parte da nossa série.
Análise da rede Monero
A rede Monero utiliza o protocolo Levin para implementar a comunicação ponto a ponto (P2P) entre os nós da rede. A rede usa o protocolo para distribuir operações de blockchain, como novas transações e novos blocos. O protocolo também permite que a rede seja autossustentável de forma descentralizada, graças à publicação de nós de pares e a capacidade de eliminar ataques com algoritmos de consenso.
Embora tenhamos usado a Monero como exemplo, a descoberta de rede de um blockchain deve ser possível na maioria das criptomoedas. Isso se deve à natureza distribuída das redes blockchain. Para entender melhor, consulte nosso post anterior no blog.
Descoberta de rede
Como a rede Monero é uma rede P2P descentralizada de colaboradores individuais, podemos nos conectar facilmente a ela. Ao mapear a rede Monero, podemos obter IOCs confiáveis (como endereços IP de nós) e identificar a potencial atividade dos hubs de nó que estão mais conectados do que outros.
Essas informações podem ser usadas para identificar e investigar operações de mineração, além de permitir a análise da rede em relação a vulnerabilidades e à sua exposição a ataques baseados em blockchain. A Figura 1 é uma representação visual da rede de mineração Monero, na qual o mapa de calor mostra a densidade dos nós por sua área geográfica. Marcamos os nós abertos publicamente com pontos vermelhos.
Como a rede é formada por nós distribuídos ponto a ponto, qualquer criptominerador precisa interagir direta ou indiretamente com um dos cerca de 30 mil servidores espalhados pelo mundo, que se encontram no nosso mapa. Como veremos, o mapa se revelou muito valioso para a busca de amostras de criptomineradores, bem como para a detecção de conexões diretas de rede com os blockchains. (Você encontra mais informações no nosso repositório do GitHub, incluindo o código-fonte para rastreamento de blockchain e geração de mapas.)
Referência cruzada entre criptomineradores e a rede
Usando os diferentes indicadores obtidos com o mapeamento da rede Monero, é possível identificar amostras que interagem com a rede blockchain. Por exemplo, usando o VirusTotal Livehunt, podemos identificar os arquivos que contêm endereços de nó conhecidos. Isso nos ajudará a detectar campanhas ativas de criptomineradores (Figura 2).
Como tudo na área de segurança, essa não é uma técnica de busca que se adequa a todas as situações. Usar somente essa abordagem pode levar a falso-positivos quando o servidor não é um nó de blockchain exclusivo. Isso também pode levar à falta de visibilidade, pois o mapa não está descobrindo todos os nós. No entanto, a combinação dessa técnica com outros indicadores aumentará a taxa de detecção de positivos reais.
O mapa contém nós acessíveis publicamente e nós que se tornaram acessíveis recentemente. Alguns nós são usados para mais de um nó Monero, por exemplo, como espelhos do repositório PyPi do Python ou de outros serviços. A Figura 3 é um exemplo de servidor que presta vários serviços, o que pode causar muita distração no processo de busca. Eliminamos esses servidores da análise para reduzir possíveis falso-positivos.
A qualificação de amostras irrelevantes é tão importante na busca de ameaças quanto a qualificação de amostras relevantes. A análise de rede, quando combinada com uma abordagem de correlação cruzada, pode expor criptomineradores e até campanhas inteiras de mineração orquestradas por botnets. Ao aplicar técnicas adicionais de análise estática, como a correspondência de endereços de carteira codificados, podemos nos concentrar de forma eficiente nas amostras mal-intencionadas mais relevantes.
Análise de amostras de criptomineradores
Devido à natureza ruidosa da criptomineração, pode ser fácil detectar o funcionamento dela mesmo a "olho nu". Um profissional de TI atento pode detectar as anomalias geradas por criptomineradores sem a necessidade de ferramentas antimalware sofisticadas. Mesmo usuários sem conhecimentos técnicos geralmente reconhecem o desempenho habitual de seus computadores e, caso percebam uma lentidão incomum, tendem a procurar um profissional, que provavelmente identificará facilmente a causa raiz do problema. Por isso, muitos criptomineradores não se preocupam em proteger o malware contra análise e detecção, mas seguem uma estratégia de infeção em massa não direcionada.
Nos estudos de caso a seguir, abordaremos algumas das amostras de criptomineradores que identificamos e examinaremos alguns dos detalhes mais interessantes sobre a operação e o comportamento deles. Dois fatores principais foram usados para encontrar esses estudos de caso: (1) uma moeda relevante, conforme descrito no primeiro post do blog desta série, e (2) a topologia de mineração que eles exploram.
Estudo de caso 1: Uma campanha persistente e massiva
Como parte desta pesquisa, analisamos diversas amostras de criptomineradores — uma delas foi uma campanha que durou seis anos. Como é comum em campanhas de longa duração, essa parece ser uma operação organizada ou um serviço de distribuição de malware que implanta o criptominerador para terceiros.
A análise dessa amostra indica a presença de vários proxies que, juntos, alcançam uma taxa de hash de 5,6 MH/s, o que equivale a milhares de máquinas comprometidas (Figura 4). Esse é um ataque massivo e persistente e, como a taxa de hash permanece estável, o malware provavelmente permanece não detectado pela maioria de suas vítimas e continua sem impedimentos. Esse tipo de ataque é uma campanha extremamente lucrativa para um invasor.
A campanha está ativa pelo menos desde junho de 2018 e contém indicadores (por exemplo, a linguagem usada nas amostras) que podem apontar para um esforço colaborativo entre os agentes de ameaças russos e chineses. A análise dos servidores de C2 (command and control, comando e controle) também apoiou essa teoria, mas até a data desta publicação, isso não foi totalmente confirmado.
No momento da escrita, o invasor acumulou pelo menos 1.702 XMR, avaliado em aproximadamente US$ 280.000 na taxa de câmbio atual. Ao longo de seis anos, isso equivale a uma média de quase US$ 47.000 arrecadados por ano em uma única campanha.
A maioria das amostras vinculadas a esta campanha usa, como carregador inicial e downloader, uma linguagem de script correspondente ao sistema operacional da vítima. Esse processo depende muito do roteamento e das conexões de rede enganosas, provavelmente na tentativa de dissociar o arquivo mal-intencionado do servidor C2.
Após a análise das amostras da campanha, identificamos que ele usa o PowerShell para instalar um arquivo executável chamado loader de maneira furtiva usando o rootkit r77. Mesmo sem analisar o dropper complexo, podemos ver que há várias versões desse criptominerador.
Em algumas versões, o próprio criptominerador contém o arquivo config.json com as configurações de mineração. Em outras amostras, o script OracleLoader descarta o criptominerador e define a configuração. O malware também tem um mecanismo de atualização que pode recuperar o botnet em caso de comprometimento (Tabela 1).
Característica |
Valor |
Observação |
|---|---|---|
Nome do malware |
Oracle Loader |
|
Versão atual |
1.1.72.0 |
<5.133.65.53>/Oracle/ver$77_loader.exe.txt |
Componentes relacionados |
|
Tabela 1: Características do Oracle Loader
O malware também escuta na porta 999, expondo o recurso de API HTTP do XMRig. Isso permite que o invasor acesse o minerador da vítima e monitore a mineração. Se o computador da vítima estiver diretamente conectado à internet, sem a proteção de um roteador NAT (Network Address Translation, ou conversão de endereços de rede) ou de um firewall externo, é teoricamente possível identificar essas vítimas por meio de serviços de monitoramento de rede, como o Shodan. A Figura 5 mostra o resultado de uma consulta do Shodan usada para detectar possíveis vítimas.
Usando a aplicação web monitor de trabalho XMRig para monitorar os mineradores das vítimas, podemos descobrir informações sobre eles, como o modelo de CPU e a taxa de hash. Essa interface só nos permite consultar informações. Assim, embora possamos ver a atividade, não podemos controlar o minerador nem o desligar (Figura 6).
Como mostra o painel do pool de mineração, a taxa de hash constante sugere que as vítimas estão espalhadas pelo mundo. Caso contrário, veríamos variações na taxa de hash conforme os horários de atividade em cada fuso horário. Outra explicação pode ser que o invasor esteja direcionando servidores, e não consumidores, como outras campanhas de criptomineradores fazem.
Estudo de caso 2: Topologia de pool público usada por um criptominerador de Zephyr
Embora existam alguns invasores altamente motivados e sofisticados com campanhas de longo prazo que obtêm enormes lucros, como o estudo de caso 1, eles não compõem a maioria das ameaças. Os criptomineradores que usam pools públicos são os mais comuns. Esses criptomineradores não têm recursos sofisticados, como técnicas de ofuscação ou antianálise. Um modus operandi típico seria entrar em contato com o pool diretamente com um endereço de carteira de texto sem formatação. Eles também geralmente têm menos impacto e lucro.
O mercado de criptomoedas oferece várias opções para os invasores escolherem, com diferentes lucratividades de mineração e valores de moeda. Apesar do aspecto financeiro inerente à criptomineração, a lucratividade da mineração de uma moeda não parece ser o mais importante para muitos invasores. A moeda Zephyr, que é menos rentável que a Monero, é muito comum entre os agentes de ameaças. A volatilidade do mercado de criptomoedas é levada em consideração tanto por invasores quanto por compradores legítimos de criptomoedas. Talvez seja o potencial de valorização no longo prazo que os leve a escolher uma criptomoeda em vez de outra.
A maior campanha da Zephyr que observamos tem mais de 1.400 vítimas ativas, com uma taxa de hash total de 800 Kh/s e um lucro total de 906,3 ZEPH, o equivalente hoje a US$ 2.528.
É possível determinar quando um invasor está direcionando ataques a regiões específicas ao analisar a taxa de hash da botnet ao longo do tempo. Um exemplo é outra campanha observada que combina proxies com malware de conexão direta, aparentemente direcionada a usuários falantes de russo (Figura 7).
Mudanças periódicas podem sugerir que a maioria das vítimas são usuários finais e não servidores, já que computadores pessoais tendem a ser desligados com mais frequência. Ao analisarmos a frequência da taxa de hash, observamos um ciclo com duração de 24 horas e, assumindo que os pontos de menor atividade ocorrem durante a noite, é possível estimar o fuso horário em que vive a maioria das vítimas (Figura 8).
Os intervalos de tempo, por si só, não constituem evidência suficiente para determinar a localização da vítima; no entanto, nossa hipótese foi corroborada pelo recurso de geolocalização de IPs disponibilizado pelo pool Hashvault. Ao combiná-lo com a análise de malware e os nomes usados na sua distribuição relacionados a jogos, como Fortnite, Solara Executor para Roblox e outros, chegamos a uma suposição mais sólida: o malware se passa por um Cheat Engine (mecanismo de trapaça) para atrair os jogadores. Também suspeitamos que ele se espalhe em redes sociais e aplicativos de mensagens, como Telegram e Discord.
Estudo de caso 3: Criptominerador usando uma topologia de proxy de mineração
Usamos o mapa da rede Monero para reunir informações sobre mais de 25 mil nós, mas apenas 10% deles eram diretamente acessíveis. Por outro lado, também usamos esse mapa para filtrar criptomineradores conhecidos que não estivessem se comunicando com a rede. Dessa forma, encontramos uma campanha que estava ativa desde abril de 2022.
A Figura 9 mostra os vetores de ataque do malware: ele usa um proxy de mineração como o XMRig-proxy e distribui o criptominerador por um software pirateado, como o Internet Download Manager (IDM) craqueado.
O fluxo de ataque é semelhante entre as amostras de malware da campanha. Normalmente, ele começa com um ataque Drive-by-Download de crackingcity.com, que aciona uma cadeia de carga útil. Em seguida, na última etapa, ele implanta o criptominerador dlIhost.exe, que se conecta a um proxy hospedado em custompool.xyz. Como uma técnica de evasão, o invasor usa variáveis de ambiente para repassar strings como argumentos ao processo filho, principalmente arquivos em lote. Ele funciona descriptografando arquivos incorporados e executando scripts ou arquivos após manipular a lista de exclusão do defensor.
O invasor registrou o domínio do proxy como custompool.xyz em 29 de abril de 2022, apenas três dias após a primeira detecção no VirusTotal. A primeira amostra, chamada VScan.exe, é um arquivo extraído automaticamente que usa dois arquivos em lote. O primeiro é main.bat, que usa uma senha oculta nas variáveis de ambiente para extrair o arquivo em lote de segundo estágio VS.bat. Podemos extrair as informações ocultas usando um depurador de duas maneiras: quebrar quando uma variável de ambiente chamada "l3" for acessada (Figura 10) ou quebrar em cada modificação das variáveis de ambiente.
Com a senha un#912345678@rar, podemos extrair o carregador de segundo estágio que se conecta ao outro domínio C2, crackingcity.com. No estágio final, o malware executa dlIhost.exe (basicamente, um cliente XMRig modificado com configuração incorporada ao pool custompool.xyz), que, nesse ponto, é o IP direto (Figura 11).
Há uma dúvida sobre o tipo de servidor. É um pool privado? Um proxy de mineração? Ou é algum tipo de nó personalizado que consideramos o mesmo que um pool privado? Para responder a essas perguntas, precisamos conseguir extrair alguns identificadores do servidor. A mineração solo por um nó dedicado exige que o minerador opere no modo daemon, no qual a solicitação RPC é transmitida por HTTP. Como isso não ocorre nesta configuração, fica claro que esse não é o caso.
A estrutura JSON é preservada na serialização, o que nos permite tentar obter respostas do servidor enviando os vários métodos Stratum compatíveis com o XMRig-proxy. Se as respostas do servidor corresponderem à ordem das chaves e valores, essa pode ser uma indicação forte de que o servidor usa XMRig-proxy ou se baseia nele.
O XMRig é compatível com três métodos de protocolo Stratum:
- Login: a primeira solicitação iniciada pelo trabalhador de mineração, normalmente usando a carteira como login
- Keepalived: apenas mantém a conexão ativa
- Submit: envia o resultado quando um compartilhamento válido é encontrado
Quando um método inválido é solicitado, o XMRig-proxy responderá com um erro (Figura 12). Isso pode ajudar a identificar o tipo de servidor, já que outros serviços, como pools, simplesmente ignoram a solicitação incorreta em vez de exibirem um erro. Todas essas informações nos levam à conclusão de que estamos lidando com o XMRig-proxy.
Dividimos o método de envio em três casos que devem retornar erros explícitos de um proxy XMRig (Tabela 2).
Um compartilhamento de baixa dificuldade é quando o minerador envia um hash com um valor inferior ao esperado.
Um nonce inválido é o resultado de nonce fora do intervalo de acordo com o design de nicebash.
Um hash de dificuldade máxima é o hash especialmente criado que provavelmente satisfará o destino de qualquer trabalho. Com esse caso, estamos ignorando a validação de dificuldade do proxy XMRig e transmitindo diretamente para o pool, o que retorna o erro do pool.
Solicitação |
XMRig-proxy |
MoneroOcean |
HashVault |
Nanopool |
SupportXMR |
C3Pool |
Login |
(linha de base) |
✕ |
✕ |
✕ |
✕ |
✕ |
Keepalived |
(linha de base) |
≈ |
✅ |
≈ |
✕ |
≈ |
Desconhecido |
(linha de base) |
✕ |
✕ |
✕ |
✕ |
✕ |
Enviar – baixa dificuldade |
(linha de base) |
✕ |
✕ |
✕ |
✕ |
✕ |
Enviar – nonce inválido |
(linha de base) |
NA – IP bloqueado |
✕ |
✕ |
✕ |
✕ |
Enviar – máxima dificuldade |
Repita a mensagem de resposta do pool |
NA – IP bloqueado |
✅ |
✕ |
✅ |
✅ |
Tabela 2: Comparação das solicitações de protocolo da Stratum entre o XMRig-proxy e vários pools públicos: ✅ denota o mesmo que a linha de base, ✕ denota dados diferentes e ≈ denota a mesma ordem de dados diferentes
Não só podemos distinguir o XMRig-proxy dos pools comumente usados, mas também podemos distinguir entre os próprios pools. Essas informações podem ser úteis quando roteamos para um pool por outros componentes de rede, como proxy reverso. Nesse caso, quando enviamos os resultados de mineração com dificuldade máxima, o erro vem do pool de back-end, e não do proxy. Ao usar essas informações, podemos identificar que o invasor usa NanoPool, mas como não temos o endereço da carteira, não podemos obter uma avaliação da contagem de vítimas nem o lucro dessa campanha.
Estudo de caso 4: Comunicação oculta de blockchain usando uma topologia de proxy da Stratum
O proxy do protocolo Stratum opera no nível da rede encaminhando solicitações de protocolo Stratum diretamente para outro servidor sem modificar os endereços da carteira. Isso garante que o trabalho de cada minerador seja creditado na respetiva carteira. A implementação de um proxy Stratum pode ser feita por meio de um proxy de rede básico na camada de transporte ou utilizando um proxy de aplicação especializado, capaz de entender e manipular o protocolo.
Encontramos uma campanha ativa que usa essa topologia e se conecta a um pool público por um proxy Stratum. Não foi possível identificar se é um proxy reverso no nível da rede ou se ele intercepta o protocolo Stratum em si e opera como um proxy de aplicativo. De qualquer forma, ele redireciona as mensagens da Stratum para ocultar o pool ou nó de back-end. A verificação de pools públicos mostra que a carteira informada se conecta ao pool público MoneroOcean.
A campanha está ativa há pelo menos quatro meses e seu lucro total é de 1,158 XMR (aproximadamente US$ 180). Sozinha, essa não é uma campanha particularmente bem-sucedida, mas o esforço evidente do agente de ameaças sugere planos mais amplos, envolvendo o desenvolvimento completo da campanha: desde a infraestrutura até o criptominerador e os diversos arquivos maliciosos usados para implantá-lo. Os invasores também distribuem a campanha de forma independente, sem depender de terceiros, e implementam mecanismos de engenharia antirreversão, como criptografia, ofuscação e bloqueio do uso de ferramentas de monitoramento (Figura 13).
Embora a campanha possa ser preguiçosa, podemos ver uma execução cuidadosa do malware, principalmente no processo de ofuscação. O malware tenta ocultar a carga baixando um arquivo compactado durante a execução e usando nomes de arquivos legítimos do sistema ao rodar processos.
Detecções
Há vários caminhos diferentes que você pode seguir quando se trata de detecções em geral. Cada método pode não ser suficiente sozinho, mas será usado em conjunto com outros mecanismos de detecção. Os criptomineradores não são uma exceção; na verdade, eles podem ser partes difíceis de malware para detectar por causa de suas caraterísticas benignas. Eles usam a única coisa que não requer uma permissão especial na maioria dos sistemas operacionais: computação (tempo da CPU).
Conexões com a rede
Para detectar esses mineradores, podemos fazer referência cruzada com a rede blockchain (como a rede Monero que usamos anteriormente) com os dados que obtemos de uma ferramenta de visibilidade de rede, como uma solução de firewall ou segmentação. Como cada nó ou pool precisa se comunicar com o blockchain do Monero, isso oferece aos administradores de rede informações valiosas sobre o tráfego que está sendo gerado e saindo da rede. Quando somado a portas de rede, isso torna a detecção muito mais fácil, uma vez que a maioria dos criptomineradores usa números de porta distintos, como 999, 3333 ou 7777. Embora a Monero seja usada neste estudo de caso, é possível usar o mapeamento de rede blockchain em todas as redes baseadas em PoW (proof-of-work, prova de trabalho).
É importante observar, no entanto, que nem todo o tráfego direcionado para os nós Monero está necessariamente relacionado à criptomineração, uma vez que esses nós às vezes oferecem mais de um serviço. Por exemplo, o IP 157[.]90[.]212[.]53 encontra-se no nosso mapa da rede Monero, mas também é um nó de saída da rede Tor. Há várias possíveis explicações para o fato de um nó Monero oferecer outros serviços: ele pode estar comprometido ou, simplesmente, ter sido configurado intencionalmente para ser multifuncional. De qualquer forma, usar a conexão com a rede sem informações adicionais pode ser uma indicação fraca de conexão com o blockchain e gerar falso-positivos. Esta é outra razão pela qual as informações do número da porta são cruciais para detecções precisas.
Outro motivo para falso-positivos pode ser uma baixa taxa de atualização do mapa. Um servidor legítimo pode ser atribuído a um endereço IP que foi usado anteriormente por um nó Monero e causar um falso positivo se o mapa não estiver atualizado.
Esta detecção não é suficiente sozinha, mas pode ser usada como um gatilho para uma lógica de detecção ou investigação mais abrangente. Qualquer operação do criptominerador deve incluir a comunicação com um servidor Stratum para uma atribuição de tarefa de mineração. Geralmente, ele opera com pools de mineração conhecidos publicamente, mas em alguns casos, isso pode ser oculto usando um proxy, que não aparecerá no mapa de rede.
Detecção de execução de algoritmo
Os criptomineradores usam intensamente os recursos de computação da vítima, portanto, monitorar picos de uso no sistema pode indicar uma infeção. Porém, assim como na referência cruzada do mapa de rede, essa sozinha não é uma detecção precisa.
A combinação de vários IOCs detectáveis aumentará a taxa de confiança de detecção, ou seja, reduzirá falso-positivos. Para que uma operação de mineração seja bem-sucedida, existem contrapartes essenciais. Os criptomineradores devem minar a moeda escolhida usando o algoritmo de consenso como prova do trabalho. Cada algoritmo desse tipo deixa uma impressão digital única no sistema durante sua execução, e a extração dessas características pode servir como base para um método robusto de detecção de criptomineradores mal-intencionados.
Os algoritmos resistentes a ASIC, como o RandomX, geralmente implementam um conjunto complexo de operações únicas e identificáveis. Por exemplo, o desenvolvedor do RandomX criou uma ferramenta de detecção com base nessa mesma suposição. Ao iterar as threads em execução no sistema, podemos sondar o estado da thread, incluindo os valores dos registros da CPU. Como o RandomX é implementado usando muitos dos modernos recursos das CPUs, uma maneira de fazer isso é usar as configurações de Rounding Control, como na ferramenta de detecção criada pelo desenvolvedor do RandomX.
Na verdade, combiná-lo com outros indicadores, como as operações AES de hardware e a configuração de hugepage, melhora a taxa de detecção. Em resumo, a detecção pode ser realizada ao procurar chaves AES únicas nos registros SSE ou ao consultar o thread privilégios do token de acesso, respectivamente.
Podemos estender esses métodos a outros sistemas operacionais, já que a maioria dos criptomineradores busca ser independente de plataforma e tende a se comportar da mesma maneira, mesmo em sistemas operacionais diferentes. Não ser colocada em um sistema operacional permite que uma campanha seja potencialmente mais bem-sucedida, pois os números-alvo aumentam drasticamente dessa forma.
Localização da carteira na memória do processo
Quando os criptomineradores se comunicam diretamente com o pool de mineração, e não por um proxy, a carteira do minerador normalmente fica armazenada na memória do processo. Isso ocorre porque o protocolo Stratum requer que o minerador autentique o servidor e informe qual conta deve ser recompensada em envios de compartilhamento válidos. Normalmente, ele usará um endereço de carteira e, para a mineração Monero, especificamente, o minerador provavelmente será baseado no software XMRig. Com base nessas suposições, podemos localizar e interceptar a carteira no momento em que ela é enviada ao pool por meio da conexão com diversas APIs de soquete ou, teoricamente, aplicar um ataque do tipo MITM (machine-in-the-middle, ou máquina no meio) para capturar a mensagem de autenticação transmitida pelo minerador.
Também podemos usar uma pesquisa Regex simples sobre toda a memória alocada do processo para encontrar o endereço de carteira de 95 caracteres, como isso segue um formato estrito. Ele começa com 4 ou 8 e consiste em BASE58 caracteres válidos. Assim, o padrão /[48][1-9A-HJ-NP-Za-km-z]{94}/ pode ser suficiente para esta tarefa e também pode ser incorporado a uma regra YARA. É possível fazer a verificação a qualquer momento após a primeira conexão do criptominerador com o pool, já que o minerador precisa manter o endereço da carteira acessível caso precise se reconectar.
Finalmente, podemos usar qualquer uma das técnicas mencionadas para encontrar outras strings relacionadas ao protocolo Stratum e analisar a carteira de dentro. Esses indicadores podem diminuir falso-positivos, pois a estrutura JSON do protocolo é muito mais exclusiva. Por exemplo, veja a solicitação de login na Figura 14; podemos criar uma assinatura mais forte que contenha várias chaves para obter uma detecção mais precisa.
{
"id": 1,
"jsonrpc": "2.0",
"method": "login",
"params": {
"login": "<wallet address>",
"pass": "<Usually the worker name>",
"agent": "<Usually xmrig agent>",
"algo": [
"rx/0"
]
}
}
Fig. 14: Um exemplo de solicitação de login: a correspondência do padrão pode assegurar uma detecção mais precisa
Conclusões
Os pesquisadores da Akamai continuarão a expor campanhas mal-intencionadas e os respectivos agentes de ameaça, além de identificar IOCs com o objetivo de proteger nossos clientes e o público em geral.
Nesta segunda parte da nossa série de três publicações sobre criptomineradores, apresentamos diversas técnicas para revelar informações mais detalhadas sobre várias campanhas, como a identificação de um pool de mineração oculto por trás de um proxy ou a localização geográfica da operação, por meio da análise da taxa de hash da botnet do criptominerador ao longo do tempo, entre outras abordagens.
Vimos criptomineradores mal-intencionados que usavam Zephyr ao lado da famosa Monero. Usando as diferentes topologias de mineração, os criptomineradores conseguiram ocultar informações e minimizar o número de identificações e indicadores comprometedores.
Depois de perceber a anatomia dos diferentes criptomineradores e o processo de mineração, em geral, foi levantada uma pergunta: Podemos interromper a operação de mineração do botnet do criptominerador? Parar a operação de mineração de modo eficaz desligará os criptomineradores que infetam os computadores das vítimas e consumem os recursos deles. Exploraremos essa pergunta na última parte da nossa série.
Para acompanhar esta série e outras pesquisas inovadoras sobre segurança, confira nossa página de pesquisas sobre segurança e siga nossos perfis nas redes sociais.
Indicadores de comprometimento
IOC |
Tipo |
Descrição |
|---|---|---|
f038c4273037 |
Hash |
Estudo de caso 1: Hash de um criptominerador ativo |
47am2aMvQqCLnRBMqBz |
Carteira |
Estudo de caso 1: Endereço da carteira Monero |
4BEUrVUbd8h579R2b87uo |
Carteira |
Estudo de caso 1: Endereço da carteira Monero |
42XyygMzMRjd6A2MvPVXMGbZ6PzNe7Sivd8ek3ySHBmg18dDCWRhCZ6RFxVZFFUvoyCDnwA5Y2tSeSCaZAEq4n6q6DD8pQK |
Carteira |
Estudo de caso 1: Endereço da carteira Monero |
5.133.65.53 |
IP |
Estudo de caso 1: IP do proxy de mineração |
5.133.65.54 |
IP |
Estudo de caso 1; IP do proxy de mineração |
5.133.65.55 |
IP |
Estudo de caso 1: IP do proxy de mineração |
5.133.65.56 |
IP |
Estudo de caso 1; IP do proxy de mineração |
53ea10047275485734e75ca9d1205a51f372b564580e02a1e2062f3b5b3942ce |
Hash |
Estudo de caso 2: A maior campanha da Zephyr que encontramos |
ZEPHYR3c6xGj8D5oP4tzKQbPn2dNdse6aPRWxNBiwBFrg7RFN4jf1cqgj5qdR9Wdru44g2FATJHHH38oFDTH6krgKntSzLc5Csy3t |
Carteira |
Estudo de caso 2: Carteira Zephyr de uma grande campanha que usa o pool HashVault |
9a3b3a3003b283b5a43130093d5803be52f84c66dd2f4d4125039d396119d917 |
Hash |
Estudo de caso 2: Hash de amostra |
ZEPHYR3CFYFAze5jkYEQMfKdkhvrgSiSchDxqC2ekV8TYaxLdCVffS2d2aeqivDgtRixDe73tj8SjeiUnvxgSrTp65UqiPTRKMo2Z |
Carteira |
Estudo de caso 2: Carteira Zephyr |
https://pastebin.com/raw/4VeXYJAx |
URL |
Estudo de caso 2: Amostra com configuração controlável usando o serviço Pastebin |
ZEPHYR2PtmpFWSbkmyLfoy3wgnPSJdpSpjaH6vKaHh6KQB1FSRwxcgfRGx9qWYHQDNDQy5TFkYBRThm7jfCaQQPGNKe9pyvXG6Z3k |
Carteira |
Estudo de caso 2: Carteira Zephyr, versão de configuração histórica |
49WbPNohkR8VySDznW2freM7d9uUNiZWajQTE4aeFBUT6gJqye3ZPWbbL9r92r4kzHM7pZaoULavWFK83cSMkEYYDJTV7bT |
Carteira |
Estudo de caso 2: Carteira Monero da mesma amostra |
45.77.240.51 |
IP |
Estudo de caso 3: Proxy de mineração |
b64d80bf079266a1bfb0713f8c52db2e9b3a8060491f504e578a6bf05a9c6f46 |
Hash |
Estudo de caso 3: A amostra mais antiga da campanha que conseguimos encontrar |
yn.mvip8.ru |
URL |
Estudo de caso 4: Proxy Stratum que mascara o pool público por trás dele |
49J2yzHRcH8hAWSZajkjT2KztGjAMuTFKh5BxAUGdqomPkhvMmBNc9viDSVymu5V5SAqJrNHf4y9E6rLNArYWtuSJNtVEYv |
Carteira |
Estudo de caso 4: Carteira Monero usada pela amostra |