Essa não é a primeira vez que atacantes atacam a indústria de jogos, comprometem os desenvolvedores, adicionam backdoors ao ambiente de criação do jogo e distribuem malware sob o disfarce de um legítimo. Em abril de 2013, a Kaspersky Lab
relatou um incidente semelhante. Esse ataque é atribuído a um grupo cibernético chamado Winnti.
Recentemente, os especialistas da ESET foram atraídos por novos ataques às cadeias de suprimentos. Dois jogos e uma plataforma de jogos foram comprometidos para introduzir um backdoor. Esses ataques visam a Ásia e a indústria de jogos, com o Winnti novamente atrás deles.
Três casos, um backdoor
Apesar das diferentes configurações de malware, os três produtos de software comprometidos incluíam o mesmo código de backdoor e foram lançados usando o mesmo mecanismo. Agora não há backdoors em dois produtos, mas um ainda está distribuído em uma versão trojanizada - ironicamente, esse jogo é chamado Infestation, lançado pela empresa tailandesa Extreme Extreme. Tentamos entrar em contato com o desenvolvedor desde o início de fevereiro, mas até agora sem sucesso.
Analisaremos como a carga maliciosa é introduzida e consideraremos a backdoor em detalhes.
Implementação de carga útil
O código da carga útil é executado durante a execução do executável trojanizado. Imediatamente após o ponto de entrada do PE, a chamada de inicialização do C Runtime padrão (
__scrt_common_main_seh
na figura abaixo) é interceptada para iniciar a carga maliciosa antes de qualquer outra coisa (Figura 2). Isso pode indicar que os atacantes alteraram a configuração do assembly, e não o próprio código fonte.
Figura 1. Ponto de entrada líquido no arquivo executável
Figura 2. Ponto de entrada de um executável comprometidoO código adicionado ao executável descriptografa e inicia o backdoor na RAM antes de retomar a execução normal do código de inicialização do Runtime C e do código do aplicativo host subsequente. A carga útil interna possui uma estrutura especial, mostrada na figura abaixo, que é interpretada pelo código de descompressão adicionado.
Figura 3. Estrutura de carga útil incorporadaEle contém a chave RC4 (XOR criptografado com 0x37), usada para descriptografar o nome do arquivo e o arquivo DLL incorporado.
Carga maliciosa
A carga útil maliciosa real contém apenas 17 KB de código e dados.
Configuração
Os dados de configuração mostrados na figura abaixo são uma lista de linhas separadas por espaços.
Figura 4. Dados de configuração da carga útilA configuração consiste em quatro campos:
- URL do servidor C & C de gerenciamento.
- A variável (t) usada para determinar o tempo limite em milissegundos antes de continuar. O tempo de espera é selecionado no intervalo de 2/3 a 5/3 t aleatoriamente.
- Linha que identifica a campanha.
- Uma lista de nomes de arquivos executáveis, separados por ponto e vírgula. Se algum deles funcionar, o backdoor interrompe sua execução.
Identificamos cinco versões da carga útil:

Nas três primeiras opções, o código não foi recompilado, mas os dados de configuração foram editados no próprio arquivo DLL. O restante do conteúdo é uma cópia em bytes.
Infraestrutura C&C
Os nomes de domínio são escolhidos de forma a se parecer com os sites dos desenvolvedores de aplicativos comprometidos. O domínio de nível superior está configurado para redirecionar para o site legítimo correspondente usando o serviço Namecheap, enquanto o subdomínio aponta para um servidor C&C mal-intencionado.

No momento da redação deste artigo, nenhum dos domínios estava disponível, os servidores C&C não estavam respondendo.
Relatório do estudo
O ID do bot é gerado a partir do endereço MAC da máquina. O backdoor transmite informações da máquina para o servidor C&C, incluindo nome de usuário, nome do computador, versão do Windows e idioma do sistema, e aguarda um comando. Os dados são criptografados com o XOR usando a chave “
*&b0i0rong2Y7un1
” e codificados com a base64. Os dados recebidos do servidor C&C são criptografados usando a mesma chave.
Equipas
Um backdoor simples suporta apenas quatro equipes que podem ser usadas por atacantes:
-
DownUrlFile
-
DownRunUrlFile
-
RunUrlBinInMem
-
UnInstall
Os nomes das equipes falam por si. Eles permitem que os invasores executem executáveis adicionais a partir de um determinado URL.
Talvez o último comando seja menos óbvio.
UnInstall
não remove o malware do sistema. No final, ele é incorporado em um arquivo executável legítimo que ainda será executado. Em vez de excluir algo, o comando desabilita o código malicioso, definindo o valor como 1 para a chave do Registro:
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\ImageFlag
Depois de iniciar a carga, o valor do registro é solicitado e, se especificado, a execução é cancelada. Talvez os invasores estejam tentando reduzir a carga em seus servidores C&C, evitando retornos de chamada de vítimas sem interesse.
Segunda etapa
De acordo com a telemetria, uma das cargas de segundo estágio enviadas às vítimas é o Win64 / Winnti.BN. Até onde sabemos, o conta-gotas desse malware é baixado via HTTPs do
api.goallbandungtravel[.]com
. Vimos que ele foi instalado como um serviço do Windows e como uma DLL em
C:\Windows\System32
usando os seguintes nomes de arquivo:
- cscsrv.dll
- dwmsvc.dll
- iassrv.dll
- mprsvc.dll
- nlasrv.dll
- powfsvc.dll
- racsvc.dll
- slcsvc.dll
- snmpsvc.dll
- sspisvc.dll
As amostras que analisamos eram grandes o suficiente - cerca de 60 MB. No entanto, isso é apenas visibilidade, pois o tamanho real ou o arquivo PE é de 63 a 72 KB, dependendo da versão. Muitos arquivos limpos são simplesmente adicionados a arquivos maliciosos. É provável que isso seja feito por um componente que redefine e instala um serviço mal-intencionado.
Depois de iniciar o serviço, ele adiciona a extensão
.mui
ao
.mui
DLL e a descriptografa usando o RC5. O arquivo MUI descriptografado contém código independente da posição com deslocamento 0. A tecla RC5 é obtida a partir do número de série do disco rígido e da linha “
f@Ukd!rCto R$.
" Não foi possível obter os arquivos MUI ou o código que os instala primeiro. Assim, o objetivo exato do serviço malicioso é desconhecido para nós.
Versões recentes de malware incluem um mecanismo de atualização automática usando o servidor C & C
http://checkin.travelsanignacio[.]com
. Este servidor serviu a versão mais recente dos arquivos MUI criptografados com a chave estática RC5. No decorrer de nossa pesquisa, este servidor C&C não respondeu.
Objetivos
Vamos começar com aqueles para os quais a campanha
não é direcionada especificamente. No início da carga, o malware verifica se o idioma do sistema é russo ou chinês (veja a figura abaixo). Se a resposta for sim, o programa para de funcionar. É impossível contornar essa exceção - os invasores não estão fundamentalmente interessados em computadores com essas configurações de idioma.
Figura 5. Verificando o idioma antes de ativar a carga útilEstatísticas de distribuição
De acordo com a telemetria, a maioria das infecções ocorreu na Ásia, especialmente na Tailândia. Dada a popularidade do aplicativo comprometido, que ainda está sendo distribuído pelo desenvolvedor, não surpreende que o número de vítimas chegue a dezenas e centenas de milhares.

Conclusão
Os ataques da cadeia de suprimentos são difíceis de detectar no lado do usuário. É impossível analisar todo o software em execução, bem como todas as atualizações recomendadas. Por padrão, o usuário confia nos desenvolvedores e assume que seus arquivos não contêm código malicioso. Provavelmente, é por isso que vários grupos cibernéticos têm como alvo ataques a fornecedores de software - o comprometimento permitirá a criação de uma botnet, cujo tamanho é comparável à popularidade do software trojanizado. Essa tática tem uma desvantagem - quando o esquema é revelado, os invasores perdem o controle da botnet e os usuários podem limpar o sistema instalando a próxima atualização.
Atualmente, os motivos do grupo cibernético Winnti são desconhecidos. Talvez os invasores estejam buscando ganhos financeiros ou planejando usar a botnet como parte de uma operação maior.
Os produtos ESET detectam a ameaça como Win32 / HackedApp.Winnti.A, Win32 / HackedApp.Winnti.B, a carga útil como Win32 / Winnti.AG, o segundo estágio como Win64 / Winnti.BN.
Indicadores de compromisso estão disponíveis aqui .