Pesquisa inicial expondo JOKERSPY

Uma visão geral do JOKERSPY, descoberto em junho de 2023, que implantou ferramentas macOS personalizadas e de código aberto para explorar uma exchange de criptomoedas localizada no Japão.

15 min de leituraPadrão de ataque, Campanhas
Pesquisa inicial expondo JOKERSPY

Principais conclusões

  • Esta é uma notificação inicial de uma intrusão ativa com detalhes adicionais a seguir
  • REF9134 utiliza ferramentas personalizadas e de código aberto para reconhecimento, comando e controle
  • Os alvos desta atividade incluem uma bolsa de criptomoedas no Japão

Preâmbulo

Este artigo de pesquisa explora uma intrusão descoberta recentemente que estamos chamando de REF9134, que envolve o uso do backdoor sh.py para implantar a ferramenta de enumeração Swiftbelt do macOS. sh.py e xcc foram recentemente apelidados de JOKERSPY pelo Bitdefender.

Especificamente, esta pesquisa abrange:

  • Como o Elastic Security Labs identificou o reconhecimento do grupo adversário
  • As etapas do adversário para evitar a detecção usando xcc , instalando o backdoor sh.py e implantando ferramentas de enumeração

Uma análise mais aprofundada desse ataque poderá ser publicada posteriormente.

Overview

No final de maio de 2023, um adversário com acesso existente em uma importante bolsa de criptomoedas japonesa acionou um de nossos alertas de endpoint de diagnóstico que detectou a execução de um binário ( xcc ). O xcc não é confiável para a Apple, e o adversário se autoassinou usando o código de ferramenta nativo do macOS codesign. Embora essa detecção em si não tenha sido necessariamente inócua, o setor vertical e a atividade adicional que observamos após esses alertas iniciais chamaram nossa atenção e nos fizeram prestar mais atenção.

Após a execução do xcc , observamos o agente da ameaça tentando ignorar as permissões do TCC criando seu próprio banco de dados do TCC e tentando substituir o existente. Em 1º de junho, uma nova ferramenta baseada em Python foi vista sendo executada no mesmo diretório que o xcc e foi utilizada para executar uma ferramenta de enumeração pós-exploração do macOS de código aberto conhecida como Swiftbelt.

Análise

REF9134 é uma intrusão em um grande provedor de serviços de criptomoeda com sede no Japão, com foco em troca de ativos para negociação de Bitcoin, Ethereum e outras criptomoedas comuns.

O binário xcc

xcc ( d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8 ) é um binário multiarquitetura autoassinado escrito em Swift que é usado para avaliar as permissões atuais do sistema. A versão observada pelo Elastic Security Labs é assinada como XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4 e tem uma assinatura de código semelhante a payloads publicamente conhecidos e não confiáveis.

Para identificar outros binários assinados com o mesmo identificador, convertemos XProtectCheck-55554944f74096a836b73310bd55d97d1dff5cd4 para hexadecimal e pesquisamos no VirusTotal para identificar 3 amostras adicionais ( content:{5850726f74656374436865636b2d353535343934346637343039366138333662373333313062643535643937643164666635636434} ).

Cada um continha a mesma funcionalidade principal com diferenças estruturais. Essas discrepâncias podem indicar que essas variantes do xcc foram desenvolvidas para ignorar recursos de endpoint que interferiam na execução.

Logo após a criação do xcc , os pesquisadores observaram o agente da ameaça copiando /Users/Shared/tcc.db no banco de dados TCC existente, /Library/Application Support/com.apple.TCC/TCC.db. Isso pode permitir que a ameaça evite prompts do TCC visíveis aos usuários do sistema e, ao mesmo tempo, abuse de um diretório com amplas permissões de gravação de arquivo.

Artefatos XCode

Durante a análise desse binário, os pesquisadores identificaram dois caminhos exclusivos, /Users/joker/Developer/Xcode/DerivedData/ e /Users/joker/Downloads/Spy/XProtectCheck/XProtectCheck/ , que se destacaram como anômalos. O caminho padrão para compilar código com o Xcode é /Users/[nome de usuário]/Developer/Xcode/DerivedData.

Abuso do TCC

Essas permissões de introspecção são gerenciadas pelo recurso nativo Transparência, Consentimento e Controle (TCC). Os pesquisadores determinaram que o xcc verifica as permissões FullDiskAccess e ScreenRecording, além de verificar se a tela está bloqueada no momento e se o processo atual é um cliente de acessibilidade confiável.

Após a execução bem-sucedida em nosso ambiente Detonate , os seguintes resultados foram exibidos:

Depois que o banco de dados TCC personalizado foi colocado no local esperado, o agente da ameaça executou o binário xcc .

Acesso inicial

O binário xcc foi executado via bash por três processos separados

  • /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
  • /Applications/iTerm.app/Contents/MacOS/iTerm2
  • /Aplicativos/Visual Studio Code.app/Conteúdo/MacOS/Electron.

Embora ainda estejamos investigando e coletando informações, acreditamos firmemente que o acesso inicial para esse malware foi um plugin malicioso ou de backdoor ou uma dependência de terceiros que forneceu acesso ao agente da ameaça. Isso se alinha com a conexão feita pelos pesquisadores da Bitdefender, que correlacionaram o domínio codificado encontrado em uma versão do backdoor sh.py a um Tweet sobre um leitor de código QR macOS infectado que apresentava uma dependência maliciosa.

Bibliotecas criptográficas implantadas

Em 31 de maio, pesquisadores observaram três DyLibs não nativas implantadas em /Users/shared/keybag/ chamadas libcrypto.1.0.0.dylib , libncursesw.5.dylib e libssl.1.0.0.dylib. No MacOS, as chaves para proteção de dados de arquivos e chaveiros são armazenadas em keybags e pertencem ao iOS, iPadOS, watchOS e tvOS. Neste momento, os pesquisadores propõem que essa encenação serve a um propósito de evasão de defesa e especulam que ela pode conter vulnerabilidades úteis. O agente da ameaça pode planejar introduzir essas vulnerabilidades em sistemas ou aplicativos que já foram corrigidos.

A porta dos fundos sh.py

sh.py é um backdoor Python usado para implantar e executar outros recursos pós-exploração, como o Swiftbelt .

O malware carrega sua configuração de ~/Public/Safari/sar.dat. O arquivo de configuração contém elementos cruciais, como URLs de comando e controle (C2), um temporizador de suspensão para fins de sinalização (o valor padrão é 5 segundos) e um identificador exclusivo de nove dígitos atribuído a cada agente.

Como parte de seu beacon periódico, o malware coleta e transmite diversas informações do sistema. As informações enviadas incluem:

  • Hostname
  • Nome de usuário
  • Nome de domínio
  • Diretório atual
  • O caminho absoluto do binário executável
  • Versão do SO
  • É um sistema operacional de 64 bits
  • É um processo de 64 bits
  • Versão Python

Abaixo está uma tabela descrevendo os vários comandos que podem ser manipulados pelo backdoor:

ComandoDescrição
skPare a execução do backdoor
lListar os arquivos do caminho fornecido como parâmetro
cExecutar e retornar a saída de um comando shell
cdAlterar diretório e retornar o novo caminho
xsExecutar um código Python fornecido como parâmetro no contexto atual
xsiDecodificar um código Python codificado em Base64 fornecido como parâmetro, compilá-lo e executá-lo
rRemover um arquivo ou diretório do sistema
eExecutar um arquivo do sistema com ou sem parâmetro
uCarregar um arquivo para o sistema infectado
eBaixe um arquivo do sistema infectado
gObtenha a configuração atual do malware armazenada no arquivo de configuração
wSubstituir o arquivo de configuração do malware por novos valores

SWIFTBELT

Em 1º de junho, o sistema comprometido registrou um alerta de assinatura para MacOS.Hacktool.Swiftbelt, um recurso de enumeração do MacOS inspirado no SeatBelt e criado pelo red-teamer Cedric Owens. Ao contrário de outros métodos de enumeração, o Swiftbelt invoca o código Swift para evitar a criação de artefatos de linha de comando. Notavelmente, variantes xcc também são escritas usando Swift.

O alerta de assinatura indicou que o Swiftbelt foi gravado em /Users/shared/sb e executado usando o interpretador de shell bash, sh. A linha de comando completa observada pelos pesquisadores foi Users/Shared/sb /bin/sh -c /users/shared/sb \> /users/shared/sb.log 2\>&1 , demonstrando que o agente da ameaça capturou os resultados em sb.log enquanto os erros foram direcionados para STDOUT.

Modelo Diamante

O Elastic Security utiliza o Modelo Diamond para descrever relacionamentos de alto nível entre adversários, capacidades, infraestrutura e vítimas de intrusões. Embora o Modelo Diamante seja mais comumente usado com intrusões únicas e aproveitando o Activity Threading (seção 8) como uma forma de criar relacionamentos entre incidentes, um modelo centrado no adversário (seção 7.1.4) abordagem permite um único diamante, embora desordenado.

Táticas e técnicas observadas

Táticas MITRE ATT&CK

As táticas representam o porquê de uma técnica ou subtécnica. É o objetivo tático do adversário: a razão para executar uma ação. Estas são as táticas observadas pelo Elastic Security Labs nesta campanha:

MITRE ATT&CK Techniques / Sub techniques

Técnicas e subtécnicas representam como um adversário atinge um objetivo tático ao executar uma ação. Estas são as técnicas observadas pelo Elastic Security Labs nesta campanha:

Lógica de detecção

YARA

O Elastic Security criou regras YARA para identificar essa atividade. Abaixo estão as regras do YARA para identificar o backdoor JOKERSPY e a ferramenta SwiftBelt.

rule Macos_Hacktool_JokerSpy {
    meta:
        author = "Elastic Security"
        creation_date = "2023-06-19"
        last_modified = "2023-06-19"
        os = "MacOS"
        arch = "x86"
        category_type = "Hacktool"
        family = "JokerSpy"
        threat_name = "Macos.Hacktool.JokerSpy"
        reference_sample = "d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8"
        license = "Elastic License v2"

    strings:
        $str1 = "ScreenRecording: NO" fullword
        $str2 = "Accessibility: NO" fullword
        $str3 = "Accessibility: YES" fullword
        $str4 = "eck13XProtectCheck"
        $str5 = "Accessibility: NO" fullword
        $str6 = "kMDItemDisplayName = *TCC.db" fullword
    condition:
        5 of them
}
rule MacOS_Hacktool_Swiftbelt {
    meta:
        author = "Elastic Security"
        creation_date = "2021-10-12"
        last_modified = "2021-10-25"
        threat_name = "MacOS.Hacktool.Swiftbelt"
        reference_sample = "452c832a17436f61ad5f32ee1c97db05575160105ed1dcd0d3c6db9fb5a9aea1"
        os = "macos"
        arch_context = "x86"
        license = "Elastic License v2"

    strings:
        $dbg1 = "SwiftBelt/Sources/SwiftBelt"
        $dbg2 = "[-] Firefox places.sqlite database not found for user"
        $dbg3 = "[-] No security products found"
        $dbg4 = "SSH/AWS/gcloud Credentials Search:"
        $dbg5 = "[-] Could not open the Slack Cookies database"
        $sec1 = "[+] Malwarebytes A/V found on this host"
        $sec2 = "[+] Cisco AMP for endpoints found"
        $sec3 = "[+] SentinelOne agent running"
        $sec4 = "[+] Crowdstrike Falcon agent found"
        $sec5 = "[+] FireEye HX agent installed"
        $sec6 = "[+] Little snitch firewall found"
        $sec7 = "[+] ESET A/V installed"
        $sec8 = "[+] Carbon Black OSX Sensor installed"
        $sec9 = "/Library/Little Snitch"
        $sec10 = "/Library/FireEye/xagt"
        $sec11 = "/Library/CS/falcond"
        $sec12 = "/Library/Logs/PaloAltoNetworks/GlobalProtect"
        $sec13 = "/Library/Application Support/Malwarebytes"
        $sec14 = "/usr/local/bin/osqueryi"
        $sec15 = "/Library/Sophos Anti-Virus"
        $sec16 = "/Library/Objective-See/Lulu"
        $sec17 = "com.eset.remoteadministrator.agent"
        $sec18 = "/Applications/CarbonBlack/CbOsxSensorService"
        $sec19 = "/Applications/BlockBlock Helper.app"
        $sec20 = "/Applications/KextViewr.app"
    condition:
        6 of them
}

Referências

Os seguintes itens foram referenciados ao longo da pesquisa acima:

Observações

Os seguintes observáveis foram discutidos nesta pesquisa.

ObservableTipoNomeReferência
app.influmarket[.]orgDomínioN/Ddomínio sh.py
d895075057e491b34b0f8c0392b44e43ade425d19eaaacea6ef8c5c9bd3487d8SHA-256/Usuários/Compartilhado/xccMacos.Hacktool.JokerSpy
8ca86f78f0c73a46f31be366538423ea0ec58089f3880e041543d08ce11fa626SHA-256/Usuários/Compartilhado/sbMacOS.Hacktool.Swiftbelt
aa951c053baf011d08f3a60a10c1d09bbac32f332413db5b38b8737558a08dc1SHA-256/Usuários/Compartilhado/sh.pyscript sh.py

Compartilhe este artigo