Pesquisadores da ESET descobriram uma família de malware até então não documentada que usa módulos personalizados e projetados para atacar sistemas Linux. Os módulos utilizados por essa família de malware, que batizamos de FontOnLake, estão em constante desenvolvimento e disponibilizam acesso remoto aos operadores, permitem a coleta de dados de acesso e servem como um servidor proxy. Nesta publicação, resumimos algumas descobertas de nossos pesquisadores que podem ser vistas de forma detalhada em nosso white paper (em inglês) sobre o assunto.
Para coletar dados (por exemplo, credenciais ssh) ou realizar outras atividades mal-intencionadas, essa família de malware usa binários legítimos modificados que são ajustados para carregar mais componentes. Na verdade, para esconder sua existência, a presença do FontOnLake é sempre acompanhada por um rootkit. Esses binários como cat, kill ou sshd são comumente usados em sistemas Linux e também podem servir como um mecanismo de persistência.
A natureza camaleônica das ferramentas do FontOnLake em combinação com um design avançado e baixa prevalência sugere que elas são utilizadas em ataques direcionados.
O primeiro arquivo dessa família de malware apareceu no VirusTotal no último mês de maio, e outras amostras foram carregadas ao longo do ano. A localização do servidor C&C e os países dos quais as amostras foram carregadas no VirusTotal podem indicar que seus alvos incluem o sudeste da Ásia.
Acreditamos que os operadores do FontOnLake sejam particularmente cautelosos, já que quase todas as amostras analisadas usam servidores C&C exclusivos com diversas portas fora do padrão. Os operadores usam principalmente C/C++ e várias bibliotecas de terceiros, como Boost, Poco, ou Protobuf. Nenhum dos servidores C&C utilizados nas amostras carregadas para o VirusTotal estavam ativos no momento em que este post foi escrito, indicando que eles podem ter sido desativados devido ao upload.
Componentes documentados do FontOnLake
Os componentes atualmente documentados do FontOnLake podem ser divididos em três grupos que interagem entre si:
- Aplicativos trojanizados: binários legítimos modificados que são utilizados para carregar mais componentes, coletar dados ou realizar outras atividades criminosas.
- Backdoors: componentes em modo usuário que funcionam como o principal ponto de comunicação para os operadores.
- Rootkits: componentes do modo kernel que se escondem e disfarçam sua presença, ajudam com atualizações ou fornecem backdoors de backup.
Aplicativos trojanizados
Descobrimos vários aplicativos trojanizados que são usados para carregar módulos personalizados do backdoor ou rootkit. Além disso, eles também podem coletar dados confidenciais. Provavelmente, os patches do aplicativo são aplicados no nível do código-fonte, indicando que os aplicativos devem ter sido compilados e substituídos pelos originais.
Todos os arquivos trojanizados são utilitários padrão do Linux e cada um serve como um método de persistência porque geralmente são executados na inicialização do sistema. Não se sabe como esses aplicativos trojanizados atingem inicialmente suas vítimas.
A comunicação de um aplicativo trojanizado com seu rootkit é realizada por meio de um arquivo virtual, que é criado e gerenciado pelo rootkit. Como podemos ver na Imagem 1, os dados podem ser lidos/gravados de/para o arquivo virtual e exportados com seu componente de backdoor conforme solicitado pelo operador.
Backdoors
Os três backdoors que descobrimos são escritos em C++ e todos usam, embora de forma ligeiramente diferente, a mesma biblioteca Asio do Boost para redes assíncronas e entradas/saídas de baixo nível. Eles também usam Poco, Protobuf e funções do STL como ponteiros inteligentes. O que causa um certo estranhamento no malware é o fato de que esses backdoors também apresentam vários padrões de design de software.
A funcionalidade que todos eles têm em comum é que cada um exfiltra as credenciais de acesso coletadas e seu histórico de comandos bash para o próprio servidor C&C.
Tendo em conta a sobreposição de funções, esses backdoors provavelmente não estão sendo usados juntos em um sistema comprometido.
Além disso, todos os backdoors usam comandos de heartbeat personalizados que são enviados e recebidos periodicamente para manter a conexão ativa.
A principal funcionalidade desses backdoors consiste nos seguintes métodos:
- Exfiltrar dados coletados;
- Criar uma ponte entre um servidor ssh personalizado que roda localmente e seu servidor C&C;
- Manipular arquivos (por exemplo, fazer upload/download, criar/excluir, listar diretórios, modificar atributos, etc.);
- Agir como um proxy;
- Executar comandos shell arbitrários e scripts Python.
Rootkit
Descobrimos duas versões diferentes de rootkit que são usadas uma de cada vez, em cada um dos backdoors. Existem diferenças significativas entre esses dois rootkits. No entanto, alguns aspectos deles se sobrepõem. Embora as versões do rootkit sejam baseadas no projeto de código-aberto suterusu, elas contêm várias de suas técnicas exclusivas e personalizadas.
A funcionalidade combinada dessas duas versões do rootkit inclui:
- Esconder processos;
- Esconder arquivos;
- Esconder a si mesmo;
- Esconder as conexões de rede;
- Exposição de credenciais coletadas para o backdoor;
- Encaminhamento de portas;
- Recepção de pacotes mágicos (pacotes mágicos são pacotes especialmente projetados que podem instruir o rootkit a baixar e executar outro backdoor).
Depois da nossa descoberta e enquanto finalizávamos nosso white paper sobre esse assunto, fornecedores como Tencent Security Response Center, Avast e Lacework Labs publicaram pesquisas sobre o que aparentemente deve ser o mesmo malware.
Todos os componentes conhecidos do FontOnLake são detectados pelos produtos ESET como Linux/FontOnLake. As empresas ou pessoas que desejam proteger seus dispositivos ou servidores Linux contra essa ameaça devem usar um produto de segurança com várias camadas e uma versão atualizada de sua distribuição Linux. Alguns dos exemplos que analisamos foram criados especificamente para CentOS e Debian.
Anteriormente, descrevemos uma operação que compartilhava certos padrões de comportamento com o FontOnLake. No entanto, sua escala e impacto foram muito maiores. Batizamos essa operação de Windigo. Caso queira saber mais sobre essa operação, acesse este whitepaper.
Outros detalhes técnicos sobre o FontOnLake podem ser encontrados em nosso whitepaper.
Indicadores de Comprometimento (IoC)
Amostras
SHA-1 | Description | Detection name |
---|---|---|
1F52DB8E3FC3040C017928F5FFD99D9FA4757BF8 | Trojanized cat | Linux/FontOnLake |
771340752985DD8E84CF3843C9843EF7A76A39E7 | Trojanized kill | #rowspan# |
27E868C0505144F0708170DF701D7C1AE8E1FAEA | Trojanized sftp | #rowspan# |
45E94ABEDAD8C0044A43FF6D72A5C44C6ABD9378 | Trojanized sshd | #rowspan# |
1829B0E34807765F2B254EA5514D7BB587AECA3F | Custom sshd | #rowspan# |
8D6ACA824D1A717AE908669E356E2D4BB6F857B0 | Custom sshd | #rowspan# |
38B09D690FAFE81E964CBD45EC7CF20DCB296B4D | Backdoor 1 variant 1 | #rowspan# |
56556A53741111C04853A5E84744807EEADFF63A | Backdoor 1 variant 2 | #rowspan# |
FE26CB98AA1416A8B1F6CED4AC1B5400517257B2 | Backdoor 1 variant 3 | #rowspan# |
D4E0E38EC69CBB71475D8A22EDB428C3E955A5EA | Backdoor 1 variant 4 | #rowspan# |
204046B3279B487863738DDB17CBB6718AF2A83A | Backdoor 2 variant 1 | #rowspan# |
9C803D1E39F335F213F367A84D3DF6150E5FE172 | Backdoor 2 variant 2 | #rowspan# |
BFCC4E6628B63C92BC46219937EA7582EA6FBB41 | Backdoor 2 variant 3 | #rowspan# |
515CFB5CB760D3A1DA31E9F906EA7F84F17C5136 | Backdoor 3 variant 4 | #rowspan# |
A9ED0837E3AF698906B229CA28B988010BCD5DC1 | Backdoor 3 variant 5 | #rowspan# |
56CB85675FE7A7896F0AA5365FF391AC376D9953 | Rootkit 1 version 1 | #rowspan# |
72C9C5CE50A38D0A2B9CEF6ADEAB1008BFF12496 | Rootkit 1 version 2 | #rowspan# |
B439A503D68AD7164E0F32B03243A593312040F8 | Rootkit 1 version 3 | #rowspan# |
E7BF0A35C2CD79A658615E312D35BBCFF9782672 | Rootkit 1 version 4 | #rowspan# |
56580E7BA6BF26D878C538985A6DC62CA094CD04 | Rootkit 1version 5 | #rowspan# |
49D4E5FCD3A3018A88F329AE47EF4C87C6A2D27A | Rootkit 1 version 5 | #rowspan# |
74D44C2949DA7D5164ADEC78801733680DA8C110 | Rootkit 2 version 1 | #rowspan# |
74D755E8566340A752B1DB603EF468253ADAB6BD | Rootkit 2 version 2 | #rowspan# |
E20F87497023E3454B5B1A22FE6C5A5501EAE2CB | Rootkit 2 version 3 | #rowspan# |
6F43C598CD9E63F550FF4E6EF51500E47D0211F3 | inject.so | #rowspan# |
C&C
Amostra do:
47.107.60[.]212
47.112.197[.]119
156.238.111[.]174
172.96.231[.]69
hm2.yrnykx[.]com
ywbgrcrupasdiqxknwgceatlnbvmezti[.]com
yhgrffndvzbtoilmundkmvbaxrjtqsew[.]com
wcmbqxzeuopnvyfmhkstaretfciywdrl[.]name
ruciplbrxwjscyhtapvlfskoqqgnxevw[.]name
pdjwebrfgdyzljmwtxcoyomapxtzchvn[.]com
nfcomizsdseqiomzqrxwvtprxbljkpgd[.]name
hkxpqdtgsucylodaejmzmtnkpfvojabe[.]com
etzndtcvqvyxajpcgwkzsoweaubilflh[.]com
esnoptdkkiirzewlpgmccbwuynvxjumf[.]name
ekubhtlgnjndrmjbsqitdvvewcgzpacy[.]name
Da varredura da Internet:
27.102.130[.]63
Nomes de arquivos
/lib/modules/%VARIABLE%/kernel/drivers/input/misc/ati_remote3.ko
/etc/sysconfig/modules/ati_remote3.modules
/tmp/.tmp_%RANDOM%
Nomes de arquivos virtuais
/proc/.dot3
/proc/.inl
Técnicas do MITRE ATT&CK
Esta tabela foi criada através da versão 9 do framework do ATT&CK.
Tactic | ID | Name | Description |
---|---|---|---|
Initial Access | T1078 | Valid Accounts | FontOnLake can collect at least ssh credentials. |
Execution | T1059.004 | Command and Scripting Interpreter: Unix Shell | FontOnLake enables execution of Unix Shell commands. |
T1059.006 | Command and Scripting Interpreter: Python | FontOnLake enables execution of arbitrary Python scripts. | |
T1106 | Native API | FontOnLake uses fork() to create additional processes such as sshd. | |
T1204 | User Execution | FontOnLake trojanizes standard tools such as cat to execute itself. | |
Persistence | T1547.006 | Boot or Logon Autostart Execution: Kernel Modules and Extensions | One of FontOnLake’s rootkits can be executed with a start-up script. |
T1037 | Boot or Logon Initialization Scripts | FontOnLake creates a system start-up script ati_remote3.modules. | |
T1554 | Compromise Client Software Binary | FontOnLake modifies several standard binaries to achieve persistence. | |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Some backdoors of FontOnLake can decrypt AES-encrypted and serialized communication and base64 decode encrypted C&C address. |
T1222.002 | File and Directory Permissions Modification: Linux and Mac File and Directory Permissions Modification | FontOnLake’s backdoor can change the permissions of the file it wants to execute. | |
T1564 | Hide Artifacts | FontOnLake hides its connections and processes with rootkits. | |
T1564.001 | Hide Artifacts: Hidden Files and Directories | FontOnLake hides its files with rootkits. | |
T1027 | Obfuscated Files or Information | FontOnLake packs its executables with UPX. | |
T1014 | Rootkit | FontOnLake uses rootkits to hide the presence of its processes, files, network connections and drivers. | |
Credential Access | T1556 | Modify Authentication Process | FontOnLake modifies sshd to collect credentials. |
Discovery | T1083 | File and Directory Discovery | One of FontOnLake’s backdoors can list files and directories. |
T1082 | System Information Discovery | FontOnLake can collect system information from the victim’s machine. | |
Lateral Movement | T1021.004 | Remote Services: SSH | FontOnLake collects ssh credentials and most probably intends to use them for lateral movement. |
Command and Control | T1090 | Proxy | FontOnLake can serve as a proxy. |
T1071.001 | Application Layer Protocol: Web Protocols | FontOnLake acquires additional C&C servers over HTTP. | |
T1071.002 | Application Layer Protocol: File Transfer Protocols | FontOnLake can download additional Python files to be executed over FTP. | |
T1132.001 | Data Encoding: Standard Encoding | FontOnLake uses base64 to encode HTTPS responses. | |
T1568 | Dynamic Resolution | FontOnLake can use HTTP to download resources that contain an IP address and port number pair to connect to and acquire its C&C. It can use dynamic DNS resolution to construct and resolve to a randomly chosen domain. | |
T1573.001 | Encrypted Channel: Symmetric Cryptography | FontOnLake uses AES to encrypt communication with its C&C. | |
T1008 | Fallback Channels | FontOnLake can use dynamic DNS resolution to construct and resolve to a randomly chosen domain. One of its rootkits also listens for specially crafted packets, which instruct it to download and execute additional files. It also both connects to a C&C and accepts connections on all interfaces. | |
T1095 | Non-Application Layer Protocol | FontOnLake uses TCP for communication with its C&C. | |
T1571 | Non-Standard Port | Almost every sample of FontOnLake uses a unique non-standard port. | |
Exfiltration | T1041 | Exfiltration Over C2 Channel | FontOnLake uses its C&C to exfiltrate collected data. |