Riscos de segurança nas plataformas de codificação online

Modelagem de ameaças para plataformas de codificação online

Antes de os ambientes de desenvolvimento integrado (IDEs) em nuvem se tornarem uma opção, você, ou melhor, o desenvolvedor, normalmente precisava baixar e/ou instalar tudo o que necessitava em suas próprias estações de trabalho. No entanto, à medida que o DevOps ganhou força e o uso da computação em nuvem aumentou, agora você também pode codificar online. Conveniente, sim, mas os IDEs online são seguros? Para responder a isso, vamos nos concentrar em dois IDEs populares baseados na nuvem: AWS Cloud9 e Visual Studio Online.

Na codificação online, o IDE é renderizado dentro do navegador, o mecanismo JavaScript do navegador usa WebSockets para iniciar uma conexão SSH (Secure Shell) em segundo plano com o dispositivo vinculado [por exemplo: Virtual Private Server (VPS)], fornecendo a interface familiar do terminal para executar comandos. O ambiente – ou seja, o dispositivo acessível para VM/VPS ou SSH na nuvem vinculada – inclui configurações de ferramentas (como quais tokens estão incluídos, ou arquivos de configuração em nuvem), uma cópia do código-fonte, compiladores e outras ferramentas que você deseja usar.

Figura 1. IDE local versus nativo em nuvem

A diferença entre as plataformas de codificação local e nativas da nuvem é onde reside a maior parte do ambiente. Nos IDEs em nuvem, o ambiente é uma instância de máquina virtual dentro do seu provedor de nuvem. Em termos de segurança, isso significa que você está delegando confiança ao provedor de nuvem, mas é responsável por impedir a abertura de “backdoors” ou a introdução de problemas de configuração incorreta na VM. No caso de usar seu próprio dispositivo com o AWS Cloud9, você é responsável por configurar o dispositivo com segurança.

 

 

Figura 2. Trabalhando no Amazon Cloud9 IDE

Figura 3. Trabalhando no Visual Studio Online

Dispositivos/VMs vinculados nem sempre são seguros

A questão é o que está sendo executado no back-end. Como descrevemos, é necessário um dispositivo vinculado ao SSH para usar essas plataformas de codificação online. No caso do Visual Studio Online (ainda no modo de visualização), podemos encontrar um servidor de código do Visual Studio (VS) em execução na máquina.

Figura 4. Exemplo de vscode-remote dentro da VM vinculada

O servidor de código em si é um aplicativo Node.js ao qual o seu navegador se conectará. Você também pode baixar a pasta inteira ~/.vscode-remote e executar o servidor dentro do seu ambiente local.

Notavelmente, você, como proprietário do dispositivo vinculado, tem permissão para se promover para fazer o root e instalar ou configurar o que achar necessário. Você também tem, por padrão, o Docker e o Git pré-instalados.

No caso do Cloud9, hospedado na AWS, a situação é um pouco mais complicada. O back-end necessário para a comunicação da plataforma está localizado dentro do dispositivo vinculado, enquanto o front-end permanece hospedado em um local diferente. Mas, como no VS, você também pode se promover para fazer root.

Figura 5. Acesso ao terminal raiz do Cloud9

Isso nos leva à nossa primeira preocupação de segurança: quão seguros ou privados são os dispositivos/VMs vinculados? O dispositivo vinculado contém informações confidenciais tokens de acesso, configurações de aplicativos, código fonte etc. Não é necessário dizer que eles devem ser protegidos contra acesso não autorizado.

Figura 6. Exemplo de informações confidenciais da plataforma

Por padrão, a plataforma é protegida pelo provedor. No entanto, lembre-se de que, juntamente com a disponibilidade de acesso root, você também é responsável por evitar problemas de configuração incorreta, especialmente ao usar plug-ins de terceiros. A AWS não fornece suporte a plug-ins para plug-ins não desenvolvidos por eles.

Existem possíveis configurações erradas que podem levar a problemas de segurança, por exemplo, se você definir seu IDE para ser acessível de fora, seja intencionalmente (para facilitar o compartilhamento) ou não. Além disso, não é comum que os tokens de acesso sejam armazenados em cofres de token criptografados; muitos deles podem ser visualizados através de arquivos de configuração de texto sem formatação. Sem medidas de segurança adicionais, seus tokens de acesso podem acabar expostos a pessoas de fora.

Depois que o acesso não autorizado é adquirido por cibercriminosos, eles podem comprometer seu código (um exemplo seria o ataque da cadeia de suprimentos contra uma empresa de software que modificou as atualizações de software com malware), para seu próprio ganho.

Os navegadores podem introduzir extensões ou vulnerabilidades maliciosas

A próxima preocupação de segurança é o próprio navegador. Como as plataformas de codificação online são acessadas por navegadores da web, você precisa ter muito cuidado ao acessar esses sites em computadores públicos, sem domínio, compartilhados ou desprotegidos.

As extensões maliciosas de navegador são um fenômeno bem conhecido. Embora um computador não confiável, possivelmente infectado por malware, represente um risco óbvio, também confirmamos experimentalmente por meio de uma PoC (prova de conceito) que é possível que um invasor roube código usando uma extensão maliciosa de navegador.

Figura 7. Exemplo de dados enviados pela PoC da extensão maliciosa do navegador

Extensões de código e plug-ins também podem conter malware

A principal vantagem do Visual Studio Online e, geralmente, a plataforma VS Code, é o número de extensões disponíveis. Isso, por si só, é mais uma possível superfície de ataque.

Vamos imaginar uma extensão maliciosa da VS Code – uma extensão de aparência útil com um backdoor incorporado. A falta de verificação de permissão (como acesso ao disco, acesso à rede, acesso ao processo etc.) para extensões durante a instalação ou uso torna-se um problema de segurança. As verificações de segurança durante a publicação de extensões são limitadas a um ID de editor válido e algumas restrições relacionadas à imagem. Então, basicamente, você deve confiar inteiramente no desenvolvedor da extensão.

Para fins de demonstração, criamos uma PoC de uma extensão maliciosa personalizada contendo uma funcionalidade de shell reverso.

Figura 8. Descrição da nossa extensão maliciosa na VS Code 

Ao instalar uma extensão da plataforma VS Code, você tem duas opções: (1) localize-a no marketplace de extensões da VS Code ou (2) instale-a a partir de um arquivo .vsix.

Figura 9. Exemplo de descrição da nossa extensão maliciosa na VS Code 

Ao desenvolver extensões na VS Code, existem algumas limitações. No entanto, não há limites ou preocupações sobre extensões que geram um novo processo.

Sabendo disso, confirmamos que é possível executar um shell reverso quando a extensão maliciosa está instalada e o ambiente é carregado. Um cenário como esse fornece ao invasor um recurso completo de execução remota de código (RCE) com permissões de root em uma VM vinculada. É possível observar que, quando um desenvolvedor fechar a página do VS Online, a conexão será encerrada.

Figura 10. Shell reverso gerado dentro da plataforma Visual Studio Online

A experiência nos mostrou que, mesmo que o código principal do software esteja seguro, os plug-ins desenvolvidos pela comunidade ou por terceiros podem introduzir vulnerabilidades que podem prejudicar a segurança geral do software.

Nenhum aplicativo de software está livre de erros

A possibilidade sempre presente de vulnerabilidades em qualquer tipo de software também deve ser considerada. No caso de plataformas de codificação online, elas podem ser afetadas por vulnerabilidades da web, pois os IDEs são aplicativos da web. Por exemplo, uma vulnerabilidade que permite que um invasor execute seu próprio código JavaScript pode tomar o controle do IDE ou de dispositivos remotos vinculados.

Uma vulnerabilidade recente que afeta a extensão do Visual Studio Live Share, que também está disponível para a VS Code, mostra que podemos esperar outra vulnerabilidade afetando as plataformas de codificação online em breve.

Proteger IDEs na nuvem é uma obrigação para DevOps

A modelagem de ameaças nos permite entender os diferentes fatores em jogo que podem afetar a segurança geral de um ambiente de computação. Os IDEs na nuvem não devem ser diferentes de outros softwares, se não forem mais críticos para serem protegidos do que suas contrapartes em ambientes locais. Aqui estão algumas recomendações para cada um dos problemas de segurança que levantamos:

  • Para segurança do dispositivo vinculado – Instale um software confiável. Mantenha esse software atualizado. Não abra portas para a internet indiscriminadamente.
  • Para navegadores – trabalhe em ambientes confiáveis ​​e seguros. Tente evitar o uso de computadores compartilhados. Instale extensões de navegador apenas de fornecedores confiáveis.
  • Para extensões da VS Code – Evite instalar extensões de fontes ou autores desconhecidos.
  • Para vulnerabilidades em geral – verifique se o seu ambiente está atualizado para a versão mais recente.

Da mesma forma, a Trend Micro ajuda os squads de DevOps a criar com segurança, publicar rapidamente e rodar em qualquer lugar. A solução Trend Micro™️ Hybrid Cloud Security fornece segurança poderosa, simplificada e automatizada no pipeline de DevOps de sua organização e oferece várias técnicas de defesa XGen™ contra ameaças para proteger workloads físicos, virtuais e em nuvem em tempo de execução.