OceanLotus: atualização de malware para macOS

Em março de 2019, uma nova amostra de malware para macOS do grupo cibernético OceanLotus foi carregada no VirusTotal, um popular serviço de verificação online. O arquivo executável backdoor tem os mesmos recursos da versão anterior do malware macOS que estudamos, mas sua estrutura mudou e tornou-se mais difícil de detectar. Infelizmente, não conseguimos encontrar um conta-gotas associado a esta amostra, por isso ainda não conhecemos o vetor de infecção.

Publicamos recentemente post sobre OceanLotus e como os operadores estão tentando fornecer persistência, acelerar a execução de código e minimizar o espaço ocupado em sistemas Windows. Sabe-se também que este grupo cibernético também possui um componente para macOS. Esta postagem detalha as mudanças na versão mais recente do malware para macOS em comparação com a versão anterior (descrito pela Trend Micro) e também descreve como você pode automatizar a descriptografia de strings durante a análise usando a API IDA Hex-Rays.

OceanLotus: atualização de malware para macOS

Análise

As próximas três partes descrevem a análise de uma amostra com um hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. O arquivo é chamado iluminado com lanterna, os produtos antivírus ESET detectam-no como OSX/OceanLotus.D.

Proteção antidepuração e sandbox

Como todos os binários do macOS OceanLotus, o exemplo é empacotado com UPX, mas a maioria das ferramentas de identificação do empacotador não o reconhece como tal. Isso provavelmente ocorre porque eles contêm principalmente uma assinatura dependente da presença da string “UPX”, além disso, as assinaturas Mach-O são menos comuns e não são atualizadas com tanta frequência. Esse recurso dificulta a detecção estática. Curiosamente, após descompactar, o ponto de entrada fica no início da seção __cfstring no segmento .TEXT. Esta seção possui atributos de sinalizador conforme mostrado na imagem abaixo.

OceanLotus: atualização de malware para macOS
Figura 1. Atributos da seção MACH-O __cfstring

Conforme mostrado na Figura 2, os locais dos códigos na seção __cfstring permite enganar algumas ferramentas de desmontagem exibindo código como strings.

OceanLotus: atualização de malware para macOS
Figura 2. Código backdoor detectado pelo IDA como dados

Uma vez executado, o binário cria um thread como um antidepurador cujo único propósito é verificar continuamente a presença de um depurador. Para este fluxo:

— Tenta desengatar qualquer depurador, chamando ptrace с PT_DENY_ATTACH como um parâmetro de solicitação
- Verifica se algumas portas exclusivas estão abertas chamando uma função task_get_exception_ports
- Verifica se o depurador está conectado, conforme figura abaixo, verificando a presença do flag P_TRACED no processo atual

OceanLotus: atualização de malware para macOS
Figura 3. Verificando a conexão do depurador usando a função sysctl

Se o watchdog detectar a presença de um depurador, a função será chamada exit. Além disso, a amostra verifica o ambiente executando dois comandos:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

A amostra então verifica o valor de retorno em relação a uma lista codificada de strings de sistemas de virtualização conhecidos: acle, vmware, virtualbox ou paralelos. Por fim, o próximo comando verifica se a máquina é uma das seguintes “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” e “XS”. Estes são códigos de modelo de sistema, por exemplo, “MBP” significa MacBook Pro, “MBA” significa MacBook Air, etc.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Principais adições

Embora os comandos backdoor não tenham mudado desde a pesquisa da Trend Micro, notamos algumas outras modificações. Os servidores C&C usados ​​neste exemplo são relativamente novos e foram criados em 22.10.2018/XNUMX/XNUMX.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

O URL do recurso mudou para /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
O primeiro pacote enviado ao servidor C&C contém mais informações sobre a máquina host, incluindo todos os dados coletados pelos comandos da tabela abaixo.

OceanLotus: atualização de malware para macOS

Além dessa alteração de configuração, o exemplo não utiliza biblioteca para filtragem de rede libcurl, mas uma biblioteca externa. Para encontrá-lo, o backdoor tenta descriptografar todos os arquivos do diretório atual usando AES-256-CBC com a chave gFjMXBgyXWULmVVVzyxy, preenchido com zeros. Cada arquivo é descriptografado e salvo como /tmp/store, e uma tentativa de carregá-lo como uma biblioteca é feita usando a função abrir. Quando uma tentativa de descriptografia resulta em uma chamada bem-sucedida dlopen, o backdoor extrai funções exportadas Boriry и ChadylonV, que aparentemente são responsáveis ​​pela comunicação da rede com o servidor. Não temos o conta-gotas ou outros arquivos do local original da amostra, portanto não podemos analisar esta biblioteca. Além disso, como o componente é criptografado, uma regra YARA baseada nessas strings não corresponderá ao arquivo encontrado no disco.

Conforme descrito no artigo acima, ele cria ID do Cliente. Esse ID é o hash MD5 do valor de retorno de um dos seguintes comandos:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (obter endereço MAC)
- equipe desconhecida ("x1ex72x0a"), que é usado em amostras anteriores

Antes do hash, um "0" ou "1" é adicionado ao valor de retorno para indicar privilégios de root. Esse ID do Cliente armazenado em /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, se o código for executado como root ou em ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML em todos os outros casos. O arquivo geralmente fica oculto usando a função _chflags, seu carimbo de data/hora é alterado usando o comando touch –t com um valor aleatório.

Decodificando strings

Tal como acontece com as opções anteriores, as strings são criptografadas usando AES-256-CBC (chave hexadecimal: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 preenchido com zeros e IV preenchido com zeros) através da função CCCrypt. A chave mudou em relação às versões anteriores, mas como o grupo ainda usa o mesmo algoritmo de criptografia de string, a descriptografia pode ser automatizada. Além deste post, estamos lançando um script IDA que utiliza a API Hex-Rays para descriptografar as strings presentes no arquivo binário. Este script pode ajudar em análises futuras do OceanLotus e na análise de amostras existentes que ainda não conseguimos obter. O script é baseado em um método universal para receber argumentos passados ​​para uma função. Além disso, ele procura atribuições de parâmetros. O método pode ser reutilizado para obter uma lista de argumentos de função e depois passá-la para o retorno de chamada.

Conhecendo o protótipo da função descriptografar, o script encontra todas as referências cruzadas para esta função, todos os argumentos, depois descriptografa os dados e coloca o texto simples dentro de um comentário no endereço de referência cruzada. Para que o script funcione corretamente, ele deve ser configurado para o alfabeto personalizado usado pela função de decodificação base64, e uma variável global deve ser definida contendo o comprimento da chave (neste caso, um DWORD, veja a Figura 4).

OceanLotus: atualização de malware para macOS
Figura 4. Definição da variável global key_len

Na janela Função, você pode clicar com o botão direito na função de descriptografia e clicar em “Extrair e descriptografar argumentos”. O script deve colocar as linhas descriptografadas nos comentários, conforme mostrado na Figura 5.

OceanLotus: atualização de malware para macOS
Figura 5. O texto descriptografado é colocado nos comentários

Desta forma, as strings descriptografadas são convenientemente colocadas juntas na janela IDA refex para esta função, conforme mostrado na Figura 6.

OceanLotus: atualização de malware para macOS
Figura 6. Xrefs para função f_decrypt

O roteiro final pode ser encontrado em Repositório Github.

Jogar aviator online grátis: hack aviator funciona

Como já mencionado, a OceanLotus está constantemente melhorando e atualizando seu kit de ferramentas. Desta vez, o grupo cibernético melhorou o malware para funcionar com usuários de Mac. O código não mudou muito, mas como muitos usuários de Mac ignoram os produtos de segurança, proteger o malware contra detecção é de importância secundária.

Os produtos ESET já estavam detectando esse arquivo no momento da pesquisa. Como a biblioteca de rede usada para comunicação C&C agora está criptografada em disco, o protocolo de rede exato usado pelos invasores ainda não é conhecido.

Indicadores de compromisso

Indicadores de compromisso, bem como atributos MITRE ATT&CK também estão disponíveis em GitHub.

Fonte: habr.com

Adicionar um comentário