Usando o ataque do aplicativo de desktop 3CX para ilustrar a importância da assinatura e verificação de software

Todas as mensagens

No final de março de 2023, pesquisadores de segurança expuseram as ameaças de um ator ataque complexo à cadeia de suprimentos de software no software de comunicação empresarial da 3CX, principalmente no aplicativo de desktop para chamadas de voz e vídeo da empresa. Os pesquisadores alertaram que o aplicativo foi de alguma forma trojanizado e que seu uso poderia expor a organização a um possível esquema de exfiltração por um agente de ameaça. O ataque foi apelidado de ‘Operador Suave’ e há algumas evidências sugerindo que ele vem acontecendo há meses. 

Então, o que aconteceu exatamente, como o uso dessa versão trojanizada coloca você em risco e como isso poderia ter sido evitado com o emprego de assinatura e verificação de software? 

Primeiras coisas primeiro: O que é 3CX?

3CX é um PBX IP (Private Branch Exchange) baseado em software e de padrões abertos, que substitui um PBX de hardware tradicional. Ele foi projetado para permitir que as empresas façam e recebam chamadas usando a tecnologia VoIP (Voice over Internet Protocol), que transmite comunicações de voz pela Internet. O 3CX também inclui recursos avançados como videoconferência, presença, mensagens instantâneas e muito mais, e pode ser implantado no local ou na nuvem. Windows, macOS e Linux são apenas alguns dos sistemas operacionais populares nos quais o aplicativo está disponível. Além disso, o cliente é acessível através de navegadores graças a uma extensão do Chrome e o cliente ainda possui uma versão PWA, além de estar disponível como aplicativo mobile para dispositivos Android e iOS.

Você pode ter uma ideia dos efeitos potenciais de um ataque à cadeia de suprimentos de software no site da 3CX, que possui 600,000 empresas usando seu aplicativo com mais de 12 milhões de usuários diários.

Uma prévia do ataque: o que você precisa saber

Isso é um pouco complexo, então vamos dividi-lo em etapas:

  1. Você baixa um versão trojanizada do aplicativo de desktop ou você já o instalou e simplesmente atualize-o com uma versão trojanizada.
  2. O executável 3CXDesktopApp.exe carrega uma biblioteca de vínculo dinâmico (DLL) maliciosa chamada ffmpeg.dll.
  3. O ffmpeg.dll é usado para extrair uma carga criptografada de d3dcompiler_47.dll e executá-la.
  4. O malware então baixa arquivos de ícones de aparência inocente hospedados no GitHub que contêm strings codificadas em Base64 anexadas ao final das imagens.
  5. Esses dados codificados são então decodificados e usados ​​para baixar outro estágio, contendo o servidor C&C criptografado ao qual o backdoor se conecta para recuperar a possível carga final.
  6. Na fase final, a funcionalidade do ladrão de informações é colocada em prática, incluindo a coleta de dados do sistema e dos navegadores Chrome, Edge, Brave e Firefox. Isso pode incluir a consulta do histórico de navegação e informações da tabela Locais, bem como a consulta potencial da tabela Histórico.

No ínicio, a Olymp Trade oferecia seus serviços para negociantes da Rússia e alguns países asiáticos. Porém, porém, nos últimos anos, eles aumentaram sua oferta de ativos e atraíram negociantes de outros países, principalmente Índia, Paquistão, Oriente Médio, Norte da África, América Latina e Sudeste Asiático. A corretora não pode oferecer seus serviços a cidadãos de muitos países, incluindo os EUA e muitas nações europeias. Fora isso, nós achamos que este é um bom lugar para negociar. A 3CX minimizou o ataque, mas depois admitiu que era uma ameaça real e sugeriu desinstalar e reinstalar o aplicativo com suas instruções específicas, bem como usar a versão PWA enquanto isso, até que a empresa consiga desvendar o incidente e mitigá-lo.

Outro fator muito importante a ter em mente é que o compromisso inclui um certificado de assinatura de código usado para assinar os binários trojanizados. Bem, não exatamente – na verdade, está usando uma vulnerabilidade conhecida chamada CVE-2013-3900 (publicado originalmente em 2013, mas atualizado em 2022 e novamente esta semana) para torná-lo aparecer legitimamente assinado.

Déjà Vu: isso já aconteceu antes

Se esta história de um A versão trojanizada do 3CX parece familiar porque já aconteceu antes

Neste caso, é vocêNão está claro se uma biblioteca upstream de código aberto que a empresa usa foi infectada ou se um ataque real violou o ambiente de desenvolvimento da empresa. 

Em outros ataques famosos, de ‘Kingslayer’ (2016) a ‘CCleaner’ (2017), ‘VestaCP’ (2018), ‘WIZVERA VeraPort’ (2020) e até ‘SolarWinds’ (2020), é um prática comum dos atores de ameaças para tentar comprometer os servidores de uma empresa, o ambiente de construção ou seu executável real para download. Afinal, disfarçar algo ruim e perigoso como algo em que você pode confiar é uma ótima maneira de fazer com que as pessoas confiem e baixem sua carga.

Isso faz parte da definição de um ataque à cadeia de fornecimento de software – os atacantes comprometeram a cadeia de fornecimento de software para distribuir software malicioso a um grande número de vítimas. Em cada um desses casos famosos, os invasores conseguiram injetar código malicioso em pacotes de software legítimos, que foram então distribuídos aos usuários. Os invasores muitas vezes conseguiam fazer isso comprometendo um fornecedor ou fornecedor de software confiável, como um servidor de atualização de software ou um certificado de assinatura de código.

Ao fazer com que clientes desavisados ​​baixem uma versão modificada de um aplicativo legítimo, os invasores podem essencialmente ocultar quase tudo dentro dele.

E aqui está o principal problema – “desavisado”. Afinal, o executável, binário ou imagem veio da empresa criadora, aparentemente aprovado por ela, e contém até certificado assinado. O que mais um cliente pode fazer? Eles deveriam ligar para a empresa para verificar cada atualização? Digitalizar o código (se disponível) para verificar a existência de portas traseiras? Isso é absurdo e irrealista. Mas lá is algo que pode ser feito.  

Como você pode adicionar uma camada de confiança além de um certificado? 

Uma imagem que ilustra uma camada de confiança

O modelo proposto é bastante simples e se baseia na mesma ideia dos certificados de assinatura de código. Um certificado de assinatura de código é um certificado digital emitido por terceiros que é usado para assinar digitalmente software ou código. Quando o software é assinado com um certificado de assinatura de código, permite aos usuários verificar a autenticidade e integridade do software antes de instalá-lo ou executá-lo.

Os certificados de assinatura são emitidos por terceiros confiáveis autoridades de certificação (CAs), que verificam a identidade do editor do software e a integridade do código do software. A autoridade certificadora utiliza algoritmos criptográficos para criar uma assinatura digital do software, que é então incluída no código assinado. Quando um usuário tenta instalar ou executar o software, seu sistema verificará a assinatura digital para garantir que ela corresponda à assinatura gerada pela autoridade de certificação. Se as assinaturas corresponderem, o software é considerado autêntico e não foi adulterado desde que foi assinado. 

Este sistema é baseado na criptografia de chave pública, também conhecida como criptografia assimétrica – um método de criptografia que utiliza duas chaves diferentes, uma chave pública e uma chave privada, para criptografar e descriptografar dados. No contexto da assinatura de código, um par de chaves pública-privada é usado para assinar software e código.

Neste processo, o editor do software gera um par de chaves pública-privada, onde a chave privada é mantida em segredo e a chave pública é disponibilizada a terceiros. O editor do software usa então sua chave privada para criar uma assinatura digital do software ou código que deseja assinar. Esta assinatura digital é um valor hash gerado pela execução do software ou código por meio de um algoritmo matemático e, em seguida, criptografando o valor hash resultante com a chave privada do editor.

Quando um usuário baixa o software ou código assinado, seu sistema usa a chave pública do editor do software para descriptografar a assinatura digital e verificar se ela corresponde ao valor hash do software ou código baixado. Se a assinatura digital for válida, o usuário poderá ter certeza de que o software ou código não foi adulterado desde que foi assinado pelo editor do software.

Com base neste conceito simples, a correção proposta é assinar cada nova versão, binário e imagem diretamente com a chave da empresa ou a chave do pipeline de construção e apenas pedir que o usuário verifique a assinatura ao baixar ou atualizar o software.

É claro que as coisas nem sempre são tão simples. Se os malfeitores se infiltraram no servidor de compilação, assinar a compilação já é inútil. Se a infra-estrutura principal tiver sido comprometida, todo o exercício será igualmente inútil.

Mas pedir aos usuários que verifiquem uma assinatura, algo rápido e fácil que pode ser feito automaticamente, é um pequeno preço a pagar para ajudar a prevenir o próximo ataque à cadeia de fornecimento de software.

Mas espere, você pode estar dizendo, e se for realmente uma biblioteca de código aberto upstream que é a fonte da contaminação? Nesse caso, assinar uma compilação é, novamente, inútil, pois o código comprometedor está 'embutido'.

É aqui que precisamos de começar a considerar um ecossistema de confiança baseado na assinatura e verificação destas assinaturas. Se esses pacotes de código aberto fossem assinados e as assinaturas fossem verificadas quando fossem incorporadas ao código da empresa, isso poderia reduzir a probabilidade de uma violação.

Onde o escriba entra

Escriba implementou uma ferramenta chamada Valint que permite que você assinar e verificar arquivos, pastas e imagens. Sem a necessidade de manter sistemas PKI complicados, a ferramenta implementa uma nova abordagem de usar sua identidade verificada já estabelecida (como sua identidade Google, Microsoft, GitHub ou AWS, por exemplo) para assinar o artefato desejado. Posteriormente, você poderá usar a mesma ferramenta para verificar se o artefato foi assinado e qual foi a identidade usada para assiná-lo.

Digamos que seu pipeline de construção produza uma imagem de contêiner como artefato final. Logo após a imagem ser criada você deve assiná-la e fazer upload dessa versão assinada para o repositório onde seus clientes podem baixá-la. Uma vez assinada, essa imagem não pode mais ser modificada – ela está bloqueada. Quem quiser pode verificar se está assinado e se a identidade da assinatura corresponde ao que a empresa publicou.

Esta ferramenta é apenas uma parte das capacidades concedidas pela implementação do Solução SaaS da Scribe para sua organização. Com o objetivo de melhorar a segurança da cadeia de suprimentos de software e a transparência geral, há todos os motivos para verificar o que o Scribe pode oferecer a você. 

Bandeira

Este conteúdo é oferecido a você pela Scribe Security, um fornecedor líder de soluções de segurança de cadeia de suprimentos de software ponta a ponta – fornecendo segurança de última geração para artefatos de código e processos de desenvolvimento e entrega de código em todas as cadeias de suprimentos de software. Saiba mais.