Notícias de crimes digitais referentes a roubos de código-fonte ganham cada vez mais destaque no cenário de segurança da informação. Este destaque tem feito com que este tipo de crime ganhe notoriedade até em meios de comunicação que não são focadas em abordar assuntos relacionados a tecnologia. Ao pesquisar sobre o assunto, percebi que podemos ter acesso a muitas informações sobre o crime em si, mas poucos dados sobre eventuais impactos que podem ser ocasionados pelo roubo deste tipo específico de informação tanto para as empresas, originalmente detentoras do código-fonte vazado, quanto para os eventuais usuários do software correspondente ao negócio afetado. Este artigo esclarece por que o código-fonte pode ser útil para os criminosos e as possíveis consequências ocasionadas por seu vazamento.

Inicialmente, irei explicar de forma bem simples o que é um código-fonte: trata-se da estrutura interna de um software antes de sua compilação para se tornar um software em si. É um componente fundamental de um programa de computador formado por palavras ou símbolos escritos de forma ordenada, podendo ser facilmente lido e compreendido por um ser humano - sendo este o principal risco de segurança vinculado aos códigos-fonte.

Imagem 1: Código-fonte do aplicativo calculadora do Windows.

Independentemente da linguagem de programação usada para compor o código-fonte, alguns pontos costumam ser comuns a todos eles. E estes pontos podem acabar sendo utilizados por pessoas mal-intecionadas para a realização de ações criminosas que podem resultar não apenas no crime em si, mas também gerar um forte impacto à reputação das empresas.

O que um cibercriminoso pode fazer com um código-fonte?

#Criação de exploits

O código-fonte é o “esqueleto” de um software e seu acesso pode permitir aos criminosos a possibilidade de estudar todas as suas características internas em busca de pontos vulneráveis para o desenvolvimento de exploits, principalmente graças a facilidade de leitura do código assim como já destacamos anteriormente. Por exemplo, um criminoso descobre que um serviço espera receber um conjunto de caracteres específicos (por exemplo, em determinado campo) e, caso estes caracteres não sejam o que o programa nem o software os trate de forma adequada, ocorrerá uma falha interna. Este aspecto abre uma margem para que um exploit seja desenvolvido com o intuito de que essa anomalia forjada execute determinada ação que pode beneficiar o cibercriminoso.

O acesso direto ao código torna este processo bem mais simples, pois permite uma busca direta às fraquezas que, em alguns casos, já são amplamente conhecidas pelos criminosos. Caso tenham sucesso nestas buscas, os criminosos podem criar os temidos zero-days que permitem a execução de comandos de forma remota, trazendo a possibilidade de comprometer todos os usuários daquela versão do software. Em um caso no início de 2022, cibercriminosos tiveram acesso a códigos-fonte de produtos da Microsoft amplamente usados - uma vulnerabilidade encontrada nestes softwares poderia trazer sérios problemas a centenas de milhares de usuários.

#Extorsão

A extorsão pode ser considerada a principal ameaça provocada por cibercriminosos ao obter um determinado código-fonte. Na imagem 1, na parte que se refere ao código-fonte, mais precisamente na linha 254, podemos ver a sequência de duas barras ( // ) seguida por uma frase em inglês em caracteres verdes. A estrutura desta frase destoa da estrutura de todas as outras linhas apresentadas por se tratar de um comentário. No caso da linguagem de programação C#, que compõe a imagem do exemplo, os caracteres que denotam a estrutura de comentários são as duas barras, mas isso varia de linguagem para linguagem, bem como a cor diferenciada que a linha terá. A linha costuma variar dependendo do interpretador de comandos/compilador usado para ler o código. Salvo estas particularidades, os comentários são extremamente úteis na programação, pois permitem adicionar anotações em trechos de código que não serão interpretados pelo compilador, ou seja, que não aparecerão no programa em si e que costumam auxiliar bastante na leitura do código.

Certo, mas e ai? Por que os comentários são úteis para os criminosos?

Além de facilitar a leitura do código criado por outra pessoa, os comentários muitas vezes contém informações que podem ser utilizadas por criminosos. Um exemplo clássico disso são as senhas, imediatamente antes de um trecho onde uma senha criptografada é usada pode haver um comentário informando a senha em texto legível e qual criptografia foi utilizada para ocultá-la - isso aumenta exponencialmente o poder de chantagem dos criminosos perante a empresa. Infelizmente, este é um exemplo baseado em fatos reais.

#Brute-forcing

Outra característica que pode despertar interesse nos criminosos são os nomes de usuários e senhas, que também podem estar presentes no código. Este tipo de informação pode aparecer por diversos motivos em um código mas, uma coisa é certa, caso possua nomes de usuários, senhas ou endereços de e-mail, eles certamente serão de grande utilidade para os criminosos. No caso dos endereços de e-mail, os criminosos têm a certeza de ter uma forma de contato válida com alguém pertencente a uma área interna da empresa, geralmente a um setor que faça parte da estrutura de desenvolvimento daquele software ou de alguma outra área muito próxima. Esta situação pode acabar abrindo portas para o envio de phishings, por exemplo.

No caso dos nomes de usuários e senhas, a abordagem pode ser um pouco diferente: a presença de informações como nomes de usuário em um código-fonte pode trazer ao criminoso a possibilidade de um brute force em algum ponto da estrutura e, se levarmos em consideração que normalmente o endereço de e-mail de uma pessoa é também seu nome de usuário, esta possibilidade pode se torna ainda mais real.

Caso o código-fonte tenha nome de usuário e senha "de bandeja" em algum ponto da sua estrutura, o problema pode ser um pouco mais grave. Estas informações trazem a possibilidade de que um criminoso possa ter acesso a um sistema ao se fazer passar por determinado usuário ou serviço. Uma forma de acesso tão fácil assim nas mãos de alguém mal-intencionado pode trazer danos severos à uma estrutura.

#Descobrir novos alvos dentro ou fora da empresa

Geralmente, quando dados de autenticação aparecem em códigos-fonte, eles costumam estar associados ao acesso a determinado local, podendo ser um serviço externo ou interno ao ambiente, e, para que seja bem-sucedido, um endereço de acesso também deve ser fornecido. O formato destes endereços costuma oscilar entre endereços IPs e URLs e podem estar escritos de forma legível ou ofuscada.

Independentemente de quais dados adicionais possam ser visto em um código, quando um cibercriminoso encontra uma URL ou endereço IP, ele pode inferir para que o software, em algum momento, realize algum tipo de comunicação com aquele destino. Esta comunicação pode ser a coleta ou envio de informações, consulta de indicadores, validação de resposta de determinado serviço ou quaisquer outras necessidades que o software possa ter. O ponto é que há uma relação mais estreita entre o software e este destino. Isto pode ser usado de diversas formas pelos criminosos, como, por exemplo, o endereço encontrado pode ser considerado parte do escopo de ataque e esforços podem ser direcionados para comprometê-lo.

Todos os pontos de interesse citados são críticos e dois sempre irão conter informações sobre a estrutura interna da empresa que o desenvolveu. Caso o código se refira a um software que tenha sido desenvolvido para atender as necessidades de uma empresa em específico, estas informações ganham ainda mais relevância.

É válido ressaltar que criminosos podem ter as mais variadas motivações para obter e utilizar códigos-fonte. No início de 2022, um grupo comprometeu o ambiente de uma empresa conhecida por fornecer placas de vídeo. Este ambiente foi contaminado com ransomware e, como parte do resgate, os criminosos exigiram a liberação do código-fonte destas placas para a comunidade -  o mais comum é que tais códigos sejam usados para aumentar o poder de coação dos criminosos. Por exemplo, caso os criminosos tenham o código-fonte do principal software de uma empresa, eles podem ameaçar divulgá-lo caso o resgate não seja pago. Se a empresa tiver sua base de negócios baseada neste software, em um eventual caso de vazamento, as consequências podem ser gravíssimas, o que pode fazer com que muitos negócios optem por pagar o resgate exigido.

Como proteger um código-fonte?

Certo, agora que alguns dos principais pontos referentes aos códigos-fonte foram esclarecidos, como é possível garantir a proteção destes artefatos tão valiosos?

Empresas

Nós acreditamos que os caminhos mais simples de serem seguidos rumo a um ambiente mais seguro sejam aqueles escolhidos antes que um incidente ocorra, com planejamento adequado para as necessidades do ambiente.

Eu, particularmente, gosto bastante da postura de proteção visando o dado, e não um servidor ou estação em si. Tendo isso em mente, um caminho interessante é garantir que apenas pessoas adequadas tenham acesso a informações sensíveis, como os códigos-fonte, aplicar uma política de Least Privilege e gerir de forma contínua os permissionamentos. Assegurar que o acesso ao local (onde a informação está) possua todos os recursos tecnológicos e esteja devidamente protegido com diversas camadas de proteção como soluções de proteção de endpoint, DLP e duplo fator de autenticação.

Sempre que lido com informações de extrema criticidade, além do uso de todas as soluções possíveis de proteção para acesso, armazenamento e tráfego da informação, também gosto de me apoiar em processos. Processos adequados auxiliam a garantir que as pessoas responsáveis por manipular a informação e seus entornos o façam de forma adequada e condizente com o que é esperado pelo negócio. Por isso, recomendo que processos relacionados a manipulação de informações sejam revisitados e testados periodicamente para que as pessoas responsáveis por exercê-los o façam de acordo com o que é esperado. Este conjunto de medidas trará benefícios significativos para todo o ambiente.

Usuários

Boa parte das vezes, não cabe a nós usuários protegermos os códigos-fonte em si, ainda assim é possível tomar algumas precauções caso tenhamos notícias ou problemas relacionados a vazamentos de códigos-fonte de softwares que usamos.

O fato de os cibercriminosos terem conseguido acesso ao código-fonte pode significar que eles estiveram em outras partes do ambiente, mesmo que o código-fonte em si não contenha informações, Sendo assim, é interessante, por exemplo, alterar todas as senhas relacionadas àquele software, sejam as usadas no próprio software ou em sites/serviços de acesso relacionados a ele.

Ainda com relação as senhas, é interessante possuir uma senha diferente para cada serviço, isso evita que criminosos tenham acesso a seu e-mail ou a outros serviços não relacionados apenas por terem tido acesso a um deles. Uma dica interessante, para não precisar se lembrar de milhares de senhas diferentes, é possuir um cofre de senhas, também conhecido como gerenciador de senhas. Bons cofres oferecem a criação de senhas variadas baseado em padrões definidos pelo usuário como caracteres especiais, uso de maiúsculas e quantos caracteres a senha deve possuir.

Por fim, outra característica que pode estar relacionada ao comprometimento do código é o acesso a lista de usuários do sistema, seja a lista integral ou uma amostragem, o acesso a esta informação pode permitir que criminosos entrem em contato com os usuários da ferramenta e propagem ataques de phishing, por exemplo. Por isso, é interessante manter-se alerta sobre quaisquer tipos de abordagens recebidas passivamente no e-mail que foi cadastrado em um serviço comprometido. Mesmo sem estarmos diretamente relacionados ao incidente, sempre podemos adotar medidas que beneficiem nossa segurança.