Criando seu próprio Ransomware em Golang

Os ataques do ransomware conhecido como WannaCry / Wcry / WannaCrypt alertou o mundo para os problemas causados por esse tipo de ataque cada vez mais utilizado por ciber criminosos. Um ransomware criptografa os arquivos existentes no computador, impossibilitando que sejam utilizados, até que a vítima efetue o pagamento no valor solicitado pelo atacante. Após a confirmação do pagamento, o ransomware descriptografa e restaura os arquivos. Mesmo após o pagamento não há garantia de que o atacante vai agir de boa fé e permitir que os arquivos voltem ao estado original.
Vou mostrar como funciona o ransomware que desenvolvi na linguagem de programação Go.

Motivação

Ethical Hacking tem sido meu principal tema de estudo nos últimos meses e por isso decidi criar um ransomware apenas como aprendizado. Juntei minha área de interesse e uma das minhas linguagens de programação favorita para demonstrar na prática como é o funcionamento desse tipo de praga virtual.

Criptografia

O ransomware utiliza uma criptografia assimétrica. Esse tipo de criptografia consiste na utilização de uma chave pública e uma chave privada. Fazendo uma analogia com o mundo real, a chave pública seria como um cadeado e a chave privada a chave que abre esse cadeado. Qualquer um pode utilizar o cadeado para trancar alguma coisa mas só quem tem a chave pode destrancar o cadeado.
Utilizei a estratégia Elliptic curve Diffie–Hellman (ECDH) para gerar as chaves. Esse artigo explica melhor sobre essa estratégia de criptografia.

Como funciona?

Dividi o ransomware em duas partes, cliente e servidor. O cliente é o software que infecta o computador da vítima e mostra uma mensagem informando sobre o malware. Ele se conecta ao servidor, obtém a chave pública e a utiliza para criptografar os arquivos. O servidor informa que o suposto pagamento foi efetuado e libera a chave privada para o cliente descriptografar os arquivos.
Quando o ransomware é executado na máquina da vítima, ele cria e abre um arquivo html que explica sobre a infecção.

Executando o Ransomware

Estou disponibilizando os dois arquivos que compõem o ransomware, o cliente e o servidor. Ambos devem ser executados na mesma máquina pois nesse exemplo não é necessário uma conexão com a internet para ver o funcionamento.
Há versões para Linux, MacOSX e Windows porém no decorrer do texto vou mostrar apenas comandos executados em um terminal Linux.

Abaixo eu fiz o download e executei o ransomware, criei um diretório e arquivo de exemplo e executei o comando para criptografar apenas o conteúdo desse diretório:

Após a criptografia o arquivo notes.txt ficou criptografado e irreconhecível:

Para retornar o arquivo ao estado original, finalizei o processo do servidor e executei novamente mas dessa vez simulando uma confirmação de pagamento.

E após alguns segundos o ransomware obteve a chave privada do servidor e a utilizou para descriptografar o conteúdo do diretório `docs`:

Conclusão

Existem muitas técnicas que eu poderia aplicar para tornar esse ransomware perigoso como por exemplo usar a rede Tor para criar uma conexão segura entre o cliente e o servidor, dificultar a detecção por parte dos antivirus e disfarçar o ransomware como se fosse outro aplicativo. Porém isso foge do escopo desse texto.
Um ataque mal intencionado envolveria o pagamento utilizando Bitcoin, que é um tipo de moeda virtual difícil de ser rastreada e por isso muito utilizada para pagamentos de serviços onde o prestador não quer ser identificado.
O código está disponível no Github sob a licença GPL e qualquer desenvolvedor pode modifica-lo.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade