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
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.
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.
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
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.
Além dessa alteração de configuração, o exemplo não utiliza biblioteca para filtragem de rede 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 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 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
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).
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.
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.
Figura 6. Xrefs para função f_decrypt
O roteiro final pode ser encontrado em
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
Fonte: habr.com