Criando um Ransomware em PHP.

Primeiramente precisamos esclarecer algumas coisas.

O que é Ransomware?

Ransomware é um tipo de malware que restringe o acesso ao sistema infectado e cobra um valor de “resgate” para que o acesso possa ser reestabelecido.

Google

Porque crie um arquivo malicioso?

Na verdade depois de uma noite conversando com amigos em um evento de PHP (PHPeste), falamos sobre as diversas faces do PHP. Logo no dia seguinte acordei com a ideia de criar um Ransomware como prova de conceito, mostrar que é possível e o que pode ser feito com um único arquivo.

O que significa Heimall?

Da mitologia nórdica, é um deus, com a missão de guardar a ponte Bifrost – um arco-íris ligando o céu à Terra.

A ideia…

A ideia era simples, criptografar arquivos utilizando criptografia simétrica, editando ele mesmo com o resultado da criptografia.

Diferente de outros Ransomware, ele não criptografa todos em um único arquivo como um .rar(exemplo) e coloca uma senha. E sim criptografar um por um gastando o mínimo de memória e sem estourar ela e o tempo de execução.

Problemas…

Problemas com estouro de memória:

  • Quando listava todos os arquivos do sistema, 50 mil por exemplo;
  • Quando chamava arquivo por arquivo sem muito tempo de intervalo;
  • Arquivos muito pesados;

Problemas com estouro de tempo de execução:

  • Quando listava todos arquivos do sistema;
  • Arquivos muito pesados;

Problemas com quantidade de requisições, servidores bloqueiam muitas requisições em pouco tempo.

  • Quando criptografava arquivo por arquivo.

Soluções…

  • Não listar arquivos, pois o maior gasto da memória era para escrever o conteúdo na tela. Apensas contabilizar o total depois de certa quantidade de arquivos.
  • Criptografar arquivos em lote de 500, com maior tempo entre as chamadas
  • Eliminando a criptografia de arquivo maiores de 10MB, no futuro ( Na próxima versão irei tentar outras opções como deixar arquivos maiores por último na fila)

Tecnologia…

PHP utilizado foi superior ou igual ao 5.3.0.

Foi utilizado criptografia de padrão AES de 128 bits, para empacotar os arquivos. Para chamada da chave utilizei as função  openssl_decrypt e openssl_encrypt que roda do php 5.3, para criptografar e descriptografar.

Criptografar:

encrypt

Descriptografar:

descrypt

Parâmetros necessários para o openssl_encrypt e openssl_decrypt é o texto/hash, o tipo do algoritmo, senha e o iv.

parametersforcryptography

Utilizei jQuery para poder fazer as auto-chamadas em blocos de 500 em 500, para diminuir quantidade de requisição e também não estourar memória.

loopjquery

Veja mais…

Github:

https://github.com/aszone/heimdall-ransomware

Youtube exemplo:

 

 

 

2 Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Back to Top